From f951b9b09e23f68edf9b06b6115cafd4e12ad4fb Mon Sep 17 00:00:00 2001 From: Chris Lenk Date: Wed, 4 Apr 2018 13:21:25 -0400 Subject: [PATCH] Factor out dupl. code for creating list of filters --- stix2/datastore/__init__.py | 17 +++-------------- stix2/datastore/filters.py | 23 +++++++++++++++++++++++ 2 files changed, 26 insertions(+), 14 deletions(-) diff --git a/stix2/datastore/__init__.py b/stix2/datastore/__init__.py index 890ac45..16a0a9e 100644 --- a/stix2/datastore/__init__.py +++ b/stix2/datastore/__init__.py @@ -16,7 +16,7 @@ import uuid from six import with_metaclass -from stix2.datastore.filters import Filter +from stix2.datastore.filters import Filter, _assemble_filters from stix2.utils import deduplicate @@ -312,13 +312,7 @@ class DataSource(with_metaclass(ABCMeta)): list: The STIX objects that matched the query. """ - filter_list = [Filter('type', '=', obj_type)] - if filters: - if isinstance(filters, list): - filter_list.extend(filters) - else: - filter_list.append(filters) - + filter_list = _assemble_filters(filters, [Filter('type', '=', obj_type)]) return self.query(filter_list) def creator_of(self, obj): @@ -421,12 +415,7 @@ class DataSource(with_metaclass(ABCMeta)): ids.discard(obj_id) # Assemble filters - filter_list = [] - if filters: - if isinstance(filters, list): - filter_list.extend(filters) - else: - filter_list.append(filters) + filter_list = _assemble_filters(filters) for i in ids: results.extend(self.query(filter_list + [Filter('id', '=', i)])) diff --git a/stix2/datastore/filters.py b/stix2/datastore/filters.py index 9065b61..a116507 100644 --- a/stix2/datastore/filters.py +++ b/stix2/datastore/filters.py @@ -44,6 +44,29 @@ def _check_filter_components(prop, op, value): 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'])): """STIX 2 filters that support the querying functionality of STIX 2 DataStores and DataSources.