Factor out dupl. code for creating list of filters

stix2.0
Chris Lenk 2018-04-04 13:21:25 -04:00
parent a1af05a14e
commit f951b9b09e
2 changed files with 26 additions and 14 deletions

View File

@ -16,7 +16,7 @@ import uuid
from six import with_metaclass from six import with_metaclass
from stix2.datastore.filters import Filter from stix2.datastore.filters import Filter, _assemble_filters
from stix2.utils import deduplicate from stix2.utils import deduplicate
@ -312,13 +312,7 @@ class DataSource(with_metaclass(ABCMeta)):
list: The STIX objects that matched the query. list: The STIX objects that matched the query.
""" """
filter_list = [Filter('type', '=', obj_type)] filter_list = _assemble_filters(filters, [Filter('type', '=', obj_type)])
if filters:
if isinstance(filters, list):
filter_list.extend(filters)
else:
filter_list.append(filters)
return self.query(filter_list) return self.query(filter_list)
def creator_of(self, obj): def creator_of(self, obj):
@ -421,12 +415,7 @@ class DataSource(with_metaclass(ABCMeta)):
ids.discard(obj_id) ids.discard(obj_id)
# Assemble filters # Assemble filters
filter_list = [] filter_list = _assemble_filters(filters)
if filters:
if isinstance(filters, list):
filter_list.extend(filters)
else:
filter_list.append(filters)
for i in ids: for i in ids:
results.extend(self.query(filter_list + [Filter('id', '=', i)])) results.extend(self.query(filter_list + [Filter('id', '=', i)]))

View File

@ -44,6 +44,29 @@ def _check_filter_components(prop, op, value):
return True return True
def _assemble_filters(filter_arg, filters=[]):
"""Assemble a list of filters.
This can be used to allow certain functions to work correctly no matter if
the user provides a single filter or a list of them.
Args:
filter_arg (Filter or list): The single Filter or list of Filters to be
coerced into a list of Filters.
filters (list, optional): A list of Filters to be automatically appended.
Returns:
List of Filters.
"""
if isinstance(filter_arg, list):
filters.extend(filter_arg)
else:
filters.append(filter_arg)
return filters
class Filter(collections.namedtuple("Filter", ['property', 'op', 'value'])): class Filter(collections.namedtuple("Filter", ['property', 'op', 'value'])):
"""STIX 2 filters that support the querying functionality of STIX 2 """STIX 2 filters that support the querying functionality of STIX 2
DataStores and DataSources. DataStores and DataSources.