예제 #1
0
파일: resources.py 프로젝트: nberard/Chaos
        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()
예제 #2
0
파일: resources.py 프로젝트: nberard/Chaos
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
예제 #3
0
    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):