Source code for colander_data_converter.formats.stix2.models

from typing import Dict, Any, Optional, TYPE_CHECKING

from colander_data_converter.base.common import Singleton
from colander_data_converter.base.models import ColanderFeed

# Avoid circular imports
if TYPE_CHECKING:
    pass


[docs] class Stix2Repository(object, metaclass=Singleton): """ Singleton repository for managing and storing STIX2 objects. This class provides centralized storage and reference management for all STIX2 objects, supporting conversion to and from Colander data. """ stix2_objects: Dict[str, Dict[str, Any]] def __init__(self): """ Initializes the repository with an empty dictionary for STIX2 objects. """ self.stix2_objects = {}
[docs] def add_object(self, stix2_object: Dict[str, Any]) -> None: """ Adds a STIX2 object to the repository. Args: stix2_object (Dict[str, Any]): The STIX2 object to add. """ if "id" in stix2_object: self.stix2_objects[stix2_object["id"]] = stix2_object
[docs] def get_object(self, object_id: str) -> Optional[Dict[str, Any]]: """ Retrieves a STIX2 object from the repository by its ID. Args: object_id (str): The ID of the STIX2 object to retrieve. Returns: Optional[Dict[str, Any]]: The STIX2 object if found, None otherwise. """ return self.stix2_objects.get(object_id)
[docs] def clear(self) -> None: """ Clears all STIX2 objects from the repository. """ self.stix2_objects.clear()
[docs] class Stix2Converter: """ Converter for STIX2 data to Colander data and vice versa. Uses the mapping file to convert between formats. """
[docs] @staticmethod def stix2_to_colander(stix2_data: Dict[str, Any]) -> ColanderFeed: """ Converts STIX2 data to Colander data using the mapping file. Args: stix2_data (Dict[str, Any]): The STIX2 data to convert. Returns: ColanderFeed: The converted Colander data. """ # Import here to avoid circular imports from colander_data_converter.formats.stix2.converter import Stix2ToColanderMapper mapper = Stix2ToColanderMapper() return mapper.convert(stix2_data)
[docs] @staticmethod def colander_to_stix2(colander_feed: ColanderFeed) -> Dict[str, Any]: """ Converts Colander data to STIX2 data using the mapping file. Args: colander_feed (ColanderFeed): The Colander data to convert. Returns: Dict[str, Any]: The converted STIX2 data. """ # Import here to avoid circular imports from colander_data_converter.formats.stix2.converter import ColanderToStix2Mapper mapper = ColanderToStix2Mapper() return mapper.convert(colander_feed)