Skip to content

Commit 75dec68

Browse files
bokelleyclaude
andauthored
feat: improve type ergonomics for library consumers (#103)
* feat: improve type ergonomics for library consumers Add flexible input coercion for request types that reduces boilerplate when constructing API requests. All changes are backward compatible. Improvements: - Enum fields accept string values (e.g., type="video") - List[Enum] fields accept string lists (e.g., asset_types=["image", "video"]) - Context/Ext fields accept dicts (e.g., context={"key": "value"}) - FieldModel lists accept strings (e.g., fields=["creative_id", "name"]) - Sort fields accept string enums (e.g., field="name", direction="asc") - Subclass lists accepted without cast() for all major list fields Affected types: - ListCreativeFormatsRequest (type, asset_types, context, ext) - ListCreativesRequest (fields, context, ext, sort) - GetProductsRequest (context, ext) - PackageRequest (creatives, ext) - CreateMediaBuyRequest (packages, context, ext) - UpdateMediaBuyRequest.Packages (creatives, creative_assignments) The list variance issue is now fully resolved - users can pass list[Subclass] where list[BaseClass] is expected without needing cast(). Closes #102 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <[email protected]> * feat: auto-generate type coercion module from model introspection Replace manually-maintained _ergonomic.py with auto-generated version. The new script introspects Pydantic models at runtime to detect fields needing coercion, eliminating manual maintenance when schemas change. Changes: - Add scripts/generate_ergonomic_coercion.py for auto-generation - Integrate into generate_types.py pipeline - Add rationale comment explaining import-time patching choice - Remove unnecessary hasattr check in _patch_field_annotation - Discover additional coercion opportunities (pacing enum, packages list) The generator detects: - Enum fields -> string coercion - list[Enum] fields -> string list coercion - ContextObject/ExtensionObject -> dict coercion - list[BaseModel] fields -> subclass list coercion 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <[email protected]> * fix: use plain type: ignore for cross-version mypy compatibility Different Python/mypy versions report different error codes for the same type issues (return-value vs no-any-return). Using plain `# type: ignore` comments avoids unused-ignore errors across versions. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <[email protected]> --------- Co-authored-by: Claude Opus 4.5 <[email protected]>
1 parent ff82519 commit 75dec68

File tree

6 files changed

+1361
-1
lines changed

6 files changed

+1361
-1
lines changed

0 commit comments

Comments
 (0)