Skip to content

enum.Enum serialization strategy #298

@kdkavanagh

Description

@kdkavanagh

I'm trying to override Mashurmaro's behavior for serializing any/all enum fields, however it only seems to take effect if I configure the strategy for specific enum types. Is there a way to register/override the behavior for anything inheriting from enum.Enum?

class EnumSerializer(SerializationStrategy):
    def serialize(self, value: enum.Enum):
        return f"{fully_qualified_typename(type(value))}.{value.name}"

    def deserialize(self, value: str) -> enum.Enum:
        module, class_name, variant_name = value.rsplit(".", 2)
        import importlib

        mod = importlib.import_module(module)
        return getattr(mod, class_name)[variant_name]

class MyEnum(enum.Enum):
  A=1
  B=2

@dataclass
class MyClass:
  field_one: MyEnum = MyEnum.A
  class BaseConfig(MashBaseConfig):
    serialization_strategy = {
        enum.Enum: EnumSerializer(),
    }
  

To yaml would yield:

field_one: my.module.MyEnum.A

instead of the default:

field_one: 1

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions