Skip to main content

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

Project description

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.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

get-annotations-0.1.2.tar.gz (4.5 kB view details)

Uploaded Source

Built Distribution

get_annotations-0.1.2-py3-none-any.whl (4.5 kB view details)

Uploaded Python 3

File details

Details for the file get-annotations-0.1.2.tar.gz.

File metadata

  • Download URL: get-annotations-0.1.2.tar.gz
  • Upload date:
  • Size: 4.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.2.0a2 CPython/3.9.9 Darwin/20.6.0

File hashes

Hashes for get-annotations-0.1.2.tar.gz
Algorithm Hash digest
SHA256 da7b69b8043237cc7f7ce5919e9cc59bd18fc4e2704b43eb34e3ba4fa9374bab
MD5 010dd12b1b454536150c83b5e45896bd
BLAKE2b-256 616e265083c3bc64f17b7bc52e8c3720739841772e81b44272b8ba12d46a01ce

See more details on using hashes here.

File details

Details for the file get_annotations-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: get_annotations-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 4.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.2.0a2 CPython/3.9.9 Darwin/20.6.0

File hashes

Hashes for get_annotations-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 788ba8aa2434ee34ffb985c4aea2f9e575204c884c0e0dd0f969be846470e527
MD5 f028d6aa0b44d5345d69051bd7eefcf9
BLAKE2b-256 c6429515026b884c7d5877c610082d35bcbad4f8ff4dfbf31aff0fe914f7ff3d

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page