A package for performing assertions and providing informative exception messages.
Project description
AssertionLib 3.2.1
A package for performing assertions and providing informative exception messages.
Installation
- PyPi: pip install AssertionLib
- GitHub: pip install git+https://github.com/nlesc-nano/AssertionLib
Usage
A comprehensive overview of all available assertion methods is provided in the documentation. A few examples of some basic assertion:
>>> import numpy as np >>> from assertionlib import assertion # Assert the output of specific callables >>> assertion.eq(5, 5) # 5 == 5 >>> assertion.lt(5, 6) # 5 < 6 >>> assertion.gt(6, 5) # 5 > 6 >>> assertion.isinstance(5, int) >>> assertion.hasattr(5, '__init__') >>> assertion.any([False, False, True]) >>> assertion.isfinite(1.0) # Simply assert a value >>> assertion(5 == 5) >>> assertion(isinstance(5, int)) # Apply post-processing before conducting the assertion >>> ar_large = np.ones(10) >>> ar_small = np.zeros(10) >>> assertion.gt(ar_large, ar_small, post_process=np.all) # all(ar_large > ar_small) # Perform an assertion which will raise an AssertionError >>> assertion.eq(5, 6, message='Fancy custom error message') # 5 == 6 Traceback (most recent call last): ... AssertionError: output = eq(a, b); assert output exception: AssertionError = AssertionError('Fancy custom error message') output: bool = False a: int = 5 b: int = 6
A few examples of AssertionErrors raised due to incorrect method signatures:
>>> from assertionlib import assertion >>> assertion.len(5) Traceback (most recent call last): ... AssertionError: output = len(obj); assert output exception: TypeError = TypeError("object of type 'int' has no len()") output: NoneType = None obj: int = 5
>>> from assertionlib import assertion >>> assertion.eq(5, 5, 5, 5) Traceback (most recent call last): ... AssertionError: output = eq(a, b, _a, _b); assert output exception: TypeError = TypeError('eq expected 2 arguments, got 4') output: NoneType = None a: int = 5 b: int = 5 _a: int = 5 _b: int = 5
A demonstration of the exception parameter. Providing an exception type will assert that the provided exception is raised during/before the assertion process:
>>> from assertionlib import assertion >>> len(5) Traceback (most recent call last): ... TypeError: object of type 'int' has no len()
>>> from assertionlib import assertion >>> assertion.len(5, exception=TypeError) # i.e. len(5) should raise a TypeError >>> assertion.len([5], exception=TypeError) Traceback (most recent call last): ... AssertionError: output = len(obj); assert output exception: AssertionError = AssertionError("Failed to raise 'TypeError'") output: int = 1 obj: list = [5]
Lastly, the output of custom callables can be asserted in one of the following two ways, supplying the callable to AssertionManager.assert() or creating a custom assertion method and adding it to an instance with AssertionManager.add_to_instance():
>>> from assertionlib import assertion >>> def my_fancy_func(a: object) -> bool: ... return False # Approach #1, supply to-be asserted callable to assertion.assert_() >>> assertion.assert_(my_fancy_func, 5) Traceback (most recent call last): ... AssertionError: output = my_fancy_func(a); assert output exception: AssertionError = AssertionError(None) output: bool = False a: int = 5
>>> from assertionlib import assertion # Approach #2, permanantly add a new bound method using assertion.add_to_instance() >>> assertion.add_to_instance(my_fancy_func) >>> assertion.my_fancy_func(5) Traceback (most recent call last): ... AssertionError: output = my_fancy_func(a); assert output exception: AssertionError = AssertionError(None) output: bool = False a: int = 5
Project details
Release history Release notifications | RSS feed
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
Hashes for AssertionLib-3.2.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a5286df43c85e3b0ce8529199e8f235ddce118da429f67d52e446c5d1e7191ee |
|
MD5 | 1e2cf6a8bb5b4d49029df5d2eb9469b7 |
|
BLAKE2-256 | 7efe65fee82ab6caa021bea0287112e185e804f45d01b4edf603a088c5f8e9fa |