Updates
This commit is contained in:
@@ -0,0 +1 @@
|
||||
pip
|
||||
@@ -0,0 +1,30 @@
|
||||
Copyright © 2011-present, Encode OSS Ltd.
|
||||
Copyright © 2019-2021, T. Franzel <tfranzel@gmail.com>, Cashlink Technologies GmbH.
|
||||
Copyright © 2021-present, T. Franzel <tfranzel@gmail.com>.
|
||||
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of the copyright holder nor the names of its
|
||||
contributors may be used to endorse or promote products derived from
|
||||
this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
@@ -0,0 +1,359 @@
|
||||
Metadata-Version: 2.1
|
||||
Name: drf-spectacular
|
||||
Version: 0.28.0
|
||||
Summary: Sane and flexible OpenAPI 3 schema generation for Django REST framework
|
||||
Home-page: https://github.com/tfranzel/drf-spectacular
|
||||
Author: T. Franzel
|
||||
Author-email: tfranzel@gmail.com
|
||||
License: BSD
|
||||
Project-URL: Source, https://github.com/tfranzel/drf-spectacular
|
||||
Project-URL: Documentation, https://drf-spectacular.readthedocs.io
|
||||
Classifier: Development Status :: 5 - Production/Stable
|
||||
Classifier: Environment :: Web Environment
|
||||
Classifier: Framework :: Django
|
||||
Classifier: Framework :: Django :: 2.2
|
||||
Classifier: Framework :: Django :: 3.2
|
||||
Classifier: Framework :: Django :: 4.0
|
||||
Classifier: Framework :: Django :: 4.1
|
||||
Classifier: Framework :: Django :: 4.2
|
||||
Classifier: Framework :: Django :: 5.0
|
||||
Classifier: Framework :: Django :: 5.1
|
||||
Classifier: Intended Audience :: Developers
|
||||
Classifier: License :: OSI Approved :: BSD License
|
||||
Classifier: Operating System :: OS Independent
|
||||
Classifier: Natural Language :: English
|
||||
Classifier: Programming Language :: Python :: 3
|
||||
Classifier: Programming Language :: Python :: 3.6
|
||||
Classifier: Programming Language :: Python :: 3.7
|
||||
Classifier: Programming Language :: Python :: 3.8
|
||||
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: Topic :: Internet :: WWW/HTTP
|
||||
Classifier: Topic :: Documentation
|
||||
Classifier: Topic :: Software Development :: Code Generators
|
||||
Requires-Python: >=3.7
|
||||
Description-Content-Type: text/x-rst
|
||||
License-File: LICENSE
|
||||
Requires-Dist: Django>=2.2
|
||||
Requires-Dist: djangorestframework>=3.10.3
|
||||
Requires-Dist: uritemplate>=2.0.0
|
||||
Requires-Dist: PyYAML>=5.1
|
||||
Requires-Dist: jsonschema>=2.6.0
|
||||
Requires-Dist: inflection>=0.3.1
|
||||
Requires-Dist: typing-extensions; python_version < "3.10"
|
||||
Provides-Extra: offline
|
||||
Requires-Dist: drf-spectacular-sidecar; extra == "offline"
|
||||
Provides-Extra: sidecar
|
||||
Requires-Dist: drf-spectacular-sidecar; extra == "sidecar"
|
||||
|
||||
===============
|
||||
drf-spectacular
|
||||
===============
|
||||
|
||||
|build-status| |codecov| |docs| |pypi-version| |pypi-dl|
|
||||
|
||||
Sane and flexible `OpenAPI`_ (`3.0.3`_ & `3.1`_) schema generation for `Django REST framework`_.
|
||||
|
||||
This project has 3 goals:
|
||||
1. Extract as much schema information from DRF as possible.
|
||||
2. Provide flexibility to make the schema usable in the real world (not only toy examples).
|
||||
3. Generate a schema that works well with the most popular client generators.
|
||||
|
||||
The code is a heavily modified fork of the
|
||||
`DRF OpenAPI generator <https://github.com/encode/django-rest-framework/blob/master/rest_framework/schemas/openapi.py/>`_,
|
||||
which is/was lacking all of the below listed features.
|
||||
|
||||
Features
|
||||
- Serializers modelled as components. (arbitrary nesting and recursion supported)
|
||||
- `@extend_schema <https://drf-spectacular.readthedocs.io/en/latest/drf_spectacular.html#drf_spectacular.utils.extend_schema>`_ decorator for customization of APIView, Viewsets, function-based views, and ``@action``
|
||||
- additional parameters
|
||||
- request/response serializer override (with status codes)
|
||||
- polymorphic responses either manually with ``PolymorphicProxySerializer`` helper or via ``rest_polymorphic``'s PolymorphicSerializer)
|
||||
- ... and more customization options
|
||||
- Authentication support (DRF natives included, easily extendable)
|
||||
- Custom serializer class support (easily extendable)
|
||||
- ``SerializerMethodField()`` type via type hinting or ``@extend_schema_field``
|
||||
- i18n support
|
||||
- Tags extraction
|
||||
- Request/response/parameter examples
|
||||
- Description extraction from ``docstrings``
|
||||
- Vendor specification extensions (``x-*``) in info, operations, parameters, components, and security schemes
|
||||
- Sane fallbacks
|
||||
- Sane ``operation_id`` naming (based on path)
|
||||
- Schema serving with ``SpectacularAPIView`` (Redoc and Swagger-UI views are also available)
|
||||
- Optional input/output serializer component split
|
||||
- Callback operations
|
||||
- OpenAPI 3.1 support (via setting ``OAS_VERSION``)
|
||||
- Included support for:
|
||||
- `django-polymorphic <https://github.com/django-polymorphic/django-polymorphic>`_ / `django-rest-polymorphic <https://github.com/apirobot/django-rest-polymorphic>`_
|
||||
- `SimpleJWT <https://github.com/jazzband/djangorestframework-simplejwt>`_
|
||||
- `DjangoOAuthToolkit <https://github.com/jazzband/django-oauth-toolkit>`_
|
||||
- `djangorestframework-jwt <https://github.com/jpadilla/django-rest-framework-jwt>`_ (tested fork `drf-jwt <https://github.com/Styria-Digital/django-rest-framework-jwt>`_)
|
||||
- `dj-rest-auth <https://github.com/iMerica/dj-rest-auth>`_ (maintained fork of `django-rest-auth <https://github.com/Tivix/django-rest-auth>`_)
|
||||
- `djangorestframework-camel-case <https://github.com/vbabiy/djangorestframework-camel-case>`_ (via postprocessing hook ``camelize_serializer_fields``)
|
||||
- `django-filter <https://github.com/carltongibson/django-filter>`_
|
||||
- `drf-nested-routers <https://github.com/alanjds/drf-nested-routers>`_
|
||||
- `djangorestframework-recursive <https://github.com/heywbj/django-rest-framework-recursive>`_
|
||||
- `djangorestframework-dataclasses <https://github.com/oxan/djangorestframework-dataclasses>`_
|
||||
- `django-rest-framework-gis <https://github.com/openwisp/django-rest-framework-gis>`_
|
||||
- `Pydantic (>=2.0) <https://github.com/pydantic/pydantic>`_
|
||||
|
||||
|
||||
For more information visit the `documentation <https://drf-spectacular.readthedocs.io/>`_.
|
||||
|
||||
License
|
||||
-------
|
||||
|
||||
Provided by `T. Franzel <https://github.com/tfranzel>`_. `Licensed under 3-Clause BSD <https://github.com/tfranzel/drf-spectacular/blob/master/LICENSE>`_.
|
||||
|
||||
Requirements
|
||||
------------
|
||||
|
||||
- Python >= 3.7
|
||||
- Django (2.2, 3.2, 4.0, 4.1, 4.2, 5.0)
|
||||
- Django REST Framework (3.10.3, 3.11, 3.12, 3.13, 3.14, 3.15)
|
||||
|
||||
Installation
|
||||
------------
|
||||
|
||||
Install using ``pip``\ ...
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ pip install drf-spectacular
|
||||
|
||||
then add drf-spectacular to installed apps in ``settings.py``
|
||||
|
||||
.. code:: python
|
||||
|
||||
INSTALLED_APPS = [
|
||||
# ALL YOUR APPS
|
||||
'drf_spectacular',
|
||||
]
|
||||
|
||||
|
||||
and finally register our spectacular AutoSchema with DRF.
|
||||
|
||||
.. code:: python
|
||||
|
||||
REST_FRAMEWORK = {
|
||||
# YOUR SETTINGS
|
||||
'DEFAULT_SCHEMA_CLASS': 'drf_spectacular.openapi.AutoSchema',
|
||||
}
|
||||
|
||||
drf-spectacular ships with sane `default settings <https://drf-spectacular.readthedocs.io/en/latest/settings.html>`_
|
||||
that should work reasonably well out of the box. It is not necessary to
|
||||
specify any settings, but we recommend to specify at least some metadata.
|
||||
|
||||
.. code:: python
|
||||
|
||||
SPECTACULAR_SETTINGS = {
|
||||
'TITLE': 'Your Project API',
|
||||
'DESCRIPTION': 'Your project description',
|
||||
'VERSION': '1.0.0',
|
||||
'SERVE_INCLUDE_SCHEMA': False,
|
||||
# OTHER SETTINGS
|
||||
}
|
||||
|
||||
.. _self-contained-ui-installation:
|
||||
|
||||
Self-contained UI installation
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Certain environments have no direct access to the internet and as such are unable
|
||||
to retrieve Swagger UI or Redoc from CDNs. `drf-spectacular-sidecar`_ provides
|
||||
these static files as a separate optional package. Usage is as follows:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ pip install drf-spectacular[sidecar]
|
||||
|
||||
.. code:: python
|
||||
|
||||
INSTALLED_APPS = [
|
||||
# ALL YOUR APPS
|
||||
'drf_spectacular',
|
||||
'drf_spectacular_sidecar', # required for Django collectstatic discovery
|
||||
]
|
||||
SPECTACULAR_SETTINGS = {
|
||||
'SWAGGER_UI_DIST': 'SIDECAR', # shorthand to use the sidecar instead
|
||||
'SWAGGER_UI_FAVICON_HREF': 'SIDECAR',
|
||||
'REDOC_DIST': 'SIDECAR',
|
||||
# OTHER SETTINGS
|
||||
}
|
||||
|
||||
|
||||
Release management
|
||||
^^^^^^^^^^^^^^^^^^
|
||||
|
||||
*drf-spectacular* deliberately stays below version *1.x.x* to signal that every
|
||||
new version may potentially break you. For production we strongly recommend pinning the
|
||||
version and inspecting a schema diff on update.
|
||||
|
||||
With that said, we aim to be extremely defensive w.r.t. breaking API changes. However,
|
||||
we also acknowledge the fact that even slight schema changes may break your toolchain,
|
||||
as any existing bug may somehow also be used as a feature.
|
||||
|
||||
We define version increments with the following semantics. *y-stream* increments may contain
|
||||
potentially breaking changes to both API and schema. *z-stream* increments will never break the
|
||||
API and may only contain schema changes that should have a low chance of breaking you.
|
||||
|
||||
|
||||
Take it for a spin
|
||||
------------------
|
||||
|
||||
Generate your schema with the CLI:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ ./manage.py spectacular --color --file schema.yml
|
||||
$ docker run -p 80:8080 -e SWAGGER_JSON=/schema.yml -v ${PWD}/schema.yml:/schema.yml swaggerapi/swagger-ui
|
||||
|
||||
If you also want to validate your schema add the ``--validate`` flag. Or serve your schema directly
|
||||
from your API. We also provide convenience wrappers for ``swagger-ui`` or ``redoc``.
|
||||
|
||||
.. code:: python
|
||||
|
||||
from drf_spectacular.views import SpectacularAPIView, SpectacularRedocView, SpectacularSwaggerView
|
||||
urlpatterns = [
|
||||
# YOUR PATTERNS
|
||||
path('api/schema/', SpectacularAPIView.as_view(), name='schema'),
|
||||
# Optional UI:
|
||||
path('api/schema/swagger-ui/', SpectacularSwaggerView.as_view(url_name='schema'), name='swagger-ui'),
|
||||
path('api/schema/redoc/', SpectacularRedocView.as_view(url_name='schema'), name='redoc'),
|
||||
]
|
||||
|
||||
Usage
|
||||
-----
|
||||
|
||||
*drf-spectacular* works pretty well out of the box. You might also want to set some metadata for your API.
|
||||
Just create a ``SPECTACULAR_SETTINGS`` dictionary in your ``settings.py`` and override the defaults.
|
||||
Have a look at the `available settings <https://drf-spectacular.readthedocs.io/en/latest/settings.html>`_.
|
||||
|
||||
The toy examples do not cover your cases? No problem, you can heavily customize how your schema will be rendered.
|
||||
|
||||
Customization by using ``@extend_schema``
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Most customization cases should be covered by the ``extend_schema`` decorator. We usually get
|
||||
pretty far with specifying ``OpenApiParameter`` and splitting request/response serializers, but
|
||||
the sky is the limit.
|
||||
|
||||
.. code:: python
|
||||
|
||||
from drf_spectacular.utils import extend_schema, OpenApiParameter, OpenApiExample
|
||||
from drf_spectacular.types import OpenApiTypes
|
||||
|
||||
class AlbumViewset(viewset.ModelViewset):
|
||||
serializer_class = AlbumSerializer
|
||||
|
||||
@extend_schema(
|
||||
request=AlbumCreationSerializer,
|
||||
responses={201: AlbumSerializer},
|
||||
)
|
||||
def create(self, request):
|
||||
# your non-standard behaviour
|
||||
return super().create(request)
|
||||
|
||||
@extend_schema(
|
||||
# extra parameters added to the schema
|
||||
parameters=[
|
||||
OpenApiParameter(name='artist', description='Filter by artist', required=False, type=str),
|
||||
OpenApiParameter(
|
||||
name='release',
|
||||
type=OpenApiTypes.DATE,
|
||||
location=OpenApiParameter.QUERY,
|
||||
description='Filter by release date',
|
||||
examples=[
|
||||
OpenApiExample(
|
||||
'Example 1',
|
||||
summary='short optional summary',
|
||||
description='longer description',
|
||||
value='1993-08-23'
|
||||
),
|
||||
...
|
||||
],
|
||||
),
|
||||
],
|
||||
# override default docstring extraction
|
||||
description='More descriptive text',
|
||||
# provide Authentication class that deviates from the views default
|
||||
auth=None,
|
||||
# change the auto-generated operation name
|
||||
operation_id=None,
|
||||
# or even completely override what AutoSchema would generate. Provide raw Open API spec as Dict.
|
||||
operation=None,
|
||||
# attach request/response examples to the operation.
|
||||
examples=[
|
||||
OpenApiExample(
|
||||
'Example 1',
|
||||
description='longer description',
|
||||
value=...
|
||||
),
|
||||
...
|
||||
],
|
||||
)
|
||||
def list(self, request):
|
||||
# your non-standard behaviour
|
||||
return super().list(request)
|
||||
|
||||
@extend_schema(
|
||||
request=AlbumLikeSerializer,
|
||||
responses={204: None},
|
||||
methods=["POST"]
|
||||
)
|
||||
@extend_schema(description='Override a specific method', methods=["GET"])
|
||||
@action(detail=True, methods=['post', 'get'])
|
||||
def set_password(self, request, pk=None):
|
||||
# your action behaviour
|
||||
...
|
||||
|
||||
More customization
|
||||
^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Still not satisfied? You want more! We still got you covered.
|
||||
Visit `customization <https://drf-spectacular.readthedocs.io/en/latest/customization.html>`_ for more information.
|
||||
|
||||
|
||||
Testing
|
||||
-------
|
||||
|
||||
Install testing requirements.
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ pip install -r requirements.txt
|
||||
|
||||
Run with runtests.
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ ./runtests.py
|
||||
|
||||
You can also use the excellent `tox`_ testing tool to run the tests
|
||||
against all supported versions of Python and Django. Install tox
|
||||
globally, and then simply run:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ tox
|
||||
|
||||
.. _Django REST framework: https://www.django-rest-framework.org/
|
||||
.. _OpenAPI: https://swagger.io/
|
||||
.. _3.0.3: https://spec.openapis.org/oas/v3.0.3
|
||||
.. _3.1: https://spec.openapis.org/oas/v3.1.0
|
||||
.. _tox: https://tox.wiki/
|
||||
.. _drf-spectacular-sidecar: https://github.com/tfranzel/drf-spectacular-sidecar
|
||||
|
||||
.. |build-status| image:: https://github.com/tfranzel/drf-spectacular/actions/workflows/ci.yml/badge.svg
|
||||
:target: https://github.com/tfranzel/drf-spectacular/actions/workflows/ci.yml
|
||||
.. |pypi-version| image:: https://img.shields.io/pypi/v/drf-spectacular.svg
|
||||
:target: https://pypi.org/project/drf-spectacular/
|
||||
.. |codecov| image:: https://codecov.io/gh/tfranzel/drf-spectacular/branch/master/graph/badge.svg
|
||||
:target: https://codecov.io/gh/tfranzel/drf-spectacular
|
||||
.. |docs| image:: https://readthedocs.org/projects/drf-spectacular/badge/
|
||||
:target: https://drf-spectacular.readthedocs.io/
|
||||
.. |pypi-dl| image:: https://img.shields.io/pypi/dm/drf-spectacular
|
||||
:target: https://pypi.org/project/drf-spectacular/
|
||||
@@ -0,0 +1,83 @@
|
||||
drf_spectacular-0.28.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
||||
drf_spectacular-0.28.0.dist-info/LICENSE,sha256=QYOFgQ6OE21kX9uZ9cPYrBpSTI4Eli12oKzinGUAGVM,1646
|
||||
drf_spectacular-0.28.0.dist-info/METADATA,sha256=IoV3VfI6NuzMMmUsJeqi3CTvGjL8_JGQXulINYhh_Rw,14218
|
||||
drf_spectacular-0.28.0.dist-info/RECORD,,
|
||||
drf_spectacular-0.28.0.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
||||
drf_spectacular-0.28.0.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
|
||||
drf_spectacular-0.28.0.dist-info/top_level.txt,sha256=hQTyZgYWQaodX0YT-ugk6FZUaeg6dzSGF0l5peXNs8k,16
|
||||
drf_spectacular/__init__.py,sha256=cV5prtSsCfRXCGRgZjJjxh7KPRrZr_fKRPIJw8pLziI,133
|
||||
drf_spectacular/__pycache__/__init__.cpython-312.pyc,,
|
||||
drf_spectacular/__pycache__/apps.cpython-312.pyc,,
|
||||
drf_spectacular/__pycache__/authentication.cpython-312.pyc,,
|
||||
drf_spectacular/__pycache__/checks.cpython-312.pyc,,
|
||||
drf_spectacular/__pycache__/drainage.cpython-312.pyc,,
|
||||
drf_spectacular/__pycache__/extensions.cpython-312.pyc,,
|
||||
drf_spectacular/__pycache__/generators.cpython-312.pyc,,
|
||||
drf_spectacular/__pycache__/helpers.cpython-312.pyc,,
|
||||
drf_spectacular/__pycache__/hooks.cpython-312.pyc,,
|
||||
drf_spectacular/__pycache__/openapi.cpython-312.pyc,,
|
||||
drf_spectacular/__pycache__/plumbing.cpython-312.pyc,,
|
||||
drf_spectacular/__pycache__/renderers.cpython-312.pyc,,
|
||||
drf_spectacular/__pycache__/serializers.cpython-312.pyc,,
|
||||
drf_spectacular/__pycache__/settings.cpython-312.pyc,,
|
||||
drf_spectacular/__pycache__/types.cpython-312.pyc,,
|
||||
drf_spectacular/__pycache__/utils.cpython-312.pyc,,
|
||||
drf_spectacular/__pycache__/views.cpython-312.pyc,,
|
||||
drf_spectacular/apps.py,sha256=zDCZJ3QNHLVtN2SIyNm_1s4QOAMmHOesS6X7YjZgS5k,212
|
||||
drf_spectacular/authentication.py,sha256=ldCdXPZRSEDbqSx4zaGn46aeciyz3AiaiyF_HBMoWdM,1234
|
||||
drf_spectacular/checks.py,sha256=9aszmP_N0uyJqByBXZ_dK-laq0ljEZaCrBbDp3O8OGk,999
|
||||
drf_spectacular/contrib/__init__.py,sha256=poIlUpgG6NhGu7NTwNR6AhGjin6p0JhAAt6St1fVxx0,354
|
||||
drf_spectacular/contrib/__pycache__/__init__.cpython-312.pyc,,
|
||||
drf_spectacular/contrib/__pycache__/django_filters.cpython-312.pyc,,
|
||||
drf_spectacular/contrib/__pycache__/django_oauth_toolkit.cpython-312.pyc,,
|
||||
drf_spectacular/contrib/__pycache__/djangorestframework_camel_case.cpython-312.pyc,,
|
||||
drf_spectacular/contrib/__pycache__/knox_auth_token.cpython-312.pyc,,
|
||||
drf_spectacular/contrib/__pycache__/pydantic.cpython-312.pyc,,
|
||||
drf_spectacular/contrib/__pycache__/rest_auth.cpython-312.pyc,,
|
||||
drf_spectacular/contrib/__pycache__/rest_framework.cpython-312.pyc,,
|
||||
drf_spectacular/contrib/__pycache__/rest_framework_dataclasses.cpython-312.pyc,,
|
||||
drf_spectacular/contrib/__pycache__/rest_framework_gis.cpython-312.pyc,,
|
||||
drf_spectacular/contrib/__pycache__/rest_framework_jwt.cpython-312.pyc,,
|
||||
drf_spectacular/contrib/__pycache__/rest_framework_recursive.cpython-312.pyc,,
|
||||
drf_spectacular/contrib/__pycache__/rest_framework_simplejwt.cpython-312.pyc,,
|
||||
drf_spectacular/contrib/__pycache__/rest_polymorphic.cpython-312.pyc,,
|
||||
drf_spectacular/contrib/django_filters.py,sha256=tp6kc7fxc2-a-LgxEs5pNrKxlFocjF81KSiaAoHBidw,13785
|
||||
drf_spectacular/contrib/django_oauth_toolkit.py,sha256=8MOIQ4vU_cxe28S-py9QzwJaN8eFc-EGBe_96wm6cEg,2366
|
||||
drf_spectacular/contrib/djangorestframework_camel_case.py,sha256=aA6KdHthYNtvbV1wWWwLmjmtobPTXhrpLjSxu_gDyv0,2617
|
||||
drf_spectacular/contrib/knox_auth_token.py,sha256=hbAk57CMEb4aYXZT_Ed5C-CGqtLDaPS8Iu5mXozr0vQ,495
|
||||
drf_spectacular/contrib/pydantic.py,sha256=oiFP-hOT2DFOCOiC2_8X_ep7UcH9YSVVL-nigD-WITQ,2244
|
||||
drf_spectacular/contrib/rest_auth.py,sha256=oft9cRhik-PCHvDHJx-RjkCuDVnoUpjF0SmUxuvEuKs,5689
|
||||
drf_spectacular/contrib/rest_framework.py,sha256=UGr8dNgQvwTn97hdi9s1uxXynfmBd5FqqXL1h05Ev4U,1213
|
||||
drf_spectacular/contrib/rest_framework_dataclasses.py,sha256=FTCllwxuZztjwWVzjS3tDWnXuVLaQ_3CJuWFjFKEiLs,1876
|
||||
drf_spectacular/contrib/rest_framework_gis.py,sha256=hEilPs8R3E4N3o3PwqQFL4hvnJ0RS4kLurTIjO_528Y,7906
|
||||
drf_spectacular/contrib/rest_framework_jwt.py,sha256=sOiFPnh2p0DP-a7ukETgXrkjWEHrUTCfOmmkxZ1SLF8,609
|
||||
drf_spectacular/contrib/rest_framework_recursive.py,sha256=RG8O7i-rq3AdqgBOcHckhjLmdPEg9fKbjo2-dx80deA,652
|
||||
drf_spectacular/contrib/rest_framework_simplejwt.py,sha256=twBKYZWG4ZOycKOL3AwmUeJM1MWws4kHgrQ-q6HbDLw,3637
|
||||
drf_spectacular/contrib/rest_polymorphic.py,sha256=TQcHzIWTZDFXdDSbL7xUAU-jZKUoeb2PCPNQI08Pwzs,3510
|
||||
drf_spectacular/drainage.py,sha256=DEjmZyT4Hm6AIrv2-0dQWt9S74lR8N4fAYgx8KuUciY,7398
|
||||
drf_spectacular/extensions.py,sha256=F0X8jNF7r4TKPn60gvKKEcZplQU4wqTWFEhgrRR0QfE,6325
|
||||
drf_spectacular/generators.py,sha256=4sD2FcLGUSduSMS-n0yRAxAIDF-xBs-eqvl6DLqrGo4,13104
|
||||
drf_spectacular/helpers.py,sha256=oScO_1VuXQKEWqWLoWtVzKMJg5pzDUEN69SbHvHHXL8,1369
|
||||
drf_spectacular/hooks.py,sha256=FofG394vvHTpUHFEjf6d9mdr55bsIHY99odjpXdCQVI,10126
|
||||
drf_spectacular/management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
||||
drf_spectacular/management/__pycache__/__init__.cpython-312.pyc,,
|
||||
drf_spectacular/management/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
||||
drf_spectacular/management/commands/__pycache__/__init__.cpython-312.pyc,,
|
||||
drf_spectacular/management/commands/__pycache__/spectacular.cpython-312.pyc,,
|
||||
drf_spectacular/management/commands/spectacular.py,sha256=jVoZ5Ln0Rk1KDjrQ7WnWlNEBPdiZ2Q3byEZr9HWBnyA,3907
|
||||
drf_spectacular/openapi.py,sha256=0IgoALjRYyBun7wz9i96tXW9llGKgSj9WLR3G4tTAnA,76364
|
||||
drf_spectacular/plumbing.py,sha256=zKSBstjWsb55wBk5cLNBWWNY9qZtsDTSpeFyDtRY1qk,57366
|
||||
drf_spectacular/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
||||
drf_spectacular/renderers.py,sha256=VM0l-roiJr77l1a7Rga7z_uXIxzpXEjR1hRVDIbjF-Y,2997
|
||||
drf_spectacular/serializers.py,sha256=xZU0ww6esXeOgB4-Y53-omTpbUywF2QOio9tKBugfjU,4456
|
||||
drf_spectacular/settings.py,sha256=q3L4eKyz1XSXNCsUDllq2kU_oMTEIN6a66B-1t9kJWw,14136
|
||||
drf_spectacular/templates/drf_spectacular/redoc.html,sha256=lzNZBn6Ca0-CnYnm6cE0fJSX2YQhKXkjR8nCO6BNeBY,1118
|
||||
drf_spectacular/templates/drf_spectacular/swagger_ui.html,sha256=TR4ZUxdVBxCkHUhr1LlJavmT5YRY-ABfWhu1MZZ-3Eg,924
|
||||
drf_spectacular/templates/drf_spectacular/swagger_ui.js,sha256=0Mjhaxp1Z6LSd9_9rULHQlf43O6paVHRWPFdD8w-ct8,3804
|
||||
drf_spectacular/types.py,sha256=fFIajFqzo5P__vhZ6ejDPpad1H8kdTLLAlw0Ih8DLRU,7684
|
||||
drf_spectacular/utils.py,sha256=1fWFscRdyu3womDhRDUFHILjmGFeHg75EPo47UksQEE,29939
|
||||
drf_spectacular/validation/__init__.py,sha256=zBRkiLGrMbkFmIPIWyixVEL1dOO4a-Lt29-spyM4ltA,1446
|
||||
drf_spectacular/validation/__pycache__/__init__.cpython-312.pyc,,
|
||||
drf_spectacular/validation/openapi_3_0_schema.json,sha256=Q9qfIPZwU17pohQYXQZqh5ZklCDM_ZQil49RtSgaVkg,35816
|
||||
drf_spectacular/validation/openapi_3_1_schema.json,sha256=Bk8Gm_pfHwdvs8ORXvjlD64-sPry8yn-5ta2GcGfsQw,34246
|
||||
drf_spectacular/views.py,sha256=cZsbyWz-KVoiD49il_kNvE3QFT92k4Z8dBDy39GahI8,12159
|
||||
@@ -0,0 +1,5 @@
|
||||
Wheel-Version: 1.0
|
||||
Generator: setuptools (75.6.0)
|
||||
Root-Is-Purelib: true
|
||||
Tag: py3-none-any
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
drf_spectacular
|
||||
Reference in New Issue
Block a user