modern-pook
===========
|Build Status|
This is somewhat of a verbatim copy of `h2non/pook`_, but it doesn't support python 2,
or older versions of python 3. Use this one if you need python 3.11 support.
Versatile, expressive and hackable utility library for HTTP traffic mocking
and expectations made easy in `Python`_. Heavily inspired by `gock`_.
To get started, see the `documentation`_, `how it works`_, `FAQ`_ or `examples`_.
Features
--------
- Simple, expressive and fluent API.
- Provides both Pythonic and chainable DSL API styles.
- Full-featured HTTP response definitions and expectations.
- Matches any HTTP protocol primitive (URL, method, query params, headers, body...).
- Full regular expressions capable mock expectations matching.
- Supports most popular HTTP clients via interceptor adapters.
- Configurable volatile, persistent or TTL limited mocks.
- Works with any testing framework/engine (unittest, pytest...).
- First-class JSON & XML support matching and responses.
- Supports JSON Schema body matching.
- Works in both runtime and testing environments.
- Can be used as decorator and/or via context managers.
- Supports real networking mode with optional traffic filtering.
- Map/filter mocks easily for generic or custom mock expectations.
- Custom user-defined mock matcher functions.
- Simulated raised error exceptions.
- Network delay simulation (only available for ``aiohttp``).
- Pluggable and hackable API.
- Customizable HTTP traffic mock interceptor engine.
- Supports third-party mocking engines, such as `mocket`_.
- Fits good for painless test doubles.
- Does not support WebSocket traffic mocking.
- Works with +3.8 (including PyPy).
- Dependency-less: just 2 small dependencies for JSONSchema and XML tree comparison.
Supported HTTP clients
----------------------
``pook`` can work with multiple mock engines, however it provides a
built-in one by default, which currently supports traffic mocking in
the following HTTP clients:
- ✔ `urllib3`_ v1+
- ✔ `requests`_ v2+
- ✔ `aiohttp`_ v1+ - v2+
- ✔ `urllib`_ / `http.client`_ v2/3
- ✘ `pycurl`_ (see `#16`_)
More HTTP clients can be supported progressively.
**Note**: only recent HTTP client package versions were tested.
Installation
------------
Using ``pip`` package manager (requires pip 1.8+):
.. code:: bash
pip install --upgrade modern-pook
Or install the latest sources from Github:
.. code:: bash
pip install -e git+git://github.com/odarbelaeze/pook.git#egg=pook
Getting started
---------------
See ReadTheDocs documentation:
|Documentation Status|
API
---
See `annotated API reference`_ documention.
Examples
--------
See `examples`_ documentation for full featured code and use case examples.
Basic mocking:
.. code:: python
import pook
import requests
@pook.on
def test_my_api():
mock = pook.get('http://twitter.com/api/1/foobar', reply=404, response_json={'error': 'not found'})
resp = requests.get('http://twitter.com/api/1/foobar')
assert resp.status_code == 404
assert resp.json() == {"error": "not found"}
assert mock.calls == 1
Using the chainable API DSL:
.. code:: python
import pook
import requests
@pook.on
def test_my_api():
mock = (pook.get('http://twitter.com/api/1/foobar')
.reply(404)
.json({'error': 'not found'}))
resp = requests.get('http://twitter.com/api/1/foobar')
assert resp.json() == {"error": "not found"}
assert mock.calls == 1
Using the decorator:
.. code:: python
import pook
import requests
@pook.get('http://httpbin.org/status/500', reply=204)
@pook.get('http://httpbin.org/status/400', reply=200)
def fetch(url):
return requests.get(url)
res = fetch('http://httpbin.org/status/400')
print('#1 status:', res.status_code)
res = fetch('http://httpbin.org/status/500')
print('#2 status:', res.status_code)
Simple ``unittest`` integration:
.. code:: python
import pook
import unittest
import requests
class TestUnitTestEngine(unittest.TestCase):
@pook.on
def test_request(self):
pook.get('server.com/foo').reply(204)
res = requests.get('http://server.com/foo')
self.assertEqual(res.status_code, 204)
def test_request_with_context_manager(self):
with pook.use():
pook.get('server.com/bar', reply=204)
res = requests.get('http://server.com/bar')
self.assertEqual(res.status_code, 204)
Using the context manager for isolated HTTP traffic interception blocks:
.. code:: python
import pook
import requests
# Enable HTTP traffic interceptor
with pook.use():
pook.get('http://httpbin.org/status/500', reply=204)
res = requests.get('http://httpbin.org/status/500')
print('#1 status:', res.status_code)
# Interception-free HTTP traffic
res = requests.get('http://httpbin.org/status/200')
print('#2 status:', res.status_code)
Example using `mocket`_ Python library as underlying mock engine:
.. code:: python
import pook
import requests
from mocket.plugins.pook_mock_engine import MocketEngine
# Use mocket library as underlying mock engine
pook.set_mock_engine(MocketEngine)
# Explicitly enable pook HTTP mocking (optional)
pook.on()
# Target server URL to mock out
url = 'http://twitter.com/api/1/foobar'
# Define your mock
mock = pook.get(url,
reply=404, times=2,
headers={'content-type': 'application/json'},
response_json={'error': 'foo'})
# Run first HTTP request
requests.get(url)
assert mock.calls == 1
# Run second HTTP request
res = requests.get(url)
assert mock.calls == 2
# Assert response data
assert res.status_code == 404
assert res.json() == {'error': 'foo'}
# Explicitly disable pook (optional)
pook.off()
Development
-----------
Clone the repository:
.. code:: bash
git clone git@github.com:odarbelaeze/pook.git
Install dependencies:
.. code:: bash
pip install -r requirements.txt -r requirements-dev.txt
Install Python dependencies:
.. code:: bash
make install
Lint code:
.. code:: bash
make lint
Run tests:
.. code:: bash
make test
Generate documentation:
.. code:: bash
make htmldocs
License
-------
MIT - Tomas Aparicio
.. _h2non/pook: https://github.com/h2non/pook
.. _Go: https://golang.org
.. _Python: http://python.org
.. _gock: https://github.com/h2non/gock
.. _annotated API reference: http://pook.readthedocs.io/en/latest/api.html
.. _#16: https://github.com/h2non/pook/issues/16
.. _examples: http://pook.readthedocs.io/en/latest/examples.html
.. _aiohttp: https://github.com/KeepSafe/aiohttp
.. _requests: http://docs.python-requests.org/en/master/
.. _urllib3: https://github.com/shazow/urllib3
.. _urllib: https://docs.python.org/3/library/urllib.html
.. _http.client: https://docs.python.org/3/library/http.client.html
.. _pycurl: http://pycurl.io
.. _documentation: http://pook.readthedocs.io/en/latest/
.. _FAQ: http://pook.readthedocs.io/en/latest/faq.html
.. _how it works: http://pook.readthedocs.io/en/latest/how_it_works.html
.. _mocket: https://github.com/mindflayer/python-mocket
.. |Build Status| image:: https://github.com/odarbelaeze/pook/actions/workflows/python-test.yml/badge.svg?branch=main
:target: https://github.com/odarbelaeze/pook/actions/workflows/python-test.yml
.. |Documentation Status| image:: https://img.shields.io/badge/docs-latest-green.svg?style=flat
:target: http://pook.readthedocs.io/en/latest/?badge=latest
v2.0.0 / 2022-12-21
===================
* Drop support for python 2.x, and python < 3.8.
* Fix support for python 3.11.
v1.0.2 / 2021-09-10
===================
* fix(urllib3): interceptor is never really disabled (#68)
* Closes #75 Re consider @fluent decorator (#76)
* fix(#69): use match keyword in pytest.raises
* fix(History): invalid rst syntax
v1.0.1 / 2020-03-24
-------------------
* fix(aiohttp): compatible with non aiohttp projects (#67)
* feat(History): add release changes
v1.0.0 / 2020-03-18
-------------------
* fix(aiohttp): use latest version, allow Python 3.5+ for async http client
v0.2.8 / 2019-10-31
-------------------
* fix collections import warning (#61)
v0.2.7 / 2019-10-21
-------------------
* fix collections import warning (#61)
v0.2.6 / 2019-02-01
-------------------
* Add mock.reply(new_response=True) to reset response definition object
v0.2.5 / 2017-10-19
-------------------
* refactor(setup): remove extra install dependency
* Fix py27 compatibility (#49)
* Add activate_async decorator (#48)
* fix typo in pook.mock.Mock.ismatched.__doc__ (#47)
* fix README example (#46)
v0.2.4 / 2017-10-03
-------------------
* fix(#45): regex URL issue
* fix(travis): allow failures in pypy
* feat(docs): add sponsor banner
* refactor(History): normalize style
v0.2.3 / 2017-04-28
-------------------
* feat(docs): add supported version for aiohttp
* Merge branch 'master' of https://github.com/h2non/pook
* fix(api): export missing symbol "disable_network"
* Update README.rst (#43)
v0.2.2 / 2017-04-03
-------------------
* refactor(compare): disable maxDiff length limit while comparing values
v0.2.1 / 2017-03-25
-------------------
* fix(engine): enable new mock engine on register if needed
* fix(engine): remove activate argument before instantiating the Mock
v0.2.0 / 2017-03-18
-------------------
* refactor(engine): do not activate engine on mock declaration if not explicitly requested. This introduces a behavioral library change: you must explicitly use ``pook.on()`` to enable `pook` mock engine.
v0.1.14 / 2017-03-17
--------------------
* feat(docs): list supported HTTP client versions
* fix(#41): disable mocks after decorator call invokation
* feat(examples): add mock context manager example file
* feat(#40): support context manager definitions
* feat(#39): improve unmatched request output
* feat(docs): add mocket example file
* feat(#33): add mocket examples and documentation
v0.1.13 / 2017-01-29
--------------------
* fix(api): `mock.calls` property should be an `int`.
v0.1.12 / 2017-01-28
--------------------
* feat(#33): proxy mock definitions into mock.Request
* refactor(api): `pook.unmatched_requests()` now returns a `list` instead of a lazy `tuple`.
v0.1.11 / 2017-01-14
--------------------
* refactor(query)
* fix(#37): fix URL comparison
* fix(#38): proper mock engine interface validation.
v0.1.10 / 2017-01-13
--------------------
* fix(#37): decode byte bodies
* feat(setup.py): add author email
v0.1.9 / 2017-01-06
-------------------
* fix(Makefile): remove proper egg file
* feat(package): add wheel package distribution support
* feat(docs): add documentation links
v0.1.8 / 2016-12-24
-------------------
* fix(assertion): extract regex pattern only when required
* feat(examples): add regular expression example
v0.1.7 / 2016-12-18
-------------------
* feat(#33): add support for user defined custom mock engine
v0.1.6 / 2016-12-14
-------------------
* fix(setup.py): force utf-8 encoding
* feat(setup.py): add encoding header
* feat(api): add debug mode
* refactor(docs): minor enhancements
* refactor(tests): update URL matcher test cases
* refactor(docs): add note about HTTP clients and update features list
* fix(setup.py): remove encoding param
* fix(tests): use strict equality assertion
0.1.5 / 2016-12-12
------------------
* fix(matchers): fix matching issue in URL.
* refactor(assertion): regex expression based matching must be explicitly enabled.
* feat(tests): add initial matchers tests.
0.1.4 / 2016-12-08
------------------
* refactor(README): minor changes
* fix(setup.py): lint error
* fix(#32): use explicit encoding while reading files in setup.py
0.1.3 / 2016-12-08
------------------
* fix(core): several bug fixes.
* feat(core): add pending features and major refactors.
* feat(matchers): use ``unittest.TestCase`` matching engine by default.
0.1.2 / 2016-12-01
------------------
* fix(matchers): runtime missing variable.
0.1.1 / 2016-12-01
------------------
* fix: Python 2 dictionary iteration syntax.
* feat(docs): add more examples.
* fix(matchers): better regular expression comparison support.
0.1.0 / 2016-11-30
------------------
* First version (still beta)
0.1.0-rc.1 / 2016-11-27
-----------------------
* First release candidate version (still beta)
Raw data
{
"_id": null,
"home_page": "https://github.com/h2non/pook",
"name": "modern-pook",
"maintainer": "",
"docs_url": null,
"requires_python": "",
"maintainer_email": "",
"keywords": "",
"author": "Tomas Aparicio",
"author_email": "tomas@aparicio.me",
"download_url": "https://files.pythonhosted.org/packages/fd/5b/d39166c0b409da04f6c54803928f93468f4904bfcc332bebb2b0d8bef77d/modern-pook-2.0.0.tar.gz",
"platform": null,
"description": "modern-pook\n===========\n\n|Build Status|\n\nThis is somewhat of a verbatim copy of `h2non/pook`_, but it doesn't support python 2,\nor older versions of python 3. Use this one if you need python 3.11 support.\n\nVersatile, expressive and hackable utility library for HTTP traffic mocking\nand expectations made easy in `Python`_. Heavily inspired by `gock`_.\n\nTo get started, see the `documentation`_, `how it works`_, `FAQ`_ or `examples`_.\n\nFeatures\n--------\n\n- Simple, expressive and fluent API.\n- Provides both Pythonic and chainable DSL API styles.\n- Full-featured HTTP response definitions and expectations.\n- Matches any HTTP protocol primitive (URL, method, query params, headers, body...).\n- Full regular expressions capable mock expectations matching.\n- Supports most popular HTTP clients via interceptor adapters.\n- Configurable volatile, persistent or TTL limited mocks.\n- Works with any testing framework/engine (unittest, pytest...).\n- First-class JSON & XML support matching and responses.\n- Supports JSON Schema body matching.\n- Works in both runtime and testing environments.\n- Can be used as decorator and/or via context managers.\n- Supports real networking mode with optional traffic filtering.\n- Map/filter mocks easily for generic or custom mock expectations.\n- Custom user-defined mock matcher functions.\n- Simulated raised error exceptions.\n- Network delay simulation (only available for ``aiohttp``).\n- Pluggable and hackable API.\n- Customizable HTTP traffic mock interceptor engine.\n- Supports third-party mocking engines, such as `mocket`_.\n- Fits good for painless test doubles.\n- Does not support WebSocket traffic mocking.\n- Works with +3.8 (including PyPy).\n- Dependency-less: just 2 small dependencies for JSONSchema and XML tree comparison.\n\n\nSupported HTTP clients\n----------------------\n\n``pook`` can work with multiple mock engines, however it provides a\nbuilt-in one by default, which currently supports traffic mocking in\nthe following HTTP clients:\n\n- \u2714 `urllib3`_ v1+\n- \u2714 `requests`_ v2+\n- \u2714 `aiohttp`_ v1+ - v2+\n- \u2714 `urllib`_ / `http.client`_ v2/3\n- \u2718 `pycurl`_ (see `#16`_)\n\nMore HTTP clients can be supported progressively.\n\n**Note**: only recent HTTP client package versions were tested.\n\nInstallation\n------------\n\nUsing ``pip`` package manager (requires pip 1.8+):\n\n.. code:: bash\n\n pip install --upgrade modern-pook\n\nOr install the latest sources from Github:\n\n.. code:: bash\n\n pip install -e git+git://github.com/odarbelaeze/pook.git#egg=pook\n\n\nGetting started\n---------------\n\nSee ReadTheDocs documentation:\n\n|Documentation Status|\n\n\nAPI\n---\n\nSee `annotated API reference`_ documention.\n\n\nExamples\n--------\n\nSee `examples`_ documentation for full featured code and use case examples.\n\nBasic mocking:\n\n.. code:: python\n\n import pook\n import requests\n\n @pook.on\n def test_my_api():\n mock = pook.get('http://twitter.com/api/1/foobar', reply=404, response_json={'error': 'not found'})\n\n resp = requests.get('http://twitter.com/api/1/foobar')\n assert resp.status_code == 404\n assert resp.json() == {\"error\": \"not found\"}\n assert mock.calls == 1\n\nUsing the chainable API DSL:\n\n.. code:: python\n\n import pook\n import requests\n\n @pook.on\n def test_my_api():\n mock = (pook.get('http://twitter.com/api/1/foobar')\n .reply(404)\n .json({'error': 'not found'}))\n\n resp = requests.get('http://twitter.com/api/1/foobar')\n assert resp.json() == {\"error\": \"not found\"}\n assert mock.calls == 1\n\nUsing the decorator:\n\n.. code:: python\n\n import pook\n import requests\n\n @pook.get('http://httpbin.org/status/500', reply=204)\n @pook.get('http://httpbin.org/status/400', reply=200)\n def fetch(url):\n return requests.get(url)\n\n res = fetch('http://httpbin.org/status/400')\n print('#1 status:', res.status_code)\n\n res = fetch('http://httpbin.org/status/500')\n print('#2 status:', res.status_code)\n\n\nSimple ``unittest`` integration:\n\n.. code:: python\n\n import pook\n import unittest\n import requests\n\n\n class TestUnitTestEngine(unittest.TestCase):\n\n @pook.on\n def test_request(self):\n pook.get('server.com/foo').reply(204)\n res = requests.get('http://server.com/foo')\n self.assertEqual(res.status_code, 204)\n\n def test_request_with_context_manager(self):\n with pook.use():\n pook.get('server.com/bar', reply=204)\n res = requests.get('http://server.com/bar')\n self.assertEqual(res.status_code, 204)\n\n\nUsing the context manager for isolated HTTP traffic interception blocks:\n\n.. code:: python\n\n import pook\n import requests\n\n # Enable HTTP traffic interceptor\n with pook.use():\n pook.get('http://httpbin.org/status/500', reply=204)\n\n res = requests.get('http://httpbin.org/status/500')\n print('#1 status:', res.status_code)\n\n # Interception-free HTTP traffic\n res = requests.get('http://httpbin.org/status/200')\n print('#2 status:', res.status_code)\n\nExample using `mocket`_ Python library as underlying mock engine:\n\n.. code:: python\n\n import pook\n import requests\n from mocket.plugins.pook_mock_engine import MocketEngine\n\n # Use mocket library as underlying mock engine\n pook.set_mock_engine(MocketEngine)\n\n # Explicitly enable pook HTTP mocking (optional)\n pook.on()\n\n # Target server URL to mock out\n url = 'http://twitter.com/api/1/foobar'\n\n # Define your mock\n mock = pook.get(url,\n reply=404, times=2,\n headers={'content-type': 'application/json'},\n response_json={'error': 'foo'})\n\n # Run first HTTP request\n requests.get(url)\n assert mock.calls == 1\n\n # Run second HTTP request\n res = requests.get(url)\n assert mock.calls == 2\n\n # Assert response data\n assert res.status_code == 404\n assert res.json() == {'error': 'foo'}\n\n # Explicitly disable pook (optional)\n pook.off()\n\n\nDevelopment\n-----------\n\nClone the repository:\n\n.. code:: bash\n\n git clone git@github.com:odarbelaeze/pook.git\n\n\nInstall dependencies:\n\n.. code:: bash\n\n pip install -r requirements.txt -r requirements-dev.txt\n\n\nInstall Python dependencies:\n\n.. code:: bash\n\n make install\n\n\nLint code:\n\n.. code:: bash\n\n make lint\n\n\nRun tests:\n\n.. code:: bash\n\n make test\n\n\nGenerate documentation:\n\n.. code:: bash\n\n make htmldocs\n\n\nLicense\n-------\n\nMIT - Tomas Aparicio\n\n.. _h2non/pook: https://github.com/h2non/pook\n.. _Go: https://golang.org\n.. _Python: http://python.org\n.. _gock: https://github.com/h2non/gock\n.. _annotated API reference: http://pook.readthedocs.io/en/latest/api.html\n.. _#16: https://github.com/h2non/pook/issues/16\n.. _examples: http://pook.readthedocs.io/en/latest/examples.html\n.. _aiohttp: https://github.com/KeepSafe/aiohttp\n.. _requests: http://docs.python-requests.org/en/master/\n.. _urllib3: https://github.com/shazow/urllib3\n.. _urllib: https://docs.python.org/3/library/urllib.html\n.. _http.client: https://docs.python.org/3/library/http.client.html\n.. _pycurl: http://pycurl.io\n.. _documentation: http://pook.readthedocs.io/en/latest/\n.. _FAQ: http://pook.readthedocs.io/en/latest/faq.html\n.. _how it works: http://pook.readthedocs.io/en/latest/how_it_works.html\n.. _mocket: https://github.com/mindflayer/python-mocket\n\n.. |Build Status| image:: https://github.com/odarbelaeze/pook/actions/workflows/python-test.yml/badge.svg?branch=main\n :target: https://github.com/odarbelaeze/pook/actions/workflows/python-test.yml\n.. |Documentation Status| image:: https://img.shields.io/badge/docs-latest-green.svg?style=flat\n :target: http://pook.readthedocs.io/en/latest/?badge=latest\n\n\n\nv2.0.0 / 2022-12-21\n===================\n\n * Drop support for python 2.x, and python < 3.8.\n * Fix support for python 3.11.\n\nv1.0.2 / 2021-09-10\n===================\n\n * fix(urllib3): interceptor is never really disabled (#68)\n * Closes #75 Re consider @fluent decorator (#76)\n * fix(#69): use match keyword in pytest.raises\n * fix(History): invalid rst syntax\n\nv1.0.1 / 2020-03-24\n-------------------\n\n * fix(aiohttp): compatible with non aiohttp projects (#67)\n * feat(History): add release changes\n\nv1.0.0 / 2020-03-18\n-------------------\n\n * fix(aiohttp): use latest version, allow Python 3.5+ for async http client\n\nv0.2.8 / 2019-10-31\n-------------------\n\n * fix collections import warning (#61) \n\nv0.2.7 / 2019-10-21\n-------------------\n\n * fix collections import warning (#61)\n\nv0.2.6 / 2019-02-01\n-------------------\n\n * Add mock.reply(new_response=True) to reset response definition object \n\nv0.2.5 / 2017-10-19\n-------------------\n\n * refactor(setup): remove extra install dependency\n * Fix py27 compatibility (#49)\n * Add activate_async decorator (#48)\n * fix typo in pook.mock.Mock.ismatched.__doc__ (#47)\n * fix README example (#46)\n\nv0.2.4 / 2017-10-03\n-------------------\n\n* fix(#45): regex URL issue\n* fix(travis): allow failures in pypy\n* feat(docs): add sponsor banner\n* refactor(History): normalize style\n\nv0.2.3 / 2017-04-28\n-------------------\n\n* feat(docs): add supported version for aiohttp\n* Merge branch 'master' of https://github.com/h2non/pook\n* fix(api): export missing symbol \"disable_network\"\n* Update README.rst (#43)\n\nv0.2.2 / 2017-04-03\n-------------------\n\n* refactor(compare): disable maxDiff length limit while comparing values\n\nv0.2.1 / 2017-03-25\n-------------------\n\n* fix(engine): enable new mock engine on register if needed\n* fix(engine): remove activate argument before instantiating the Mock\n\nv0.2.0 / 2017-03-18\n-------------------\n\n* refactor(engine): do not activate engine on mock declaration if not explicitly requested. This introduces a behavioral library change: you must explicitly use ``pook.on()`` to enable `pook` mock engine.\n\nv0.1.14 / 2017-03-17\n--------------------\n\n* feat(docs): list supported HTTP client versions\n* fix(#41): disable mocks after decorator call invokation\n* feat(examples): add mock context manager example file\n* feat(#40): support context manager definitions\n* feat(#39): improve unmatched request output\n* feat(docs): add mocket example file\n* feat(#33): add mocket examples and documentation\n\nv0.1.13 / 2017-01-29\n--------------------\n\n* fix(api): `mock.calls` property should be an `int`.\n\nv0.1.12 / 2017-01-28\n--------------------\n\n* feat(#33): proxy mock definitions into mock.Request\n* refactor(api): `pook.unmatched_requests()` now returns a `list` instead of a lazy `tuple`.\n\nv0.1.11 / 2017-01-14\n--------------------\n\n* refactor(query)\n* fix(#37): fix URL comparison\n* fix(#38): proper mock engine interface validation.\n\nv0.1.10 / 2017-01-13\n--------------------\n\n* fix(#37): decode byte bodies\n* feat(setup.py): add author email\n\nv0.1.9 / 2017-01-06\n-------------------\n\n* fix(Makefile): remove proper egg file\n* feat(package): add wheel package distribution support\n* feat(docs): add documentation links\n\nv0.1.8 / 2016-12-24\n-------------------\n\n* fix(assertion): extract regex pattern only when required\n* feat(examples): add regular expression example\n\nv0.1.7 / 2016-12-18\n-------------------\n\n* feat(#33): add support for user defined custom mock engine\n\nv0.1.6 / 2016-12-14\n-------------------\n\n* fix(setup.py): force utf-8 encoding\n* feat(setup.py): add encoding header\n* feat(api): add debug mode\n* refactor(docs): minor enhancements\n* refactor(tests): update URL matcher test cases\n* refactor(docs): add note about HTTP clients and update features list\n* fix(setup.py): remove encoding param\n* fix(tests): use strict equality assertion\n\n0.1.5 / 2016-12-12\n------------------\n\n* fix(matchers): fix matching issue in URL.\n* refactor(assertion): regex expression based matching must be explicitly enabled.\n* feat(tests): add initial matchers tests.\n\n0.1.4 / 2016-12-08\n------------------\n\n* refactor(README): minor changes\n* fix(setup.py): lint error\n* fix(#32): use explicit encoding while reading files in setup.py\n\n0.1.3 / 2016-12-08\n------------------\n\n* fix(core): several bug fixes.\n* feat(core): add pending features and major refactors.\n* feat(matchers): use ``unittest.TestCase`` matching engine by default.\n\n0.1.2 / 2016-12-01\n------------------\n\n* fix(matchers): runtime missing variable.\n\n0.1.1 / 2016-12-01\n------------------\n\n* fix: Python 2 dictionary iteration syntax.\n* feat(docs): add more examples.\n* fix(matchers): better regular expression comparison support.\n\n0.1.0 / 2016-11-30\n------------------\n\n* First version (still beta)\n\n0.1.0-rc.1 / 2016-11-27\n-----------------------\n\n* First release candidate version (still beta)\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "HTTP traffic mocking and expectations made easy",
"version": "2.0.0",
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"md5": "df87e639263a5e30249f9bc65dfd7c87",
"sha256": "dadc5f5e18ba01b642caf3d67d4bc66442c18f534a1bbaa0723ae58057c3d81a"
},
"downloads": -1,
"filename": "modern_pook-2.0.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "df87e639263a5e30249f9bc65dfd7c87",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 53524,
"upload_time": "2022-12-21T16:53:37",
"upload_time_iso_8601": "2022-12-21T16:53:37.915748Z",
"url": "https://files.pythonhosted.org/packages/3f/08/d465ec4cf5c9552aada23c42904024ec09c8a679dbdf4fc29922adb2b604/modern_pook-2.0.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "491ca19a5d546c42175695e3a22a4e16",
"sha256": "38fa79c42f83a53f07aa8b5b9d3d24aa5383ffe38830666ad4b15e5dcb1f5b2f"
},
"downloads": -1,
"filename": "modern-pook-2.0.0.tar.gz",
"has_sig": false,
"md5_digest": "491ca19a5d546c42175695e3a22a4e16",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 37720,
"upload_time": "2022-12-21T16:53:39",
"upload_time_iso_8601": "2022-12-21T16:53:39.629264Z",
"url": "https://files.pythonhosted.org/packages/fd/5b/d39166c0b409da04f6c54803928f93468f4904bfcc332bebb2b0d8bef77d/modern-pook-2.0.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2022-12-21 16:53:39",
"github": true,
"gitlab": false,
"bitbucket": false,
"github_user": "h2non",
"github_project": "pook",
"travis_ci": true,
"coveralls": true,
"github_actions": false,
"requirements": [
{
"name": "jsonschema",
"specs": [
[
">=",
"2.5.1"
]
]
},
{
"name": "xmltodict",
"specs": [
[
">=",
"0.11.0"
]
]
},
{
"name": "furl",
"specs": [
[
">=",
"0.5.6"
]
]
},
{
"name": "mock",
"specs": [
[
">=",
"2.0.0"
]
]
}
],
"tox": true,
"lcname": "modern-pook"
}