Skip to main content

An easy to use decorator to enforce static typing for function and dataclasses.

Project description

Adds a simple decorator enforce_types that enables enforcing strict typing on a function or dataclass using annotations.

Works with collection types and subtypes for example Dict[str, Tuple[int, int]], and with special types as Optional and Any.

Seeing as this uses type annotations from PEP 484, >=Python 3.5 is required.

PyPi project page: https://pypi.org/project/enforce-typing/

Heavily inspired from this SO post so credit goes mostly to him.

Installation

Other than downloading from PyPi with pip, you may also clone the repository and run the usual setuptools process:

$> git clone https://github.com/matchawine/python-enforce-typing.git && cd python-enforce-typing
$> python setup.py {build,install}

Usage

from typing import Any, Union, Optional
from dataclasses import dataclass
from enforce_typing import enforce_types

@enforce_types
@dataclass(frozen=True)
class Toto(object):
    this_or_that: Union[str, int]
    anything: Any
    name: str = ""
    value: int = 1
    maybe_not: Optional[bool] = None

>>> Toto(this_or_that=list(), anything=2)
TypeError: Expected type 'typing.Union[str, int]' for attribute 'this_or_that' but received type '<class 'list'>')

>>> Toto(this_or_that=1, anything=2, maybe_not=0)
TypeError: Expected type 'typing.Union[bool, NoneType]' for attribute 'maybe_not' but received type '<class 'int'>')

>>> Toto(this_or_that=1, anything=2, name=3)
TypeError: Expected type '<class 'str'>' for attribute 'name' but received type '<class 'int'>')

>>> Toto(this_or_that=1, anything=2, value=3.0)
TypeError: Expected type '<class 'int'>' for attribute 'value' but received type '<class 'float'>')

>>> Toto(this_or_that=1, anything=2)
Toto(this_or_that=1, anything=2, name='', value=1, maybe_not=None)

>>> Toto(this_or_that="titi", anything=list(), maybe_not=False)
Toto(this_or_that='titi', anything=[], name='', value=1, maybe_not=False)

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

enforce-typing-1.0.0.post1.tar.gz (15.7 kB view details)

Uploaded Source

Built Distribution

enforce_typing-1.0.0.post1-py2.py3-none-any.whl (15.6 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file enforce-typing-1.0.0.post1.tar.gz.

File metadata

  • Download URL: enforce-typing-1.0.0.post1.tar.gz
  • Upload date:
  • Size: 15.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.6.0 requests-toolbelt/0.9.1 tqdm/4.38.0 CPython/3.8.0

File hashes

Hashes for enforce-typing-1.0.0.post1.tar.gz
Algorithm Hash digest
SHA256 90347a61d08e7f7578d9714b4f0fd8abd9b6bc48c8ac8d46d7f290d413afabb7
MD5 7bad80e84559be98dd6891cad61bcdb5
BLAKE2b-256 c07eaa1aef70bafe87d88184c20f140596995127ecc7949ca50410b43993ee10

See more details on using hashes here.

File details

Details for the file enforce_typing-1.0.0.post1-py2.py3-none-any.whl.

File metadata

  • Download URL: enforce_typing-1.0.0.post1-py2.py3-none-any.whl
  • Upload date:
  • Size: 15.6 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.6.0 requests-toolbelt/0.9.1 tqdm/4.38.0 CPython/3.8.0

File hashes

Hashes for enforce_typing-1.0.0.post1-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 d3184dfdbfd7f9520c884986561751a6106c57cdd65d730470645d2d40c47e18
MD5 a134007c557d44c00386f74a65b27d6f
BLAKE2b-256 6ab5eea1c6b9f5e739e00b2ceb2925ce25a2a36c7503a5e23d6d818d22ca2631

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