Skip to content

Enums (CreativeAction, CreativeStatus, etc.) should be StrEnum, not Enum #913

@KonstantinMirin

Description

@KonstantinMirin

Problem

All generated enums in adcp.types are plain Enum, not StrEnum:

from adcp.types import CreativeAction, CreativeStatus, MediaBuyStatus, DeliveryStatus
import enum

for cls in [CreativeAction, CreativeStatus, MediaBuyStatus, DeliveryStatus]:
    print(f"{cls.__name__}: {cls.__bases__}")
    # (<enum 'Enum'>,)  -- NOT StrEnum

This causes silent equality failures when model fields are typed as CreativeAction | str (which many are in SDK 5.7). The model stores raw strings, but downstream code compares against enum members:

from adcp.types.generated_poc.creative.sync_creatives_response import Creative

c = Creative(creative_id="c1", action="created")
print(c.action == CreativeAction.created)  # False!
print(type(c.action))  # <class 'str'>

With StrEnum, "created" == CreativeAction.created would return True because StrEnum inherits from str.

Impact

  • SyncCreativesResponse.__str__ counted zero creatives (all comparisons returned False)
  • Every if result.action == CreativeAction.failed guard in production code silently fails when the value is a raw string
  • 134 comparison sites in our codebase affected

Expected

Generated enums should use StrEnum (Python 3.11+) or str, Enum mixin:

class CreativeAction(StrEnum):
    created = "created"
    updated = "updated"
    ...

This is a datamodel-codegen config issue — the enum_field_as_literal or base class setting.

Environment

  • adcp SDK: 5.7.0
  • Python: 3.12
  • Pydantic: 2.12

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions