Change SROs to OrderedDict approach. Removed COMMON_PROPERTIES.
parent
8086447fce
commit
dd2a1db5c1
75
stix2/sro.py
75
stix2/sro.py
|
@ -1,31 +1,39 @@
|
|||
"""STIX 2.0 Relationship Objects."""
|
||||
|
||||
from collections import OrderedDict
|
||||
|
||||
from .base import _STIXBase
|
||||
from .common import COMMON_PROPERTIES
|
||||
from .properties import (IDProperty, IntegerProperty, ListProperty,
|
||||
from .other import ExternalReference, GranularMarking
|
||||
from .properties import (BooleanProperty, IDProperty, IntegerProperty, ListProperty,
|
||||
ReferenceProperty, StringProperty, TimestampProperty,
|
||||
TypeProperty)
|
||||
from .utils import NOW
|
||||
|
||||
|
||||
class Relationship(_STIXBase):
|
||||
|
||||
_type = 'relationship'
|
||||
_properties = COMMON_PROPERTIES.copy()
|
||||
_properties.update({
|
||||
'id': IDProperty(_type),
|
||||
'type': TypeProperty(_type),
|
||||
'relationship_type': StringProperty(required=True),
|
||||
'description': StringProperty(),
|
||||
'source_ref': ReferenceProperty(required=True),
|
||||
'target_ref': ReferenceProperty(required=True),
|
||||
})
|
||||
_properties = OrderedDict()
|
||||
_properties.update([
|
||||
('type', TypeProperty(_type)),
|
||||
('id', IDProperty(_type)),
|
||||
('created_by_ref', ReferenceProperty(type="identity")),
|
||||
('created', TimestampProperty(default=lambda: NOW, precision='millisecond')),
|
||||
('modified', TimestampProperty(default=lambda: NOW, precision='millisecond')),
|
||||
('relationship_type', StringProperty(required=True)),
|
||||
('description', StringProperty()),
|
||||
('source_ref', ReferenceProperty(required=True)),
|
||||
('target_ref', ReferenceProperty(required=True)),
|
||||
('revoked', BooleanProperty()),
|
||||
('labels', ListProperty(StringProperty)),
|
||||
('external_references', ListProperty(ExternalReference)),
|
||||
('object_marking_refs', ListProperty(ReferenceProperty(type="marking-definition"))),
|
||||
('granular_markings', ListProperty(GranularMarking)),
|
||||
])
|
||||
|
||||
# Explicitly define the first three kwargs to make readable Relationship declarations.
|
||||
def __init__(self, source_ref=None, relationship_type=None, target_ref=None,
|
||||
**kwargs):
|
||||
# TODO:
|
||||
# - description
|
||||
|
||||
def __init__(self, source_ref=None, relationship_type=None,
|
||||
target_ref=None, **kwargs):
|
||||
# Allow (source_ref, relationship_type, target_ref) as positional args.
|
||||
if source_ref and not kwargs.get('source_ref'):
|
||||
kwargs['source_ref'] = source_ref
|
||||
|
@ -39,24 +47,29 @@ class Relationship(_STIXBase):
|
|||
|
||||
class Sighting(_STIXBase):
|
||||
_type = 'sighting'
|
||||
_properties = COMMON_PROPERTIES.copy()
|
||||
_properties.update({
|
||||
'id': IDProperty(_type),
|
||||
'type': TypeProperty(_type),
|
||||
'first_seen': TimestampProperty(),
|
||||
'last_seen': TimestampProperty(),
|
||||
'count': IntegerProperty(),
|
||||
'sighting_of_ref': ReferenceProperty(required=True),
|
||||
'observed_data_refs': ListProperty(ReferenceProperty(type="observed-data")),
|
||||
'where_sighted_refs': ListProperty(ReferenceProperty(type="identity")),
|
||||
'summary': StringProperty(),
|
||||
})
|
||||
_properties = OrderedDict()
|
||||
_properties.update([
|
||||
('id', IDProperty(_type)),
|
||||
('type', TypeProperty(_type)),
|
||||
('created_by_ref', ReferenceProperty(type="identity")),
|
||||
('created', TimestampProperty(default=lambda: NOW, precision='millisecond')),
|
||||
('modified', TimestampProperty(default=lambda: NOW, precision='millisecond')),
|
||||
('first_seen', TimestampProperty()),
|
||||
('last_seen', TimestampProperty()),
|
||||
('count', IntegerProperty()),
|
||||
('sighting_of_ref', ReferenceProperty(required=True)),
|
||||
('observed_data_refs', ListProperty(ReferenceProperty(type="observed-data"))),
|
||||
('where_sighted_refs', ListProperty(ReferenceProperty(type="identity"))),
|
||||
('summary', BooleanProperty()),
|
||||
('revoked', BooleanProperty()),
|
||||
('labels', ListProperty(StringProperty)),
|
||||
('external_references', ListProperty(ExternalReference)),
|
||||
('object_marking_refs', ListProperty(ReferenceProperty(type="marking-definition"))),
|
||||
('granular_markings', ListProperty(GranularMarking)),
|
||||
])
|
||||
|
||||
# Explicitly define the first kwargs to make readable Sighting declarations.
|
||||
def __init__(self, sighting_of_ref=None, **kwargs):
|
||||
# TODO:
|
||||
# - description
|
||||
|
||||
# Allow sighting_of_ref as a positional arg.
|
||||
if sighting_of_ref and not kwargs.get('sighting_of_ref'):
|
||||
kwargs['sighting_of_ref'] = sighting_of_ref
|
||||
|
|
Loading…
Reference in New Issue