Remove duplicate register methods and CustomMarking code
parent
5332d54383
commit
b722fdc0ed
|
@ -3,15 +3,15 @@
|
||||||
from collections import OrderedDict
|
from collections import OrderedDict
|
||||||
|
|
||||||
from ..base import _STIXBase
|
from ..base import _STIXBase
|
||||||
|
from ..custom import custom_marking_builder
|
||||||
from ..markings import _MarkingsMixin
|
from ..markings import _MarkingsMixin
|
||||||
from ..utils import NOW, _get_dict
|
from ..properties import (HashesProperty, IDProperty, ListProperty, Property,
|
||||||
from .properties import (HashesProperty, IDProperty, ListProperty, Property,
|
|
||||||
ReferenceProperty, SelectorProperty, StringProperty,
|
ReferenceProperty, SelectorProperty, StringProperty,
|
||||||
TimestampProperty, TypeProperty)
|
TimestampProperty, TypeProperty)
|
||||||
|
from ..utils import NOW, _get_dict
|
||||||
|
|
||||||
|
|
||||||
class ExternalReference(_STIXBase):
|
class ExternalReference(_STIXBase):
|
||||||
# TODO: Update with 2.1 Link
|
|
||||||
"""For more detailed information on this object's properties, see
|
"""For more detailed information on this object's properties, see
|
||||||
`the STIX 2.0 specification <http://docs.oasis-open.org/cti/stix/v2.0/cs01/part1-stix-core/stix-v2.0-cs01-part1-stix-core.html#_Toc496709261>`__.
|
`the STIX 2.0 specification <http://docs.oasis-open.org/cti/stix/v2.0/cs01/part1-stix-core/stix-v2.0-cs01-part1-stix-core.html#_Toc496709261>`__.
|
||||||
"""
|
"""
|
||||||
|
@ -30,7 +30,6 @@ class ExternalReference(_STIXBase):
|
||||||
|
|
||||||
|
|
||||||
class KillChainPhase(_STIXBase):
|
class KillChainPhase(_STIXBase):
|
||||||
# TODO: Update with 2.1 Link
|
|
||||||
"""For more detailed information on this object's properties, see
|
"""For more detailed information on this object's properties, see
|
||||||
`the STIX 2.0 specification <http://docs.oasis-open.org/cti/stix/v2.0/cs01/part1-stix-core/stix-v2.0-cs01-part1-stix-core.html#_Toc496709267>`__.
|
`the STIX 2.0 specification <http://docs.oasis-open.org/cti/stix/v2.0/cs01/part1-stix-core/stix-v2.0-cs01-part1-stix-core.html#_Toc496709267>`__.
|
||||||
"""
|
"""
|
||||||
|
@ -42,7 +41,6 @@ class KillChainPhase(_STIXBase):
|
||||||
|
|
||||||
|
|
||||||
class GranularMarking(_STIXBase):
|
class GranularMarking(_STIXBase):
|
||||||
# TODO: Update with 2.1 Link
|
|
||||||
"""For more detailed information on this object's properties, see
|
"""For more detailed information on this object's properties, see
|
||||||
`the STIX 2.0 specification <http://docs.oasis-open.org/cti/stix/v2.0/cs01/part1-stix-core/stix-v2.0-cs01-part1-stix-core.html#_Toc496709290>`__.
|
`the STIX 2.0 specification <http://docs.oasis-open.org/cti/stix/v2.0/cs01/part1-stix-core/stix-v2.0-cs01-part1-stix-core.html#_Toc496709290>`__.
|
||||||
"""
|
"""
|
||||||
|
@ -54,7 +52,6 @@ class GranularMarking(_STIXBase):
|
||||||
|
|
||||||
|
|
||||||
class TLPMarking(_STIXBase):
|
class TLPMarking(_STIXBase):
|
||||||
# TODO: Update with 2.1 Link
|
|
||||||
"""For more detailed information on this object's properties, see
|
"""For more detailed information on this object's properties, see
|
||||||
`the STIX 2.0 specification <http://docs.oasis-open.org/cti/stix/v2.0/cs01/part1-stix-core/stix-v2.0-cs01-part1-stix-core.html#_Toc496709287>`__.
|
`the STIX 2.0 specification <http://docs.oasis-open.org/cti/stix/v2.0/cs01/part1-stix-core/stix-v2.0-cs01-part1-stix-core.html#_Toc496709287>`__.
|
||||||
"""
|
"""
|
||||||
|
@ -67,7 +64,6 @@ class TLPMarking(_STIXBase):
|
||||||
|
|
||||||
|
|
||||||
class StatementMarking(_STIXBase):
|
class StatementMarking(_STIXBase):
|
||||||
# TODO: Update with 2.1 Link
|
|
||||||
"""For more detailed information on this object's properties, see
|
"""For more detailed information on this object's properties, see
|
||||||
`the STIX 2.0 specification <http://docs.oasis-open.org/cti/stix/v2.0/cs01/part1-stix-core/stix-v2.0-cs01-part1-stix-core.html#_Toc496709286>`__.
|
`the STIX 2.0 specification <http://docs.oasis-open.org/cti/stix/v2.0/cs01/part1-stix-core/stix-v2.0-cs01-part1-stix-core.html#_Toc496709286>`__.
|
||||||
"""
|
"""
|
||||||
|
@ -98,7 +94,6 @@ class MarkingProperty(Property):
|
||||||
|
|
||||||
|
|
||||||
class MarkingDefinition(_STIXBase, _MarkingsMixin):
|
class MarkingDefinition(_STIXBase, _MarkingsMixin):
|
||||||
# TODO: Update with 2.1 Link
|
|
||||||
"""For more detailed information on this object's properties, see
|
"""For more detailed information on this object's properties, see
|
||||||
`the STIX 2.0 specification <http://docs.oasis-open.org/cti/stix/v2.0/cs01/part1-stix-core/stix-v2.0-cs01-part1-stix-core.html#_Toc496709284>`__.
|
`the STIX 2.0 specification <http://docs.oasis-open.org/cti/stix/v2.0/cs01/part1-stix-core/stix-v2.0-cs01-part1-stix-core.html#_Toc496709284>`__.
|
||||||
"""
|
"""
|
||||||
|
@ -137,17 +132,12 @@ OBJ_MAP_MARKING = {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
def _register_marking(cls):
|
|
||||||
"""Register a custom STIX Marking Definition type.
|
|
||||||
"""
|
|
||||||
OBJ_MAP_MARKING[cls._type] = cls
|
|
||||||
return cls
|
|
||||||
|
|
||||||
|
|
||||||
def CustomMarking(type='x-custom-marking', properties=None):
|
def CustomMarking(type='x-custom-marking', properties=None):
|
||||||
"""Custom STIX Marking decorator.
|
"""Custom STIX Marking decorator.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
>>> from stix2 import CustomMarking
|
||||||
|
>>> from stix2.properties import IntegerProperty, StringProperty
|
||||||
>>> @CustomMarking('x-custom-marking', [
|
>>> @CustomMarking('x-custom-marking', [
|
||||||
... ('property1', StringProperty(required=True)),
|
... ('property1', StringProperty(required=True)),
|
||||||
... ('property2', IntegerProperty()),
|
... ('property2', IntegerProperty()),
|
||||||
|
@ -156,32 +146,9 @@ def CustomMarking(type='x-custom-marking', properties=None):
|
||||||
... pass
|
... pass
|
||||||
|
|
||||||
"""
|
"""
|
||||||
def custom_builder(cls):
|
def wrapper(cls):
|
||||||
|
return custom_marking_builder(cls, type, properties, '2.0')
|
||||||
class _Custom(cls, _STIXBase):
|
return wrapper
|
||||||
_type = type
|
|
||||||
_properties = OrderedDict()
|
|
||||||
|
|
||||||
if not properties or not isinstance(properties, list):
|
|
||||||
raise ValueError("Must supply a list, containing tuples. For example, [('property1', IntegerProperty())]")
|
|
||||||
|
|
||||||
_properties.update(properties)
|
|
||||||
|
|
||||||
def __init__(self, **kwargs):
|
|
||||||
_STIXBase.__init__(self, **kwargs)
|
|
||||||
try:
|
|
||||||
cls.__init__(self, **kwargs)
|
|
||||||
except (AttributeError, TypeError) as e:
|
|
||||||
# Don't accidentally catch errors raised in a custom __init__()
|
|
||||||
if ("has no attribute '__init__'" in str(e) or
|
|
||||||
str(e) == "object.__init__() takes no parameters"):
|
|
||||||
return
|
|
||||||
raise e
|
|
||||||
|
|
||||||
_register_marking(_Custom)
|
|
||||||
return _Custom
|
|
||||||
|
|
||||||
return custom_builder
|
|
||||||
|
|
||||||
|
|
||||||
# TODO: don't allow the creation of any other TLPMarkings than the ones below
|
# TODO: don't allow the creation of any other TLPMarkings than the ones below
|
||||||
|
|
|
@ -3,12 +3,13 @@
|
||||||
from collections import OrderedDict
|
from collections import OrderedDict
|
||||||
|
|
||||||
from ..base import _STIXBase
|
from ..base import _STIXBase
|
||||||
|
from ..custom import custom_marking_builder
|
||||||
from ..markings import _MarkingsMixin
|
from ..markings import _MarkingsMixin
|
||||||
|
from ..properties import (BooleanProperty, DictionaryProperty, HashesProperty,
|
||||||
|
IDProperty, ListProperty, Property,
|
||||||
|
ReferenceProperty, SelectorProperty, StringProperty,
|
||||||
|
TimestampProperty, TypeProperty)
|
||||||
from ..utils import NOW, _get_dict
|
from ..utils import NOW, _get_dict
|
||||||
from .properties import (BooleanProperty, DictionaryProperty, HashesProperty,
|
|
||||||
IDProperty, ListProperty, Property, ReferenceProperty,
|
|
||||||
SelectorProperty, StringProperty, TimestampProperty,
|
|
||||||
TypeProperty)
|
|
||||||
|
|
||||||
|
|
||||||
class ExternalReference(_STIXBase):
|
class ExternalReference(_STIXBase):
|
||||||
|
@ -61,7 +62,7 @@ class LanguageContent(_STIXBase):
|
||||||
# TODO: 'object_modified' it MUST be an exact match for the modified time of the STIX Object (SRO or SDO) being referenced.
|
# TODO: 'object_modified' it MUST be an exact match for the modified time of the STIX Object (SRO or SDO) being referenced.
|
||||||
('object_modified', TimestampProperty(required=True, precision='millisecond')),
|
('object_modified', TimestampProperty(required=True, precision='millisecond')),
|
||||||
# TODO: 'contents' https://docs.google.com/document/d/1ShNq4c3e1CkfANmD9O--mdZ5H0O_GLnjN28a_yrEaco/edit#heading=h.cfz5hcantmvx
|
# TODO: 'contents' https://docs.google.com/document/d/1ShNq4c3e1CkfANmD9O--mdZ5H0O_GLnjN28a_yrEaco/edit#heading=h.cfz5hcantmvx
|
||||||
('contents', DictionaryProperty(required=True)),
|
('contents', DictionaryProperty(spec_version='2.1', required=True)),
|
||||||
('revoked', BooleanProperty()),
|
('revoked', BooleanProperty()),
|
||||||
('labels', ListProperty(StringProperty)),
|
('labels', ListProperty(StringProperty)),
|
||||||
('external_references', ListProperty(ExternalReference)),
|
('external_references', ListProperty(ExternalReference)),
|
||||||
|
@ -142,17 +143,12 @@ OBJ_MAP_MARKING = {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
def _register_marking(cls):
|
|
||||||
"""Register a custom STIX Marking Definition type.
|
|
||||||
"""
|
|
||||||
OBJ_MAP_MARKING[cls._type] = cls
|
|
||||||
return cls
|
|
||||||
|
|
||||||
|
|
||||||
def CustomMarking(type='x-custom-marking', properties=None):
|
def CustomMarking(type='x-custom-marking', properties=None):
|
||||||
"""Custom STIX Marking decorator.
|
"""Custom STIX Marking decorator.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
>>> from stix2.v21 import CustomMarking
|
||||||
|
>>> from stix2.properties import IntegerProperty, StringProperty
|
||||||
>>> @CustomMarking('x-custom-marking', [
|
>>> @CustomMarking('x-custom-marking', [
|
||||||
... ('property1', StringProperty(required=True)),
|
... ('property1', StringProperty(required=True)),
|
||||||
... ('property2', IntegerProperty()),
|
... ('property2', IntegerProperty()),
|
||||||
|
@ -161,31 +157,9 @@ def CustomMarking(type='x-custom-marking', properties=None):
|
||||||
... pass
|
... pass
|
||||||
|
|
||||||
"""
|
"""
|
||||||
def custom_builder(cls):
|
def wrapper(cls):
|
||||||
|
return custom_marking_builder(cls, type, properties, '2.1')
|
||||||
class _Custom(cls, _STIXBase):
|
return wrapper
|
||||||
_type = type
|
|
||||||
|
|
||||||
if not properties or not isinstance(properties, list):
|
|
||||||
raise ValueError("Must supply a list, containing tuples. For example, [('property1', IntegerProperty())]")
|
|
||||||
|
|
||||||
_properties = OrderedDict(properties)
|
|
||||||
|
|
||||||
def __init__(self, **kwargs):
|
|
||||||
_STIXBase.__init__(self, **kwargs)
|
|
||||||
try:
|
|
||||||
cls.__init__(self, **kwargs)
|
|
||||||
except (AttributeError, TypeError) as e:
|
|
||||||
# Don't accidentally catch errors raised in a custom __init__()
|
|
||||||
if ("has no attribute '__init__'" in str(e) or
|
|
||||||
str(e) == "object.__init__() takes no parameters"):
|
|
||||||
return
|
|
||||||
raise e
|
|
||||||
|
|
||||||
_register_marking(_Custom)
|
|
||||||
return _Custom
|
|
||||||
|
|
||||||
return custom_builder
|
|
||||||
|
|
||||||
|
|
||||||
# TODO: don't allow the creation of any other TLPMarkings than the ones below
|
# TODO: don't allow the creation of any other TLPMarkings than the ones below
|
||||||
|
|
Loading…
Reference in New Issue