"""A generic view for finding an object by id.""" from flask.views import MethodView from owsresponse import response from owsresponse.adaptors.flask import flaskify from abacus_common_logic.views.validations import validated_request_body class ItemView(MethodView): """A generic view for operations on an existing object, specified by id.""" def get(self, object_id, **kwargs): """Find object by its id or return an error.""" obj = self.model_class.get_by_id_or_error(object_id, 404) body = self.object_detail_schema.dump(obj) return flaskify(response.Response(message=body, status=200)) def delete(self, object_id, **kwargs): """Delete object by id.""" self.model_class.delete_by_id_or_error(object_id, 404) return flaskify(response.Response(status=204)) def put(self, object_id, **kwargs): """Update an object by id.""" obj = self.model_class.get_by_id_or_error(object_id, 404) validated_params = validated_request_body(self.put_schema) return flaskify(self.update_handler(obj, **validated_params)) def update_handler(self, obj, **params): """Override to implement custom update logic.""" raise NotImplementedError('Override with logic.')