Skip to main content

Runtime-type-checker performs type check at runtime with help of type annotations

Project description

runtime-type-checker

PyPI PyPI - License Code style: black

This package performs type-check at runtime with help of type annotations.

How to use this package

There are two ways to perform type checks using this package.

I provide a few simple examples here. For a complete overview, have a look at the package's unit tests.

1- the check_type function

You can check an object against a type or an annotation via the check_type function.

The function returns None if the check was successful or raises a TypeError in case of error.

Note that this function does not check recursively for e.g. the attributes of a class.

from typing import List, Sequence, Optional, Mapping
from dataclasses import dataclass
from runtime_type_checker import check_type


check_type("a", str)  # OK
check_type(["a"], List[str])  # OK
check_type(["a", 1], Sequence[str])  # raises TypeError


@dataclass
class Foo:
    a: int
    b: Optional[Mapping[str, int]] = None


check_type(Foo(1), Foo)  # OK
check_type(Foo(1), int)  # raises TypeError

2- The check_types decorator

You can also type-check classes upon instance creation and functions or methods upon call through the check_types decorator:

from typing import Optional, Mapping
from dataclasses import dataclass
from runtime_type_checker import check_types

def run_typed(f):
  return check_types(dataclass(f))

@check_types
@dataclass
class Foo:
    a: int
    b: Optional[Mapping[str, int]] = None


Foo(1)              # returns an instance of foo
Foo(0, {"a": "b"})  # raises TypeError


@check_types
def bar(a: bool, **options: str) -> str:
    return options.get("b", "missing") if a else "unknown"

bar(True, b="1")  # returns "1"
bar(True, c=1)    # raises TypeError

Package features and short-comings

1- Features

  • simplicity: there's only one function and one decorator to keep in mind.
  • robustness: this package relies on the typing-inspect for the heavy lifting. This package is maintained by core contributors to the typing module, which means very little hacks on my side to work with older versions of python.

2- Short-comings

  • coverage: I don't offer coverage for all features of type annotations: for example Protocol, Generators, IO are not currently supported. Generics are not really well handled.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

runtime_type_checker-0.6.0-py3-none-any.whl (11.2 kB view details)

Uploaded Python 3

File details

Details for the file runtime_type_checker-0.6.0-py3-none-any.whl.

File metadata

File hashes

Hashes for runtime_type_checker-0.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 61cf3f03d7e9abe85564027192fdbd9e4e68c2fc1dc0f5693c25aa8f108f73e1
MD5 d9f5307259f5195fe6cb3fdefe3ac60b
BLAKE2b-256 e390abe822e4c7562293900836fe2559597810eddf87d15d083a3da0b49a40d9

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