Source code for cybox.common.object_properties

# Copyright (c) 2017, The MITRE Corporation. All rights reserved.
# See LICENSE.txt for complete terms.

from mixbox import entities
from mixbox import fields

import cybox.bindings.cybox_common as common_binding
import cybox.objects

from .properties import String


[docs]class Property(String): _binding = common_binding _binding_class = _binding.PropertyType name = fields.TypedField("name") description = fields.TypedField("description")
[docs] def is_plain(self): """Whether the Property can be represented as a single value.""" return ( self.name is None and self.description is None and super(Property, self).is_plain() )
[docs]class CustomProperties(entities.EntityList): _binding = common_binding _binding_class = common_binding.CustomPropertiesType _namespace = 'http://cybox.mitre.org/common-2' property_ = fields.TypedField("Property", Property, multiple=True)
class ObjectPropertiesFactory(entities.EntityFactory): @classmethod def objkey(cls, obj): xsi_type = obj.xsi_type if not xsi_type: raise ValueError("No xsi:type found on ObjectProperties instance.") return xsi_type.split(":")[1] @classmethod def entity_class(cls, key): if not key: raise ValueError("Must provide an xsi:type key for ObjectProperties.") return cybox.objects.get_class_for_object_type(key)
[docs]class ObjectProperties(entities.Entity): """The Cybox ObjectProperties base class.""" _XSI_TYPE = None _XSI_NS = None _binding = common_binding _binding_class = _binding.ObjectPropertiesType object_reference = fields.TypedField("object_reference") custom_properties = fields.TypedField("Custom_Properties", CustomProperties) def __init__(self): super(ObjectProperties, self).__init__() self.parent = None @property def parent(self): import cybox.core if not self._parent: self._parent = cybox.core.Object(self) return self._parent @parent.setter def parent(self, value): import cybox.core if value and not isinstance(value, cybox.core.Object): raise ValueError("Must be an Object") self._parent = value
[docs] def to_obj(self, ns_info=None): obj = super(ObjectProperties, self).to_obj(ns_info=ns_info) if self._XSI_TYPE and self._XSI_NS: obj.xsi_type = "%s:%s" % (self._XSI_NS, self._XSI_TYPE) return obj
[docs] def to_dict(self): d = super(ObjectProperties, self).to_dict() if self._XSI_TYPE: d['xsi:type'] = self._XSI_TYPE return d