python-attrs / attrs

Python Classes Without Boilerplate

Home Page:https://www.attrs.org/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

pyright change breaks intended usage of attrs.NOTHING

Sharp-Eyes opened this issue · comments

attrs,Nothing is intended to be used as typing.Literal[NOTHING] as denoted in attr._make._Nothing. As of pyright version 1.1.371, this no longer works. As per microsoft/pyright#8820, this is an intentional change, and while it's a little unfortunate, it does make sense.

I think a sensible solution would be to expose attr._make._Nothing (for example by removing the leading underscore and exposing it in the relevant __init__.py files) and changing the intended usage to be something along the lines of

def foo(x: int | None | attrs.Nothing = attrs.NOTHING):
    ...

though this would be a somewhat breaking change; maybe it could be re-exported as a type alias instead.

Of course, there may very well be a better alternative that satisfies pyright that I have missed.