Update CustomObject docstring, re-organize object properties.
parent
ccfcffb2f5
commit
add14c2490
28
stix2/sdo.py
28
stix2/sdo.py
|
@ -292,22 +292,22 @@ def CustomObject(type='x-custom-type', properties=None):
|
||||||
|
|
||||||
Example 1:
|
Example 1:
|
||||||
|
|
||||||
@CustomObject('x-type-name', {
|
@CustomObject('x-type-name', [
|
||||||
'property1': StringProperty(required=True),
|
('property1', StringProperty(required=True)),
|
||||||
'property2': IntegerProperty(),
|
('property2', IntegerProperty()),
|
||||||
})
|
])
|
||||||
class MyNewObjectType():
|
class MyNewObjectType():
|
||||||
pass
|
pass
|
||||||
|
|
||||||
Supply an __init__() function to add any special validations to the custom
|
Supply an __init__() function to add any special validations to the custom
|
||||||
type. Don't call super().__init() though - doing so will cause an error.
|
type. Don't call super().__init__() though - doing so will cause an error.
|
||||||
|
|
||||||
Example 2:
|
Example 2:
|
||||||
|
|
||||||
@CustomObject('x-type-name', {
|
@CustomObject('x-type-name', [
|
||||||
'property1': StringProperty(required=True),
|
('property1', StringProperty(required=True)),
|
||||||
'property2': IntegerProperty(),
|
('property2', IntegerProperty()),
|
||||||
})
|
])
|
||||||
class MyNewObjectType():
|
class MyNewObjectType():
|
||||||
def __init__(self, property2=None, **kwargs):
|
def __init__(self, property2=None, **kwargs):
|
||||||
if property2 and property2 < 10:
|
if property2 and property2 < 10:
|
||||||
|
@ -327,10 +327,13 @@ def CustomObject(type='x-custom-type', properties=None):
|
||||||
('modified', TimestampProperty(default=lambda: NOW, precision='millisecond')),
|
('modified', TimestampProperty(default=lambda: NOW, precision='millisecond')),
|
||||||
])
|
])
|
||||||
|
|
||||||
if properties is None:
|
if not properties:
|
||||||
raise ValueError("Must supply a list, containing tuples. For example, [('property1', IntegerProperty())]")
|
raise ValueError("Must supply a list, containing tuples. For example, [('property1', IntegerProperty())]")
|
||||||
|
|
||||||
_properties.update(properties)
|
normal_properties = [x for x in properties if not x[0].startswith("x_")]
|
||||||
|
custom_properties = [x for x in properties if x[0].startswith("x_")]
|
||||||
|
|
||||||
|
_properties.update(normal_properties)
|
||||||
|
|
||||||
# This is to follow the general properties structure.
|
# This is to follow the general properties structure.
|
||||||
_properties.update([
|
_properties.update([
|
||||||
|
@ -341,6 +344,9 @@ def CustomObject(type='x-custom-type', properties=None):
|
||||||
('granular_markings', ListProperty(GranularMarking)),
|
('granular_markings', ListProperty(GranularMarking)),
|
||||||
])
|
])
|
||||||
|
|
||||||
|
# Put all custom properties at the bottom, sorted alphabetically.
|
||||||
|
_properties.update(sorted(custom_properties, key=lambda x: x[0]))
|
||||||
|
|
||||||
def __init__(self, **kwargs):
|
def __init__(self, **kwargs):
|
||||||
_STIXBase.__init__(self, **kwargs)
|
_STIXBase.__init__(self, **kwargs)
|
||||||
cls.__init__(self, **kwargs)
|
cls.__init__(self, **kwargs)
|
||||||
|
|
Loading…
Reference in New Issue