Admin basket: update/fix file import, download, delete

remove useless AdminBasketFile model definition
cleanups, typings
This commit is contained in:
phil 2024-04-20 10:58:12 +05:30
parent 6139f49aae
commit c613fd35d9
5 changed files with 123 additions and 136 deletions

View file

@ -47,13 +47,23 @@ async def get_basket(
async def upload_basket_file(
name: str,
file: UploadFile,
project_id: int | None = None,
surveyor_id: int | None = None,
equipment_id: int | None = None,
auto_import: bool = False,
user: UserRead = Depends(get_current_active_user),
):
) -> BasketImportResult:
try:
basket = manager.baskets[name]
except KeyError:
raise HTTPException(status.HTTP_404_NOT_FOUND, f'No basket named {name}')
fileItem = await basket.add_files(file, user)
raise HTTPException(status.HTTP_404_NOT_FOUND, f"No basket named {name}")
fileItem = await basket.add_file(
file,
user,
project_id=project_id,
surveyor_id=surveyor_id,
equipment_id=equipment_id,
)
return fileItem
@api.get('/basket/download/{name}/{file_id}/{file_name}')
@ -73,7 +83,10 @@ async def download_basket_file(
file_record = await basket.get_file(file_id)
if file_record is None:
raise HTTPException(status.HTTP_404_NOT_FOUND, f'No import file id {file_id}')
return FileResponse(file_record.path)
abs_path = basket.base_dir / file_record.path
if not abs_path.exists():
raise HTTPException(status.HTTP_404_NOT_FOUND, f'File {file_record.name} not found')
return FileResponse(abs_path)
@api.get('/basket/import/{basket}/{file_id}')
async def import_basket_file(
@ -93,4 +106,19 @@ async def import_basket_file(
## FIXME: shouldn't it be AdminImportError?
except ImportError as err:
raise HTTPException(status.HTTP_500_INTERNAL_SERVER_ERROR, err)
return result
return result
@api.get('/basket/delete/{basket}/{file_id}')
async def delete_basket_file(
basket: str,
file_id: int,
user: User = Depends(get_current_active_user),
) -> None:
if not (user and user.has_role('reviewer')):
raise HTTPException(status.HTTP_401_UNAUTHORIZED)
basket_ = manager.baskets[basket]
file_import = await basket_.get_file(file_id)
if file_import is None:
raise HTTPException(status.HTTP_404_NOT_FOUND, f'No import file id {file_id}')
await basket_.delete_file(file_import)