dataclass-extensions 0.2.7__tar.gz → 0.2.8__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {dataclass_extensions-0.2.7 → dataclass_extensions-0.2.8}/PKG-INFO +1 -1
- {dataclass_extensions-0.2.7 → dataclass_extensions-0.2.8}/src/dataclass_extensions/registrable.py +13 -19
- dataclass_extensions-0.2.8/src/dataclass_extensions/version.py +1 -0
- {dataclass_extensions-0.2.7 → dataclass_extensions-0.2.8}/src/dataclass_extensions.egg-info/PKG-INFO +1 -1
- dataclass_extensions-0.2.7/src/dataclass_extensions/version.py +0 -1
- {dataclass_extensions-0.2.7 → dataclass_extensions-0.2.8}/LICENSE +0 -0
- {dataclass_extensions-0.2.7 → dataclass_extensions-0.2.8}/README.md +0 -0
- {dataclass_extensions-0.2.7 → dataclass_extensions-0.2.8}/pyproject.toml +0 -0
- {dataclass_extensions-0.2.7 → dataclass_extensions-0.2.8}/setup.cfg +0 -0
- {dataclass_extensions-0.2.7 → dataclass_extensions-0.2.8}/src/dataclass_extensions/__init__.py +0 -0
- {dataclass_extensions-0.2.7 → dataclass_extensions-0.2.8}/src/dataclass_extensions/decode.py +0 -0
- {dataclass_extensions-0.2.7 → dataclass_extensions-0.2.8}/src/dataclass_extensions/encode.py +0 -0
- {dataclass_extensions-0.2.7 → dataclass_extensions-0.2.8}/src/dataclass_extensions/py.typed +0 -0
- {dataclass_extensions-0.2.7 → dataclass_extensions-0.2.8}/src/dataclass_extensions/types.py +0 -0
- {dataclass_extensions-0.2.7 → dataclass_extensions-0.2.8}/src/dataclass_extensions/utils.py +0 -0
- {dataclass_extensions-0.2.7 → dataclass_extensions-0.2.8}/src/dataclass_extensions.egg-info/SOURCES.txt +0 -0
- {dataclass_extensions-0.2.7 → dataclass_extensions-0.2.8}/src/dataclass_extensions.egg-info/dependency_links.txt +0 -0
- {dataclass_extensions-0.2.7 → dataclass_extensions-0.2.8}/src/dataclass_extensions.egg-info/requires.txt +0 -0
- {dataclass_extensions-0.2.7 → dataclass_extensions-0.2.8}/src/dataclass_extensions.egg-info/top_level.txt +0 -0
{dataclass_extensions-0.2.7 → dataclass_extensions-0.2.8}/src/dataclass_extensions/registrable.py
RENAMED
|
@@ -17,6 +17,8 @@ if sys.version_info < (3, 11):
|
|
|
17
17
|
class Registrable:
|
|
18
18
|
_registry: ClassVar[dict[str, Type[Registrable]]]
|
|
19
19
|
_default_type: ClassVar[str | None]
|
|
20
|
+
registered_name: ClassVar[str | None]
|
|
21
|
+
registered_base: ClassVar[Type[Registrable] | None]
|
|
20
22
|
|
|
21
23
|
type: dataclasses.InitVar[str | None] = dataclasses.field(
|
|
22
24
|
default=None, kw_only=True, repr=False
|
|
@@ -24,16 +26,14 @@ class Registrable:
|
|
|
24
26
|
|
|
25
27
|
def __new__(cls, *args, type: str | None = None, **kwargs):
|
|
26
28
|
del args, kwargs
|
|
27
|
-
if type is not None and
|
|
28
|
-
not hasattr(cls, "registered_name") or type != cls.registered_name # type: ignore
|
|
29
|
-
):
|
|
29
|
+
if type is not None and type != cls.registered_name:
|
|
30
30
|
if type not in cls._registry:
|
|
31
31
|
raise KeyError(
|
|
32
32
|
f"'{type}' is not registered name for {cls.__name__}. "
|
|
33
33
|
f"Available choices are: {list(cls._registry.keys())}"
|
|
34
34
|
)
|
|
35
35
|
return super().__new__(cls._registry[type])
|
|
36
|
-
elif cls._default_type is not None and
|
|
36
|
+
elif cls._default_type is not None and cls.registered_name is None:
|
|
37
37
|
return super().__new__(cls._registry[cls._default_type])
|
|
38
38
|
else:
|
|
39
39
|
return super().__new__(cls)
|
|
@@ -44,6 +44,10 @@ class Registrable:
|
|
|
44
44
|
cls._registry = {}
|
|
45
45
|
if not hasattr(cls, "_default_type"):
|
|
46
46
|
cls._default_type = None
|
|
47
|
+
if not hasattr(cls, "registered_name"):
|
|
48
|
+
cls.registered_name = None
|
|
49
|
+
if not hasattr(cls, "registered_base"):
|
|
50
|
+
cls.registered_base = None
|
|
47
51
|
|
|
48
52
|
@classmethod
|
|
49
53
|
def register(cls, name: str, default: bool = False) -> Callable[[Type[R]], Type[R]]:
|
|
@@ -64,28 +68,18 @@ class Registrable:
|
|
|
64
68
|
else:
|
|
65
69
|
cls._default_type = name
|
|
66
70
|
|
|
67
|
-
fields = [
|
|
68
|
-
(f.name, f.type, f) for f in dataclasses.fields(subclass) if f.name != "type" # type: ignore
|
|
69
|
-
] + [
|
|
70
|
-
("registered_name", ClassVar[str], name), # type: ignore
|
|
71
|
-
("registered_base", ClassVar[R], cls), # type: ignore
|
|
72
|
-
("type", dataclasses.InitVar[str | None], dataclasses.field(default=name, kw_only=True, repr=False)), # type: ignore
|
|
73
|
-
]
|
|
74
|
-
subclass = dataclasses.make_dataclass(
|
|
75
|
-
subclass.__name__,
|
|
76
|
-
fields, # type: ignore
|
|
77
|
-
bases=(subclass,),
|
|
78
|
-
)
|
|
79
71
|
cls._registry[name] = subclass
|
|
80
|
-
|
|
72
|
+
subclass.registered_name = name
|
|
73
|
+
subclass.registered_base = cls
|
|
74
|
+
return subclass # type: ignore
|
|
81
75
|
|
|
82
76
|
return register_subclass
|
|
83
77
|
|
|
84
78
|
@classmethod
|
|
85
79
|
def get_registered_name(cls: Type[R], subclass: Type[R] | None = None) -> str:
|
|
86
80
|
if subclass is None:
|
|
87
|
-
if
|
|
88
|
-
return cls.registered_name
|
|
81
|
+
if cls.registered_name is not None:
|
|
82
|
+
return cls.registered_name
|
|
89
83
|
else:
|
|
90
84
|
raise ValueError(
|
|
91
85
|
f"class {cls.__name__} is not a registered subclass of any base registrable class"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
VERSION = "0.2.8"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
VERSION = "0.2.7"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dataclass_extensions-0.2.7 → dataclass_extensions-0.2.8}/src/dataclass_extensions/__init__.py
RENAMED
|
File without changes
|
{dataclass_extensions-0.2.7 → dataclass_extensions-0.2.8}/src/dataclass_extensions/decode.py
RENAMED
|
File without changes
|
{dataclass_extensions-0.2.7 → dataclass_extensions-0.2.8}/src/dataclass_extensions/encode.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|