From 9fd17cdb62d7350183f50a9e8397d6d59f7eac92 Mon Sep 17 00:00:00 2001 From: burnout87 Date: Mon, 3 Jul 2023 16:26:36 +0200 Subject: [PATCH] endpoint to post a revolution processing log --- cdci_data_analysis/analysis/drupal_helper.py | 52 ++++++++++++++++++++ cdci_data_analysis/flask_app/app.py | 28 +++++++++++ 2 files changed, 80 insertions(+) diff --git a/cdci_data_analysis/analysis/drupal_helper.py b/cdci_data_analysis/analysis/drupal_helper.py index 14b5f136f..c7b760be0 100644 --- a/cdci_data_analysis/analysis/drupal_helper.py +++ b/cdci_data_analysis/analysis/drupal_helper.py @@ -43,6 +43,7 @@ class ContentType(Enum): DATA_PRODUCT = auto() OBSERVATION = auto() ASTROPHYSICAL_ENTITY = auto() + REVOLUTION_PROCESSING_LOG = auto() def analyze_drupal_output(drupal_output, operation_performed=None): @@ -460,6 +461,13 @@ def post_content_to_gallery(decoded_token, timezone=timezone, sentry_dsn=sentry_dsn, **par_dic) + elif content_type == content_type.REVOLUTION_PROCESSING_LOG: + user_id_product_creator = par_dic.pop('user_id_product_creator') + output_content_post = post_revolution_processing_log_to_gallery(product_gallery_url=product_gallery_url, + gallery_jwt_token=gallery_jwt_token, + user_id_product_creator=user_id_product_creator, + sentry_dsn=sentry_dsn, + **par_dic) elif content_type == content_type.OBSERVATION: # TODO build the body to send to the gallery in more automated fashion (like done for the data-product) t1 = kwargs.pop('T1', None) @@ -1049,6 +1057,50 @@ def get_observation_drupal_id(product_gallery_url, gallery_jwt_token, converttim return observation_drupal_id, observation_information_message, output_post +def post_revolution_processing_log_to_gallery(product_gallery_url, gallery_jwt_token, + user_id_product_creator=None, + sentry_dsn=None, + **kwargs): + body_gallery_article_node = copy.deepcopy(body_article_product_gallery.body_node) + + # set the type of content to post + body_gallery_article_node["_links"]["type"]["href"] = os.path.join(product_gallery_url, + body_gallery_article_node["_links"]["type"][ + "href"], 'data_product') + + # set the initial body content + body_gallery_article_node["body"][0]["value"] = '' + + # set the user id of the author of the data product + if user_id_product_creator is not None: + body_gallery_article_node["uid"] = [{ + "target_id": user_id_product_creator + }] + + # body_gallery_article_node["title"]["value"] = "revnumber_status_log" + + # let's go through the kwargs and if any overwrite some values for the product to post + for k, v in kwargs.items(): + # assuming the name of the field in drupal starts always with field_ + field_name = str.lower('field_' + k) + body_gallery_article_node[field_name] = [{ + "value": v + }] + + # finally, post the data product to the gallery + headers = get_drupal_request_headers(gallery_jwt_token) + + logger.info("posting a new revolution-processing-log") + log_res = execute_drupal_request(os.path.join(product_gallery_url, 'node', ), + method='post', + data=json.dumps(body_gallery_article_node), + headers=headers, + sentry_dsn=sentry_dsn) + output_post = analyze_drupal_output(log_res, operation_performed="posting a new revolution processing log to the gallery") + + return output_post + + def post_data_product_to_gallery(product_gallery_url, gallery_jwt_token, converttime_revnum_service_url, data_product_id=None, product_title=None, diff --git a/cdci_data_analysis/flask_app/app.py b/cdci_data_analysis/flask_app/app.py index 76662b624..a1432605d 100644 --- a/cdci_data_analysis/flask_app/app.py +++ b/cdci_data_analysis/flask_app/app.py @@ -926,6 +926,34 @@ def post_product_to_gallery(): return output_post +@app.route('/post_revolution_processing_log_to_gallery', methods=['POST']) +def post_revolution_processing_log_to_gallery(): + logger.info("request.args: %s ", request.args) + logger.info("request.files: %s ", request.files) + + token = request.args.get('token', None) + app_config = app.config.get('conf') + secret_key = app_config.secret_key + + output, output_code = tokenHelper.validate_token_from_request(token=token, secret_key=secret_key, + required_roles=['gallery contributor'], + action="post revolution processing log on the product gallery") + + if output_code is not None: + return make_response(output, output_code) + decoded_token = output + + par_dic = request.values.to_dict() + par_dic.pop('token') + + output_post = drupal_helper.post_content_to_gallery(decoded_token=decoded_token, + disp_conf=app_config, + files=request.files, + **par_dic) + + return output_post + + @app.route('/report_incident', methods=['POST']) def report_incident(): logger.info("request.args: %s ", request.args)