143 lines
4.3 KiB
Python
143 lines
4.3 KiB
Python
from django.conf import settings
|
|
from rest_framework.settings import perform_import
|
|
|
|
SWAGGER_DEFAULTS = {
|
|
"DEFAULT_GENERATOR_CLASS": "drf_yasg.generators.OpenAPISchemaGenerator",
|
|
"DEFAULT_AUTO_SCHEMA_CLASS": "drf_yasg.inspectors.SwaggerAutoSchema",
|
|
"DEFAULT_FIELD_INSPECTORS": [
|
|
"drf_yasg.inspectors.CamelCaseJSONFilter",
|
|
"drf_yasg.inspectors.RecursiveFieldInspector",
|
|
"drf_yasg.inspectors.ReferencingSerializerInspector",
|
|
"drf_yasg.inspectors.ChoiceFieldInspector",
|
|
"drf_yasg.inspectors.FileFieldInspector",
|
|
"drf_yasg.inspectors.DictFieldInspector",
|
|
"drf_yasg.inspectors.JSONFieldInspector",
|
|
"drf_yasg.inspectors.HiddenFieldInspector",
|
|
"drf_yasg.inspectors.RelatedFieldInspector",
|
|
"drf_yasg.inspectors.SerializerMethodFieldInspector",
|
|
"drf_yasg.inspectors.SimpleFieldInspector",
|
|
"drf_yasg.inspectors.StringDefaultFieldInspector",
|
|
],
|
|
"DEFAULT_FILTER_INSPECTORS": [
|
|
"drf_yasg.inspectors.DrfAPICompatInspector",
|
|
"drf_yasg.inspectors.CoreAPICompatInspector",
|
|
],
|
|
"DEFAULT_PAGINATOR_INSPECTORS": [
|
|
"drf_yasg.inspectors.DjangoRestResponsePagination",
|
|
"drf_yasg.inspectors.DrfAPICompatInspector",
|
|
"drf_yasg.inspectors.CoreAPICompatInspector",
|
|
],
|
|
"DEFAULT_SPEC_RENDERERS": [
|
|
"drf_yasg.renderers.SwaggerYAMLRenderer",
|
|
"drf_yasg.renderers.SwaggerJSONRenderer",
|
|
"drf_yasg.renderers.OpenAPIRenderer",
|
|
],
|
|
"EXCLUDED_MEDIA_TYPES": ["html"],
|
|
"DEFAULT_INFO": None,
|
|
"DEFAULT_API_URL": None,
|
|
"USE_SESSION_AUTH": True,
|
|
"USE_COMPAT_RENDERERS": getattr(settings, "SWAGGER_USE_COMPAT_RENDERERS", True),
|
|
"CSRF_COOKIE_NAME": settings.CSRF_COOKIE_NAME,
|
|
"CSRF_HEADER_NAME": settings.CSRF_HEADER_NAME,
|
|
"SECURITY_DEFINITIONS": {"Basic": {"type": "basic"}},
|
|
"SECURITY_REQUIREMENTS": None,
|
|
"LOGIN_URL": getattr(settings, "LOGIN_URL", None),
|
|
"LOGOUT_URL": "/accounts/logout/",
|
|
"SPEC_URL": None,
|
|
"VALIDATOR_URL": "",
|
|
"PERSIST_AUTH": False,
|
|
"REFETCH_SCHEMA_WITH_AUTH": False,
|
|
"REFETCH_SCHEMA_ON_LOGOUT": False,
|
|
"FETCH_SCHEMA_WITH_QUERY": True,
|
|
"OPERATIONS_SORTER": None,
|
|
"TAGS_SORTER": None,
|
|
"DOC_EXPANSION": "list",
|
|
"DEEP_LINKING": False,
|
|
"SHOW_EXTENSIONS": True,
|
|
"DEFAULT_MODEL_RENDERING": "model",
|
|
"DEFAULT_MODEL_DEPTH": 3,
|
|
"SHOW_COMMON_EXTENSIONS": True,
|
|
"OAUTH2_REDIRECT_URL": None,
|
|
"OAUTH2_CONFIG": {},
|
|
"SUPPORTED_SUBMIT_METHODS": [
|
|
"get",
|
|
"put",
|
|
"post",
|
|
"delete",
|
|
"options",
|
|
"head",
|
|
"patch",
|
|
"trace",
|
|
],
|
|
"DISPLAY_OPERATION_ID": True,
|
|
}
|
|
|
|
REDOC_DEFAULTS = {
|
|
"SPEC_URL": None,
|
|
"LAZY_RENDERING": False,
|
|
"HIDE_HOSTNAME": False,
|
|
"EXPAND_RESPONSES": "all",
|
|
"PATH_IN_MIDDLE": False,
|
|
"NATIVE_SCROLLBARS": False,
|
|
"REQUIRED_PROPS_FIRST": False,
|
|
"FETCH_SCHEMA_WITH_QUERY": True,
|
|
"HIDE_DOWNLOAD_BUTTON": False,
|
|
}
|
|
|
|
IMPORT_STRINGS = [
|
|
"DEFAULT_GENERATOR_CLASS",
|
|
"DEFAULT_AUTO_SCHEMA_CLASS",
|
|
"DEFAULT_FIELD_INSPECTORS",
|
|
"DEFAULT_FILTER_INSPECTORS",
|
|
"DEFAULT_PAGINATOR_INSPECTORS",
|
|
"DEFAULT_SPEC_RENDERERS",
|
|
"DEFAULT_INFO",
|
|
]
|
|
|
|
|
|
class AppSettings:
|
|
"""
|
|
Stolen from Django Rest Framework, removed caching for easier testing
|
|
"""
|
|
|
|
def __init__(self, user_settings, defaults, import_strings=None):
|
|
self._user_settings = user_settings
|
|
self.defaults = defaults
|
|
self.import_strings = import_strings or []
|
|
|
|
@property
|
|
def user_settings(self):
|
|
return getattr(settings, self._user_settings, {})
|
|
|
|
def __getattr__(self, attr):
|
|
if attr not in self.defaults:
|
|
raise AttributeError("Invalid setting: '%s'" % attr) # pragma: no cover
|
|
|
|
try:
|
|
# Check if present in user settings
|
|
val = self.user_settings[attr]
|
|
except KeyError:
|
|
# Fall back to defaults
|
|
val = self.defaults[attr]
|
|
|
|
# Coerce import strings into classes
|
|
if attr in self.import_strings:
|
|
val = perform_import(val, attr)
|
|
|
|
return val
|
|
|
|
|
|
#:
|
|
swagger_settings = AppSettings(
|
|
user_settings="SWAGGER_SETTINGS",
|
|
defaults=SWAGGER_DEFAULTS,
|
|
import_strings=IMPORT_STRINGS,
|
|
)
|
|
|
|
#:
|
|
redoc_settings = AppSettings(
|
|
user_settings="REDOC_SETTINGS",
|
|
defaults=REDOC_DEFAULTS,
|
|
import_strings=IMPORT_STRINGS,
|
|
)
|