示例#1
0
    def list(
            self,
            order_by: Optional[str] = None,
            order_desc: bool = False,
            order_alpha: bool = False,
            limit: Optional[int] = None,
            **filters) -> Iterator[BaseType]:
        """
        See superclass.

        :return Iterator[BaseType]:

        """
        logger.debug(
            'list(order_by={}, order_desc={}, limit, filters={}) -> ...'.format(
                order_by, order_desc, limit, filters
            )
        )

        count = 0
        for _, obj_dict in self._store.list_sorted(order_by=order_by,
                                                   order_desc=order_desc,
                                                   order_alpha=order_alpha):
            obj = self.unmarshall(obj_dict)
            if matches_filters(obj, filters):
                count += 1
                if limit and count == limit:
                    yield obj
                    return

                yield obj
示例#2
0
 def list(self,
          order_by: Optional[str] = None,
          order_desc: bool = False,
          order_alpha: bool = False,
          limit: Optional[int] = None,
          **filters) -> Iterator[Node]:
     logger.debug(
         'list(order_by=%s, order_desc=%s, limit=%s, filters=%s) -> ...',
         order_by, order_desc, limit, filters)
     session = self._Session()
     result = session.query(DbNode)
     if order_by:
         #
         # Note: currently, order_alpha is ignored for SqlAlchemy,
         #       as it is the default behavior for strings
         #
         if desc:
             result = result.order_by(desc(getattr(DbNode, order_by)))
         else:
             result = result.order_by(getattr(DbNode, order_by))
     count = 0
     for db_node in result:
         node = self._to_node(db_node)
         if matches_filters(node, filters):
             logger.debug('list(...) -> %s', node)
             count += 1
             if limit and count == limit:
                 yield node
                 session.close()
                 return
             yield node
示例#3
0
    def list(self,
             order_by: Optional[str] = None,
             order_desc: bool = False,
             order_alpha: bool = False,
             limit: Optional[int] = None,
             **filters) -> Iterator[Tag]:
        logger.debug(
            'list(order_by=%s, order_desc=%s, limit=%s, filters=%s) -> ...',
            order_by, order_desc, limit, filters)

        session = self._Session()
        result_nodes = session.query(NodeTag)
        result_swps = session.query(SoftwareProfileTag)
        result_hwps = session.query(HardwareProfileTag)

        if order_by in ['id', 'object_type']:
            order_by = None
        if order_by == ['object_id']:
            order_by = 'id'
        if order_by:
            #
            # Note: currently, order_alpha is ignored for SqlAlchemy,
            #       as it is the default behavior for strings
            #
            if desc:
                result_nodes = result_nodes.order_by(
                    desc(getattr(NodeTag, order_by)))
                result_swps = result_nodes.order_by(
                    desc(getattr(SoftwareProfileTag, order_by)))
                result_hwps = result_nodes.order_by(
                    desc(getattr(HardwareProfileTag, order_by)))
            else:
                result_nodes = result_nodes.order_by(getattr(
                    NodeTag, order_by))
                result_swps = result_nodes.order_by(
                    getattr(SoftwareProfileTag, order_by))
                result_hwps = result_nodes.order_by(
                    getattr(HardwareProfileTag, order_by))

        count = 0
        for result in [result_nodes, result_swps, result_hwps]:
            for db_tag in result:
                tag = self._to_tag(db_tag)
                if matches_filters(tag, filters):
                    logger.debug('list(...) -> %s', tag)
                    count += 1
                    if limit and count == limit:
                        yield tag
                        session.close()
                        return
                    yield tag
示例#4
0
def test_filter_matches():
    my_dict = {'number': 45, 'name': 'bob', 'stats': {'age': 32}}

    my_obj = types.SimpleNamespace()
    my_obj.number = 45
    my_obj.name = 'bob'
    my_obj.stats = types.SimpleNamespace()
    my_obj.stats.age = 32

    #
    # Test equality
    #
    filters = {'number': 45, 'name': 'bob'}
    assert matches_filters(my_dict, filters)
    assert matches_filters(my_obj, filters)

    #
    # Test less than
    #
    filters = {
        'number__lt': 46,
    }
    assert matches_filters(my_dict, filters)
    assert matches_filters(my_obj, filters)

    #
    # Test greater than
    #
    filters = {
        'name__gt': 'abba',
    }
    assert matches_filters(my_dict, filters)
    assert matches_filters(my_obj, filters)

    #
    # Test nested attributes
    #
    filters = {
        'stats__age__gt': 30,
    }
    assert matches_filters(my_dict, filters)
    assert matches_filters(my_obj, filters)