Skip to content

Commit a3d979a

Browse files
committed
fix(icij-common): serialize registered name
1 parent 6822a7c commit a3d979a

3 files changed

Lines changed: 39 additions & 6 deletions

File tree

icij-common/icij_common/registrable.py

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -136,11 +136,7 @@ def list_available(cls) -> list[str]:
136136
@classmethod
137137
@property
138138
def registered_name(cls) -> str:
139-
for (
140-
names
141-
) in (
142-
RegistrableMixin._registered_names.values()
143-
): # pylint: disable=protected-access
139+
for names in RegistrableMixin._registered_names.values(): # pylint: disable=protected-access
144140
name = names.get(cls)
145141
if name is not None:
146142
return name
@@ -169,6 +165,20 @@ def deserialize_with_registry_key(
169165
return handler(value)
170166
return handler(value)
171167

168+
@model_serializer(mode="wrap")
169+
def serialize_with_registry_key(
170+
self,
171+
handler: SerializerFunctionWrapHandler,
172+
info: SerializationInfo, # pylint: disable=unused-argument
173+
) -> dict:
174+
data = handler(self)
175+
registry_key = self.__class__.registry_key.default
176+
registry_value = getattr(self, registry_key)
177+
if isinstance(registry_value, FieldInfo):
178+
registry_value = registry_value.default
179+
data[registry_key] = registry_value
180+
return data
181+
172182

173183
class RegistrableSettings(RegistrableConfig, BaseSettings):
174184
model_config = merge_configs(

icij-common/pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "icij-common"
3-
version = "0.8.0"
3+
version = "0.8.1"
44
description = "Common utils for ICIJ libs"
55
authors = [
66
{ name = "Clément Doumouro", email = "cdoumouro@icij.org" },

icij-common/tests/test_registerable.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,3 +134,26 @@ def _from_config(cls, config: RegistrableConfig, **extras) -> Registered:
134134
assert isinstance(instance, Registered)
135135

136136
assert instance.some_attr == "some_value"
137+
138+
139+
def test_serialize_with_registry_key() -> None:
140+
# Given
141+
142+
class _MockedBaseClassConfig(RegistrableConfig):
143+
registry_key: ClassVar[str] = Field(frozen=True, default="some_key")
144+
145+
class _MockConfig(_MockedBaseClassConfig):
146+
some_key: ClassVar[str] = Field(frozen=True, default="registered")
147+
some_attr: str
148+
149+
instance_config = _MockConfig(some_attr="some_value")
150+
151+
# When
152+
serialized = instance_config.model_dump_json(indent=2)
153+
154+
# Then
155+
expected = """{
156+
"some_attr": "some_value",
157+
"some_key": "registered"
158+
}"""
159+
assert serialized == expected

0 commit comments

Comments
 (0)