Skip to main content

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

  1. Python 3.9+ support.
  2. Works with the typing library and default/custom Python types.
  3. Checks embedded types recursively. (Eg Dict[str, List[int]].)
  4. Checks return type if specified.
  5. Works with any combination of args, kwargs, and defaults.
  6. Informative error messages.
  7. In the event of a failure, type-strict swallows the error to avoid user impact.

Limitations

  1. 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.
  2. 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


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)

Uploaded Source

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

Hashes for type-strict-0.1.0.tar.gz
Algorithm Hash digest
SHA256 611b89b5d1bcb8c0a3f1554a13338b9f4b262f484eb58991613cddcc25b04bf8
MD5 b57e4530e5b3201ce3cb443388d89c0d
BLAKE2b-256 47ca0e23bb9acf5be0a713ac3aabb50e1a9d518e54d165df49171c8af87202a6

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