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
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
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
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)