"""Reference Mechanical Rate handlers.""" from abacus_common_logic.views.item_view import ItemView from abacus_common_logic.views.list_view import ListView from flask import Blueprint, request from owsrequest import flask_request from owsresponse import response from owsresponse.adaptors.flask import flaskify from abacus_contract.constants.error import ERROR_CODE_AUTHORIZATION from abacus_contract.models import ReferenceMechanicalRate from abacus_contract.schemas.reference_mechanical_rate import ( ReferenceMechanicalRateSchema, ) reference_mechanical_rate_api = Blueprint('reference_mechanical_rate_api', __name__) class ReferenceMechanicalRateView(ItemView): """View for finding reference_mechanical_rate by ID.""" model_class = ReferenceMechanicalRate object_detail_schema = ReferenceMechanicalRateSchema() def get(self, object_id, **kwargs): """Get reference mechanical rate by id.""" access_rule_decision = flask_request.verify_rules_access_standalone(request) if not access_rule_decision: return flaskify( response.create_error_response( code=ERROR_CODE_AUTHORIZATION, message='Unauthorized', status=401, ) ) return super().get(object_id, **kwargs) class ReferenceMechanicalRateList(ListView): """View for listing reference_mechanical_rate.""" model_class = ReferenceMechanicalRate list_entry_schema = ReferenceMechanicalRateSchema() def get(self): """Override base GET method.""" access_rule_decision = flask_request.verify_rules_access_standalone(request) if not access_rule_decision: return flaskify( response.create_error_response( code=ERROR_CODE_AUTHORIZATION, message='Unauthorized', status=401, ) ) reference_mechanical_rates = ( self.base_list_query().order_by(self.model_class.default_order()).all() ) result = ReferenceMechanicalRateSchema(many=True).dump( reference_mechanical_rates ) count = self.base_list_query().count() return flaskify(response.Response({'items': result, 'total_count': count})) reference_mechanical_rate_api.add_url_rule( '/reference-mechanical-rates/', methods=['GET'], view_func=ReferenceMechanicalRateList.as_view('list_reference_mechanical_rates'), ) reference_mechanical_rate_api.add_url_rule( '/reference-mechanical-rate/', view_func=ReferenceMechanicalRateView.as_view('reference_mechanical_rate'), )