예제 #1
0
    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)
예제 #2
0
  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)
예제 #3
0
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
예제 #4
0
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