-
-
Notifications
You must be signed in to change notification settings - Fork 100
Closed
Description
Just a small quality of life improvement.
As I'm using more features from v0.140 in my project, I notice that there's some code duplication when defining kwargs and their defaults:
@register("Autocomplete")
class Autocomplete(Component):
template_file = "autocomplete.html"
js_file = "autocomplete.js"
class Kwargs(BaseModel):
name: str | None = None
editable: bool | None = None
multiple: bool | None = None
selected_items: list[AutocompleteItem] | None = None
max_width: int | str | None = None
placeholder: str | None = None
attrs: dict | None = None
js: dict | None = None
class Defaults:
name = "value"
max_width = "300px"
placeholder = "Search..."
js = Default(lambda: {})
editable = TrueFrom implementation's perspective this makes sense - we (DJC) cannot assume what class will Kwargs class. Maybe it will contain defaults, may it won't.
But in real world usage, I assume that Kwargs will be mostly like one of 3 kinds:
- NamedTuple
- Dataclass
- Pydantic model
So I think we could add support for these, such that the above could be condensed into
@register("Autocomplete")
class Autocomplete(Component):
template_file = "autocomplete.html"
js_file = "autocomplete.js"
class Kwargs(BaseModel):
name: str | None = "value"
editable: bool | None = True
multiple: bool | None = None
selected_items: list[AutocompleteItem] | None = None
max_width: int | str | None = "300px"
placeholder: str | None = "Search..."
attrs: dict | None = None
js: dict | None = Field(default_factory=lambda: {})Since Pydantic is a 3rd party, I'm thinking:
NamedTupleand dataclass support should be implemented in core DJC- Pydantic model support should live in
djc-ext-pydantic
Metadata
Metadata
Assignees
Type
Projects
Status
Done