def test_round_trip(self): o = Object() o.idref = "example:a1" o.properties = Address("1.2.3.4", Address.CAT_IPV4) o2 = cybox.test.round_trip(o) self.assertEqual(o.to_dict(), o2.to_dict())
def test_round_trip(self): o = Object() o.idref = "example:a1" o.properties = Address("1.2.3.4", Address.CAT_IPV4) o2 = round_trip(o) self.assertEqual(o.to_dict(), o2.to_dict())
class Observable(cybox.Entity): """A single Observable. """ _binding = core_binding _namespace = 'http://cybox.mitre.org/cybox-2' def __init__(self, item=None, id_=None, idref=None, title=None, description=None): """Create an Observable out of 'item'. `item` can be any of: - an Object - an Event - an ObservableComposition - any subclass of ObjectProperties. In the first three cases, the appropriate property of the Observable will be set. In the last cases, an Object will be built automatically to ensure the correct hierarchy is created. """ super(Observable, self).__init__() if not id_ and not idref: id_ = cybox.utils.create_id(prefix="Observable") self.id_ = id_ self.title = title self.description = description self.object_ = None self.event = None self.observable_composition = None self.idref = idref self.sighting_count = None self.observable_source = [] self.keywords = Keywords() self.pattern_fidelity = None if not item: return if isinstance(item, Object): self.object_ = item elif isinstance(item, ObservableComposition): self.observable_composition = item elif isinstance(item, Event): self.event = item elif isinstance(item, ObjectProperties): if item.parent: self.object_ = item.parent else: self.object_ = Object(item) @property def id_(self): return self._id @id_.setter def id_(self, value): if not value: self._id = None else: self._id = value self.idref = None @property def idref(self): return self._idref @idref.setter def idref(self, value): if not value: self._idref = None else: self._idref = value self.id_ = None # unset id_ if idref is present @property def object_(self): return self._object @object_.setter def object_(self, value): if value: if self.event: msg = 'Observable already has an Event.' raise ValueError(msg) elif self.observable_composition: msg = 'Observable already has an ObservableComposition.' raise ValueError(msg) if not isinstance(value, Object): raise TypeError('value must be an Object') self._object = value @property def event(self): return self._event @event.setter def event(self, value): if value: if self.object_: raise ValueError('Observable already has an Object.') elif self.observable_composition: msg = 'Observable already has an ObservableComposition.' raise ValueError(msg) if not isinstance(value, Event): raise TypeError('value must be an Event') self._event = value @property def observable_composition(self): return self._observable_composition @observable_composition.setter def observable_composition(self, value): if value: if self.object_: raise ValueError('Observable already has an Object.') elif self.event: msg = 'Observable already has an Event.' raise ValueError(msg) if not isinstance(value, ObservableComposition): raise TypeError('value must be an ObservableComposition') self._observable_composition = value @property def description(self): return self._description @description.setter def description(self, value): if value is not None and not isinstance(value, StructuredText): value = StructuredText(value) self._description = value def add_keyword(self, value): self.keywords.append(value) def to_obj(self, return_obj=None, ns_info=None): self._collect_ns_info(ns_info) obs_obj = core_binding.ObservableType() obs_obj.id = self.id_ if self.title is not None: obs_obj.Title = self.title if self.description is not None: obs_obj.Description = self.description.to_obj(ns_info=ns_info) if self.object_: obs_obj.Object = self.object_.to_obj(ns_info=ns_info) if self.event: obs_obj.Event = self.event.to_obj(ns_info=ns_info) if self.observable_composition: obs_obj.Observable_Composition = self.observable_composition.to_obj(ns_info=ns_info) if self.idref is not None: obs_obj.idref = self.idref if self.sighting_count is not None: obs_obj.sighting_count = self.sighting_count if self.observable_source: obs_obj.Observable_Source = [x.to_obj(ns_info=ns_info) for x in self.observable_source] if self.keywords: obs_obj.Keywords = self.keywords.to_obj(ns_info=ns_info) if self.pattern_fidelity: obs_obj.Pattern_Fidelity = self.pattern_fidelity.to_obj(ns_info=ns_info) return obs_obj def to_dict(self): obs_dict = {} if self.id_ is not None: obs_dict['id'] = self.id_ if self.title is not None: obs_dict['title'] = self.title if self.description is not None: obs_dict['description'] = self.description.to_dict() if self.object_: obs_dict['object'] = self.object_.to_dict() if self.event: obs_dict['event'] = self.event.to_dict() if self.observable_composition: obs_dict['observable_composition'] = self.observable_composition.to_dict() if self.idref is not None: obs_dict['idref'] = self.idref if self.sighting_count is not None: obs_dict['sighting_count'] = self.sighting_count if self.observable_source: obs_dict['observable_source'] = [x.to_dict() for x in self.observable_source] if self.keywords: obs_dict['keywords'] = self.keywords.to_dict() if self.pattern_fidelity: obs_dict['pattern_fidelity'] = self.pattern_fidelity.to_dict() return obs_dict @staticmethod def from_obj(observable_obj): if not observable_obj: return None from cybox.core import PatternFidelity obs = Observable() obs.id_ = observable_obj.id obs.title = observable_obj.Title obs.description = StructuredText.from_obj(observable_obj.Description) obs.object_ = Object.from_obj(observable_obj.Object) obs.event = Event.from_obj(observable_obj.Event) obs.observable_composition = ObservableComposition.from_obj(observable_obj.Observable_Composition) obs.idref = observable_obj.idref obs.sighting_count = observable_obj.sighting_count if observable_obj.Observable_Source: obs.observable_source = [MeasureSource.from_obj(x) for x in observable_obj.Observable_Source] obs.keywords = Keywords.from_obj(observable_obj.Keywords) obs.pattern_fidelity = PatternFidelity.from_obj(observable_obj.Pattern_Fidelity) return obs @staticmethod def from_dict(observable_dict): if not observable_dict: return None from cybox.core import PatternFidelity obs = Observable() obs.id_ = observable_dict.get('id') obs.title = observable_dict.get('title') obs.description = StructuredText.from_dict(observable_dict.get('description')) obs.object_ = Object.from_dict(observable_dict.get('object')) obs.event = Object.from_dict(observable_dict.get('event')) obs.observable_composition = ObservableComposition.from_dict(observable_dict.get('observable_composition')) obs.idref = observable_dict.get('idref') obs.sighting_count = observable_dict.get('sighting_count') if observable_dict.get('observable_source'): obs.observable_source = [MeasureSource.from_dict(x) for x in observable_dict.get('observable_source')] obs.keywords = Keywords.from_dict(observable_dict.get('keywords')) obs.pattern_fidelity = PatternFidelity.from_dict(observable_dict.get('pattern_fidelity')) return obs
class Observable(cybox.Entity): """A single Observable. """ _binding = core_binding _namespace = 'http://cybox.mitre.org/cybox-2' def __init__(self, item=None, id_=None): """Create an Observable out of 'item'. `item` can be any of: - an Object - an ObservableComposition - any subclass of ObjectProperties. In the first two cases, the appropriate property of the Observable will be set. In the last cases, an Object will be built automatically to ensure the correct hierarchy is created. """ if not id_: id_ = cybox.utils.create_id(prefix="Observable") self.id_ = id_ self.title = None self.description = None self.object_ = None self.observable_composition = None self.idref = None if not item: return if isinstance(item, Object): self.object_ = item elif isinstance(item, ObservableComposition): self.observable_composition = item elif isinstance(item, ObjectProperties): if item.parent: self.object_ = item.parent else: self.object_ = Object(item) @property def object_(self): return self._object @object_.setter def object_(self, value): if value: if self.observable_composition: msg = 'Observable already has an ObservableComposition.' raise ValueError(msg) if not isinstance(value, Object): raise TypeError('value must be a Object') self._object = value @property def observable_composition(self): return self._observable_composition @observable_composition.setter def observable_composition(self, value): if value: if self.object_: raise ValueError('Observable already has an Object.') if not isinstance(value, ObservableComposition): raise TypeError('value must be an ObservableComposition') self._observable_composition = value @property def description(self): return self._description @description.setter def description(self, value): if value is not None and not isinstance(value, StructuredText): value = StructuredText(value) self._description = value def to_obj(self): obs_obj = core_binding.ObservableType() obs_obj.set_id(self.id_) if self.title is not None: obs_obj.set_Title(self.title) if self.description is not None: obs_obj.set_Description(self.description.to_obj()) if self.object_: obs_obj.set_Object(self.object_.to_obj()) if self.observable_composition: obs_obj.set_Observable_Composition(self.observable_composition.to_obj()) if self.idref is not None: obs_obj.set_idref(self.idref) return obs_obj def to_dict(self): obs_dict = {} if self.id_ is not None: obs_dict['id'] = self.id_ if self.title is not None: obs_dict['title'] = self.title if self.description is not None: obs_dict['description'] = self.description.to_dict() if self.object_: obs_dict['object'] = self.object_.to_dict() if self.observable_composition: obs_dict['observable_composition'] = self.observable_composition.to_dict() if self.idref is not None: obs_dict['idref'] = self.idref return obs_dict @staticmethod def from_obj(observable_obj): if not observable_obj: return None obs = Observable() obs.id_ = observable_obj.get_id() obs.title = observable_obj.get_Title() obs.description = StructuredText.from_obj(observable_obj.get_Description()) obs.object_ = Object.from_obj(observable_obj.get_Object()) obs.observable_composition = ObservableComposition.from_obj(observable_obj.get_Observable_Composition()) obs.idref = observable_obj.get_idref() return obs @staticmethod def from_dict(observable_dict): if not observable_dict: return None obs = Observable() obs.id_ = observable_dict.get('id') obs.title = observable_dict.get('title') obs.description = StructuredText.from_dict(observable_dict.get('description')) obs.object_ = Object.from_dict(observable_dict.get('object')) obs.observable_composition = ObservableComposition.from_dict(observable_dict.get('observable_composition')) obs.idref = observable_dict.get('idref') return obs
class Observable(cybox.Entity): """A single Observable. """ _binding = core_binding _namespace = 'http://cybox.mitre.org/cybox-2' def __init__(self, item=None, id_=None): """Create an Observable out of 'item'. `item` can be any of: - an Object - an Event - an ObservableComposition - any subclass of ObjectProperties. In the first three cases, the appropriate property of the Observable will be set. In the last cases, an Object will be built automatically to ensure the correct hierarchy is created. """ super(Observable, self).__init__() if not id_: id_ = cybox.utils.create_id(prefix="Observable") self.id_ = id_ self.title = None self.description = None self.object_ = None self.event = None self.observable_composition = None self.idref = None self.sighting_count = None self.observable_source = [] if not item: return if isinstance(item, Object): self.object_ = item elif isinstance(item, ObservableComposition): self.observable_composition = item elif isinstance(item, Event): self.event = item elif isinstance(item, ObjectProperties): if item.parent: self.object_ = item.parent else: self.object_ = Object(item) @property def object_(self): return self._object @object_.setter def object_(self, value): if value: if self.event: msg = 'Observable already has an Event.' raise ValueError(msg) elif self.observable_composition: msg = 'Observable already has an ObservableComposition.' raise ValueError(msg) if not isinstance(value, Object): raise TypeError('value must be an Object') self._object = value @property def event(self): return self._event @event.setter def event(self, value): if value: if self.object_: raise ValueError('Observable already has an Object.') elif self.observable_composition: msg = 'Observable already has an ObservableComposition.' raise ValueError(msg) if not isinstance(value, Event): raise TypeError('value must be an Event') self._event = value @property def observable_composition(self): return self._observable_composition @observable_composition.setter def observable_composition(self, value): if value: if self.object_: raise ValueError('Observable already has an Object.') elif self.event: msg = 'Observable already has an Event.' raise ValueError(msg) if not isinstance(value, ObservableComposition): raise TypeError('value must be an ObservableComposition') self._observable_composition = value @property def description(self): return self._description @description.setter def description(self, value): if value is not None and not isinstance(value, StructuredText): value = StructuredText(value) self._description = value def to_obj(self): obs_obj = core_binding.ObservableType() obs_obj.set_id(self.id_) if self.title is not None: obs_obj.set_Title(self.title) if self.description is not None: obs_obj.set_Description(self.description.to_obj()) if self.object_: obs_obj.set_Object(self.object_.to_obj()) if self.event: obs_obj.set_Event(self.event.to_obj()) if self.observable_composition: obs_obj.set_Observable_Composition(self.observable_composition.to_obj()) if self.idref is not None: obs_obj.set_idref(self.idref) if self.sighting_count is not None: obs_obj.set_sighting_count(self.sighting_count) if self.observable_source: obs_obj.set_Observable_Source([x.to_obj() for x in self.observable_source]) return obs_obj def to_dict(self): obs_dict = {} if self.id_ is not None: obs_dict['id'] = self.id_ if self.title is not None: obs_dict['title'] = self.title if self.description is not None: obs_dict['description'] = self.description.to_dict() if self.object_: obs_dict['object'] = self.object_.to_dict() if self.event: obs_dict['event'] = self.event.to_dict() if self.observable_composition: obs_dict['observable_composition'] = self.observable_composition.to_dict() if self.idref is not None: obs_dict['idref'] = self.idref if self.sighting_count is not None: obs_dict['sighting_count'] = self.sighting_count if self.observable_source: obs_dict['observable_source'] = [x.to_dict() for x in self.observable_source] return obs_dict @staticmethod def from_obj(observable_obj): if not observable_obj: return None obs = Observable() obs.id_ = observable_obj.get_id() obs.title = observable_obj.get_Title() obs.description = StructuredText.from_obj(observable_obj.get_Description()) obs.object_ = Object.from_obj(observable_obj.get_Object()) obs.event = Event.from_obj(observable_obj.get_Event()) obs.observable_composition = ObservableComposition.from_obj(observable_obj.get_Observable_Composition()) obs.idref = observable_obj.get_idref() obs.sighting_count = observable_obj.get_sighting_count() if observable_obj.get_Observable_Source(): obs.observable_source = [MeasureSource.from_obj(x) for x in observable_obj.get_Observable_Source()] return obs @staticmethod def from_dict(observable_dict): if not observable_dict: return None obs = Observable() obs.id_ = observable_dict.get('id') obs.title = observable_dict.get('title') obs.description = StructuredText.from_dict(observable_dict.get('description')) obs.object_ = Object.from_dict(observable_dict.get('object')) obs.event = Object.from_dict(observable_dict.get('event')) obs.observable_composition = ObservableComposition.from_dict(observable_dict.get('observable_composition')) obs.idref = observable_dict.get('idref') obs.sighting_count = observable_dict.get('sighting_count') if observable_dict.get('observable_source'): obs.observable_source = [MeasureSource.from_dict(x) for x in observable_dict.get('observable_source')] return obs