posit-dev / py-htmltools

Tools for HTML generation and output
MIT License
19 stars 2 forks source link

Allow arbitrary attributes in `HTMLDependency`'s `stylesheet` and `script` objects #83

Open gadenbuie opened 5 months ago

gadenbuie commented 5 months ago

I appreciate the effort in this type (and the one for script objects as well), but I think it might be overly limiting.

https://github.com/posit-dev/py-htmltools/blob/a3a98259ee4c5164763a6f70b86e531c13a5bcc1/htmltools/_core.py#L1322-L1341

I recently wanted to add a data- attribute to the <link> tag for a set of stylesheets in the shinyswatch HTMLDependency. I was pleased that stylesheet implementation lets me pass arbitrary attributes, but I had to disable type checking for the input.

I also noticed that the presence of these types did not lead to any hints in the IDE, just type errors when checked. That might be a configuration issue on my end, or it might signal that the type annotation isn't as useful as expected.

Personally, I think the TagAttrValues type would balance flexibility and type checking.

wch commented 5 months ago

I think that we can allow other attributes with the new __extra_items__ syntax as described in https://peps.python.org/pep-0728/.

One of the useful things about the typed dictionaries is that they will tell you if you're missing a required field. The non-required fields can be useful for autocompletion.

image

(An aside: I can't remember why they're built the way they are, by combining two TypedDicts, one with required fields and one with non-required fields, instead of a single TypedDict with NotRequired for some of the fields. Perhaps this code was written before NotRequired was available?)

gadenbuie commented 5 months ago

Oh I see, the part I was missing is that you have to open the dictionary key "" to trigger the autocomplete.