Skip to main content

Runtime type checking decorators for function arguments

Project description

philiprehberger-type-guard

Tests PyPI version Last updated

Runtime type checking decorators for function arguments.

Installation

pip install philiprehberger-type-guard

Usage

Basic Usage

from philiprehberger_type_guard import guard

@guard
def greet(name: str, times: int = 1) -> str:
    return name * times

greet("hello", 3)     # Works fine
greet(123, 3)          # Raises TypeGuardError

Generic Types

@guard
def process(items: list[int], lookup: dict[str, float]):
    ...

process([1, 2, 3], {"a": 1.0})  # OK
process(["a"], {})               # TypeGuardError

Union Types

@guard
def flexible(value: int | str | None):
    ...

flexible(42)     # OK
flexible("hi")   # OK
flexible(None)   # OK
flexible(3.14)   # TypeGuardError

Non-raising and assertion checks

For one-off checks outside the @guard decorator, use is_type() (boolean) or assert_type() (raises on mismatch).

from philiprehberger_type_guard import is_type, assert_type

is_type(5, int)              # True
is_type("x", int)            # False
is_type([1, 2], list[int])   # True
is_type(None, int | None)    # True

assert_type(5, int)                       # returns None
assert_type("x", int)                     # raises TypeGuardError
assert_type("x", int, name="user_id")     # custom name in message

assert_type() honors the global enable() / disable() toggle.

Global Toggle

from philiprehberger_type_guard import enable, disable

disable()  # Turn off all guards (e.g., in production)
enable()   # Turn back on

Error Details

from philiprehberger_type_guard import TypeGuardError

try:
    greet(123, 3)
except TypeGuardError as e:
    print(e.param)     # "name"
    print(e.expected)  # "str"
    print(e.actual)    # <class 'int'>
    print(e.value)     # 123

API

Function / Class Description
@guard / @guard(enabled=True) Decorator for runtime type checking
is_type(value, expected) Non-raising check; returns True / False
assert_type(value, expected, name="value") Raises TypeGuardError if value does not match expected
enable() / disable() Global toggle
TypeGuardError Raised on type mismatch (subclass of TypeError)

Development

pip install -e .
python -m pytest tests/ -v

Support

If you find this project useful:

Star the repo

🐛 Report issues

💡 Suggest features

❤️ Sponsor development

🌐 All Open Source Projects

💻 GitHub Profile

🔗 LinkedIn Profile

License

MIT

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

philiprehberger_type_guard-0.2.0.tar.gz (183.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

philiprehberger_type_guard-0.2.0-py3-none-any.whl (5.3 kB view details)

Uploaded Python 3

File details

Details for the file philiprehberger_type_guard-0.2.0.tar.gz.

File metadata

File hashes

Hashes for philiprehberger_type_guard-0.2.0.tar.gz
Algorithm Hash digest
SHA256 e229a45422913a9df59a06746cdfd82c389c08f63aec5906efe0091e3c3643ff
MD5 fcd6b575076a08fdd1d45e16d056a33d
BLAKE2b-256 e35cd312af4252947d1df9ccae56e0d41664fe531fcd250ea05e2503b06ff486

See more details on using hashes here.

File details

Details for the file philiprehberger_type_guard-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for philiprehberger_type_guard-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ba7ffd0a7fec6bc134cdc82a6ab7a2136a77fa890f9a14289a4d96e02b34ce9a
MD5 ad49e4524e7aef4e4802f0ff2a4ea8f6
BLAKE2b-256 7437dcbf93917fc8a84483a10433e0ece41eb612a6b9a8366c5078e91465c88a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page