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.

Files for enforce-typing, version 1.0.0.post1
Filename, size File type Python version Upload date Hashes
Filename, size enforce_typing-1.0.0.post1-py2.py3-none-any.whl (15.6 kB) File type Wheel Python version py2.py3 Upload date Hashes View hashes
Filename, size enforce-typing-1.0.0.post1.tar.gz (15.7 kB) File type Source Python version None Upload date Hashes View hashes

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page