### 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 changetags/v0.18.0
| @@ -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") | |||
| @@ -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 | |||
| @@ -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 | |||