def __init__(self, ast_type, *args, **kw): super(QueryConstructor, self).__init__() self._ast_type = ast_type items = [] for attr, value in kw.iteritems(): if isinstance(value, basestring): items.append('node.%s == "%s"' % (attr, value)) else: items.append('node.%s == %s' % (attr, value)) self._query = ' and '.join(items) type_check = 'isinstance(node, ast.%s)' % (self._ast_type.__name__, ) if self._query: self._visitor = QueryVisitor(' and '.join( (type_check, self._query))) else: self._visitor = QueryVisitor(type_check)
def __init__(self, ast_type, *args, **kw): super(QueryConstructor, self).__init__() self._ast_type = ast_type items = [] for attr, value in kw.iteritems(): if isinstance(value, basestring): items.append('node.%s == "%s"' % (attr, value)) else: items.append('node.%s == %s' % (attr, value)) self._query = ' and '.join(items) type_check = 'isinstance(node, ast.%s)' % (self._ast_type.__name__, ) if self._query: self._visitor = QueryVisitor( ' and '.join((type_check, self._query)) ) else: self._visitor = QueryVisitor(type_check)
class QueryConstructor(object): """Wraps QueryVisitor and constructs custom query from kwargs and ast type """ def __init__(self, ast_type, *args, **kw): super(QueryConstructor, self).__init__() self._ast_type = ast_type items = [] for attr, value in kw.iteritems(): if isinstance(value, basestring): items.append('node.%s == "%s"' % (attr, value)) else: items.append('node.%s == %s' % (attr, value)) self._query = ' and '.join(items) type_check = 'isinstance(node, ast.%s)' % (self._ast_type.__name__, ) if self._query: self._visitor = QueryVisitor( ' and '.join((type_check, self._query)) ) else: self._visitor = QueryVisitor(type_check) def visit(self, *args, **kw): """Visits an ast.AST instance and its children Uses a `QueryVisitor` object. """ return self._visitor.visit(*args, **kw) @property def results(self): """Results of the query""" return self._visitor.results
class QueryConstructor(object): """Wraps QueryVisitor and constructs custom query from kwargs and ast type """ def __init__(self, ast_type, *args, **kw): super(QueryConstructor, self).__init__() self._ast_type = ast_type items = [] for attr, value in kw.iteritems(): if isinstance(value, basestring): items.append('node.%s == "%s"' % (attr, value)) else: items.append('node.%s == %s' % (attr, value)) self._query = ' and '.join(items) type_check = 'isinstance(node, ast.%s)' % (self._ast_type.__name__, ) if self._query: self._visitor = QueryVisitor(' and '.join( (type_check, self._query))) else: self._visitor = QueryVisitor(type_check) def visit(self, *args, **kw): """Visits an ast.AST instance and its children Uses a `QueryVisitor` object. """ return self._visitor.visit(*args, **kw) @property def results(self): """Results of the query""" return self._visitor.results