lesscode-flask 0.1.67__tar.gz → 0.1.68__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/PKG-INFO +1 -1
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/lesscode_flask/__init__.py +1 -1
- lesscode_flask-0.1.67/lesscode_flask/utils/dify.py → lesscode_flask-0.1.68/lesscode_flask/utils/dify_utils.py +161 -90
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/lesscode_flask.egg-info/PKG-INFO +1 -1
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/lesscode_flask.egg-info/SOURCES.txt +1 -1
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/README.md +0 -0
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/lesscode_flask/app.py +0 -0
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/lesscode_flask/db/__init__.py +0 -0
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/lesscode_flask/db/datasource.py +0 -0
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/lesscode_flask/db/executor.py +0 -0
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/lesscode_flask/export_data/__init__.py +0 -0
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/lesscode_flask/export_data/data_download_handler.py +0 -0
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/lesscode_flask/log/access_log_handler.py +0 -0
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/lesscode_flask/model/access_log.py +0 -0
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/lesscode_flask/model/base_model.py +0 -0
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/lesscode_flask/model/parameterized_query.py +0 -0
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/lesscode_flask/model/resource_param_template.py +0 -0
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/lesscode_flask/model/response_result.py +0 -0
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/lesscode_flask/model/user.py +0 -0
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/lesscode_flask/service/access_log_service.py +0 -0
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/lesscode_flask/service/base_service.py +0 -0
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/lesscode_flask/service/resource_param_template_service.py +0 -0
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/lesscode_flask/setting/__init__.py +0 -0
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/lesscode_flask/setup/__init__.py +0 -0
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/lesscode_flask/signals.py +0 -0
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/lesscode_flask/static/swagger.py +0 -0
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/lesscode_flask/utils/__init__.py +0 -0
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/lesscode_flask/utils/decorator/__init__.py +0 -0
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/lesscode_flask/utils/decorator/cache.py +0 -0
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/lesscode_flask/utils/decorator/swagger.py +0 -0
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/lesscode_flask/utils/file/file_exporter.py +0 -0
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/lesscode_flask/utils/file/file_utils.py +0 -0
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/lesscode_flask/utils/helpers.py +0 -0
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/lesscode_flask/utils/json/NotSortJSONProvider.py +0 -0
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/lesscode_flask/utils/oss/__init__.py +0 -0
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/lesscode_flask/utils/oss/ks3_oss.py +0 -0
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/lesscode_flask/utils/redis/redis_helper.py +0 -0
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/lesscode_flask/utils/request/request.py +0 -0
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/lesscode_flask/utils/swagger/swagger_template.py +0 -0
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/lesscode_flask/utils/swagger/swagger_util.py +0 -0
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/lesscode_flask/utils/task/__init__.py +0 -0
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/lesscode_flask/utils/task/task_helper.py +0 -0
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/lesscode_flask/utils/thread/thread_utils.py +0 -0
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/lesscode_flask/wsgi.py +0 -0
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/lesscode_flask.egg-info/dependency_links.txt +0 -0
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/lesscode_flask.egg-info/requires.txt +0 -0
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/lesscode_flask.egg-info/top_level.txt +0 -0
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/redash/query_runner/__init__.py +0 -0
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/redash/query_runner/clickhouse.py +0 -0
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/redash/query_runner/elasticsearch.py +0 -0
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/redash/query_runner/kingbase.py +0 -0
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/redash/query_runner/mysql.py +0 -0
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/redash/query_runner/pg.py +0 -0
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/redash/settings/__init__.py +0 -0
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/redash/settings/helpers.py +0 -0
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/redash/utils/__init__.py +0 -0
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/redash/utils/requests_session.py +0 -0
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/setup.cfg +0 -0
- {lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/setup.py +0 -0
|
@@ -1,71 +1,10 @@
|
|
|
1
|
-
import json
|
|
2
1
|
import uuid
|
|
3
2
|
|
|
4
3
|
import requests
|
|
5
|
-
from flask import current_app
|
|
6
4
|
|
|
7
|
-
from lesscode_flask.model.user import flask_login
|
|
8
5
|
from lesscode_flask.utils.helpers import app_config
|
|
9
6
|
|
|
10
7
|
|
|
11
|
-
# def dify_messages(dify_server_url: str, api_key, query: str = None, inputs: dict = None, response_mode="streaming",
|
|
12
|
-
# mode: str = "chat", user_id: str = None, conversation_id: str = ""):
|
|
13
|
-
# """
|
|
14
|
-
# 调用dify 的应用api接口
|
|
15
|
-
#
|
|
16
|
-
# :param dify_server_url: dify服务地址
|
|
17
|
-
# :param api_key: api key
|
|
18
|
-
# :param query: 用户查询语句
|
|
19
|
-
# :param inputs: 调用参数
|
|
20
|
-
# :param response_mode: 响应类型 streaming:流式
|
|
21
|
-
# :param mode: 应用类型(# 聊天助手:chat 文本生成:completion 聊天流程:advanced-chat 工作流:workflow Agent:agent-chat)
|
|
22
|
-
# :param user_id: 调用人user_id
|
|
23
|
-
# :return:
|
|
24
|
-
# """
|
|
25
|
-
# if user_id is None:
|
|
26
|
-
# user_id = uuid.uuid4().hex
|
|
27
|
-
# data = {
|
|
28
|
-
# "inputs": inputs,
|
|
29
|
-
# "response_mode": response_mode,
|
|
30
|
-
# "user": user_id,
|
|
31
|
-
# "conversation_id": conversation_id
|
|
32
|
-
# }
|
|
33
|
-
# if "chat" in mode: # 聊天
|
|
34
|
-
# data["query"] = query
|
|
35
|
-
# server_url = dify_server_url + "/v1/chat-messages"
|
|
36
|
-
# elif mode == "completion": # 文本生成
|
|
37
|
-
# if inputs is None:
|
|
38
|
-
# inputs = {"query": query}
|
|
39
|
-
# data["inputs"] = inputs
|
|
40
|
-
# server_url = dify_server_url + "/v1/completion-messages"
|
|
41
|
-
# elif mode == "workflow": # 工作流
|
|
42
|
-
# server_url = dify_server_url + "/v1/workflows/run"
|
|
43
|
-
# headers = {
|
|
44
|
-
# 'Authorization': f'Bearer {api_key}',
|
|
45
|
-
# 'Content-Type': 'application/json'
|
|
46
|
-
# }
|
|
47
|
-
# try:
|
|
48
|
-
# response = requests.post(server_url, headers=headers, json=data, stream=True)
|
|
49
|
-
# for line in response.iter_lines(decode_unicode=True):
|
|
50
|
-
# if line and line != "event: ping": # 过滤掉空行和ping事件
|
|
51
|
-
# if not line.startswith("data: "):
|
|
52
|
-
# message_error = {"event": "message_error", "message": line}
|
|
53
|
-
# yield f'data: {json.dumps(message_error)}\n\n'
|
|
54
|
-
# break
|
|
55
|
-
# yield f"{line}\n\n"
|
|
56
|
-
# except Exception as e:
|
|
57
|
-
# print(f"Error: {e}")
|
|
58
|
-
# yield 'data: {"event": "message_end"}'
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
# def get_app_key(app_id):
|
|
62
|
-
# difyAppKey = DifyAppKeyService().get_item(app_id)
|
|
63
|
-
# if difyAppKey is None:
|
|
64
|
-
# return "应用不存在"
|
|
65
|
-
# API_KEY = difyAppKey.get("dify_api_key")
|
|
66
|
-
# return API_KEY
|
|
67
|
-
|
|
68
|
-
|
|
69
8
|
def dify_chat_messages(api_key, query: str = None, inputs: dict = None, conversation_id: str = "", files=None,
|
|
70
9
|
response_mode="streaming", user_id: str = None, server_url: str = None):
|
|
71
10
|
"""
|
|
@@ -91,41 +30,116 @@ def dify_chat_messages(api_key, query: str = None, inputs: dict = None, conversa
|
|
|
91
30
|
"conversation_id": conversation_id,
|
|
92
31
|
"user": user_id,
|
|
93
32
|
"files": files
|
|
94
|
-
# "files": [
|
|
95
|
-
# {
|
|
96
|
-
# "type": "image",
|
|
97
|
-
# "transfer_method": "remote_url",
|
|
98
|
-
# "url": "https://cloud.dify.ai/logo/logo-site.png"
|
|
99
|
-
# }
|
|
100
|
-
# ]
|
|
101
33
|
}
|
|
102
|
-
# if files is not None:
|
|
103
|
-
# data["files"] = files
|
|
104
|
-
# if "chat" in mode: # 聊天
|
|
105
|
-
# data["query"] = query
|
|
106
|
-
# server_url = server_url + "/v1/chat-messages"
|
|
107
|
-
# elif mode == "completion": # 文本生成
|
|
108
|
-
# if inputs is None:
|
|
109
|
-
# inputs = {"query": query}
|
|
110
|
-
# data["inputs"] = inputs
|
|
111
|
-
# server_url = server_url + "/v1/completion-messages"
|
|
112
|
-
# elif mode == "workflow": # 工作流
|
|
113
|
-
# server_url = server_url + "/v1/workflows/run"
|
|
114
34
|
headers = {
|
|
115
35
|
'Authorization': f'Bearer {api_key}',
|
|
116
36
|
'Content-Type': 'application/json'
|
|
117
37
|
}
|
|
118
38
|
try:
|
|
119
39
|
response = requests.post(f"{server_url}/v1/chat-messages", headers=headers, json=data, stream=True)
|
|
40
|
+
if "streaming" == response_mode:
|
|
41
|
+
for line in response.iter_lines(decode_unicode=True):
|
|
42
|
+
yield line
|
|
43
|
+
else: # blocking
|
|
44
|
+
res = response.text
|
|
45
|
+
yield res
|
|
46
|
+
except Exception as e:
|
|
47
|
+
if "streaming" == response_mode:
|
|
48
|
+
print(f"Error: {e}")
|
|
49
|
+
yield 'data: {"event": "message_end"}'
|
|
50
|
+
else: # blocking
|
|
51
|
+
return f'{{"event": "message", "answer": "{e}"}}'
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def dify_completion_messages(api_key, query: str = None, inputs: dict = None, conversation_id: str = "", files=None,
|
|
55
|
+
response_mode="streaming", user_id: str = None, server_url: str = None):
|
|
56
|
+
"""
|
|
57
|
+
发送对话消息
|
|
58
|
+
:param api_key: API 秘钥
|
|
59
|
+
:param query: 用户查询语句
|
|
60
|
+
:param inputs: 调用参数
|
|
61
|
+
:param conversation_id: 会话 ID
|
|
62
|
+
:param files: 文件列表,适用于传入文件结合文本理解并回答问题
|
|
63
|
+
:param server_url:模型服务地址
|
|
64
|
+
:param response_mode: 响应类型 streaming:流式 ,blocking 阻塞式
|
|
65
|
+
:param user_id: 调用人user_id
|
|
66
|
+
:return:
|
|
67
|
+
"""
|
|
68
|
+
if server_url is None:
|
|
69
|
+
server_url = app_config.get("DIFY_SERVER_URL")
|
|
70
|
+
if user_id is None:
|
|
71
|
+
user_id = uuid.uuid4().hex
|
|
72
|
+
if inputs is None:
|
|
73
|
+
inputs = {"query": query}
|
|
74
|
+
else:
|
|
75
|
+
inputs["query"] = query
|
|
76
|
+
data = {
|
|
77
|
+
"inputs": inputs,
|
|
78
|
+
"response_mode": response_mode,
|
|
79
|
+
"conversation_id": conversation_id,
|
|
80
|
+
"user": user_id,
|
|
81
|
+
"files": files
|
|
82
|
+
}
|
|
83
|
+
headers = {
|
|
84
|
+
'Authorization': f'Bearer {api_key}',
|
|
85
|
+
'Content-Type': 'application/json'
|
|
86
|
+
}
|
|
87
|
+
try:
|
|
88
|
+
response = requests.post(f"{server_url}/v1/completion-messages", headers=headers, json=data, stream=True)
|
|
89
|
+
if "streaming" == response_mode:
|
|
90
|
+
pass
|
|
91
|
+
for line in response.iter_lines(decode_unicode=True):
|
|
92
|
+
yield line
|
|
93
|
+
else: # blocking
|
|
94
|
+
res = response.text
|
|
95
|
+
yield res
|
|
96
|
+
except Exception as e:
|
|
97
|
+
if "streaming" == response_mode:
|
|
98
|
+
print(f"Error: {e}")
|
|
99
|
+
yield 'data: {"event": "message_end"}'
|
|
100
|
+
else: # blocking
|
|
101
|
+
return f'{{"event": "message", "answer": "{e}"}}'
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
def dify_workflows_run(api_key, query: str = None, inputs: dict = None, conversation_id: str = "", files=None,
|
|
105
|
+
response_mode="streaming", user_id: str = None, server_url: str = None):
|
|
106
|
+
"""
|
|
107
|
+
发送对话消息
|
|
108
|
+
:param api_key: API 秘钥
|
|
109
|
+
:param query: 用户查询语句
|
|
110
|
+
:param inputs: 调用参数
|
|
111
|
+
:param conversation_id: 会话 ID
|
|
112
|
+
:param files: 文件列表,适用于传入文件结合文本理解并回答问题
|
|
113
|
+
:param server_url:模型服务地址
|
|
114
|
+
:param response_mode: 响应类型 streaming:流式 ,blocking 阻塞式
|
|
115
|
+
:param user_id: 调用人user_id
|
|
116
|
+
:return:
|
|
117
|
+
"""
|
|
118
|
+
if server_url is None:
|
|
119
|
+
server_url = app_config.get("DIFY_SERVER_URL")
|
|
120
|
+
if user_id is None:
|
|
121
|
+
user_id = uuid.uuid4().hex
|
|
122
|
+
if inputs is None:
|
|
123
|
+
inputs = {"query": query}
|
|
124
|
+
else:
|
|
125
|
+
inputs["query"] = query
|
|
126
|
+
data = {
|
|
127
|
+
"inputs": inputs,
|
|
128
|
+
"response_mode": response_mode,
|
|
129
|
+
"user": user_id,
|
|
130
|
+
"files": files
|
|
131
|
+
}
|
|
132
|
+
headers = {
|
|
133
|
+
'Authorization': f'Bearer {api_key}',
|
|
134
|
+
'Content-Type': 'application/json'
|
|
135
|
+
}
|
|
136
|
+
try:
|
|
137
|
+
response = requests.post(f"{server_url}/v1/workflows/run", headers=headers, json=data, stream=True)
|
|
120
138
|
if "streaming" == response_mode:
|
|
121
139
|
pass
|
|
122
140
|
for line in response.iter_lines(decode_unicode=True):
|
|
123
141
|
if line and line != "event: ping": # 过滤掉空行和ping事件
|
|
124
|
-
|
|
125
|
-
message_error = {"event": "message_error", "message": line}
|
|
126
|
-
yield f'data: {json.dumps(message_error)}\n\n'
|
|
127
|
-
break
|
|
128
|
-
yield f"{line}\n\n"
|
|
142
|
+
yield line
|
|
129
143
|
else: # blocking
|
|
130
144
|
res = response.text
|
|
131
145
|
yield res
|
|
@@ -137,6 +151,66 @@ def dify_chat_messages(api_key, query: str = None, inputs: dict = None, conversa
|
|
|
137
151
|
return f'{{"event": "message", "answer": "{e}"}}'
|
|
138
152
|
|
|
139
153
|
|
|
154
|
+
def dify_stop_completion_messages(api_key: str, task_id: str, user_id=None, server_url: str = None):
|
|
155
|
+
"""
|
|
156
|
+
停止响应 仅支持流式模式。
|
|
157
|
+
:param api_key: API 秘钥
|
|
158
|
+
:param task_id: 任务 ID,可在流式返回 Chunk 中获取
|
|
159
|
+
:param user_id: 调用人user_id
|
|
160
|
+
:param server_url: 模型服务地址
|
|
161
|
+
:return:
|
|
162
|
+
"""
|
|
163
|
+
|
|
164
|
+
if user_id is None:
|
|
165
|
+
user_id = uuid.uuid4().hex
|
|
166
|
+
data = {
|
|
167
|
+
"user": user_id
|
|
168
|
+
}
|
|
169
|
+
headers = {
|
|
170
|
+
'Authorization': f'Bearer {api_key}',
|
|
171
|
+
'Content-Type': 'application/json'
|
|
172
|
+
}
|
|
173
|
+
if server_url is None:
|
|
174
|
+
server_url = app_config.get("DIFY_SERVER_URL")
|
|
175
|
+
try:
|
|
176
|
+
requests.post(f"{server_url}/v1/completion-messages/{task_id}/stop", headers=headers, json=data, stream=False)
|
|
177
|
+
finally:
|
|
178
|
+
# 接口固定返回success
|
|
179
|
+
return {
|
|
180
|
+
"result": "success"
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
def dify_stop_workflows(api_key: str, task_id: str, user_id=None, server_url: str = None):
|
|
185
|
+
"""
|
|
186
|
+
停止响应 仅支持流式模式。
|
|
187
|
+
:param api_key: API 秘钥
|
|
188
|
+
:param task_id: 任务 ID,可在流式返回 Chunk 中获取
|
|
189
|
+
:param user_id: 调用人user_id
|
|
190
|
+
:param server_url: 模型服务地址
|
|
191
|
+
:return:
|
|
192
|
+
"""
|
|
193
|
+
|
|
194
|
+
if user_id is None:
|
|
195
|
+
user_id = uuid.uuid4().hex
|
|
196
|
+
data = {
|
|
197
|
+
"user": user_id
|
|
198
|
+
}
|
|
199
|
+
headers = {
|
|
200
|
+
'Authorization': f'Bearer {api_key}',
|
|
201
|
+
'Content-Type': 'application/json'
|
|
202
|
+
}
|
|
203
|
+
if server_url is None:
|
|
204
|
+
server_url = app_config.get("DIFY_SERVER_URL")
|
|
205
|
+
try:
|
|
206
|
+
requests.post(f"{server_url}/v1/workflows/tasks/{task_id}/stop", headers=headers, json=data, stream=False)
|
|
207
|
+
finally:
|
|
208
|
+
# 接口固定返回success
|
|
209
|
+
return {
|
|
210
|
+
"result": "success"
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
|
|
140
214
|
def dify_stop_messages(api_key: str, task_id: str, user_id=None, server_url: str = None):
|
|
141
215
|
"""
|
|
142
216
|
停止响应 仅支持流式模式。
|
|
@@ -324,11 +398,9 @@ def dify_conversations_rename(api_key: str, conversation_id: str, name: str = No
|
|
|
324
398
|
def dify_files_upload(api_key: str, file, user_id=None,
|
|
325
399
|
server_url: str = None):
|
|
326
400
|
"""
|
|
327
|
-
|
|
401
|
+
上传文件
|
|
328
402
|
:param api_key: API 秘钥
|
|
329
|
-
:param
|
|
330
|
-
:param name: (选填)名称,若 auto_generate 为 true 时,该参数可不传。
|
|
331
|
-
:param auto_generate: (选填)自动生成标题,默认 false。
|
|
403
|
+
:param file: 文件对象
|
|
332
404
|
:param user_id: 调用人user_id
|
|
333
405
|
:param server_url: 模型服务地址
|
|
334
406
|
:return:
|
|
@@ -345,7 +417,6 @@ def dify_files_upload(api_key: str, file, user_id=None,
|
|
|
345
417
|
server_url = app_config.get("DIFY_SERVER_URL")
|
|
346
418
|
headers = {
|
|
347
419
|
'Authorization': f'Bearer {api_key}',
|
|
348
|
-
# 'Content-Type': 'multipart/form-data'
|
|
349
420
|
}
|
|
350
421
|
response = requests.post(f"{server_url}/v1/files/upload", headers=headers, data=data, files=files)
|
|
351
422
|
return response.json()
|
|
@@ -28,7 +28,7 @@ lesscode_flask/setting/__init__.py
|
|
|
28
28
|
lesscode_flask/setup/__init__.py
|
|
29
29
|
lesscode_flask/static/swagger.py
|
|
30
30
|
lesscode_flask/utils/__init__.py
|
|
31
|
-
lesscode_flask/utils/
|
|
31
|
+
lesscode_flask/utils/dify_utils.py
|
|
32
32
|
lesscode_flask/utils/helpers.py
|
|
33
33
|
lesscode_flask/utils/decorator/__init__.py
|
|
34
34
|
lesscode_flask/utils/decorator/cache.py
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/lesscode_flask/export_data/data_download_handler.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/lesscode_flask/model/resource_param_template.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/lesscode_flask/service/access_log_service.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/lesscode_flask/utils/json/NotSortJSONProvider.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/lesscode_flask/utils/swagger/swagger_template.py
RENAMED
|
File without changes
|
{lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/lesscode_flask/utils/swagger/swagger_util.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lesscode_flask-0.1.67 → lesscode_flask-0.1.68}/lesscode_flask.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|