chore: rename project coven → hack-house ⛧

Rebrand the Rust client crate (coven/ → hh/, package+binary "hack-house"),
README, CLI strings, and branch (coven → hack-house). Gitea repo renamed
cmd-chat → hack-house to match. Crypto/server logic unchanged; selftest +
golden-vector test still green, binary is now `hack-house`.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
leetcrypt
2026-05-30 13:29:14 -07:00
parent 82a04f3e12
commit bb1d662ee1
2730 changed files with 712933 additions and 46 deletions
@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2017 Channel Cat
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
@@ -0,0 +1,136 @@
Metadata-Version: 2.2
Name: sanic-ext
Version: 24.12.0
Summary: Extend your Sanic installation with some core functionality.
Home-page: http://github.com/sanic-org/sanic-ext/
Author: Sanic Community
License: MIT
Platform: any
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Web Environment
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
License-File: LICENSE
Requires-Dist: pyyaml>=3.0.0
Provides-Extra: test
Requires-Dist: sanic_testing>=22.9.0; extra == "test"
Requires-Dist: coverage; extra == "test"
Requires-Dist: pytest; extra == "test"
Requires-Dist: pytest-cov; extra == "test"
Requires-Dist: pytest-asyncio; extra == "test"
Requires-Dist: tox; extra == "test"
Requires-Dist: Jinja2; extra == "test"
Provides-Extra: dev
Requires-Dist: sanic_testing>=22.9.0; extra == "dev"
Requires-Dist: coverage; extra == "dev"
Requires-Dist: pytest; extra == "dev"
Requires-Dist: pytest-cov; extra == "dev"
Requires-Dist: pytest-asyncio; extra == "dev"
Requires-Dist: tox; extra == "dev"
Requires-Dist: Jinja2; extra == "dev"
Requires-Dist: black>=21.4b2; extra == "dev"
Requires-Dist: flake8>=3.7.7; extra == "dev"
Requires-Dist: isort>=5.0.0; extra == "dev"
.. image:: https://raw.githubusercontent.com/sanic-org/sanic-assets/master/png/sanic-framework-logo-400x97.png
:alt: Sanic | Build fast. Run fast.
Sanic Extensions
================
.. start-badges
.. list-table::
:widths: 15 85
:stub-columns: 1
* - Build
- | |PyTest|
* - Docs
- | |UserGuide|
* - Package
- | |PyPI| |PyPI version| |Wheel| |Supported implementations| |Code style black|
* - Support
- | |Forums| |Discord|
.. |UserGuide| image:: https://img.shields.io/badge/user%20guide-sanic-ff0068
:target: https://sanicframework.org/en/plugins/sanic-ext/getting-started.html
.. |Forums| image:: https://img.shields.io/badge/forums-community-ff0068.svg
:target: https://community.sanicframework.org/
.. |Discord| image:: https://img.shields.io/discord/812221182594121728?logo=discord
:target: https://discord.gg/FARQzAEMAA
.. |PyTest| image:: https://github.com/sanic-org/sanic-ext/actions/workflows/python-package.yml/badge.svg?branch=main
:target: https://github.com/sanic-org/sanic-ext/actions/workflows/python-package.yml
.. |PyPI| image:: https://img.shields.io/pypi/v/sanic-ext.svg
:target: https://pypi.python.org/pypi/sanic-ext/
.. |PyPI version| image:: https://img.shields.io/pypi/pyversions/sanic-ext.svg
:target: https://pypi.python.org/pypi/sanic-ext/
.. |Code style black| image:: https://img.shields.io/badge/code%20style-black-000000.svg
:target: https://github.com/ambv/black
.. |Wheel| image:: https://img.shields.io/pypi/wheel/sanic-ext.svg
:alt: PyPI Wheel
:target: https://pypi.python.org/pypi/sanic-ext
.. |Supported implementations| image:: https://img.shields.io/pypi/implementation/sanic-ext.svg
:alt: Supported implementations
:target: https://pypi.python.org/pypi/sanic-ext
.. end-badges
`Sanic <https://github.com/sanic-org/sanic>`_ strives to be "Unopinionated and flexible"::
Build the way you want to build without letting your tooling constrain you.
But what happens when you want all the goodies? Sanic Extensions is an officially supported Sanic plugin to provide application developers with additional tools and features.
Features
--------
- Auto create HEAD, OPTIONS, and TRACE endpoints
- CORS protection
- Predefined, endpoint-specific response serializers
- Argument injection into route handlers
- OpenAPI documentation with Redoc and/or Swagger
- Request query arguments and body input validation
Installation
------------
::
pip install sanic[ext]
# OR
pip install sanic sanic-ext
Getting started
---------------
.. code-block:: python
from sanic import Sanic
app = Sanic("MyHelloWorldApp")
Nothing new. Just start using Sanic and it will automatically be extended!
Learn more
----------
Go to the `User Guide <https://sanicframework.org/en/plugins/sanic-ext/getting-started.html>`_ to learn more
____
.. warning:: Sanic Extensions is still in **ALPHA** release. The API is not likely to change. It will move to **BETA** with v22.3.
@@ -0,0 +1,214 @@
sanic_ext-24.12.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
sanic_ext-24.12.0.dist-info/LICENSE,sha256=phDSSxlr1h3SszXLqcXDk26YIBY3nz5_d2WS2kYZ28Q,1068
sanic_ext-24.12.0.dist-info/METADATA,sha256=djT-WyscY1IcIVnJpP9SN7yQNhi61ywVltOmwL7iB-o,4462
sanic_ext-24.12.0.dist-info/RECORD,,
sanic_ext-24.12.0.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
sanic_ext-24.12.0.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
sanic_ext-24.12.0.dist-info/top_level.txt,sha256=f1EdKcWF8djoLd_5PE6YKONyV4bOwhDnsf0jbhhTc40,16
sanic_ext/__init__.py,sha256=53CUwx8hdD70V8PIe-YETUzpcB4HKuiaRGWuPosXOiw,684
sanic_ext/__pycache__/__init__.cpython-312.pyc,,
sanic_ext/__pycache__/bootstrap.cpython-312.pyc,,
sanic_ext/__pycache__/config.cpython-312.pyc,,
sanic_ext/__pycache__/exceptions.cpython-312.pyc,,
sanic_ext/bootstrap.py,sha256=v0u4aX84LpRY0tVm6jzCKBSsH5CN42mgL-qthxOVtm8,7674
sanic_ext/config.py,sha256=YdeRXTqLDFJ6ibw6k1XvGTjsQ3XSceYTIN3mdQIYeeQ,7096
sanic_ext/exceptions.py,sha256=U4OF4sz3B7O-092mHNJFRq-CNI671YwxSadagRwPvM0,193
sanic_ext/extensions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
sanic_ext/extensions/__pycache__/__init__.cpython-312.pyc,,
sanic_ext/extensions/__pycache__/base.cpython-312.pyc,,
sanic_ext/extensions/base.py,sha256=fZcUUH0E_XRLg9JStwL92WAO_zq-yVCI_808PVOXoSI,2152
sanic_ext/extensions/health/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
sanic_ext/extensions/health/__pycache__/__init__.cpython-312.pyc,,
sanic_ext/extensions/health/__pycache__/endpoint.cpython-312.pyc,,
sanic_ext/extensions/health/__pycache__/extension.cpython-312.pyc,,
sanic_ext/extensions/health/__pycache__/monitor.cpython-312.pyc,,
sanic_ext/extensions/health/endpoint.py,sha256=SuMCjiVIw2_Bhii07k0MefeobBHN6GIgWujvbGjdXYY,421
sanic_ext/extensions/health/extension.py,sha256=wvsFNLHbACw8L4mSm2C2sFYKJk6oLasqcM2oNwEHtEk,1052
sanic_ext/extensions/health/monitor.py,sha256=uB-cbjvcHnlKgeFRiwnMyILj3ZfAWA4vcG4qhiIUlfs,4494
sanic_ext/extensions/http/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
sanic_ext/extensions/http/__pycache__/__init__.cpython-312.pyc,,
sanic_ext/extensions/http/__pycache__/cors.cpython-312.pyc,,
sanic_ext/extensions/http/__pycache__/extension.cpython-312.pyc,,
sanic_ext/extensions/http/__pycache__/methods.cpython-312.pyc,,
sanic_ext/extensions/http/cors.py,sha256=eUGifKcTvGr_RBdtlKpJfpP9qY0XxPoDqal18Q7v4fw,13104
sanic_ext/extensions/http/extension.py,sha256=-LD0WwDL_h-3O5bYaHNwcS4S3NdHMA75MHfJMfk62Dk,1162
sanic_ext/extensions/http/methods.py,sha256=q1yinqne1YJrZVaMFSINmlY3HaRYvxy1XonXoKUW8bE,5417
sanic_ext/extensions/injection/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
sanic_ext/extensions/injection/__pycache__/__init__.cpython-312.pyc,,
sanic_ext/extensions/injection/__pycache__/constructor.cpython-312.pyc,,
sanic_ext/extensions/injection/__pycache__/extension.cpython-312.pyc,,
sanic_ext/extensions/injection/__pycache__/injector.cpython-312.pyc,,
sanic_ext/extensions/injection/__pycache__/registry.cpython-312.pyc,,
sanic_ext/extensions/injection/constructor.py,sha256=uwuvfL0e5OpU4poiYFJa2O2VMQ-NZaxay0trEAvkY4w,5819
sanic_ext/extensions/injection/extension.py,sha256=Rz4Eik1shCddw6KmhdWLNzdZGTaT8--YXhx6VDZ_ATA,783
sanic_ext/extensions/injection/injector.py,sha256=7CacEAPbm672W_aPdQXfWr0PKC5ZhRUJp4_kEmkbj7o,4300
sanic_ext/extensions/injection/registry.py,sha256=c4jWBSOrtSqzeZQ8h2-CVBgOsTt0d3_HbBnoeP3F-lo,3126
sanic_ext/extensions/logging/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
sanic_ext/extensions/logging/__pycache__/__init__.cpython-312.pyc,,
sanic_ext/extensions/logging/__pycache__/extension.cpython-312.pyc,,
sanic_ext/extensions/logging/__pycache__/extractor.cpython-312.pyc,,
sanic_ext/extensions/logging/__pycache__/logger.cpython-312.pyc,,
sanic_ext/extensions/logging/extension.py,sha256=zzadB1FO9PDkDrc1ZQkXiDi08TJ7FNlpAKT0gFwc_J4,797
sanic_ext/extensions/logging/extractor.py,sha256=cvGdz2xppJMWG5qJVt9dDvJhVqJb0XoDS0fAULQ8EEI,3572
sanic_ext/extensions/logging/logger.py,sha256=PO4J8Eqs8z94Yljqqp9yg4a2Hmc_Xv3Mr7ORxOck-4M,3770
sanic_ext/extensions/openapi/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
sanic_ext/extensions/openapi/__pycache__/__init__.cpython-312.pyc,,
sanic_ext/extensions/openapi/__pycache__/autodoc.cpython-312.pyc,,
sanic_ext/extensions/openapi/__pycache__/blueprint.cpython-312.pyc,,
sanic_ext/extensions/openapi/__pycache__/builders.cpython-312.pyc,,
sanic_ext/extensions/openapi/__pycache__/constants.cpython-312.pyc,,
sanic_ext/extensions/openapi/__pycache__/definitions.cpython-312.pyc,,
sanic_ext/extensions/openapi/__pycache__/extension.cpython-312.pyc,,
sanic_ext/extensions/openapi/__pycache__/openapi.cpython-312.pyc,,
sanic_ext/extensions/openapi/__pycache__/types.cpython-312.pyc,,
sanic_ext/extensions/openapi/autodoc.py,sha256=BA9UfZDaNir92kFuSA6noLKOUSVPXxW6RTejUvJXjzI,2683
sanic_ext/extensions/openapi/blueprint.py,sha256=idXjTNbZPQEQM1A9SQ9z0Q0MdOpm_MnKq_L5jqV9O2g,9434
sanic_ext/extensions/openapi/builders.py,sha256=WbuEGcjJLZs7zHV3aJT0OOmoNE1z09SdwDMEGqprs5s,12944
sanic_ext/extensions/openapi/constants.py,sha256=UROnLKuzp4BaN0UrdzlsZoval24-xQ5opnA7uKrPHMM,821
sanic_ext/extensions/openapi/definitions.py,sha256=sIFiXA8ZCzwN51RkbRU5-wGfoA5c1n-awFVTpxdjbI8,11761
sanic_ext/extensions/openapi/extension.py,sha256=FGtKzc_6t0O5l-ooGQHLtQN6i987ziBCNlyrKUGEXjM,1108
sanic_ext/extensions/openapi/openapi.py,sha256=AQhE94fg8in2VXchKgeMQnfMLQPe5uu8ZavKh0fDaXE,13828
sanic_ext/extensions/openapi/types.py,sha256=3ovGBHJ_aes_BT54PFbZ_vLEwIOAWl6hXBfuxOEBmrQ,12430
sanic_ext/extensions/openapi/ui/redoc.html,sha256=Veo0BrNQKNAF_ux_-jJMEQDA6JmOtJoPagYl_ufQ9Jg,672
sanic_ext/extensions/openapi/ui/swagger.html,sha256=AMv4u5rM6JH6bPhVpAQY8OLMc-3Nz6VN_AQOL_DseYE,1477
sanic_ext/extensions/templating/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
sanic_ext/extensions/templating/__pycache__/__init__.cpython-312.pyc,,
sanic_ext/extensions/templating/__pycache__/engine.cpython-312.pyc,,
sanic_ext/extensions/templating/__pycache__/extension.cpython-312.pyc,,
sanic_ext/extensions/templating/__pycache__/render.cpython-312.pyc,,
sanic_ext/extensions/templating/engine.py,sha256=UoZYLmIsZHscfNZI_BfbmBg-4eZzZ7apOyrJAuvCg28,2346
sanic_ext/extensions/templating/extension.py,sha256=bhpg3p1FDREiv7ulqrTugaur90zfAX_EatIiMqbSn38,1622
sanic_ext/extensions/templating/render.py,sha256=chJXXR1FExVrn1R0qz6s7TLXrQgTw6oSKuzTGPgiSuI,2930
sanic_ext/extras/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
sanic_ext/extras/__pycache__/__init__.cpython-312.pyc,,
sanic_ext/extras/__pycache__/request.cpython-312.pyc,,
sanic_ext/extras/request.py,sha256=7F73U6OHVV67zZQAsl2UpUOj77TAwxaVVgiUMXkZ0Uk,1060
sanic_ext/extras/serializer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
sanic_ext/extras/serializer/__pycache__/__init__.cpython-312.pyc,,
sanic_ext/extras/serializer/__pycache__/decorator.cpython-312.pyc,,
sanic_ext/extras/serializer/decorator.py,sha256=tckv8kcd7M8fd4svUoQNTn3rT7xzufb7VAyqZZpE37U,1021
sanic_ext/extras/validation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
sanic_ext/extras/validation/__pycache__/__init__.cpython-312.pyc,,
sanic_ext/extras/validation/__pycache__/check.cpython-312.pyc,,
sanic_ext/extras/validation/__pycache__/clean.cpython-312.pyc,,
sanic_ext/extras/validation/__pycache__/decorator.cpython-312.pyc,,
sanic_ext/extras/validation/__pycache__/schema.cpython-312.pyc,,
sanic_ext/extras/validation/__pycache__/setup.cpython-312.pyc,,
sanic_ext/extras/validation/__pycache__/validators.cpython-312.pyc,,
sanic_ext/extras/validation/check.py,sha256=B2yYt9LbobedSo5l7j8OB4FqsPs4_tr3a5O1-zPJPY4,8399
sanic_ext/extras/validation/clean.py,sha256=GviU_h2FseLa7F1IBlfxEnWyZLzWc7jC30SYDSVVzxY,452
sanic_ext/extras/validation/decorator.py,sha256=SfjHnvGygnOCHt7te9TvIPXSEYJ15Oct-LM9jbNSD8U,2482
sanic_ext/extras/validation/schema.py,sha256=olxs42uhadQehBqT1HS1689XspkxTJ0dqqKDCjYPEzw,3301
sanic_ext/extras/validation/setup.py,sha256=T2gwRV8yGg9BHcDzOEyrUzS_-a6JGlBhjJBOSyMpKKQ,1843
sanic_ext/extras/validation/validators.py,sha256=MXq29WxL6Jd1czbPv7EJvt3gJ1jbLeUjh4Z8byIhyV8,1446
sanic_ext/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
sanic_ext/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
sanic_ext/utils/__pycache__/__init__.cpython-312.pyc,,
sanic_ext/utils/__pycache__/extraction.cpython-312.pyc,,
sanic_ext/utils/__pycache__/route.cpython-312.pyc,,
sanic_ext/utils/__pycache__/string.cpython-312.pyc,,
sanic_ext/utils/__pycache__/typing.cpython-312.pyc,,
sanic_ext/utils/__pycache__/version.cpython-312.pyc,,
sanic_ext/utils/extraction.py,sha256=3jU-zH4DYsCs_DP6VmoHqSo9Nx5i84py7hYtCS_8j8c,342
sanic_ext/utils/route.py,sha256=Zz0cXvUGUiHkikpU0BLnkx2Dzouz2okZmko-XTVcYT8,3790
sanic_ext/utils/string.py,sha256=YPn6aNVWAMxQpVEkXDQNdPxjqu-4COvjyE6UAq1JIIw,268
sanic_ext/utils/typing.py,sha256=65Ub9VsUKc9qwp1GNASmbIO102RZFjitbpP678jOW-Q,1633
sanic_ext/utils/version.py,sha256=9JTxgtCdDSFJfdIKveABHmS-hz2DmMW-sEYac6xSSG8,1320
tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
tests/__pycache__/__init__.cpython-312.pyc,,
tests/__pycache__/conftest.cpython-312.pyc,,
tests/conftest.py,sha256=Hs8nV0gaW8V4cl6pSUDHiaBPI7s0Jx0LHAWMhEh6MrM,1172
tests/extensions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
tests/extensions/__pycache__/__init__.cpython-312.pyc,,
tests/extensions/__pycache__/test_startup.cpython-312.pyc,,
tests/extensions/http/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
tests/extensions/http/__pycache__/__init__.cpython-312.pyc,,
tests/extensions/http/__pycache__/test_methods.cpython-312.pyc,,
tests/extensions/http/test_methods.py,sha256=rAkCW01UXDQ94JBpXmLr2IjM97Ikg0KAQ1j0RkzvdHM,3939
tests/extensions/injection/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
tests/extensions/injection/__pycache__/__init__.cpython-312.pyc,,
tests/extensions/injection/__pycache__/test_add_dependency.cpython-312.pyc,,
tests/extensions/injection/__pycache__/test_constants.cpython-312.pyc,,
tests/extensions/injection/__pycache__/test_dependency.cpython-312.pyc,,
tests/extensions/injection/__pycache__/test_injection_config.cpython-312.pyc,,
tests/extensions/injection/__pycache__/test_injection_registry.cpython-312.pyc,,
tests/extensions/injection/test_add_dependency.py,sha256=vDly-OQXX3mRdmI4n2w_t1EPTdFF1_gNiGEz1L9QSsM,10475
tests/extensions/injection/test_constants.py,sha256=I31TKB5lOmq44dmw3RvfkhptW4SgqOiFHNeWaHQKH4Y,1831
tests/extensions/injection/test_dependency.py,sha256=6qsp7jL2-FAqSCpZdBCy7UhhvGHtYHlt6SrpWlrUpiU,919
tests/extensions/injection/test_injection_config.py,sha256=Gg9vtH52Jpljx5DDEbOuzza3wO94dEOR3tun8ZjWCXI,1138
tests/extensions/injection/test_injection_registry.py,sha256=K1MXLPzmwyeU31dqOXA6dU9A5j9H3XWW337yiywoblM,5063
tests/extensions/logging/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
tests/extensions/logging/__pycache__/__init__.cpython-312.pyc,,
tests/extensions/logging/__pycache__/test_custom_background_logger.cpython-312.pyc,,
tests/extensions/logging/test_custom_background_logger.py,sha256=GmxNmRFix5hRrK9K3-Aa94S9vlao-uUPKATxa_GLvBs,526
tests/extensions/openapi/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
tests/extensions/openapi/__pycache__/__init__.cpython-312.pyc,,
tests/extensions/openapi/__pycache__/test_autodoc.cpython-312.pyc,,
tests/extensions/openapi/__pycache__/test_body.cpython-312.pyc,,
tests/extensions/openapi/__pycache__/test_config.cpython-312.pyc,,
tests/extensions/openapi/__pycache__/test_decorators.cpython-312.pyc,,
tests/extensions/openapi/__pycache__/test_definitions.cpython-312.pyc,,
tests/extensions/openapi/__pycache__/test_deprecated.cpython-312.pyc,,
tests/extensions/openapi/__pycache__/test_exclude.cpython-312.pyc,,
tests/extensions/openapi/__pycache__/test_external_docs.cpython-312.pyc,,
tests/extensions/openapi/__pycache__/test_func_handler.cpython-312.pyc,,
tests/extensions/openapi/__pycache__/test_model_fields.cpython-312.pyc,,
tests/extensions/openapi/__pycache__/test_model_spec.cpython-312.pyc,,
tests/extensions/openapi/__pycache__/test_parameter.cpython-312.pyc,,
tests/extensions/openapi/__pycache__/test_paths.cpython-312.pyc,,
tests/extensions/openapi/__pycache__/test_schema.cpython-312.pyc,,
tests/extensions/openapi/__pycache__/test_security.cpython-312.pyc,,
tests/extensions/openapi/__pycache__/test_specification.cpython-312.pyc,,
tests/extensions/openapi/__pycache__/test_summary.cpython-312.pyc,,
tests/extensions/openapi/__pycache__/test_tag.cpython-312.pyc,,
tests/extensions/openapi/__pycache__/test_typing.cpython-312.pyc,,
tests/extensions/openapi/__pycache__/utils.cpython-312.pyc,,
tests/extensions/openapi/test_autodoc.py,sha256=q96Se_gXuV66SjLLEfnaGqR75k5Wl5GiU8F4HxKHCaY,899
tests/extensions/openapi/test_body.py,sha256=H-EiSpYEa25_lPFqfqqVuLlV0MOUXGcCK3HQG2VpJ0o,2301
tests/extensions/openapi/test_config.py,sha256=jIqIyEUMQzLe_GsutoeZSjqUwEadqmR8t0JzOlZrhRc,745
tests/extensions/openapi/test_decorators.py,sha256=WNSwlNgxYn2mbVJi2Ii3HSAd56QoQuH98WcqiWIkF-4,24247
tests/extensions/openapi/test_definitions.py,sha256=1x_UpJHvjb_mXQ1So4tYfcyHQ_QCw6vHiqAqrmF_qqU,1315
tests/extensions/openapi/test_deprecated.py,sha256=BsiB-AXROReIQZShKFxjVN_gKAzwVBNABN1I8tDfL1w,897
tests/extensions/openapi/test_exclude.py,sha256=pNcO-kWjUKFtLB6KstN7XkzN4BzLE05P4weQFuo_6tQ,1252
tests/extensions/openapi/test_external_docs.py,sha256=glR1uUh10A0uSkT6h_EN-SIQETFJM4FbmixMjBS5dFo,1590
tests/extensions/openapi/test_func_handler.py,sha256=wF4D2SelLRLAeuaKfiIVYmfum7Lnf0fgSEQ30HSr_mA,1427
tests/extensions/openapi/test_model_fields.py,sha256=PVhskMLVe6faMWCuYPdAmYTFc16J0bQ9K2pjTYCf7DM,2386
tests/extensions/openapi/test_model_spec.py,sha256=DiuiEL_f7UCdcd9FSCqTW8b1RLGY-4m5kyGoUZB5Wxo,2392
tests/extensions/openapi/test_parameter.py,sha256=70__ya_f3lZhRldvgt7GtI8rLnPVMQaFI78uICHMyTM,4050
tests/extensions/openapi/test_paths.py,sha256=BdJGj4fXo8wUknPOvJIMvwJNjggkhV1d0nWpxILtx40,1124
tests/extensions/openapi/test_schema.py,sha256=MY0J9edoIrcbK7ZmZ6vl3VawhChYGIYAjLQHA-6gFy4,1877
tests/extensions/openapi/test_security.py,sha256=_0OUDpvn64U594mcCQGr1fMJlx4SQgtx8Kjw_8XcRTQ,2603
tests/extensions/openapi/test_specification.py,sha256=aOklHeLVa1w1yPBTFzjc1PMSdYx4ax7_zJehG28VhE0,884
tests/extensions/openapi/test_summary.py,sha256=mHCIVYHqKsRSt3__VfXkXEa3E8zc9f0GOoxx_vzqXog,929
tests/extensions/openapi/test_tag.py,sha256=bWKV20zMzUwi2CtFimEgE2J32kBZvTQ9QyH1sVlQT3A,827
tests/extensions/openapi/test_typing.py,sha256=QKJeu3wLazD3LbKwicKTOP4WRQ-iAcHN1HTYTDzm_vU,1172
tests/extensions/openapi/utils.py,sha256=Z35rTOh3oHFZOdY4OMhArarlwuwwolNBJ9TxyE9tRNM,359
tests/extensions/templating/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
tests/extensions/templating/__pycache__/__init__.cpython-312.pyc,,
tests/extensions/templating/__pycache__/test_templating.cpython-312.pyc,,
tests/extensions/templating/templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
tests/extensions/templating/templates/__pycache__/__init__.cpython-312.pyc,,
tests/extensions/templating/test_templating.py,sha256=ovVBJrpNnKJqp8n34UZxLCAq_1TYutk2qMdoii33OAc,3902
tests/extensions/test_startup.py,sha256=pXOFL1CaMJ9z-bEhpfhmonWF5mqeURryR0dA3l4ZRM0,1433
tests/extra/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
tests/extra/__models__.py,sha256=5Swev3NJkwHX9RmRuxkHBqRIaN6jb-lD2TQtnG1Vyaw,2225
tests/extra/__pycache__/__init__.cpython-312.pyc,,
tests/extra/__pycache__/__models__.cpython-312.pyc,,
tests/extra/__pycache__/test_parse_hint.cpython-312.pyc,,
tests/extra/__pycache__/test_request_counted.cpython-312.pyc,,
tests/extra/__pycache__/test_serializer.cpython-312.pyc,,
tests/extra/__pycache__/test_validation.cpython-312.pyc,,
tests/extra/__pycache__/test_validation_attrs.cpython-312.pyc,,
tests/extra/__pycache__/test_validation_dataclass.cpython-312.pyc,,
tests/extra/__pycache__/test_validation_msgspec.cpython-312.pyc,,
tests/extra/__pycache__/test_validation_multiple.cpython-312.pyc,,
tests/extra/__pycache__/test_validation_pydantic.cpython-312.pyc,,
tests/extra/test_parse_hint.py,sha256=Vl99-P74b_Bg8K_em8_qtR7FodS5FvebnBrbayILB8E,658
tests/extra/test_request_counted.py,sha256=VJ_jRwRMcGQM2AqoB2FvGp2POYk-NWVEtmmTp2B7bAY,1042
tests/extra/test_serializer.py,sha256=YHpLlxGjfZtLBbp1Q-gDOcQkNOmKXfYAlTxBIHatr6o,1903
tests/extra/test_validation.py,sha256=GD83ByyAh1g4zJcOTOvF5AY68SEnSwZdidqkAK1RXAI,1889
tests/extra/test_validation_attrs.py,sha256=NtBfBK-Wy8s-clYStNtLiG9yEvyyKqT8kwiUibN3V1A,3279
tests/extra/test_validation_dataclass.py,sha256=Py_THhj8zLp239U_0JebCqdU0AraOkpFbCrinX3EFfk,16570
tests/extra/test_validation_msgspec.py,sha256=Jm0B0prnc9me1STcxkQzxYUAOFLFcPr-1fgXO0x-ZLc,16168
tests/extra/test_validation_multiple.py,sha256=cSWr--F28AqubhNHhwd07-iaiobDaRAb6OVIUmS4xXA,907
tests/extra/test_validation_pydantic.py,sha256=AJoByFzUZ9YxHddxe19GYLX7uDIj81B3guRV29uIkKY,4342
@@ -0,0 +1,5 @@
Wheel-Version: 1.0
Generator: setuptools (75.8.2)
Root-Is-Purelib: true
Tag: py3-none-any
@@ -0,0 +1,2 @@
sanic_ext
tests