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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for enforce-typing-1.0.0.post1.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 90347a61d08e7f7578d9714b4f0fd8abd9b6bc48c8ac8d46d7f290d413afabb7 |
|
MD5 | 7bad80e84559be98dd6891cad61bcdb5 |
|
BLAKE2b-256 | c07eaa1aef70bafe87d88184c20f140596995127ecc7949ca50410b43993ee10 |
Hashes for enforce_typing-1.0.0.post1-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d3184dfdbfd7f9520c884986561751a6106c57cdd65d730470645d2d40c47e18 |
|
MD5 | a134007c557d44c00386f74a65b27d6f |
|
BLAKE2b-256 | 6ab5eea1c6b9f5e739e00b2ceb2925ce25a2a36c7503a5e23d6d818d22ca2631 |