pythonpython-dataclassesmarshmallow-dataclass

Can you have a conditional encoding dependent on whether a date time value is None?


Is it possible for the approver_time value to be encoded/ decoded only when the date time value is not set to None?

@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclasses.dataclass
class A:
    approver_time: datetime.datetime = field(default=None,
                                             metadata=config(
                                                 encoder=datetime.date.isoformat,
                                                 decoder=datetime.date.fromisoformat,
                                                 mm_field=fields.DateTime(format='iso')
                                             ))

Solution

  • Answered it by used of lambdas functions.

    @dataclass_json(letter_case=LetterCase.CAMEL)
    @dataclass_json
    @dataclasses.dataclass
    class A(Transfer):
        approver_time: datetime.datetime = field(metadata=config(
                                                     encoder=lambda x: datetime.datetime.isoformat
                                                     if x is not None else None,
                                                     decoder=lambda x: datetime.datetime.fromisoformat
                                                     if x is not None else None,
                                                     mm_field=fields.DateTime(format='iso')
                                                 ), default=None)