Skip to main content

get-annotations

A backport of Python 3.10's inspect.get_annotations() function.

Install

pip3 install -U get-annotations

Usage

from get_annotations import get_annotations

def foo(x: int) -> str: ...

print(get_annotations(foo))
# {'x': <class 'int'>, 'return': <class 'str'>}

If your module uses from __future__ import annotations, you'll want to set eval_str=True, otherwise get_annotations will return strings:

from __future__ import annotations
import typing as t

def bar(x: t.List[MyObject]): ...

class MyObject:
  pass

print(get_annotations(bar))
# {'x': 't.List[MyObject]'}

print(get_annotations(bar, eval_str=True))
# {'x': typing.List[__main__.MyObject]}

Note that it does not work with old-style forward ref annotations, such as t.List["MyObject"]:

>>> from typing import List
>>> def foo(a: int) -> List["MyObject"]: ...
...
>>> class MyObject: ...
...
>>> print(get_annotations(foo, eval_str=True)) # Note that 'MyObject' is returned as a string!
{'a': <class 'int'>, 'return': typing.List[ForwardRef('MyObject')]}
>>>
>>> print(get_annotations(foo, eval_str=False)) # Identical
{'a': <class 'int'>, 'return': typing.List[ForwardRef('MyObject')]}

If you really don't want to use from __future__ import annotations for some reason, you can surround an entire type annotation in quotes to forward ref it:

>>> def foo(a: int) -> "List[MyObject]": ...
...
>>> print(get_annotations(foo, eval_str=True)) # This works now
{'a': <class 'int'>, 'return': typing.List[__main__.MyObject]}
>>>
>>> print(get_annotations(foo, eval_str=False)) # For comparison
{'a': <class 'int'>, 'return': 'List[MyObject]'}

License

MIT

Contact

A library by Shawn Presser. If you found it useful, please consider joining my patreon!

My Twitter DMs are always open; you should send me one! It's the best way to reach me, and I'm always happy to hear from you.

Metadata

Release files for get-annotations 0.1.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for get-annotations 0.1.2
File Size Uploaded
get-annotations-0.1.2.tar.gz 4.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for get-annotations 0.1.2
File Interpreter ABI Platform
get_annotations-0.1.2-py3-none-any.whl Python 3 none any Details

Total release size: 9.0 kB

Release files / get-annotations-0.1.2.tar.gz

Download URL get-annotations-0.1.2.tar.gz
Size 4.5 kB
Tags Source
SHA-256 checksum
How to use checksums
da7b69b8043237cc7f7ce5919e9cc59bd18fc4e2704b43eb34e3ba4fa9374bab
BLAKE2b-256 checksum
How to use checksums
616e265083c3bc64f17b7bc52e8c3720739841772e81b44272b8ba12d46a01ce
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.2.0a2 CPython/3.9.9 Darwin/20.6.0

Release files / get_annotations-0.1.2-py3-none-any.whl

Download URL get_annotations-0.1.2-py3-none-any.whl
Size 4.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
788ba8aa2434ee34ffb985c4aea2f9e575204c884c0e0dd0f969be846470e527
BLAKE2b-256 checksum
How to use checksums
c6429515026b884c7d5877c610082d35bcbad4f8ff4dfbf31aff0fe914f7ff3d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.2.0a2 CPython/3.9.9 Darwin/20.6.0

Release history Release notifications | RSS feed

This release

0.1.2 This release

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page