Changeset 390

Show
Ignore:
Timestamp:
02/13/07 08:48:21 (2 years ago)
Author:
athomas
Message:

pyndexter: Some good progress on adding the suite of tests.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • pyndexter/trunk/pyndexter/__init__.py

    r389 r390  
    5959 
    6060Query Framework Document Source Indexer Result StateStore Hit PluginFactory URI 
     61Excerpt 
    6162""".split() 
    6263 
     
    440441        """Match the query against a block of text. The Query will be lazily 
    441442        compiled to Python code.""" 
    442         if not self._compiled: 
    443             import compiler 
    444             from compiler import ast, misc, pycodegen 
    445  
    446             def _generate(node)
    447                 if node.type == node.TERM: 
    448                     return ast.Compare(ast.Const(node.value), [('in', ast.Name('text'))]) 
    449                 elif node.type == node.AND: 
    450                     return ast.And([_generate(node.left), _generate(node.right)]) 
    451                 elif node.type == node.OR: 
    452                     return ast.Or([_generate(node.left), _generate(node.right)]) 
    453                 elif node.type == node.NOT: 
    454                     return ast.Not(_generate(node.left)) 
    455                 else: 
    456                     raise NotImplementedError 
    457  
    458             qast = ast.Expression(ast.Lambda(['text'], [], 0, _generate(self))) 
    459             misc.set_filename('<%s compiled query>' % self.__class__.__name__, 
    460                               qast) 
    461             gen = pycodegen.ExpressionCodeGenerator(qast) 
    462             self._compiled = eval(gen.getCode()) 
    463         return self._compiled(text) 
     443        import compiler 
     444        from compiler import ast, misc, pycodegen 
     445 
     446        def _generate(node): 
     447            if node.type == node.TERM
     448                return ast.Compare(ast.Const(node.value.lower()), 
     449                                  [('in', ast.Name('text'))]) 
     450            elif node.type == node.AND: 
     451                return ast.And([_generate(node.left), _generate(node.right)]) 
     452            elif node.type == node.OR: 
     453                return ast.Or([_generate(node.left), _generate(node.right)]) 
     454            elif node.type == node.NOT: 
     455                return ast.Not(_generate(node.left)) 
     456            else: 
     457                raise NotImplementedError 
     458 
     459        qast = ast.Expression(ast.Lambda(['text'], [], 0, _generate(self))) 
     460        misc.set_filename('<%s compiled query>' % self.__class__.__name__, 
     461                          qast) 
     462        gen = pycodegen.ExpressionCodeGenerator(qast) 
     463        self.__call__ = eval(gen.getCode()) 
     464        return self.__call__(text) 
    464465 
    465466    def as_string(self, and_=' AND ', or_=' OR ', not_='NOT '): 
     
    867868                               "capable of automatic updates.") 
    868869        if not filter: 
    869             def filter(context, stream): 
     870            def filter(framework, context, stream): 
    870871                for transition, uri in stream: 
    871872                    yield transition, uri