typepy
typepy is a Python library for variable type checker/validator/converter at a run time.
- checking a value type
- validate a value for a type
- convert a value from a type to the other type
The correspondence between Python types and typepy
classes are as follows:
Python Type | typepy: Type Class |
---|---|
bool |
Bool |
datetime |
DateTime |
dict |
Dictionary |
float /decimal.Decimal (not infinity/NaN) |
RealNumber |
float /decimal.Decimal (infinity) |
Infinity |
float /decimal.Decimal (NaN) |
Nan |
int |
Integer |
list |
List |
None |
None |
str (not null) |
String |
str (null) |
NullString |
str (IP address) |
IpAddress |
Examples: | >>> from typepy import Integer
>>> Integer(1).is_type()
True
>>> Integer(1.1).is_type()
False |
---|
Examples: | >>> from typepy import Integer
>>> Integer(1).validate()
>>> try:
... Integer(1.1).validate()
... except TypeError as e:
... # validate() raised TypeError when the value unmatched the type class
... print(e)
...
invalid value type: expected=INTEGER, actual=<type 'float'> |
---|
Examples: | >>> from typepy import Integer, TypeConversionError
>>> Integer("1").convert()
1
>>> try:
... Integer(1.1).convert()
... except TypeConversionError as e:
... # convert() raised TypeConversionError when conversion failed
... print(e)
...
failed to convert from float to INTEGER |
---|
Examples: | >>> from typepy import Integer
>>> Integer("1").try_convert()
1
>>> print(Integer(1.1).try_convert()) # try_convert() returned None when conversion failed
None |
---|
Examples: | >>> from typepy import Integer, TypeConversionError
>>> Integer("1").force_convert() # force_convert() forcibly convert the value
1
>>> Integer(1.1).force_convert()
1
>>> try:
... Integer("abc").force_convert()
... except TypeConversionError as e:
... # force_convert() raised TypeConversionError when the value not convertible
... print(e)
...
failed to force_convert to int: type=<class 'str'> |
---|
Type check/validate/convert results differed according to
strict_level
value which can pass to typepy classes constructors as an argument.
More information can be found in the
API reference.
pip install typepy
Install additional dependency packages with the following command if using typepy.DateTime
class
pip install typepy[datetime]
sudo add-apt-repository ppa:thombashi/ppa sudo apt update sudo apt install python3-typepy
Python 2.7+ or 3.5+
These packages can be installed via pip install typepy[datetime]
: