From d355d1827e8a085f1f66f6f7fadce209ecc76108 Mon Sep 17 00:00:00 2001 From: Chris Lenk Date: Tue, 21 Nov 2017 16:29:06 -0500 Subject: [PATCH] Move `creator_of` to DataStore/DataSource --- stix2/environment.py | 20 +------------------- stix2/sources/__init__.py | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 19 deletions(-) diff --git a/stix2/environment.py b/stix2/environment.py index 5bb876b..33fe6ea 100644 --- a/stix2/environment.py +++ b/stix2/environment.py @@ -108,6 +108,7 @@ class Environment(object): get = DataStore.__dict__['get'] all_versions = DataStore.__dict__['all_versions'] query = DataStore.__dict__['query'] + creator_of = DataStore.__dict__['creator_of'] relationships = DataStore.__dict__['relationships'] related_to = DataStore.__dict__['related_to'] add = DataStore.__dict__['add'] @@ -127,22 +128,3 @@ class Environment(object): def parse(self, *args, **kwargs): return _parse(*args, **kwargs) parse.__doc__ = _parse.__doc__ - - def creator_of(self, obj): - """Retrieve the Identity refered to by the object's `created_by_ref`. - - Args: - obj: The STIX object whose `created_by_ref` property will be looked - up. - - Returns: - The STIX object's creator, or - None, if the object contains no `created_by_ref` property or the - object's creator cannot be found. - - """ - creator_id = obj.get('created_by_ref', '') - if creator_id: - return self.get(creator_id) - else: - return None diff --git a/stix2/sources/__init__.py b/stix2/sources/__init__.py index 4e4cc24..7afc08d 100644 --- a/stix2/sources/__init__.py +++ b/stix2/sources/__init__.py @@ -99,6 +99,26 @@ class DataStore(object): except AttributeError: raise AttributeError('%s has no data source to query' % self.__class__.__name__) + def creator_of(self, *args, **kwargs): + """Retrieve the Identity refered to by the object's `created_by_ref`. + + Translate creator_of() call to the appropriate DataSource call. + + Args: + obj: The STIX object whose `created_by_ref` property will be looked + up. + + Returns: + The STIX object's creator, or + None, if the object contains no `created_by_ref` property or the + object's creator cannot be found. + + """ + try: + return self.source.creator_of(*args, **kwargs) + except AttributeError: + raise AttributeError('%s has no data source to query' % self.__class__.__name__) + def relationships(self, *args, **kwargs): """Retrieve Relationships involving the given STIX object. @@ -258,6 +278,25 @@ class DataSource(with_metaclass(ABCMeta)): """ + def creator_of(self, obj): + """Retrieve the Identity refered to by the object's `created_by_ref`. + + Args: + obj: The STIX object whose `created_by_ref` property will be looked + up. + + Returns: + The STIX object's creator, or + None, if the object contains no `created_by_ref` property or the + object's creator cannot be found. + + """ + creator_id = obj.get('created_by_ref', '') + if creator_id: + return self.get(creator_id) + else: + return None + def relationships(self, obj, relationship_type=None, source_only=False, target_only=False): """Retrieve Relationships involving the given STIX object.