Runtime type checking decorators for function arguments
Project description
philiprehberger-type-guard
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:
License
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file philiprehberger_type_guard-0.2.0.tar.gz.
File metadata
- Download URL: philiprehberger_type_guard-0.2.0.tar.gz
- Upload date:
- Size: 183.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e229a45422913a9df59a06746cdfd82c389c08f63aec5906efe0091e3c3643ff
|
|
| MD5 |
fcd6b575076a08fdd1d45e16d056a33d
|
|
| BLAKE2b-256 |
e35cd312af4252947d1df9ccae56e0d41664fe531fcd250ea05e2503b06ff486
|
File details
Details for the file philiprehberger_type_guard-0.2.0-py3-none-any.whl.
File metadata
- Download URL: philiprehberger_type_guard-0.2.0-py3-none-any.whl
- Upload date:
- Size: 5.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ba7ffd0a7fec6bc134cdc82a6ab7a2136a77fa890f9a14289a4d96e02b34ce9a
|
|
| MD5 |
ad49e4524e7aef4e4802f0ff2a4ea8f6
|
|
| BLAKE2b-256 |
7437dcbf93917fc8a84483a10433e0ece41eb612a6b9a8366c5078e91465c88a
|