88from submodules .model .business_objects import organization
99
1010from controller .transfer import manager as upload_manager
11- from controller .upload_task import manager as task_manager
11+ from controller .upload_task import manager as upload_task_manager
1212from controller .auth import manager as auth_manager
1313from controller .transfer import manager as transfer_manager
14+ from controller .transfer import association_transfer_manager
1415from controller .auth import manager as auth
1516
16- from submodules .model import enums
17+ from submodules .model import enums , exceptions
1718from util .notification import create_notification
1819from submodules .model .enums import NotificationType
1920from submodules .model .models import UploadTask
@@ -43,7 +44,7 @@ async def post(self, request) -> PlainTextResponse:
4344 if org_id == "archive" :
4445 return PlainTextResponse ("OK" )
4546
46- task = task_manager .get_upload_task_secure (
47+ task = upload_task_manager .get_upload_task_secure (
4748 upload_task_id = upload_task_id ,
4849 project_id = project_id ,
4950 file_name = file_name ,
@@ -62,7 +63,14 @@ def get(self, request) -> JSONResponse:
6263 project_id = request .path_params ["project_id" ]
6364 user_id = request .query_params ["user_id" ]
6465 num_samples = request .query_params .get ("num_samples" )
65- auth_manager .check_project_access_from_user_id (user_id , project_id )
66+ try :
67+ auth_manager .check_project_access_from_user_id (
68+ user_id , project_id , from_api = True
69+ )
70+ except exceptions .EntityNotFoundException :
71+ return JSONResponse ({"error" : "Could not find project" }, status_code = 404 )
72+ except exceptions .AccessDeniedException :
73+ return JSONResponse ({"error" : "Access denied" }, status_code = 403 )
6674 result = transfer_manager .export_records (project_id , num_samples )
6775 return JSONResponse (result )
6876
@@ -72,23 +80,37 @@ def get(self, request) -> JSONResponse:
7280 project_id = request .path_params ["project_id" ]
7381 list_id = request .path_params ["knowledge_base_id" ]
7482 user_id = request .query_params ["user_id" ]
75- auth_manager .check_project_access_from_user_id (user_id , project_id )
83+ try :
84+ auth_manager .check_project_access_from_user_id (
85+ user_id , project_id , from_api = True
86+ )
87+ except exceptions .EntityNotFoundException :
88+ return JSONResponse ({"error" : "Could not find project" }, status_code = 404 )
89+ except exceptions .AccessDeniedException :
90+ return JSONResponse ({"error" : "Access denied" }, status_code = 403 )
7691 result = transfer_manager .export_knowledge_base (project_id , list_id )
7792 return JSONResponse (result )
7893
7994
80- class PrepareImport (HTTPEndpoint ):
95+ class PrepareFileImport (HTTPEndpoint ):
8196 async def post (self , request ) -> JSONResponse :
8297 auth .check_is_demo_without_info ()
8398 project_id = request .path_params ["project_id" ]
8499 request_body = await request .json ()
85100
86101 user_id = request_body ["user_id" ]
87- auth_manager .check_project_access_from_user_id (user_id , project_id )
102+ try :
103+ auth_manager .check_project_access_from_user_id (
104+ user_id , project_id , from_api = True
105+ )
106+ except exceptions .EntityNotFoundException :
107+ return JSONResponse ({"error" : "Could not find project" }, status_code = 404 )
108+ except exceptions .AccessDeniedException :
109+ return JSONResponse ({"error" : "Access denied" }, status_code = 403 )
88110 file_name = request_body ["file_name" ]
89111 file_type = request_body ["file_type" ]
90112 file_import_options = request_body .get ("file_import_options" )
91- task = task_manager .create_upload_task (
113+ task = upload_task_manager .create_upload_task (
92114 user_id , project_id , file_name , file_type , file_import_options
93115 )
94116 org_id = organization .get_id_by_project_id (project_id )
@@ -98,14 +120,63 @@ async def post(self, request) -> JSONResponse:
98120 return JSONResponse (credentials_and_id )
99121
100122
123+ class JSONImport (HTTPEndpoint ):
124+ async def post (self , request ) -> JSONResponse :
125+ auth .check_is_demo_without_info ()
126+ project_id = request .path_params ["project_id" ]
127+ request_body = await request .json ()
128+ user_id = request_body ["user_id" ]
129+ auth_manager .check_project_access_from_user_id (user_id , project_id )
130+ transfer_manager .import_records_from_json (
131+ project_id ,
132+ user_id ,
133+ request_body ["records" ],
134+ request_body ["request_uuid" ],
135+ request_body ["is_last" ],
136+ )
137+ return JSONResponse ({"success" : True })
138+
139+
140+ class AssociationsImport (HTTPEndpoint ):
141+ async def post (self , request ) -> JSONResponse :
142+ project_id = request .path_params ["project_id" ]
143+ request_body = await request .json ()
144+ user_id = request_body ["user_id" ]
145+ try :
146+ auth_manager .check_project_access_from_user_id (
147+ user_id , project_id , from_api = True
148+ )
149+ except exceptions .EntityNotFoundException :
150+ return JSONResponse ({"error" : "Could not find project" }, status_code = 404 )
151+ except exceptions .AccessDeniedException :
152+ return JSONResponse ({"error" : "Access denied" }, status_code = 403 )
153+ new_associations_added = association_transfer_manager .import_associations (
154+ project_id ,
155+ user_id ,
156+ request_body ["name" ],
157+ request_body ["label_task_name" ],
158+ request_body ["associations" ],
159+ request_body ["indices" ],
160+ request_body ["source_type" ],
161+ )
162+ return JSONResponse (new_associations_added )
163+
164+
101165class UploadTask (HTTPEndpoint ):
102166 def get (self , request ) -> JSONResponse :
103167 auth .check_is_demo_without_info ()
104168 project_id = request .path_params ["project_id" ]
105169 task_id = request .path_params ["task_id" ]
106170 user_id = request .query_params ["user_id" ]
107- auth_manager .check_project_access_from_user_id (user_id , project_id )
108- task = task_manager .get_upload_task (project_id , task_id )
171+ try :
172+ auth_manager .check_project_access_from_user_id (
173+ user_id , project_id , from_api = True
174+ )
175+ except exceptions .EntityNotFoundException :
176+ return JSONResponse ({"error" : "Could not find project" }, status_code = 404 )
177+ except exceptions .AccessDeniedException :
178+ return JSONResponse ({"error" : "Access denied" }, status_code = 403 )
179+ task = upload_task_manager .get_upload_task (project_id , task_id )
109180 task_dict = {
110181 "id" : str (task .id ),
111182 "file_name" : str (task .file_name ),
@@ -119,7 +190,7 @@ def get(self, request) -> JSONResponse:
119190
120191def init_file_import (task : UploadTask , project_id : str , is_global_update : bool ) -> None :
121192 if "records" in task .file_type :
122- upload_manager .import_records (project_id , task )
193+ upload_manager .import_records_from_file (project_id , task )
123194 elif "project" in task .file_type :
124195 upload_manager .import_project (project_id , task )
125196 elif "knowledge_base" in task .file_type :
@@ -145,7 +216,7 @@ def file_import_error_handling(
145216 task .file_type ,
146217 )
147218 logger .error (
148- task_manager .get_upload_task_message (
219+ upload_task_manager .get_upload_task_message (
149220 task ,
150221 )
151222 )
0 commit comments