-
Notifications
You must be signed in to change notification settings - Fork 2.8k
Expand file tree
/
Copy pathinit_doc.py
More file actions
80 lines (61 loc) · 3.1 KB
/
init_doc.py
File metadata and controls
80 lines (61 loc) · 3.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# coding=utf-8
"""
@project: maxkb
@Author:虎
@file: init_doc.py
@date:2024/5/24 14:11
@desc:
"""
import hashlib
from django.urls import path, URLPattern
from drf_spectacular.views import SpectacularAPIView, SpectacularSwaggerView, SpectacularRedocView
from maxkb.const import CONFIG
chat_api_prefix = CONFIG.get_chat_path()[1:] + '/api/'
def init_app_doc(system_urlpatterns):
system_urlpatterns += [
path(f'{CONFIG.get_admin_path()[1:]}/api-doc/schema/', SpectacularAPIView.as_view(), name='schema'),
# schema的配置文件的路由,下面两个ui也是根据这个配置文件来生成的
path(f'{CONFIG.get_admin_path()[1:]}/api-doc/', SpectacularSwaggerView.as_view(url_name='schema'),
name='swagger-ui'), # swagger-ui的路由
]
class ChatSpectacularSwaggerView(SpectacularSwaggerView):
@staticmethod
def _swagger_ui_resource(filename):
return f'{CONFIG.get_chat_path()}/api-doc/swagger-ui-dist/{filename}'
@staticmethod
def _swagger_ui_favicon():
return f'{CONFIG.get_chat_path()}/api-doc/swagger-ui-dist/favicon-32x32.png'
def init_chat_doc(system_urlpatterns, chat_urlpatterns):
system_urlpatterns += [
path(f'{CONFIG.get_chat_path()[1:]}/api-doc/schema/',
SpectacularAPIView.as_view(patterns=[
URLPattern(pattern=f'{chat_api_prefix}{str(url.pattern)}', callback=url.callback,
default_args=url.default_args,
name=url.name) for url in chat_urlpatterns if
['chat', 'open', 'profile'].__contains__(url.name)]),
name='chat_schema'), # schema的配置文件的路由,下面两个ui也是根据这个配置文件来生成的
path(f'{CONFIG.get_chat_path()[1:]}/api-doc/', ChatSpectacularSwaggerView.as_view(url_name='chat_schema'),
name='swagger-ui'), # swagger-ui的路由
]
def encrypt(text):
md5 = hashlib.md5()
md5.update(text.encode())
result = md5.hexdigest()
return result
def get_call(application_urlpatterns, patterns, params, func):
def run():
if params['valid']():
func(*params['get_params'](application_urlpatterns, patterns))
return run
init_list = [(init_app_doc, {'valid': lambda: CONFIG.get('DOC_PASSWORD') is not None and encrypt(
CONFIG.get('DOC_PASSWORD')) == 'd4fc097197b4b90a122b92cbd5bbe867',
'get_call': get_call,
'get_params': lambda application_urlpatterns, patterns: (application_urlpatterns,)}),
(init_chat_doc, {'valid': lambda: CONFIG.get('DOC_PASSWORD') is not None and encrypt(
CONFIG.get('DOC_PASSWORD')) == 'd4fc097197b4b90a122b92cbd5bbe867' or True, 'get_call': get_call,
'get_params': lambda application_urlpatterns, patterns: (
application_urlpatterns, patterns)})]
def init_doc(system_urlpatterns, chat_patterns):
for init, params in init_list:
if params['valid']():
get_call(system_urlpatterns, chat_patterns, params, init)()