mirror of
https://github.com/ansible/awx.git
synced 2026-01-24 07:51:23 -03:30
64 lines
2.4 KiB
Python
64 lines
2.4 KiB
Python
import warnings
|
|
|
|
from rest_framework.permissions import AllowAny
|
|
from rest_framework.schemas import SchemaGenerator, AutoSchema as DRFAuthSchema
|
|
|
|
from drf_yasg.views import get_schema_view
|
|
from drf_yasg import openapi
|
|
|
|
|
|
class SuperUserSchemaGenerator(SchemaGenerator):
|
|
def has_view_permissions(self, path, method, view):
|
|
#
|
|
# Generate the Swagger schema as if you were a superuser and
|
|
# permissions didn't matter; this short-circuits the schema path
|
|
# discovery to include _all_ potential paths in the API.
|
|
#
|
|
return True
|
|
|
|
|
|
class AutoSchema(DRFAuthSchema):
|
|
def get_link(self, path, method, base_url):
|
|
link = super(AutoSchema, self).get_link(path, method, base_url)
|
|
try:
|
|
serializer = self.view.get_serializer()
|
|
except Exception:
|
|
serializer = None
|
|
warnings.warn(
|
|
'{}.get_serializer() raised an exception during '
|
|
'schema generation. Serializer fields will not be '
|
|
'generated for {} {}.'.format(self.view.__class__.__name__, method, path)
|
|
)
|
|
|
|
link.__dict__['deprecated'] = getattr(self.view, 'deprecated', False)
|
|
|
|
# auto-generate a topic/tag for the serializer based on its model
|
|
if hasattr(self.view, 'swagger_topic'):
|
|
link.__dict__['topic'] = str(self.view.swagger_topic).title()
|
|
elif serializer and hasattr(serializer, 'Meta'):
|
|
link.__dict__['topic'] = str(serializer.Meta.model._meta.verbose_name_plural).title()
|
|
elif hasattr(self.view, 'model'):
|
|
link.__dict__['topic'] = str(self.view.model._meta.verbose_name_plural).title()
|
|
else:
|
|
warnings.warn('Could not determine a Swagger tag for path {}'.format(path))
|
|
return link
|
|
|
|
def get_description(self, path, method):
|
|
setattr(self.view.request, 'swagger_method', method)
|
|
description = super(AutoSchema, self).get_description(path, method)
|
|
return description
|
|
|
|
|
|
schema_view = get_schema_view(
|
|
openapi.Info(
|
|
title="Snippets API",
|
|
default_version='v1',
|
|
description="Test description",
|
|
terms_of_service="https://www.google.com/policies/terms/",
|
|
contact=openapi.Contact(email="contact@snippets.local"),
|
|
license=openapi.License(name="BSD License"),
|
|
),
|
|
public=True,
|
|
permission_classes=[AllowAny],
|
|
)
|