Skip to content

Registry

The generic data-registry infrastructure that every ISO builds on. DataDefinition is a frozen dataclass holding file metadata (extension, directory name, prefix/suffix). DataRegistry is a generic class parameterized over a StrEnum data-type and a DataDefinition subclass, providing lookup methods and ordered-unique collection across registry entries.

Each ISO subclasses DataDefinition to add fields like reader_type, processed_bindings, and url_endpoint, and subclasses DataRegistry to populate its _registry class variable.

Classes

DataDefinition dataclass

DataDefinition(file_extension: str, dir_name: str, title: str = '', description: str = '', file_prefix: str = '', file_suffix: str = '')

Data definition for ISO data types and file mappings.

DataRegistry

Generic base class for ISO data registries.

Functions

collect_ordered_unique classmethod
collect_ordered_unique(extractor: Callable[[T_DataType, T_Definition], Iterable[T_Collected]], data_types: Iterable[T_DataType] | None = None) -> tuple[T_Collected, ...]

Collect ordered unique values across registry definitions.

Source code in src/progridpy/common/registry.py
@classmethod
def collect_ordered_unique[T_Collected: Hashable](
    cls,
    extractor: Callable[[T_DataType, T_Definition], Iterable[T_Collected]],
    data_types: Iterable[T_DataType] | None = None,
) -> tuple[T_Collected, ...]:
    """Collect ordered unique values across registry definitions."""
    selected_types = tuple(data_types) if data_types is not None else tuple(cls.list_available_types())
    seen: set[T_Collected] = set()
    collected: list[T_Collected] = []

    for data_type in selected_types:
        data_def = cls.get_definition(data_type)
        for value in extractor(data_type, data_def):
            if value in seen:
                continue
            seen.add(value)
            collected.append(value)

    return tuple(collected)