Skip to content

Registry

registry #

Functions:

Name Description
get_extractor

Retrieve a registered extractor for the given modality.

register_extractor

Register a modality extractor class in the global registry.

supported_modalities

List all registered modalities.

ExistingExtractorError #

ExistingExtractorError(
    modality: str,
    existing_extractor: typing.Type[
        imgtools.dicom.dicom_metadata.extractor_base.ModalityMetadataExtractor
    ],
)

Bases: Exception

Exception raised when trying to register an extractor for an already registered modality.

Source code in src/imgtools/dicom/dicom_metadata/registry.py
def __init__(
    self,
    modality: str,
    existing_extractor: Type[ModalityMetadataExtractor],
) -> None:
    self.modality = modality
    self.existing_extractor = existing_extractor
    super().__init__(
        f"Modality '{modality}' already registered by {existing_extractor.__name__}"
    )

get_extractor #

get_extractor(
    modality: str,
) -> typing.Type[
    imgtools.dicom.dicom_metadata.extractor_base.ModalityMetadataExtractor
]

Retrieve a registered extractor for the given modality.

Parameters:

Name Type Description Default

modality #

str

The DICOM modality string (e.g., "CT", "MR").

required

Returns:

Type Description
typing.Type[imgtools.dicom.dicom_metadata.extractor_base.ModalityMetadataExtractor]

The corresponding registered extractor class. If no extractor is registered for the modality, returns a FallbackMetadataExtractor.

Source code in src/imgtools/dicom/dicom_metadata/registry.py
def get_extractor(modality: str) -> Type[ModalityMetadataExtractor]:
    """
    Retrieve a registered extractor for the given modality.

    Parameters
    ----------
    modality : str
        The DICOM modality string (e.g., "CT", "MR").

    Returns
    -------
    Type[ModalityMetadataExtractor]
        The corresponding registered extractor class.
        If no extractor is registered for the modality, returns a FallbackMetadataExtractor.
    """
    x = _EXTRACTOR_REGISTRY.get(modality.upper(), None)
    if not x:
        from imgtools.dicom.dicom_metadata.extractors import (
            FallbackMetadataExtractor,
        )

        x = FallbackMetadataExtractor
    return x

register_extractor #

register_extractor(
    cls: typing.Type[
        imgtools.dicom.dicom_metadata.extractor_base.ModalityMetadataExtractor
    ],
) -> typing.Type[
    imgtools.dicom.dicom_metadata.extractor_base.ModalityMetadataExtractor
]

Register a modality extractor class in the global registry.

Parameters:

Name Type Description Default

cls #

typing.Type[imgtools.dicom.dicom_metadata.extractor_base.ModalityMetadataExtractor]

The subclass to register.

required

Returns:

Type Description
typing.Type[imgtools.dicom.dicom_metadata.extractor_base.ModalityMetadataExtractor]

The class itself (unchanged), for use as a decorator.

Source code in src/imgtools/dicom/dicom_metadata/registry.py
def register_extractor(
    cls: Type[ModalityMetadataExtractor],
) -> Type[ModalityMetadataExtractor]:
    """
    Register a modality extractor class in the global registry.

    Parameters
    ----------
    cls : Type[ModalityMetadataExtractor]
        The subclass to register.

    Returns
    -------
    Type[ModalityMetadataExtractor]
        The class itself (unchanged), for use as a decorator.
    """
    modality = cls.modality().upper()
    if modality in _EXTRACTOR_REGISTRY:
        raise ExistingExtractorError(modality, _EXTRACTOR_REGISTRY[modality])
    _EXTRACTOR_REGISTRY[modality] = cls
    return cls

supported_modalities #

supported_modalities() -> list[str]

List all registered modalities.

Returns:

Type Description
list[str]

Sorted list of supported modality names.

Source code in src/imgtools/dicom/dicom_metadata/registry.py
def supported_modalities() -> list[str]:
    """
    List all registered modalities.

    Returns
    -------
    list[str]
        Sorted list of supported modality names.
    """
    return sorted(_EXTRACTOR_REGISTRY.keys())