https://github.com/sirkonst/type_comparable
Helper for checking variable equivalence by type. Useful for tests.
https://github.com/sirkonst/type_comparable
pytest pytest-plugin test testing type types typing
Last synced: 12 months ago
JSON representation
Helper for checking variable equivalence by type. Useful for tests.
- Host: GitHub
- URL: https://github.com/sirkonst/type_comparable
- Owner: sirkonst
- License: mit
- Created: 2018-01-25T17:57:31.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2025-01-19T15:37:28.000Z (over 1 year ago)
- Last Synced: 2025-06-09T13:57:11.524Z (about 1 year ago)
- Topics: pytest, pytest-plugin, test, testing, type, types, typing
- Language: Python
- Homepage:
- Size: 24.4 KB
- Stars: 3
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.rst
- License: LICENSE
Awesome Lists containing this project
README
About
=====
Module allows to compare variables not only by value but by type too.
Quick example:
.. code-block:: python
from typing import Any
from type_comparable import make_type_comparable
response = {
'id': 144233,
'date_create': '2020-01-25T17:31:33.910803',
'important_data': 'important data',
'other_data': 'other data',
'inner_data': {
'field a': 'value a',
'field d': 'value b'
},
'line': [1, 'some text', 3]
}
assert make_type_comparable(response) == {
'id': int, # <-- will compare by type int
'date_create': str, # < -- will compare by type str
'important_data': 'important data', # <-- exact match as is
'other_data': Any, # <-- allow any data,
'inner_date': { # <-- also work with nested dictionaries
'field a': str,
'field b': 'value b'
}
'line': [int, Any, 3] # <- check elements in array
}
# if you don't want wrap left variable (response) if can wrap right:
assert response == make_type_comparable(...)
Very useful for tests by pytest.
Support types
=============
Comparable types (which can be passed to `make_type_comparable()`):
- `int`
- `bool`
- `str`
- `list`
- `dict`
- other
Types for comparison:
- all python builtin (`int`, `str`, `bool`, `list`, `dict`, etc.)
- `object` and `typing.Any` - mean any type but not `None`
- `typing.Optional` - mean any type and `None`. `Optional[int]` now not supported
Also you can try to use with your custom types but without guaranteed (verify
manually before use in product)
Know issues
===========
Wrapped `None` is not `None` :-(
.. code-block:: python
>> make_type_comparable(None) is None
False
# use equal
>> make_type_comparable(None) == None
True
Install
=======
From PyPi:
.. code-block:: bash
$ pip install type_comparable
From local:
.. code-block:: bash
# update setuptools
$ pip install 'setuptools >= 30.4'
# do install
$ make install
# or
$ pip install .
Development
===========
Prepare and activate virtual environment like:
.. code-block:: bash
$ python3 -m venv .env
# for bash
$ source .env/bin/activate
# for fish
$ . .env/bin/activate.fish
Update pre-install dependencies:
.. code-block:: bash
$ pip install 'setuptools >= 30.4'
Install:
.. code-block:: bash
$ make install_dev
# or
$ pip install --editable .[develop]
Run tests:
.. code-block:: bash
$ make test
# or
$ pytest tests/