Skip to content

A Python library for variable type checker/validator/converter at a run time.

License

Notifications You must be signed in to change notification settings

thombashi/typepy

Repository files navigation

typepy is a Python library for variable type checker/validator/converter at a run time.

PyPI package version conda-forge package version Supported Python versions Supported Python implementations Linux/macOS/Windows CI status Test coverage CodeQL
  • checking a value type
  • validate a value for a type
  • convert a value from one type to the other type

The correspondence between Python types and typepy classes are as follows:

Supported Types
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
pip install typepy

Install additional dependency packages with the following command if using typepy.DateTime class

pip install typepy[datetime]
conda install -c conda-forge typepy
sudo add-apt-repository ppa:thombashi/ppa
sudo apt update
sudo apt install python3-typepy

These packages can be installed via pip install typepy[datetime]:

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'>

convert method

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

try_convert method

Examples:
>>> from typepy import Integer
>>> Integer("1").try_convert()
1
>>> print(Integer(1.1).try_convert())  # try_convert() returned None when conversion failed
None

force_convert

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 was 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 class constructors as an argument. More information can be found in the API reference.

https://typepy.rtfd.io/