registry.py 650 B

123456789101112131415161718192021222324
  1. from __future__ import annotations
  2. from abc import ABCMeta
  3. SCHEMES: dict[str, StorageRegistry] = {}
  4. class StorageRegistry(ABCMeta):
  5. def __new__(
  6. mcs, name: str, bases: tuple[type, ...], dct: dict[str, str | list[str]]
  7. ) -> StorageRegistry:
  8. storage_scheme = dct.get("STORAGE_SCHEME", None)
  9. cls = super().__new__(mcs, name, bases, dct)
  10. if storage_scheme:
  11. if isinstance(storage_scheme, str): # noqa
  12. schemes = [storage_scheme]
  13. else:
  14. schemes = storage_scheme
  15. for scheme in schemes:
  16. SCHEMES[scheme] = cls
  17. return cls