"""All endpoints for track_sample.""" from flask import request from oto.adaptors.flask import flaskify from owsrequest import flask_request from owsresponse import response from backend.api import app from backend.constants import error from backend.logic import track_sample as sample_logic from backend.utils import api as api_utils from backend.utils import handlers as handlers_util @app.route('/track//samples', methods=['POST']) def create_track_sample(tuid): """Create a track sample. Returns: flask.Response: on successful, 200 status with JSON body. """ access_rule_decision = flask_request.verify_rules_access_standalone(request) if not access_rule_decision: return flaskify(response.create_error_response( code=error.ERROR_CODE_AUTHORIZATION, message='Unauthorized', status=403, )) data = request.get_json(force=True) sample_response = sample_logic.create_track_sample(tuid, data) return flaskify(sample_response, encoder=handlers_util.DatetimeEncoder) @app.route('/track/samples/', methods=['GET']) def get_track_sample(sampleid): """Get a track sample data. Args: sampleid (id): Track Sample unique identifier. Returns: flask.Response: on successful, 200. """ access_rule_decision = flask_request.verify_rules_access_standalone(request) if not access_rule_decision: return flaskify(response.create_error_response( code=error.ERROR_CODE_AUTHORIZATION, message='Unauthorized', status=403, )) sample_data = sample_logic.get_track_sample(sampleid) return flaskify(sample_data, encoder=handlers_util.DatetimeEncoder) @app.route('/track/samples/', methods=['DELETE']) def delete_sample_data(sampleid): """Delete a track sample. Args: sampleid (id): Track Sample unique identifier. Returns: flask.Response: on successful, 200. """ access_rule_decision = flask_request.verify_rules_access_standalone(request) if not access_rule_decision: return flaskify(response.create_error_response( code=error.ERROR_CODE_AUTHORIZATION, message='Unauthorized', status=403, )) sample_data = sample_logic.delete_sample_data(sampleid) return flaskify(sample_data) @app.route('/track/samples', methods=['DELETE']) def bulk_delete_samples_by_tuids(): """Delete multiple samples for track ids provided. Sample request body: { "tuids": [1, 2, 3] } Returns: flask.Response: on successful, 200 status """ access_rule_decision = flask_request.verify_rules_access_standalone(request) if not access_rule_decision: return flaskify(response.create_error_response( code=error.ERROR_CODE_AUTHORIZATION, message='Unauthorized', status=403, )) try: tuids = handlers_util.explode_query_param_to_ids('tuids') except ValueError as e: return flaskify(api_utils.create_validation_error_response(str(e))) return flaskify(sample_logic.bulk_delete_samples_by_tuids(tuids)) @app.route('/track/samples/', methods=['PATCH']) def update_sample_data(sampleid): """Update a track sample. Args: sampleid (id): Track Sample unique identifier. Returns: flask.Response: on successful, 200. """ access_rule_decision = flask_request.verify_rules_access_standalone(request) if not access_rule_decision: return flaskify(response.create_error_response( code=error.ERROR_CODE_AUTHORIZATION, message='Unauthorized', status=403, )) data = request.get_json(force=True) sample_data = sample_logic.update_sample_data(sampleid, data) return flaskify(sample_data, encoder=handlers_util.DatetimeEncoder)