浏览代码

[BREAKING CHANGE] GET to POST: enhance kb list capability (#7205)

### What problem does this PR solve?

Enhance capability of `list_kbs`.

Breaking change: change method from `GET` to `POST`.

### Type of change

- [x] Refactoring
- [x] Enhancement with breaking change
tags/v0.18.0
Yongteng Lei 6 个月前
父节点
当前提交
f35ff65c36
没有帐户链接到提交者的电子邮件
共有 3 个文件被更改,包括 40 次插入25 次删除
  1. 21
    8
      api/apps/kb_app.py
  2. 3
    1
      api/db/services/knowledgebase_service.py
  3. 16
    16
      sdk/python/test/test_frontend_api/common.py

+ 21
- 8
api/apps/kb_app.py 查看文件

@@ -157,25 +157,38 @@ def detail():
return server_error_response(e)


@manager.route('/list', methods=['GET']) # noqa: F821
@manager.route('/list', methods=['POST']) # noqa: F821
@login_required
def list_kbs():
keywords = request.args.get("keywords", "")
page_number = int(request.args.get("page", 1))
items_per_page = int(request.args.get("page_size", 150))
page_number = int(request.args.get("page", 0))
items_per_page = int(request.args.get("page_size", 0))
parser_id = request.args.get("parser_id")
orderby = request.args.get("orderby", "create_time")
desc = request.args.get("desc", True)

req = request.get_json()
owner_ids = req.get("owner_ids", [])
try:
tenants = TenantService.get_joined_tenants_by_user_id(current_user.id)
kbs, total = KnowledgebaseService.get_by_tenant_ids(
[m["tenant_id"] for m in tenants], current_user.id, page_number,
items_per_page, orderby, desc, keywords, parser_id)
if not owner_ids:
tenants = TenantService.get_joined_tenants_by_user_id(current_user.id)
tenants = [m["tenant_id"] for m in tenants]
kbs, total = KnowledgebaseService.get_by_tenant_ids(
tenants, current_user.id, page_number,
items_per_page, orderby, desc, keywords, parser_id)
else:
tenants = owner_ids
kbs, total = KnowledgebaseService.get_by_tenant_ids(
tenants, current_user.id, 0,
0, orderby, desc, keywords, parser_id)
kbs = [kb for kb in kbs if kb["tenant_id"] in tenants]
if page_number and items_per_page:
kbs = kbs[(page_number-1)*items_per_page:page_number*items_per_page]
total = len(kbs)
return get_json_result(data={"kbs": kbs, "total": total})
except Exception as e:
return server_error_response(e)


@manager.route('/rm', methods=['post']) # noqa: F821
@login_required
@validate_request("kb_id")

+ 3
- 1
api/db/services/knowledgebase_service.py 查看文件

@@ -150,6 +150,7 @@ class KnowledgebaseService(CommonService):
cls.model.name,
cls.model.language,
cls.model.description,
cls.model.tenant_id,
cls.model.permission,
cls.model.doc_num,
cls.model.token_num,
@@ -184,7 +185,8 @@ class KnowledgebaseService(CommonService):

count = kbs.count()

kbs = kbs.paginate(page_number, items_per_page)
if page_number and items_per_page:
kbs = kbs.paginate(page_number, items_per_page)

return list(kbs.dicts()), count


+ 16
- 16
sdk/python/test/test_frontend_api/common.py 查看文件

@@ -15,9 +15,10 @@
#

import os

import requests

HOST_ADDRESS = os.getenv('HOST_ADDRESS', 'http://127.0.0.1:9380')
HOST_ADDRESS = os.getenv("HOST_ADDRESS", "http://127.0.0.1:9380")

DATASET_NAME_LIMIT = 128

@@ -30,10 +31,11 @@ def create_dataset(auth, dataset_name):
return res.json()


def list_dataset(auth, page_number):
def list_dataset(auth, page_number, page_size=30):
authorization = {"Authorization": auth}
url = f"{HOST_ADDRESS}/v1/kb/list?page={page_number}"
res = requests.get(url=url, headers=authorization)
url = f"{HOST_ADDRESS}/v1/kb/list?page={page_number}&page_size={page_size}"
json = {}
res = requests.post(url=url, headers=authorization, json=json)
return res.json()


@@ -59,37 +61,35 @@ def upload_file(auth, dataset_id, path):
"kb_id": dataset_id,
}

file = {
'file': open(f'{path}', 'rb')
}
file = {"file": open(f"{path}", "rb")}

res = requests.post(url=url, headers=authorization, files=file, data=json_req)
return res.json()


def list_document(auth, dataset_id):
authorization = {"Authorization": auth}
url = f"{HOST_ADDRESS}/v1/document/list?kb_id={dataset_id}"
url = f"{HOST_ADDRESS}/v1/document/list?kb_id={dataset_id}"
res = requests.get(url=url, headers=authorization)
return res.json()


def get_docs_info(auth, doc_ids):
authorization = {"Authorization": auth}
json_req = {
"doc_ids": doc_ids
}
json_req = {"doc_ids": doc_ids}
url = f"{HOST_ADDRESS}/v1/document/infos"
res = requests.post(url=url, headers=authorization, json=json_req)
return res.json()


def parse_docs(auth, doc_ids):
authorization = {"Authorization": auth}
json_req = {
"doc_ids": doc_ids,
"run": 1
}
json_req = {"doc_ids": doc_ids, "run": 1}
url = f"{HOST_ADDRESS}/v1/document/run"
res = requests.post(url=url, headers=authorization, json=json_req)
return res.json()


def parse_file(auth, document_id):
pass
pass


正在加载...
取消
保存