Metadata-Version: 2.4
Name: simple_type_checker
Version: 2.3.0
Summary: A small extendable python type checker library
License: GPL
Project-URL: Homepage, https://github.com/zwimer/simple_type_checker
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Dynamic: license-file

# simple\_type\_checker

A small extendable python type checker library

### Basic Usage

Checking a type:
```python
from simple_type_check import type_check
assert type_check("A string", str)
```

As a decorator:
```python
from simple_type_check import type_check, TypeCheckFailed

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

_ = id_(1)  # Passes
try:
    _ = id_("string")  # Raises
except TypeCheckFailed as e:
    pass
```

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:
```python
from simple_type_check import TypeChecker

class Foo:
    pass

type_check = TypeChecker(Foo)

assert type_check(Foo(), Foo)
```

Special type checking logic desired:
```python
from simple_type_check import TopLevelCheck, TypeChecker

Bar = list[int] | list["Bar"]

class BarCheck(TopLevelCheck):
    def __call__(self, obj, type_) -> bool:
        return type_ == "Bar" and self._recurse(obj, Bar)

type_check = TypeChecker(advanced=[BarCheck])

type_check([1, [2], [[3]]], Bar)  # Should pass
```
This use case is useful for container types that take arguments, for example.
