A possible suggestion for your problem:
On strawberry-graphql we have a solution for that, by annotating the field
with "strawberry.Private"[1], like this:
@strawberry.type
class Foo:
str_attr: str
str_private_attr: Private[str]
That Private is defined as:
Private = Annotated[T, StrawberryPrivate()]
Meaning we could also do "str_private_attr: Annotated[str,
StrawberryPrivate()]"
When introspecting the dataclass fields to generate the graphql schema, we
will check if the annotation is annotated, and if it is and contains a
"StrawberryPrivate()" instance in its __args__, we will exclude that field
from the graphql API.
[1]
https://github.com/strawberry-graphql/strawberry/blob/main/strawberry/private.py
On Fri, Jun 23, 2023 at 10:32 AM Joao S. O. Bueno <[email protected]> wrote:
>
>
> On Fri, Jun 23, 2023 at 2:35 AM Jelle Zijlstra <[email protected]>
> wrote:
>
>>
>>
>> El jue, 22 jun 2023 a las 8:22, Randolf Scholz (<[email protected]>)
>> escribió:
>>
>>> Dataclasses should provide a way to ignore a type hinted attributes, and
>>> not consider them as fields.
>>>
>>> For example, some attributes might be derived during `__post_init__`
>>> from the values of the fields or other variables.
>>>
>>> If one wants to still type hint these attributes, one has to awkward
>>> workarounds to avoid having dataclass interpret them as fields. (
>>> https://stackoverflow.com/questions/76532816)
>>>
>>> I propose `NON_FIELDS` sentinel, analogous to `KW_ONLY`. (alternative
>>> name suggestions welcome). when writing a dataclass, all attributes after
>>> this sentinel are ignored and not considered fields.
>>>
>>> ```
>>> @dataclass
>>> class Foo:
>>> field0: int
>>> field1: int
>>>
>>> _: KW_ONLY
>>>
>>> fieldN: int
>>>
>>> _: NON_FIELDS
>>>
>>> attr0: int # @dataclass will ignore this type hint.
>>>
>>
>> How is this different from `attr0: int = field(init=False)`?
>>
>
> attr0 would be listed as a `field` in the introspectable attributes of the
> dataclass in this way.
> That is why I did not suggest that in my initial answer to Randolf on
> stackoverflow:
>
> https://stackoverflow.com/questions/76532816/type-hint-extra-attributes-not-fields/76533091#76533091
>
> I like the dataclasses.attribute idea, though - (but it will also require
> static type checking tools to review their
> dataclass special casing - it looks like there is no escape from that).
>
>
>
>>
>>
>>> ```
>>>
>>> Additionally one could consider adding an `attribute` typing construct,
>>> such that `attr0: attribute[int]` would mark it as a non-field attribute.
>>> _______________________________________________
>>> Python-ideas mailing list -- [email protected]
>>> To unsubscribe send an email to [email protected]
>>> https://mail.python.org/mailman3/lists/python-ideas.python.org/
>>> Message archived at
>>> https://mail.python.org/archives/list/[email protected]/message/P67URFV2JJRFD6J5TXD44EEBO4IRTEYF/
>>> Code of Conduct: http://python.org/psf/codeofconduct/
>>>
>> _______________________________________________
>> Python-ideas mailing list -- [email protected]
>> To unsubscribe send an email to [email protected]
>> https://mail.python.org/mailman3/lists/python-ideas.python.org/
>> Message archived at
>> https://mail.python.org/archives/list/[email protected]/message/HS5E5XNHKLO47Q6UPF5QVUCIK2FR6VSF/
>> Code of Conduct: http://python.org/psf/codeofconduct/
>>
> _______________________________________________
> Python-ideas mailing list -- [email protected]
> To unsubscribe send an email to [email protected]
> https://mail.python.org/mailman3/lists/python-ideas.python.org/
> Message archived at
> https://mail.python.org/archives/list/[email protected]/message/C5QJQT5YV7UOKFF57PWD4VSF4RWUDOSF/
> Code of Conduct: http://python.org/psf/codeofconduct/
>
--
Thiago Bellini Ribeiro | https://bellini.dev
_______________________________________________
Python-ideas mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at
https://mail.python.org/archives/list/[email protected]/message/PYH5DM6EMZAIB3ZTLG5WLPYTGZTBTLQZ/
Code of Conduct: http://python.org/psf/codeofconduct/