Move get_stix2_class_maps() from .utils to .registry (since it's
really just a simple accessor into the class maps table), and change other code to use it, in places where it was simple and made sense.pull/1/head
parent
0f2ce0ac72
commit
24307626b0
|
@ -68,13 +68,11 @@ def _register_marking(new_marking, version=DEFAULT_VERSION):
|
||||||
if not re.match(PREFIX_21_REGEX, prop_name):
|
if not re.match(PREFIX_21_REGEX, prop_name):
|
||||||
raise ValueError("Property name '%s' must begin with an alpha character." % prop_name)
|
raise ValueError("Property name '%s' must begin with an alpha character." % prop_name)
|
||||||
|
|
||||||
if version:
|
class_maps = registry.get_stix2_class_maps(
|
||||||
v = 'v' + version.replace('.', '')
|
version or DEFAULT_VERSION
|
||||||
else:
|
)
|
||||||
# Use default version (latest) if no version was provided.
|
|
||||||
v = 'v' + DEFAULT_VERSION.replace('.', '')
|
|
||||||
|
|
||||||
OBJ_MAP_MARKING = registry.STIX2_OBJ_MAPS[v]['markings']
|
OBJ_MAP_MARKING = class_maps['markings']
|
||||||
if mark_type in OBJ_MAP_MARKING.keys():
|
if mark_type in OBJ_MAP_MARKING.keys():
|
||||||
raise DuplicateRegistrationError("STIX Marking", mark_type)
|
raise DuplicateRegistrationError("STIX Marking", mark_type)
|
||||||
OBJ_MAP_MARKING[mark_type] = new_marking
|
OBJ_MAP_MARKING[mark_type] = new_marking
|
||||||
|
@ -130,13 +128,11 @@ def _register_observable(new_observable, version=DEFAULT_VERSION):
|
||||||
"is not a ListProperty containing ReferenceProperty." % prop_name,
|
"is not a ListProperty containing ReferenceProperty." % prop_name,
|
||||||
)
|
)
|
||||||
|
|
||||||
if version:
|
class_maps = registry.get_stix2_class_maps(
|
||||||
v = 'v' + version.replace('.', '')
|
version or DEFAULT_VERSION
|
||||||
else:
|
)
|
||||||
# Use default version (latest) if no version was provided.
|
|
||||||
v = 'v' + DEFAULT_VERSION.replace('.', '')
|
|
||||||
|
|
||||||
OBJ_MAP_OBSERVABLE = registry.STIX2_OBJ_MAPS[v]['observables']
|
OBJ_MAP_OBSERVABLE = class_maps['observables']
|
||||||
if new_observable._type in OBJ_MAP_OBSERVABLE.keys():
|
if new_observable._type in OBJ_MAP_OBSERVABLE.keys():
|
||||||
raise DuplicateRegistrationError("Cyber Observable", new_observable._type)
|
raise DuplicateRegistrationError("Cyber Observable", new_observable._type)
|
||||||
OBJ_MAP_OBSERVABLE[new_observable._type] = new_observable
|
OBJ_MAP_OBSERVABLE[new_observable._type] = new_observable
|
||||||
|
@ -182,8 +178,6 @@ def _register_observable_extension(
|
||||||
if not re.match(PREFIX_21_REGEX, prop_name):
|
if not re.match(PREFIX_21_REGEX, prop_name):
|
||||||
raise ValueError("Property name '%s' must begin with an alpha character." % prop_name)
|
raise ValueError("Property name '%s' must begin with an alpha character." % prop_name)
|
||||||
|
|
||||||
v = 'v' + version.replace('.', '')
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
observable_type = observable._type
|
observable_type = observable._type
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
|
@ -192,8 +186,9 @@ def _register_observable_extension(
|
||||||
"created with the @CustomObservable decorator.",
|
"created with the @CustomObservable decorator.",
|
||||||
)
|
)
|
||||||
|
|
||||||
OBJ_MAP_OBSERVABLE = registry.STIX2_OBJ_MAPS[v]['observables']
|
class_maps = registry.get_stix2_class_maps(version)
|
||||||
EXT_MAP = registry.STIX2_OBJ_MAPS[v]['observable-extensions']
|
OBJ_MAP_OBSERVABLE = class_maps['observables']
|
||||||
|
EXT_MAP = class_maps['observable-extensions']
|
||||||
|
|
||||||
try:
|
try:
|
||||||
if ext_type in EXT_MAP[observable_type].keys():
|
if ext_type in EXT_MAP[observable_type].keys():
|
||||||
|
|
|
@ -26,3 +26,18 @@ def _collect_stix2_mappings():
|
||||||
elif re.match(r'^stix2\.v2[0-9]\.common$', name) and is_pkg is False:
|
elif re.match(r'^stix2\.v2[0-9]\.common$', name) and is_pkg is False:
|
||||||
mod = importlib.import_module(name, str(top_level_module.__name__))
|
mod = importlib.import_module(name, str(top_level_module.__name__))
|
||||||
STIX2_OBJ_MAPS[ver]['markings'] = mod.OBJ_MAP_MARKING
|
STIX2_OBJ_MAPS[ver]['markings'] = mod.OBJ_MAP_MARKING
|
||||||
|
|
||||||
|
|
||||||
|
def get_stix2_class_maps(stix_version):
|
||||||
|
"""
|
||||||
|
Get the stix2 class mappings for the given STIX version.
|
||||||
|
|
||||||
|
:param stix_version: A STIX version as a string
|
||||||
|
:return: The class mappings. This will be a dict mapping from some general
|
||||||
|
category name, e.g. "object" to another mapping from STIX type
|
||||||
|
to a stix2 class.
|
||||||
|
"""
|
||||||
|
stix_vid = "v" + stix_version.replace(".", "")
|
||||||
|
cls_maps = STIX2_OBJ_MAPS[stix_vid]
|
||||||
|
|
||||||
|
return cls_maps
|
||||||
|
|
|
@ -340,21 +340,6 @@ def _stix_type_of(value):
|
||||||
return type_
|
return type_
|
||||||
|
|
||||||
|
|
||||||
def _get_stix2_class_maps(stix_version):
|
|
||||||
"""
|
|
||||||
Get the stix2 class mappings for the given STIX version.
|
|
||||||
|
|
||||||
:param stix_version: A STIX version as a string
|
|
||||||
:return: The class mappings. This will be a dict mapping from some general
|
|
||||||
category name, e.g. "object" to another mapping from STIX type
|
|
||||||
to a stix2 class.
|
|
||||||
"""
|
|
||||||
stix_vid = "v" + stix_version.replace(".", "")
|
|
||||||
cls_maps = mappings.STIX2_OBJ_MAPS[stix_vid]
|
|
||||||
|
|
||||||
return cls_maps
|
|
||||||
|
|
||||||
|
|
||||||
def is_sdo(value, stix_version=stix2.DEFAULT_VERSION):
|
def is_sdo(value, stix_version=stix2.DEFAULT_VERSION):
|
||||||
"""
|
"""
|
||||||
Determine whether the given object, type, or ID is/is for an SDO.
|
Determine whether the given object, type, or ID is/is for an SDO.
|
||||||
|
@ -369,7 +354,7 @@ def is_sdo(value, stix_version=stix2.DEFAULT_VERSION):
|
||||||
# Eventually this needs to be moved into the stix2 library (and maybe
|
# Eventually this needs to be moved into the stix2 library (and maybe
|
||||||
# improved?); see cti-python-stix2 github issue #450.
|
# improved?); see cti-python-stix2 github issue #450.
|
||||||
|
|
||||||
cls_maps = _get_stix2_class_maps(stix_version)
|
cls_maps = mappings.get_stix2_class_maps(stix_version)
|
||||||
type_ = _stix_type_of(value)
|
type_ = _stix_type_of(value)
|
||||||
result = type_ in cls_maps["objects"] and type_ not in {
|
result = type_ in cls_maps["objects"] and type_ not in {
|
||||||
"relationship", "sighting", "marking-definition", "bundle",
|
"relationship", "sighting", "marking-definition", "bundle",
|
||||||
|
@ -389,7 +374,7 @@ def is_sco(value, stix_version=stix2.DEFAULT_VERSION):
|
||||||
:return: True if the type of the given value is an SCO type; False
|
:return: True if the type of the given value is an SCO type; False
|
||||||
if not
|
if not
|
||||||
"""
|
"""
|
||||||
cls_maps = _get_stix2_class_maps(stix_version)
|
cls_maps = mappings.get_stix2_class_maps(stix_version)
|
||||||
type_ = _stix_type_of(value)
|
type_ = _stix_type_of(value)
|
||||||
result = type_ in cls_maps["observables"]
|
result = type_ in cls_maps["observables"]
|
||||||
|
|
||||||
|
@ -425,7 +410,7 @@ def is_object(value, stix_version=stix2.DEFAULT_VERSION):
|
||||||
:return: True if the type of the given value is a valid STIX type with
|
:return: True if the type of the given value is a valid STIX type with
|
||||||
respect to the given STIX version; False if not
|
respect to the given STIX version; False if not
|
||||||
"""
|
"""
|
||||||
cls_maps = _get_stix2_class_maps(stix_version)
|
cls_maps = mappings.get_stix2_class_maps(stix_version)
|
||||||
type_ = _stix_type_of(value)
|
type_ = _stix_type_of(value)
|
||||||
result = type_ in cls_maps["observables"] or type_ in cls_maps["objects"]
|
result = type_ in cls_maps["observables"] or type_ in cls_maps["objects"]
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue