Skip to content

Commit 2aa59d8

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

3 files changed

Lines changed: 38 additions & 1 deletion

File tree

icij-common/icij_common/registrable.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,20 @@ def deserialize_with_registry_key(
169169
return handler(value)
170170
return handler(value)
171171

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

173187
class RegistrableSettings(RegistrableConfig, BaseSettings):
174188
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)