Python's missing runtime type checker
Project description
Type-Strict
Python's missing runtime type checker
Installation
pip install type-strict
Usage
from type_strict import strict
@strict
def person_age(name: str, age: int) -> str
return f"{name} is {age}"
# If the values mismatch the types, a TypeError is thrown.
person_age(...)
Use Cases
If you ever find yourself asserting all your types are correct, for example...
def func(person: Person, employee: Employee):
if not isinstance(person, Person):
raise TypeError("Expected person to be of type Person")
if not isinstance(employee, Employee):
raise TypeError("Expected employee to be of type Employee")
...
this library can simplify the same functionality into the following:
@strict
def func(person: Person, employee: Employee):
...
Features
- Python 3.9+ support.
- Works with the
typing
library and default/custom Python types. - Checks embedded types recursively. (Eg
Dict[str, List[int]]
.) - Checks return type if specified.
- Works with any combination of args, kwargs, and defaults.
- Informative error messages.
- In the event of a failure, type-strict swallows the error to avoid user impact.
Limitations
- Performance: Type checking is done at runtime. So, there is a performance impact—especially if the value has many members, for example, a long list. For static type checking consider mypy.
- Ignores variable-length args (varargs).
Examples
Wrong value.
@strict
def my_func(arg1: List[int]):
...
# Raises:
# TypeError('Value (whoops!) in "my_func(arg1=typing.List[int])" is not of type int')
my_func([1, 2, "whoops!", 3])
Wrong data structure.
@strict
def my_func(arg1: Dict[str, int]):
...
# Raises:
# TypeError('Expected type typing.Dict[str, int] in "my_func(arg1=typing.Dict[str, int])" got list')
my_func([1, 2, 3])
Wrong return type.
@strict
def my_func() -> int:
return "one"
# Raises:
# TypeError('Return value (one) in "my_func() -> int" is not of type int')
my_func()
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
type-strict-0.1.0.tar.gz
(4.5 kB
view details)
File details
Details for the file type-strict-0.1.0.tar.gz
.
File metadata
- Download URL: type-strict-0.1.0.tar.gz
- Upload date:
- Size: 4.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.12
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 611b89b5d1bcb8c0a3f1554a13338b9f4b262f484eb58991613cddcc25b04bf8 |
|
MD5 | b57e4530e5b3201ce3cb443388d89c0d |
|
BLAKE2b-256 | 47ca0e23bb9acf5be0a713ac3aabb50e1a9d518e54d165df49171c8af87202a6 |