Metadata-Version: 2.4
Name: openapi-mock
Version: 2026.3.1
Summary: Serve an OpenAPI spec as a mock with respx.
Author-email: Adam Dangoor <adamdangoor@gmail.com>
License-Expression: MIT
Project-URL: Homepage, https://github.com/adamtheturtle/openapi-mock
Project-URL: Documentation, https://adamtheturtle.github.io/openapi-mock/
Keywords: httpx,mock,openapi,respx
Classifier: Development Status :: 4 - Beta
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Requires-Python: >=3.12
Description-Content-Type: text/x-rst
License-File: LICENSE
Requires-Dist: beartype>=0.18
Requires-Dist: httpx>=0.27.0
Requires-Dist: pyyaml>=6.0
Requires-Dist: respx>=0.22.0
Requires-Dist: starlette>=0.40
Requires-Dist: uvicorn>=0.30
Provides-Extra: dev
Requires-Dist: actionlint-py==1.7.11.24; extra == "dev"
Requires-Dist: check-manifest==0.51; extra == "dev"
Requires-Dist: deptry==0.24.0; extra == "dev"
Requires-Dist: doc8==2.0.0; extra == "dev"
Requires-Dist: doccmd==2026.2.27.1; extra == "dev"
Requires-Dist: furo==2025.12.19; extra == "dev"
Requires-Dist: interrogate==1.7.0; extra == "dev"
Requires-Dist: mypy[faster-cache]==1.19.1; extra == "dev"
Requires-Dist: mypy-strict-kwargs==2026.1.12; extra == "dev"
Requires-Dist: pre-commit==4.5.1; extra == "dev"
Requires-Dist: pydocstringformatter==0.7.5; extra == "dev"
Requires-Dist: pylint[spelling]==4.0.5; extra == "dev"
Requires-Dist: pylint-per-file-ignores==3.2.0; extra == "dev"
Requires-Dist: pyproject-fmt==2.16.2; extra == "dev"
Requires-Dist: pyrefly==0.54.0; extra == "dev"
Requires-Dist: pyright==1.1.408; extra == "dev"
Requires-Dist: pyroma==5.0.1; extra == "dev"
Requires-Dist: pytest==9.0.2; extra == "dev"
Requires-Dist: pytest-cov==7.0.0; extra == "dev"
Requires-Dist: ruff==0.15.4; extra == "dev"
Requires-Dist: shellcheck-py==0.11.0.1; extra == "dev"
Requires-Dist: shfmt-py==3.12.0.2; extra == "dev"
Requires-Dist: sphinx==9.1.0; extra == "dev"
Requires-Dist: sphinx-copybutton==0.5.2; extra == "dev"
Requires-Dist: sphinx-lint==1.0.2; extra == "dev"
Requires-Dist: sphinx-pyproject==0.3.0; extra == "dev"
Requires-Dist: sphinx-substitution-extensions==2026.1.12; extra == "dev"
Requires-Dist: sphinxcontrib-spelling==8.0.2; extra == "dev"
Requires-Dist: sybil[pytest]==9.3.0; extra == "dev"
Requires-Dist: ty==0.0.19; extra == "dev"
Requires-Dist: types-pyyaml>=6.0.12; extra == "dev"
Requires-Dist: vulture==2.14; extra == "dev"
Requires-Dist: yamlfix==1.19.1; extra == "dev"
Provides-Extra: release
Requires-Dist: check-wheel-contents==0.6.3; extra == "release"
Dynamic: license-file

openapi-mock
============

|Build Status| |PyPI|

Serve an OpenAPI spec as a mock with `respx`_.

.. |Build Status| image:: https://github.com/adamtheturtle/openapi-mock/actions/workflows/ci.yml/badge.svg?branch=main
   :target: https://github.com/adamtheturtle/openapi-mock/actions/workflows/ci.yml
.. |PyPI| image:: https://badge.fury.io/py/openapi-mock.svg
   :target: https://badge.fury.io/py/openapi-mock

Installation
------------

.. code-block:: console

   uv pip install openapi-mock

Or with pip:

.. code-block:: console

   pip install openapi-mock

Usage
-----

.. code-block:: python

   from http import HTTPStatus

   import httpx
   import respx

   from openapi_mock import add_openapi_to_respx

   spec = {
       "openapi": "3.0.0",
       "paths": {"/pets": {"get": {"responses": {"200": {"description": "OK"}}}}},
   }
   with respx.mock(base_url="https://api.example.com", assert_all_called=False) as m:
       add_openapi_to_respx(mock_obj=m, spec=spec, base_url="https://api.example.com")
       response = httpx.get("https://api.example.com/pets")
   assert response.status_code == HTTPStatus.OK

.. _respx: https://lundberg.github.io/respx/
