Source code for esrf_pathlib._schemas.identifier

from collections.abc import Hashable
from typing import Any
from typing import Union


[docs] class SchemaIdentifier(Hashable): """Identifier of a single schema or the merger of several schemas.""" def __init__(self, **schema_versions: int) -> None: if not schema_versions: raise ValueError("At least one schema must be provided") self._schema_versions = schema_versions names = list(schema_versions) versions = list(schema_versions.values()) full_names = [ f"{sname}_v{sversion}" for sname, sversion in schema_versions.items() ] if len(names) == 1: self._name = names[0] self._version = versions[0] self._full_name = full_names[0] else: self._name = "+".join(names) self._version = 0 self._full_name = "+".join(full_names) self._names = names self._full_names = full_names self._hash = hash(tuple(sorted(schema_versions.items()))) def __hash__(self) -> int: return self._hash def __eq__(self, value: Any) -> bool: if isinstance(value, (str, SchemaIdentifier)): return str(self) == str(value) return super().__eq__(value) @property def name(self) -> str: return self._name @property def version(self) -> int: return self._version def __repr__(self) -> str: return f"<{type(self).__name__} {self._full_name!r}>" def __str__(self) -> str: return self._full_name
[docs] def has_identifier(self, identifier: Union[str, "SchemaIdentifier"]) -> bool: return str(identifier) in self._full_names