Skip to content
Snippets Groups Projects
Commit 3907a35e authored by Charlotte Hausman's avatar Charlotte Hausman
Browse files

make sure we default before running contact wrester

parent b80595d7
No related branches found
No related tags found
2 merge requests!1642Playing with docker cleanup,!1613pipeline testing with poetry only services
Pipeline #15339 canceled
......@@ -397,64 +397,66 @@ def get_user_email(request: Request) -> Response:
capability_request_id = request.matchdict["capability_request_id"]
version_id = request.matchdict["version_id"]
if version := request.capability_info.lookup_version(capability_request_id, version_id):
if not version.parameters:
not_found_msg = f"No parameters found for version {version_id} of request with ID {capability_request_id}. Couldn't find user_email information."
return HTTPNotFound(detail=not_found_msg)
elif (
"user_email" in version.parameters
and version.parameters["user_email"]
and "workspaces-analysts" not in version.parameters["user_email"]
):
# exclude the case of follow-on requests when the default user_email is the analyst list,
# otherwise send to specified address
return Response(status_int=http.HTTPStatus.OK, json_body={"resp": f"{version.parameters['user_email']}"})
# If user_email not populated (or is an analyst list), search for the PI/CoI emails with the contacts_wrester
elif "product_locator" in version.parameters and version.parameters["product_locator"]:
process_call = ["aat_wrest", "-sc", version.parameters["product_locator"]]
elif "sdmId" in version.parameters and version.parameters["sdmId"]:
process_call = ["aat_wrest", "-si", version.parameters["sdmId"]]
elif (
"metadata" in version.parameters
and version.parameters.metadata
and "sdm_id" in version.parameters.metadata
and version.parameters.metadata["sdm_id"]
):
process_call = ["aat_wrest", "-si", version.parameters["sdmId"]]
# We only send emails to the PI/CoI in production!
email_pi = CapoConfig().getboolean("edu.nrao.workspaces.NotificationSettings.sendPIEmail")
if not email_pi:
user_email = CapoConfig().settings(NOTIF_SETTINGS_KEY).analystEmail
else:
if version := request.capability_info.lookup_version(capability_request_id, version_id):
if not version.parameters:
not_found_msg = f"No parameters found for version {version_id} of request with ID {capability_request_id}. Couldn't find user_email information."
return HTTPNotFound(detail=not_found_msg)
elif (
"user_email" in version.parameters
and version.parameters["user_email"]
and "workspaces-analysts" not in version.parameters["user_email"]
):
# exclude the case of follow-on requests when the default user_email is the analyst list,
# otherwise send to specified address
return Response(
status_int=http.HTTPStatus.OK, json_body={"resp": f"{version.parameters['user_email']}"}
)
# If user_email not populated (or is an analyst list), search for the PI/CoI emails with the contacts_wrester
elif "product_locator" in version.parameters and version.parameters["product_locator"]:
process_call = ["aat_wrest", "-sc", version.parameters["product_locator"]]
elif "sdmId" in version.parameters and version.parameters["sdmId"]:
process_call = ["aat_wrest", "-si", version.parameters["sdmId"]]
elif (
"metadata" in version.parameters
and version.parameters.metadata
and "sdm_id" in version.parameters.metadata
and version.parameters.metadata["sdm_id"]
):
process_call = ["aat_wrest", "-si", version.parameters["sdmId"]]
else:
not_found_msg = f"No user email, product locator, or sdm ID found in version {version_id} of request with ID {capability_request_id}. Cannot find user_email information."
return HTTPNotFound(detail=not_found_msg)
else:
not_found_msg = f"No user email, product locator, or sdm ID found in version {version_id} of request with ID {capability_request_id}. Cannot find user_email information."
not_found_msg = f"Capability request with ID {capability_request_id} not found."
return HTTPNotFound(detail=not_found_msg)
else:
not_found_msg = f"Capability request with ID {capability_request_id} not found."
return HTTPNotFound(detail=not_found_msg)
with subprocess.Popen(
process_call,
stdout=subprocess.PIPE,
) as project_data:
data = project_data.communicate()[0]
project = json.loads(data)
project_code = project["projectCode"]
with subprocess.Popen(
["contacts_wrest", project_code],
process_call,
stdout=subprocess.PIPE,
) as wrested_contacts:
contacts = wrested_contacts.communicate()[0]
if "ERROR" in contacts.decode():
err_msg = f"Contact wrester failed for project {project_code}"
return HTTPPreconditionFailed(err_msg)
email_list = json.loads(contacts.decode())
user_email = email_list
if isinstance(email_list, list):
user_email = ", ".join(email_list)
) as project_data:
data = project_data.communicate()[0]
project = json.loads(data)
project_code = project["projectCode"]
with subprocess.Popen(
["contacts_wrest", project_code],
stdout=subprocess.PIPE,
) as wrested_contacts:
contacts = wrested_contacts.communicate()[0]
if "ERROR" in contacts.decode():
err_msg = f"Contact wrester failed for project {project_code}"
return HTTPPreconditionFailed(err_msg)
email_list = json.loads(contacts.decode())
user_email = email_list
if isinstance(email_list, list):
user_email = ", ".join(email_list)
logger.info(f"get_user_email endpoint retrieved: {user_email}")
# We only send emails to the PI/CoI in production!
email_pi = CapoConfig().getboolean("edu.nrao.workspaces.NotificationSettings.sendPIEmail")
if not email_pi:
user_email = CapoConfig().settings(NOTIF_SETTINGS_KEY).analystEmail
return Response(status_int=http.HTTPStatus.OK, json_body={"resp": f"{user_email}"})
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment