+ Handles GET /a1-p/policytypes/policy_type_id/policies
+ """
+ return _try_func_return(lambda: data.get_instance_list(policy_type_id))
+
+
+def get_policy_instance(policy_type_id, policy_instance_id):
+ """
+ Handles GET /a1-p/policytypes/polidyid/policies/policy_instance_id
+ """
+ return _try_func_return(lambda: data.get_policy_instance(policy_type_id, policy_instance_id))
+
+
+def get_policy_instance_status(policy_type_id, policy_instance_id):
+ """
+ Handles GET /a1-p/policytypes/polidyid/policies/policy_instance_id/status
+
+ Return the aggregated status. The order of rules is as follows:
+ 1. If a1 has received at least one status, and *all* received statuses are "DELETED", we blow away the instance and return a 404
+ 2. if a1 has received at least one status and at least one is OK, we return "IN EFFECT"
+ 3. "NOT IN EFFECT" otherwise (no statuses, or none are OK but not all are deleted)
+ """
+ return _try_func_return(lambda: data.get_policy_instance_status(policy_type_id, policy_instance_id))
+
+
+def create_or_replace_policy_instance(policy_type_id, policy_instance_id):
+ """
+ Handles PUT /a1-p/policytypes/polidyid/policies/policy_instance_id
+ """
+ a1_counters.labels(counter='CreatePolicyInstanceReqs').inc()
+ instance = connexion.request.json
+
+ def put_instance_handler():
+ """
+ Handles policy instance put
+
+ For now, policy_type_id is used as the message type
+ """
+ # validate the PUT against the schema
+ schema = data.get_policy_type(policy_type_id)["create_schema"]
+ validate(instance=instance, schema=schema)
+
+ # store the instance
+ operation = data.store_policy_instance(policy_type_id, policy_instance_id, instance)
+
+ # queue rmr send (best effort)
+ a1rmr.queue_instance_send((operation, policy_type_id, policy_instance_id, instance))
+
+ return "", 202
+
+ return _try_func_return(put_instance_handler)
+
+
+def delete_policy_instance(policy_type_id, policy_instance_id):
+ """
+ Handles DELETE /a1-p/policytypes/polidyid/policies/policy_instance_id
+ """
+ a1_counters.labels(counter='DeletePolicyInstanceReqs').inc()
+
+ def delete_instance_handler():
+ data.delete_policy_instance(policy_type_id, policy_instance_id)
+
+ # queue rmr send (best effort)
+ a1rmr.queue_instance_send(("DELETE", policy_type_id, policy_instance_id, ""))
+
+ return "", 202
+
+ return _try_func_return(delete_instance_handler)
+
+
+# data delivery
+
+
+def data_delivery():
+ """
+ Handle data delivery /data-delivery
+ """
+
+ def data_delivery_handler():
+ mdc_logger.debug("data: {}".format(connexion.request.json))
+ ei_job_result_json = connexion.request.json
+ mdc_logger.debug("jobid: {}".format(ei_job_result_json.get("job")))
+ a1rmr.queue_ei_job_result((ei_job_result_json.get("job"), ei_job_result_json))
+ return "", 200
+
+ return _try_func_return(data_delivery_handler)