-
-
Notifications
You must be signed in to change notification settings - Fork 30.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
How to convert annotations to Format.SOURCE
in __annotate__
?
#124412
Comments
The use cases for this would be cases where types get provided outside annotations (e.g., with the functional syntax for The implementation is Since we already have use cases from two standard library modules (typing and dataclasses), I think it makes sense to add something to
|
I want to investigate on this feature, because I still have a limited understanding of Will probably work on this tomorrow 👍 |
Thanks! We'll also want to add the new functions to PEP 749. |
We also need this in annotationlib itself, for the edge case where a user-created object has
I think the most reasonable behavior for this case is to return |
My initial reaction is, this seems like a least-worst option, and it may even be the least-worst option. I'd like to marinate on it further. I won't mind too much if you go ahead and merge without my blessing--as long as you don't mind me retroactively pushing back if I (eventually) arrive at some other conclusion. |
I will say, shenanigans like this are an argument against calling this format |
* main: (69 commits) Add "annotate" SET_FUNCTION_ATTRIBUTE bit to dis. (python#124566) pythongh-124412: Add helpers for converting annotations to source format (python#124551) pythongh-119180: Disallow instantiation of ConstEvaluator objects (python#124561) For-else deserves its own section in the tutorial (python#123946) Add 3.13 as a version option to the crash issue template (python#124560) pythongh-123242: Note that type.__annotations__ may not exist (python#124557) pythongh-119180: Make FORWARDREF format look at __annotations__ first (python#124479) pythonGH-58058: Add quick reference for `ArgumentParser` to argparse docs (pythongh-124227) pythongh-41431: Add `datetime.time.strptime()` and `datetime.date.strptime()` (python#120752) pythongh-102450: Add ISO-8601 alternative for midnight to `fromisoformat()` calls. (python#105856) pythongh-124370: Add "howto" for free-threaded Python (python#124371) pythongh-121277: Allow `.. versionadded:: next` in docs (pythonGH-121278) pythongh-119400: make_ssl_certs: update reference test data automatically, pass in expiration dates as parameters python#119400 (pythonGH-119401) pythongh-119180: Avoid going through AST and eval() when possible in annotationlib (python#124337) pythongh-124448: Update Windows builds to use Tcl/Tk 8.6.15 (pythonGH-124449) pythongh-123884 Tee of tee was not producing n independent iterators (pythongh-124490) pythongh-124378: Update test_ttk for Tcl/Tk 8.6.15 (pythonGH-124542) pythongh-124513: Check args in framelocalsproxy_new() (python#124515) pythongh-101100: Add a table of class attributes to the "Custom classes" section of the data model docs (python#124480) Doc: Use ``major.minor`` for documentation distribution archive filenames (python#124489) ...
@JelleZijlstra can this be closed now? Sorry, I was not quick enough to send a PR :( It was only partially ready yesterday, due to some other work. |
Let's leave it open for a while to allow Larry to ruminate. |
Jelle has convinced himself that we should change the name away from It's a day later and this approach seems like a good idea. Ship it! We can always regret it later. |
To be precise I propose |
|
Feature or enhancement
Let's say you have a dict of some custom annotations like I have in #122262
How users are expected to convert say an annotation dict of
{'user': CustomUser[AuthToken], 'auth_callback': Callable[[CustomUser[T]], T]}
to string?There are several ways right now:
repr
for simple types, which might not work for complex onescpython/Lib/annotationlib.py
Lines 466 to 501 in 536bc8a
annotate
objectcpython/Lib/typing.py
Lines 2955 to 2956 in 536bc8a
I propose adding a public and documented API for that.
Linked PRs
The text was updated successfully, but these errors were encountered: