Version 0.19.1 breaks default_factory that returns empty list #1349
-
First Check
Commit to Help
Example Codefrom dataclasses import dataclass from typing import Annotated import typer app = typer.Typer() def default_classes() -> list[str]: return [] @app.command() @dataclass class TestCommandd: classes: Annotated[ list[str], typer.Option( default_factory=default_classes, help="List of classes.", rich_help_panel="Options", show_default=False, ), ] def __post_init__(self) -> None: print(self.classes) if __name__ == "__main__": app()DescriptionHi, I found a for me quite breaking change, probably cause I use it a bit unconventional:D In typer version 0.19.0 this returns [] as wanted. In version 0.19.1 this returns the function instead. cheers Operating SystemLinux Operating System DetailsNo response Typer Version0.19.0 and 0.19.1 Python Version3.13.5 Additional ContextNo response |
Beta Was this translation helpful? Give feedback.
Replies: 3 comments 2 replies
-
| The same without from typing import Annotated import typer app = typer.Typer() def default_classes() -> list[str]: return [] @app.command() def cmd( classes: Annotated[ list[str], typer.Option( default_factory=default_classes, ), ] ): print(classes) # <function default_classes at 0x736d4dfba340> if __name__ == "__main__": app() |
Beta Was this translation helpful? Give feedback.
-
| Thanks for the report! You're right that this broke accidentally in PR #1018 - I'll be looking into it. |
Beta Was this translation helpful? Give feedback.
-
| PR with some additional background & analysis, and a fix for this regression: #1350 |
Beta Was this translation helpful? Give feedback.
PR with some additional background & analysis, and a fix for this regression: #1350