Skip to content
Snippets Groups Projects

Create new REST endpoints for returning capability versions

Merged Charlotte Hausman requested to merge WS_767 into main
2 unresolved threads
3 files
+ 111
2
Compare changes
  • Side-by-side
  • Inline
Files
3
@@ -27,6 +27,26 @@ from pyramid.response import Response
from pyramid.view import view_config
@view_config(route_name="view_all_versions", renderer="json")
def view_all_versions(request: Request):
capability_request = request.capability_info.lookup_capability_request(request.matchdict["capability_request_id"])
if capability_request:
if capability_request.versions:
versions = []
for version in capability_request.versions:
versions.append(version.__json__())
return capability_request.versions
else:
no_versions_msg = (
f"Capability request with ID {request.matchdict['capability_request_id']} has no versions."
)
return HTTPPreconditionFailed(no_versions_msg)
else:
not_found_msg = (f"Capability request with ID {request.matchdict['capability_request_id']} not found.",)
return HTTPNotFound(detail=not_found_msg)
@view_config(route_name="view_latest_version", renderer="json")
def view_latest_version(request: Request) -> Response:
"""
@@ -58,6 +78,42 @@ def view_latest_version(request: Request) -> Response:
return HTTPNotFound(detail=not_found_msg)
@view_config(route_name="view_specific_version", renderer="json")
def view_specific_version(request: Request) -> Response:
"""
Pyramid view that accepts a request to get a specific version of a capability request
URL: capability/request/{capability_request_id}/version/{version_id}
:param request: GET request
:return: 200 OK response with JSON-formatted info of latest version of request with given ID
or 404 response (HTTPNotFound) if capability request with given ID does not exist
or 412 response (HTTPPreconditionFailed) if capability request with given ID has no versions
"""
capability_request_id = request.matchdict["capability_request_id"]
version_id = request.matchdict["version_id"]
capability_request = request.capability_info.lookup_capability_request(capability_request_id)
if capability_request:
version = capability_request.versions[int(version_id) - 1]
if version:
version_json = version.__json__()
version_json["files"] = []
for file in version.files:
version_json["files"].append(file.__json__())
return Response(json_body=version_json)
else:
no_versions_msg = (
f"Capability request with ID {request.matchdict['capability_request_id']} has no versions."
)
return HTTPPreconditionFailed(no_versions_msg)
else:
not_found_msg = (f"Capability request with ID {request.matchdict['capability_request_id']} not found.",)
return HTTPNotFound(detail=not_found_msg)
@view_config(route_name="create_capability_version", renderer="json")
def create_capability_version(request: Request) -> Response:
"""
@@ -88,6 +144,32 @@ def create_capability_version(request: Request) -> Response:
return Response(json_body=new_capability_version.__json__())
@view_config(route_name="submit_capability_version", renderer="json")
def submit_capability_version(request: Request) -> Response:
"""
Pyramid view that accepts a request to submit a capability version for execution
URL: capability/request/{capability_request_id}/version/{version_id}/submit
:param request: POST request, expecting JSON parameter "parameters"
:return: 200 OK response with JSON-formatted info of newly created capability request
or 400 response (HTTPBadRequest) if expected parameters not given
or 412 response (HTTPPreconditionFailed) if capability request with given id does not exist
"""
capability_request_id = request.matchdict["capability_request_id"]
version_id = request.matchdict["version_id"]
capability_request = request.capability_info.lookup_capability_request(capability_request_id)
if not capability_request:
# Capability request not found
does_not_exist_msg = f"Capability request with ID {capability_request_id} does not exist. Cannot submit."
return HTTPPreconditionFailed(detail=does_not_exist_msg)
execution = request.capability_launcher.launch_capability(capability_request, version_id)
return Response(json_body=execution.__json__())
@view_config(route_name="add_version_file", renderer="json")
def add_version_file(request: Request) -> Response:
"""
Loading