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):
|
||||
raise ValueError("Property name '%s' must begin with an alpha character." % prop_name)
|
||||
|
||||
if version:
|
||||
v = 'v' + version.replace('.', '')
|
||||
else:
|
||||
# Use default version (latest) if no version was provided.
|
||||
v = 'v' + DEFAULT_VERSION.replace('.', '')
|
||||
class_maps = registry.get_stix2_class_maps(
|
||||
version or DEFAULT_VERSION
|
||||
)
|
||||
|
||||
OBJ_MAP_MARKING = registry.STIX2_OBJ_MAPS[v]['markings']
|
||||
OBJ_MAP_MARKING = class_maps['markings']
|
||||
if mark_type in OBJ_MAP_MARKING.keys():
|
||||
raise DuplicateRegistrationError("STIX Marking", mark_type)
|
||||
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,
|
||||
)
|
||||
|
||||
if version:
|
||||
v = 'v' + version.replace('.', '')
|
||||
else:
|
||||
# Use default version (latest) if no version was provided.
|
||||
v = 'v' + DEFAULT_VERSION.replace('.', '')
|
||||
class_maps = registry.get_stix2_class_maps(
|
||||
version or DEFAULT_VERSION
|
||||
)
|
||||
|
||||
OBJ_MAP_OBSERVABLE = registry.STIX2_OBJ_MAPS[v]['observables']
|
||||
OBJ_MAP_OBSERVABLE = class_maps['observables']
|
||||
if new_observable._type in OBJ_MAP_OBSERVABLE.keys():
|
||||
raise DuplicateRegistrationError("Cyber Observable", new_observable._type)
|
||||
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):
|
||||
raise ValueError("Property name '%s' must begin with an alpha character." % prop_name)
|
||||
|
||||
v = 'v' + version.replace('.', '')
|
||||
|
||||
try:
|
||||
observable_type = observable._type
|
||||
except AttributeError:
|
||||
|
@ -192,8 +186,9 @@ def _register_observable_extension(
|
|||
"created with the @CustomObservable decorator.",
|
||||
)
|
||||
|
||||
OBJ_MAP_OBSERVABLE = registry.STIX2_OBJ_MAPS[v]['observables']
|
||||
EXT_MAP = registry.STIX2_OBJ_MAPS[v]['observable-extensions']
|
||||
class_maps = registry.get_stix2_class_maps(version)
|
||||
OBJ_MAP_OBSERVABLE = class_maps['observables']
|
||||
EXT_MAP = class_maps['observable-extensions']
|
||||
|
||||
try:
|
||||
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:
|
||||
mod = importlib.import_module(name, str(top_level_module.__name__))
|
||||
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_
|
||||
|
||||
|
||||
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):
|
||||
"""
|
||||
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
|
||||
# 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)
|
||||
result = type_ in cls_maps["objects"] and type_ not in {
|
||||
"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
|
||||
if not
|
||||
"""
|
||||
cls_maps = _get_stix2_class_maps(stix_version)
|
||||
cls_maps = mappings.get_stix2_class_maps(stix_version)
|
||||
type_ = _stix_type_of(value)
|
||||
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
|
||||
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)
|
||||
result = type_ in cls_maps["observables"] or type_ in cls_maps["objects"]
|
||||
|
||||
|
|
Loading…
Reference in New Issue