Skip to main content

A small extendable python type checker library

Project description

simple_type_checker

A small extendable python type checker library

Basic Usage

Checking a type:

from simple_type_checker import type_check
assert type_check("A string", str)

As a decorator:

from simple_type_checker import type_check, TypeCheckFailed

@type_check.returns
def id_(x) -> int:
    return x

_ = id_(1)  # Passes
try:
    id_("string")
except TypeCheckFailed as e:
    print("Bad input: ", e)

Decorators for aruments exist as well: type_check.args. Both can be done at once with type_check.decorate.

With custom types

Basic types where isinstance is sufficient:

from simple_type_checker import TypeChecker

class Foo:
    pass

type_check = TypeChecker(Foo)

assert type_check(Foo(), Foo)

Special type checking logic desired

from simple_type_checker import TypeChecker, Checker

class Bar:
    def __init__(self, b):
        self.can_check = b

class CheckerBar(Checker):
    def __call__(self, obj: Any, type_: Any) -> bool:
        return type_ == Bar and isinstance(obj, Bar) and obj.can_check

type_check = TypeChecker(advanced=(Bar,))

assert type_check(Bad(True), Bar)
assert not type_check(Bad(False), Bar)

This use case is useful for container types that take arguments, for example.

Failures

This will may work with quoted type annotations without adding a custom type Checker. For example, the following will fail:

from simple_type_checker import type_check
Bar = list[int | "Bar"]

@type_check.returns
def f() -> Bar:
    return []

This is because no type checker knows what "MyType" is. Fixing this is as easy as adding a custom Checker that accepts "MyType" as a valid type, as demonstrated with CheckerBar above.

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

simple_type_checker-2.1.2.tar.gz (19.3 kB view details)

Uploaded Source

Built Distribution

simple_type_checker-2.1.2-py3-none-any.whl (20.3 kB view details)

Uploaded Python 3

File details

Details for the file simple_type_checker-2.1.2.tar.gz.

File metadata

  • Download URL: simple_type_checker-2.1.2.tar.gz
  • Upload date:
  • Size: 19.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.7

File hashes

Hashes for simple_type_checker-2.1.2.tar.gz
Algorithm Hash digest
SHA256 3b13857f60bb074a7a2ab2ccd1a4596aaef0af8d9cd20773b27c3c9acbfa67dc
MD5 fe1de7a0e1654b5f74a9b0c3376ad571
BLAKE2b-256 0472d5033fa89673f03a9802b368fabee2ef31c4ed212fcad4d6ca853df04c42

See more details on using hashes here.

File details

Details for the file simple_type_checker-2.1.2-py3-none-any.whl.

File metadata

File hashes

Hashes for simple_type_checker-2.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 7fb9da47696235c6afc771cecbc45602f1139e81ab799a62754fc438a5e2b721
MD5 3694cd368964c7ed8d63db18b866b9e8
BLAKE2b-256 703d8895ddd45fd4b37a10fd42409252cfc7b93045bac7ceefa55cda0d609599

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