Skip to content
Snippets Groups Projects

WS-858: fix bugs in `create_follow_on_capability_request`, hopefully for the last time

Merged Janet Goldstein requested to merge WS-858-cap-req-followon-debug-2022-01-12 into main
All threads resolved!
3 files
+ 84
11
Compare changes
  • Side-by-side
  • Inline
Files
3
@@ -21,6 +21,8 @@
File containing definitions for the other half of the capability side of the Workspaces REST API,
concerning capability requests
"""
# pylint: disable=E0401
import json
from capability.views.capability_version import submit_capability_version
@@ -29,6 +31,8 @@ from pyramid.request import Request
from pyramid.response import Response
from pyramid.view import view_config
from workspaces.capability.schema import CapabilityVersion
@view_config(route_name="view_capability_request", renderer="json")
def view_capability_request(request: Request) -> Response:
@@ -121,12 +125,13 @@ def create_capability_request(request: Request) -> Response:
@view_config(route_name="create_follow_on_capability_request", renderer="json")
def create_follow_on_capability_request(request: Request) -> Response:
def create_follow_on_capability_request(request: Request, version: CapabilityVersion) -> Response:
"""
Pyramid view that accepts a request to create a follow-on capability request from a previous request
URL: capability/request/{request_id}/followon/{followon_type}
:param request: POST request
:param version: version of the request for which we want to create a follow-on request
: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 with given name does not exist and thus cannot be
@@ -136,22 +141,24 @@ def create_follow_on_capability_request(request: Request) -> Response:
request_id = request.matchdict["request_id"]
followon_type = request.matchdict["followon_type"]
capability_request = request.capability_info.lookup_capability_request(request_id)
parameters = capability_request.current_version.parameters
user_email = parameters["user_email"]
previous_workflow_id = capability_request.current_execution.current_workflow_request_id
previous_workflow_id = request_id
metadata_content = request.workflow_service.retrieve_file_content(
followon_type, previous_workflow_id, "metadata.json"
)
metadata_content = request.workflow_service.retrieve_file_content(previous_workflow_id, "metadata.json")
metadata = json.loads(metadata_content)
cms_path = metadata["destinationDirectory"] + "/working"
sdm_id = metadata["fileSetIds"][0] if isinstance(metadata["fileSetIds"], list) else metadata["fileSetIds"]
new_capability_request = request.capability_info.create_capability_request(
followon_type, parameters={"cms_path": cms_path, "sdmId": sdm_id, "user_email": user_email}
followon_type,
parameters={
"cms_path": cms_path,
"sdmId": sdm_id,
"user_email": "jgoldste@nrao.edu",
"version": version.version_number,
"previous_workflow_request_id": previous_workflow_id,
"capability_name": version.capability_name,
},
)
return Response(json_body=new_capability_request.__json__())
@@ -172,6 +179,12 @@ def edit_capability_request(request: Request) -> Response:
@view_config(route_name="create_and_submit_capability_request", renderer="json")
def create_and_submit_capability_request(request: Request) -> Response:
"""
Pyramid view to reate and submit a capability request
:param request: dummy POST request
:return:
"""
response = create_capability_request(request)
capability_request = request.capability_info.lookup_capability_request(response.json_body["id"])
request.matchdict = {
Loading