Skip to main content

A backport of __future__ annotations to python<3.7

Project description

Build Status Azure DevOps coverage

future-annotations

A backport of __future__ annotations to python<3.7.

Installation

pip install future-annotations

Usage

Include the following encoding cookie at the top of your file (this replaces the utf-8 cookie if you already have it):

# -*- coding: future_annotations -*-

And then write python3.7+ forward-annotation code as usual!

# -*- coding: future_annotations -*-
class C:
    @classmethod
    def make(cls) -> C:
        return cls()

print(C.make())
$ python3.6 main.py
<__main__.C object at 0x7fb50825dd90>
$ mypy main.py
Success: no issues found in 1 source file

Showing transformed source

future-annotations also includes a cli to show transformed source.

$ future-annotations-show main.py
# ****************************** -*-
class C:
    @classmethod
    def make(cls) -> 'C':
        return cls()

print(C.make())

How does this work?

future-annotations has two parts:

  1. A utf-8 compatible codec which performs source manipulation
    • The codec first decodes the source bytes using the UTF-8 codec
    • The codec then leverages tokenize-rt to rewrite annotations.
  2. A .pth file which registers a codec on interpreter startup.

when you aren't using normal site registration

in setups (such as aws lambda) where you utilize PYTHONPATH or sys.path instead of truly installed packages, the .pth magic above will not take.

for those circumstances, you'll need to manually initialize future-annotations in a non-annotations wrapper. for instance:

import future_annotations

future_annotations.register()

from actual_main import main

if __name__ == '__main__':
    exit(main())

you may also like

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

future_annotations-1.0.0.tar.gz (5.6 kB view hashes)

Uploaded Source

Built Distribution

future_annotations-1.0.0-py2.py3-none-any.whl (5.6 kB view hashes)

Uploaded Python 2 Python 3

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