Skip to content

Commit

Permalink
add batch mets urls endpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
MehmedGIT committed Jan 31, 2025
1 parent 288ccb7 commit da597f2
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 3 deletions.
3 changes: 2 additions & 1 deletion src/server/operandi_server/models/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
__all__ = [
"MetsUrlRequest",
"PYDiscovery",
"PYUserAction",
"PYUserInfo",
Expand All @@ -10,7 +11,7 @@
"WorkspaceRsrc"
]

from .base import Resource, SbatchArguments, WorkflowArguments
from .base import MetsUrlRequest, Resource, SbatchArguments, WorkflowArguments
from .discovery import PYDiscovery
from .user import PYUserAction, PYUserInfo
from .workflow import WorkflowRsrc, WorkflowJobRsrc
Expand Down
5 changes: 5 additions & 0 deletions src/server/operandi_server/models/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,8 @@ class SbatchArguments(BaseModel):

class Config:
allow_population_by_field_name = True

class MetsUrlRequest(BaseModel):
mets_url: str = Field(..., description="The mets url")
preserve_file_grps: str = Field(..., description="The file groups to be preserved")
mets_basename: str = Field(default=DEFAULT_METS_BASENAME, description="The mets file basename")
30 changes: 28 additions & 2 deletions src/server/operandi_server/routers/workspace.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
from operandi_server.constants import DEFAULT_METS_BASENAME
from operandi_server.files_manager import receive_resource
from operandi_server.files_manager import LFMInstance
from operandi_server.models import WorkspaceRsrc
from operandi_server.models import MetsUrlRequest, WorkspaceRsrc
from .workspace_utils import (
create_workspace_bag,
create_workspace_bag_from_remote_url,
Expand All @@ -28,7 +28,6 @@
)
from .user_utils import user_auth_with_handling


class RouterWorkspace:
def __init__(self):
self.logger = getLogger("operandi_server.routers.workspace")
Expand All @@ -52,6 +51,13 @@ def __init__(self):
"Returns a list of `resource_id`s associated with the uploaded workspaces.",
response_model=List[WorkspaceRsrc], response_model_exclude_unset=True, response_model_exclude_none=True
)
self.router.add_api_route(
path="/batch-workspaces-urls",
endpoint=self.upload_batch_workspaces_from_urls, methods=["POST"], status_code=status.HTTP_201_CREATED,
summary="Upload a list of workspaces each as a URL referencing a mets file (limit:5). "
"Returns a list of `resource_id`s associated with the uploaded workspaces.",
response_model=List[WorkspaceRsrc], response_model_exclude_unset=True, response_model_exclude_none=True
)
self.router.add_api_route(
path="/workspace/{workspace_id}",
endpoint=self.download_workspace, methods=["GET"], status_code=status.HTTP_200_OK,
Expand Down Expand Up @@ -292,3 +298,23 @@ async def upload_batch_workspaces(
self.logger.error(f"{message}, error: {error}")
raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail=message)
return workspace_resources

async def upload_batch_workspaces_from_urls(
self, mets_urls: List[MetsUrlRequest], auth: HTTPBasicCredentials = Depends(HTTPBasic())
) -> List[WorkspaceRsrc]:
await user_auth_with_handling(self.logger, auth)
if len(mets_urls) > 5:
message = "Batch upload exceeds the limit of 5 workspace urls"
self.logger.error(message)
raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail=message)
workspace_resources = []
for mets_url_request in mets_urls:
workspace_resource = await self.upload_workspace_from_url(
mets_url=mets_url_request.mets_url,
preserve_file_grps=mets_url_request.preserve_file_grps,
mets_basename=mets_url_request.mets_basename,
details="Batch uploaded url workspace",
auth=auth
)
workspace_resources.append(workspace_resource)
return workspace_resources

0 comments on commit da597f2

Please sign in to comment.