self.navitia = navitia json = request.get_json(silent=True) logging.getLogger(__name__).debug('PUT impact: %s', json) try: validate(json, impact_input_format) except ValidationError, e: logging.debug(str(e)) # TODO: generate good error messages return marshal({'error': { 'message': utils.parse_error(e) }}, error_fields), 400 disruption = models.Disruption.get(disruption_id, contributor.id) try: impact = db_helper.create_or_update_impact(disruption, json, self.navitia, id) except exceptions.ObjectUnknown, e: return marshal({'error': { 'message': utils.parse_error(e) }}, error_fields), 404 except exceptions.InvalidJson, e: return marshal({'error': { 'message': '{}'.format(e.message) }}, error_fields), 400 disruption = models.Disruption.get(disruption_id, contributor.id) disruption.upgrade_version() db.session.commit() chaos.utils.send_disruption_to_navitia(disruption) return marshal({'impact': impact}, one_impact_fields), 200 @validate_contributor()
class Impacts(flask_restful.Resource): def __init__(self): self.navitia = None self.parsers = {} self.parsers["get"] = reqparse.RequestParser() parser_get = self.parsers["get"] parser_get.add_argument("start_page", type=int, default=1) parser_get.add_argument("items_per_page", type=int, default=20) @validate_contributor() @validate_navitia() @manage_navitia_error() @validate_id() def get(self, contributor, disruption_id, navitia, id=None): self.navitia = navitia if id: response = models.Impact.get(id, contributor.id) return marshal({'impact': response}, one_impact_fields) else: if not id_format.match(disruption_id): return marshal({'error': { 'message': "disruption_id invalid" }}, error_fields), 400 args = self.parsers['get'].parse_args() page_index = args['start_page'] if page_index == 0: abort(400, message="page_index argument value is not valid") items_per_page = args['items_per_page'] if items_per_page == 0: abort(400, message="items_per_page argument value is not valid") result = models.Impact.all(page_index=page_index, items_per_page=items_per_page, disruption_id=disruption_id, contributor_id=contributor.id) response = { 'impacts': result.items, 'meta': make_pager(result, 'impact', disruption_id=disruption_id) } return marshal(response, impacts_fields) @validate_client() @validate_contributor() @validate_navitia() @manage_navitia_error() def post(self, client, contributor, navitia, disruption_id): self.navitia = navitia if not id_format.match(disruption_id): return marshal({'error': { 'message': "id invalid" }}, error_fields), 400 json = request.get_json(silent=True) logging.getLogger(__name__).debug('POST impcat: %s', json) try: validate(json, impact_input_format) except ValidationError, e: logging.debug(str(e)) # TODO: generate good error messages return marshal({'error': { 'message': utils.parse_error(e) }}, error_fields), 400 disruption = models.Disruption.get(disruption_id, contributor.id) try: impact = db_helper.create_or_update_impact(disruption, json, self.navitia) except exceptions.ObjectUnknown, e: return marshal({'error': { 'message': utils.parse_error(e) }}, error_fields), 404
def put(self, client, contributor, navitia, disruption_id, id): self.navitia = navitia json = request.get_json(silent=True) logging.getLogger(__name__).debug('PUT impact: %s', json) try: validate(json, impact_input_format) except ValidationError, e: logging.debug(str(e)) # TODO: generate good error messages return marshal({'error': {'message': utils.parse_error(e)}}, error_fields), 400 disruption = models.Disruption.get(disruption_id, contributor.id) try: impact = db_helper.create_or_update_impact(disruption, json, self.navitia, id) except exceptions.ObjectUnknown, e: return marshal({'error': {'message': utils.parse_error(e)}}, error_fields), 404 except exceptions.InvalidJson, e: return marshal({'error': {'message': '{}'.format(e.message)}}, error_fields), 400 disruption = models.Disruption.get(disruption_id, contributor.id) disruption.upgrade_version() db.session.commit() db.session.refresh(disruption) chaos.utils.send_disruption_to_navitia(disruption) return marshal({'impact': impact}, one_impact_fields), 200 @validate_contributor() @validate_id(True) def delete(self, contributor, disruption_id, id):