word_db: serialize correctly
This commit is contained in:
parent
b086b9a08d
commit
a9c3c90405
1 changed files with 35 additions and 2 deletions
|
@ -36,6 +36,15 @@ class Nom(t.NamedTuple):
|
|||
"""Accorde en nombre"""
|
||||
return getattr(self, nombre.name.lower())
|
||||
|
||||
@property
|
||||
def serialized(self):
|
||||
return {"genre": self.genre.name, "sing": self.sing, "plur": self.plur}
|
||||
|
||||
@classmethod
|
||||
def unserialized(cls, **kwargs):
|
||||
genre = Genre(kwargs.pop("genre"))
|
||||
return cls(**kwargs, genre=genre)
|
||||
|
||||
|
||||
class Adjectif(t.NamedTuple):
|
||||
masc_sing: str
|
||||
|
@ -50,6 +59,14 @@ class Adjectif(t.NamedTuple):
|
|||
"""Accorde en genre et en nombre"""
|
||||
return getattr(self, f"{genre.name.lower()}_{nombre.name.lower()}")
|
||||
|
||||
@property
|
||||
def serialized(self):
|
||||
return self._asdict()
|
||||
|
||||
@classmethod
|
||||
def unserialized(cls, **kwargs):
|
||||
return cls(**kwargs)
|
||||
|
||||
|
||||
class Verbe(t.NamedTuple):
|
||||
present_sing: str
|
||||
|
@ -66,6 +83,14 @@ class Verbe(t.NamedTuple):
|
|||
"""Accorde en temps et en nombre (seule la 3è pers. est utilisée)"""
|
||||
return getattr(self, f"{temps.name.lower()}_{nombre.name.lower()}")
|
||||
|
||||
@property
|
||||
def serialized(self):
|
||||
return self._asdict()
|
||||
|
||||
@classmethod
|
||||
def unserialized(cls, **kwargs):
|
||||
return cls(**kwargs)
|
||||
|
||||
|
||||
class Adverbe(t.NamedTuple):
|
||||
"""Packed as named tuple for consistence"""
|
||||
|
@ -79,6 +104,14 @@ class Adverbe(t.NamedTuple):
|
|||
"""for consistence"""
|
||||
return self.adv
|
||||
|
||||
@property
|
||||
def serialized(self):
|
||||
return self._asdict()
|
||||
|
||||
@classmethod
|
||||
def unserialized(cls, **kwargs):
|
||||
return cls(**kwargs)
|
||||
|
||||
|
||||
class WordDb:
|
||||
"""Base de donnée de mots, sérialisable"""
|
||||
|
@ -117,7 +150,7 @@ class WordDb:
|
|||
def serialize(self) -> dict:
|
||||
"""Serialize to plain dictionary (no classes)"""
|
||||
return {
|
||||
attr: [x._asdict() for x in getattr(self, attr)]
|
||||
attr: [x.serialized for x in getattr(self, attr)]
|
||||
for attr in self.__class__._serialize_data
|
||||
}
|
||||
|
||||
|
@ -131,7 +164,7 @@ class WordDb:
|
|||
"""Reverses :serialize:"""
|
||||
parsed = {}
|
||||
for attr, attr_cls in cls._serialize_data.items():
|
||||
parsed[attr] = list(map(attr_cls, data[attr]))
|
||||
parsed[attr] = list(map(attr_cls.unserialized, data[attr]))
|
||||
return cls(**parsed)
|
||||
|
||||
@classmethod
|
||||
|
|
Loading…
Reference in a new issue