app_settings.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. from django.conf import settings
  2. from rest_framework.settings import perform_import
  3. SWAGGER_DEFAULTS = {
  4. 'DEFAULT_GENERATOR_CLASS': 'drf_yasg.generators.OpenAPISchemaGenerator',
  5. 'DEFAULT_AUTO_SCHEMA_CLASS': 'drf_yasg.inspectors.SwaggerAutoSchema',
  6. 'DEFAULT_FIELD_INSPECTORS': [
  7. 'drf_yasg.inspectors.CamelCaseJSONFilter',
  8. 'drf_yasg.inspectors.RecursiveFieldInspector',
  9. 'drf_yasg.inspectors.ReferencingSerializerInspector',
  10. 'drf_yasg.inspectors.ChoiceFieldInspector',
  11. 'drf_yasg.inspectors.FileFieldInspector',
  12. 'drf_yasg.inspectors.DictFieldInspector',
  13. 'drf_yasg.inspectors.JSONFieldInspector',
  14. 'drf_yasg.inspectors.HiddenFieldInspector',
  15. 'drf_yasg.inspectors.RelatedFieldInspector',
  16. 'drf_yasg.inspectors.SerializerMethodFieldInspector',
  17. 'drf_yasg.inspectors.SimpleFieldInspector',
  18. 'drf_yasg.inspectors.StringDefaultFieldInspector',
  19. ],
  20. 'DEFAULT_FILTER_INSPECTORS': [
  21. 'drf_yasg.inspectors.CoreAPICompatInspector',
  22. ],
  23. 'DEFAULT_PAGINATOR_INSPECTORS': [
  24. 'drf_yasg.inspectors.DjangoRestResponsePagination',
  25. 'drf_yasg.inspectors.CoreAPICompatInspector',
  26. ],
  27. 'EXCLUDED_MEDIA_TYPES': ['html'],
  28. 'DEFAULT_INFO': None,
  29. 'DEFAULT_API_URL': None,
  30. 'USE_SESSION_AUTH': True,
  31. 'SECURITY_DEFINITIONS': {
  32. 'Basic': {
  33. 'type': 'basic'
  34. }
  35. },
  36. 'SECURITY_REQUIREMENTS': None,
  37. 'LOGIN_URL': getattr(settings, 'LOGIN_URL', None),
  38. 'LOGOUT_URL': '/accounts/logout/',
  39. 'SPEC_URL': None,
  40. 'VALIDATOR_URL': '',
  41. 'PERSIST_AUTH': False,
  42. 'REFETCH_SCHEMA_WITH_AUTH': False,
  43. 'REFETCH_SCHEMA_ON_LOGOUT': False,
  44. 'FETCH_SCHEMA_WITH_QUERY': True,
  45. 'OPERATIONS_SORTER': None,
  46. 'TAGS_SORTER': None,
  47. 'DOC_EXPANSION': 'list',
  48. 'DEEP_LINKING': False,
  49. 'SHOW_EXTENSIONS': True,
  50. 'DEFAULT_MODEL_RENDERING': 'model',
  51. 'DEFAULT_MODEL_DEPTH': 3,
  52. 'SHOW_COMMON_EXTENSIONS': True,
  53. 'OAUTH2_REDIRECT_URL': None,
  54. 'OAUTH2_CONFIG': {},
  55. 'SUPPORTED_SUBMIT_METHODS': [
  56. 'get',
  57. 'put',
  58. 'post',
  59. 'delete',
  60. 'options',
  61. 'head',
  62. 'patch',
  63. 'trace'
  64. ],
  65. 'DISPLAY_OPERATION_ID': True,
  66. }
  67. REDOC_DEFAULTS = {
  68. 'SPEC_URL': None,
  69. 'LAZY_RENDERING': False,
  70. 'HIDE_HOSTNAME': False,
  71. 'EXPAND_RESPONSES': 'all',
  72. 'PATH_IN_MIDDLE': False,
  73. 'NATIVE_SCROLLBARS': False,
  74. 'REQUIRED_PROPS_FIRST': False,
  75. 'FETCH_SCHEMA_WITH_QUERY': True,
  76. }
  77. IMPORT_STRINGS = [
  78. 'DEFAULT_GENERATOR_CLASS',
  79. 'DEFAULT_AUTO_SCHEMA_CLASS',
  80. 'DEFAULT_FIELD_INSPECTORS',
  81. 'DEFAULT_FILTER_INSPECTORS',
  82. 'DEFAULT_PAGINATOR_INSPECTORS',
  83. 'DEFAULT_INFO',
  84. ]
  85. class AppSettings(object):
  86. """
  87. Stolen from Django Rest Framework, removed caching for easier testing
  88. """
  89. def __init__(self, user_settings, defaults, import_strings=None):
  90. self._user_settings = user_settings
  91. self.defaults = defaults
  92. self.import_strings = import_strings or []
  93. @property
  94. def user_settings(self):
  95. return getattr(settings, self._user_settings, {})
  96. def __getattr__(self, attr):
  97. if attr not in self.defaults:
  98. raise AttributeError("Invalid setting: '%s'" % attr) # pragma: no cover
  99. try:
  100. # Check if present in user settings
  101. val = self.user_settings[attr]
  102. except KeyError:
  103. # Fall back to defaults
  104. val = self.defaults[attr]
  105. # Coerce import strings into classes
  106. if attr in self.import_strings:
  107. val = perform_import(val, attr)
  108. return val
  109. #:
  110. swagger_settings = AppSettings(
  111. user_settings='SWAGGER_SETTINGS',
  112. defaults=SWAGGER_DEFAULTS,
  113. import_strings=IMPORT_STRINGS,
  114. )
  115. #:
  116. redoc_settings = AppSettings(
  117. user_settings='REDOC_SETTINGS',
  118. defaults=REDOC_DEFAULTS,
  119. import_strings=IMPORT_STRINGS,
  120. )