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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
90347a61d08e7f7578d9714b4f0fd8abd9b6bc48c8ac8d46d7f290d413afabb7
|
|
| MD5 |
7bad80e84559be98dd6891cad61bcdb5
|
|
| BLAKE2b-256 |
c07eaa1aef70bafe87d88184c20f140596995127ecc7949ca50410b43993ee10
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d3184dfdbfd7f9520c884986561751a6106c57cdd65d730470645d2d40c47e18
|
|
| MD5 |
a134007c557d44c00386f74a65b27d6f
|
|
| BLAKE2b-256 |
6ab5eea1c6b9f5e739e00b2ceb2925ce25a2a36c7503a5e23d6d818d22ca2631
|