Skip to main content

Use generic type hints and new union syntax `|` with python 3.6+

Project description

future-typing

Tests codecov pypi versions license

Use generic type hints and new union syntax | with python 3.6+

If you just want to use new annotations for type checkers like mypy, then do not use this library and simply add from __future__ import annotations. But if you want to use those annotations at runtime, then you may be at the right place!

This library exposes:

  • transform_annotation, which will transform list[str|int|float] into

    • typing.List[typing.Union[str, int, float]] for python 3.6 to 3.8
    • list[typing.Union[str, int, float]] for python 3.9 (since generic types are natively supported)
  • a custom source code encoding future_typing that you can use to trigger the transformation at interpretation time

  • a CLI to see the transformed source

Installation

    pip install future_typing

Codec

Just add this custom source code encoding at the top of your file

# -*- coding: future_typing -*-

and then use | and list[str], dict[str, int], ... as if you were using python 3.10

# -*- coding: future_typing -*-
from typing import Literal


class C:
    @staticmethod
    def g(t: tuple[int, ...]) -> tuple[int, ...]:
        return t


def f(a: list[str | int] | dict[str, str], b: Literal['pika'] | None = None) -> type[C]:
    x: set[str | int] = set(a)
    y: frozenset[str] = frozenset(['y1', 'y2'])
    t: tuple[int, ...] = (1, 2)
    print(f'it works! a: {a!r}, b: {b!r}')
    return C


f(['a', 'b', 1], 'pika')
$ python3.8 pika.py
it works! a: ['a', 'b'], b: 'pika'

$ mypy pika.py
Success: no issues found in 1 source file

CLI

$ future_typing pika.py
import typing as typing___
from typing import Literal


class C :
    @staticmethod
    def g (t :typing___.Tuple [int ,...])->typing___.Tuple [int ,...]:
        return t


def f (a :typing___.Union [typing___.List [typing___.Union [str ,int ]],typing___.Dict [str ,str ]],b :typing___.Union [Literal ['pika'],None ]=None )->typing___.Type [C ]:
    x :typing___.Set [typing___.Union [str ,int ]]=set (a )
    y :typing___.FrozenSet [str ]=frozenset (['y1','y2'])
    t :typing___.Tuple [int ,...]=(1 ,2 )
    print (f'it works! a: {a!r}, b: {b!r}')
    return C


f (['a','b',1 ],'pika')

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_typing-0.4.1.tar.gz (6.0 kB view details)

Uploaded Source

Built Distribution

future_typing-0.4.1-py3-none-any.whl (7.5 kB view details)

Uploaded Python 3

File details

Details for the file future_typing-0.4.1.tar.gz.

File metadata

  • Download URL: future_typing-0.4.1.tar.gz
  • Upload date:
  • Size: 6.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.7.7

File hashes

Hashes for future_typing-0.4.1.tar.gz
Algorithm Hash digest
SHA256 65fdc5034a95db212790fee5e977fb0a2df8deb60dccf3bac17d6d2b1a9bbacd
MD5 4027910d0760a30f6826ae4075f7e13e
BLAKE2b-256 bc14374fc27007ada5eb5eb3ff2f2620146c9e3397112575344a26f0d60cc14d

See more details on using hashes here.

File details

Details for the file future_typing-0.4.1-py3-none-any.whl.

File metadata

  • Download URL: future_typing-0.4.1-py3-none-any.whl
  • Upload date:
  • Size: 7.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.7.7

File hashes

Hashes for future_typing-0.4.1-py3-none-any.whl
Algorithm Hash digest
SHA256 af19e06b7fe6fdfb8d83c265a2688cba9ac74b0a6a2dac14c268910ecd14ac8d
MD5 801b170e4cbb2b74bfbce8fe52c5f2af
BLAKE2b-256 d30cdfd01088cb3ad4b1c2a1ebc46839dc3254f2241ba324e87d80145a38a000

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