Factor out dupl. code for creating list of filters
parent
a1af05a14e
commit
f951b9b09e
|
@ -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)]))
|
||||||
|
|
|
@ -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.
|
||||||
|
|
Loading…
Reference in New Issue