예제 #1
0
    def get(self, region=None, lon=None, lat=None, uri=None, id=None):
        self.region = i_manager.get_region(region, lon, lat)
        args = self.parsers["get"].parse_args()

        # for retrocompatibility purpose
        for forbid_id in args['__temporary_forbidden_id[]']:
            args['forbidden_uris[]'].append(forbid_id)

        if id:
            args["filter"] = "calendar.uri=" + id
        elif uri:
            # Calendars of line
            args["filter"] = self.get_filter(split_uri(uri), args)
        else:
            args["filter"] = ""

        # change dt to utc
        args['_current_datetime'] = self.convert_to_utc(
            args['_current_datetime'])

        self._register_interpreted_parameters(args)
        response = i_manager.dispatch(args,
                                      "calendars",
                                      instance_name=self.region)
        return response
예제 #2
0
    def get(self, region=None, lon=None, lat=None, uri=None):
        self.region = i_manager.get_region(region, lon, lat)
        timezone.set_request_timezone(self.region)
        args = self.parsers["get"].parse_args()

        if args['disable_geojson']:
            g.disable_geojson = True

        args["filter"] = self.get_filter(split_uri(uri), args)

        # change dt to utc
        args['_current_datetime'] = self.convert_to_utc(
            args['_current_datetime'])

        if args['since']:
            args['since'] = date_to_timestamp(
                self.convert_to_utc(args['since']))
        if args['until']:
            args['until'] = date_to_timestamp(
                self.convert_to_utc(args['until']))

        response = i_manager.dispatch(args,
                                      "line_reports",
                                      instance_name=self.region)

        return response
예제 #3
0
    def get(self, region=None, lon=None, lat=None, uri=None):
        self.region = i_manager.get_region(region, lon, lat)
        timezone.set_request_timezone(self.region)
        args = self.parsers["get"].parse_args()

        if args['disable_geojson']:
            g.disable_geojson = True

        # for retrocompatibility purpose
        for forbid_id in args['__temporary_forbidden_id[]']:
            args['forbidden_uris[]'].append(forbid_id)

        args["filter"] = self.get_filter(split_uri(uri), args)

        since = args.get('since')
        until = args.get('until')
        if since and until and since > until:
            abort(400, message='until must be >= since')

        if since:
            args['since'] = date_to_timestamp(self.convert_to_utc(since))
        if until:
            args['until'] = date_to_timestamp(self.convert_to_utc(until))

        response = i_manager.dispatch(args,
                                      "traffic_reports",
                                      instance_name=self.region)

        return response
예제 #4
0
    def get(self, region=None, lon=None, lat=None, uri=None):
        self.region = i_manager.get_region(region, lon, lat)
        timezone.set_request_timezone(self.region)
        args = self.parsers["get"].parse_args()
        instance = i_manager.instances.get(self.region)

        args["filter"] = self.get_filter(split_uri(uri), args)
        response = i_manager.dispatch(args,
                                      "vehicle_positions",
                                      instance_name=self.region)
        instance.external_service_provider_manager.manage_vehicle_positions(
            instance, response.vehicle_positions, **args)
        return response
예제 #5
0
    def get(self, region=None, lon=None, lat=None, uri=None):
        self.region = i_manager.get_region(region, lon, lat)
        timezone.set_request_timezone(self.region)
        args = self.parsers["get"].parse_args()
        instance = i_manager.instances.get(self.region)

        args["filter"] = self.get_filter(split_uri(uri), args)

        # create filter
        if args["filter"] != "":
            args["filter"] += " and " + self._create_filter_equipment(instance)
        else:
            args["filter"] = self._create_filter_equipment(instance)
        logging.getLogger(__name__).debug("equipment provider filter: {}".format(args["filter"]))

        response = i_manager.dispatch(args, "equipment_reports", instance_name=self.region)
        return instance.equipment_provider_manager.manage_equipments_for_equipment_reports(response)
예제 #6
0
    def get(self, region=None, lon=None, lat=None, uri=None):
        self.region = i_manager.get_region(region, lon, lat)
        timezone.set_request_timezone(self.region)
        args = self.parsers["get"].parse_args()

        if args['disable_geojson']:
            g.disable_geojson = True

        # for retrocompatibility purpose
        for forbid_id in args['__temporary_forbidden_id[]']:
            args['forbidden_uris[]'].append(forbid_id)

        args["filter"] = self.get_filter(split_uri(uri), args)

        response = i_manager.dispatch(args, "traffic_reports", instance_name=self.region)

        return response
예제 #7
0
    def get(self, region=None, lon=None, lat=None, uri=None, id=None):
        args = self.parsers["get"].parse_args()

        if args['disable_geojson']:
            g.disable_geojson = True

        # for retrocompatibility purpose
        for forbid_id in args['__temporary_forbidden_id[]']:
            args['forbidden_uris[]'].append(forbid_id)

        if "odt_level" in args and args[
                "odt_level"] != "all" and "lines" not in self.collection:
            abort(404,
                  message=
                  "bad request: odt_level filter can only be applied to lines")

        if args.get("external_code") is not None:
            type_ = collections_to_resource_type[self.collection]
            if all(obj is None for obj in (region, lat, lon)):
                for instance in i_manager.get_regions():
                    res = i_manager.instances[instance].has_external_code(
                        type_, args["external_code"])
                    if res:
                        region = instance
                        id = res
                        break
                if not region:
                    abort(404,
                          message=
                          "Unable to find an object for the external_code %s" %
                          args["external_code"])
            else:
                id = i_manager.instances[region].has_external_code(
                    type_, args["external_code"])
                if id == None:
                    abort(404,
                          message=
                          "Unable to find an object for the external_code %s" %
                          args["external_code"])

        self.region = i_manager.get_region(region, lon, lat)

        # we store the region in the 'g' object, which is local to a request
        set_request_timezone(self.region)

        # change dt to utc
        args['_current_datetime'] = self.convert_to_utc(
            args['_current_datetime'])
        if args['since']:
            args['_original_since'] = args['since']
            args['since'] = date_to_timestamp(
                self.convert_to_utc(args['since']))
        if args['until']:
            args['_original_until'] = args['until']
            args['until'] = date_to_timestamp(
                self.convert_to_utc(args['until']))

        if not self.region:
            return {"error": "No region"}, 404
        uris = []
        if uri:
            uris = split_uri(uri)
            if self.collection is None:
                self.collection = uris[-1] if len(uris) % 2 != 0 else uris[-2]
        args["filter"] = self.get_filter(uris, args)

        if self.collection and id:
            f = u'{o}.uri={v}'.format(
                o=collections_to_resource_type[self.collection], v=protect(id))
            if args.get("filter"):
                args["filter"] = '({}) and {}'.format(args["filter"], f)
            else:
                args["filter"] = f

        response = i_manager.dispatch(args,
                                      self.collection,
                                      instance_name=self.region)
        return response
예제 #8
0
파일: Schedules.py 프로젝트: thmsct/navitia
    def get(self, uri=None, region=None, lon=None, lat=None):
        args = self.parsers["get"].parse_args()

        # for retrocompatibility purpose
        for forbid_id in args['__temporary_forbidden_id[]']:
            args['forbidden_uris[]'].append(forbid_id)

        args["nb_stoptimes"] = args["count"]

        if args['disable_geojson']:
            g.disable_geojson = True

        # retrocompatibility
        if args['max_date_times'] is not None:
            args['items_per_schedule'] = args['max_date_times']

        if uri is None:
            if not args['filter']:
                raise InvalidArguments('filter')
            first_filter = args["filter"].lower().split("and")[0].strip()
            parts = first_filter.lower().split("=")
            if len(parts) != 2:
                error = "Unable to parse filter {filter}"
                return {"error": error.format(filter=args["filter"])}, 503
            else:
                self.region = i_manager.get_region(object_id=parts[1].strip())
        else:
            self.collection = 'schedules'
            args["filter"] = self.get_filter(split_uri(uri), args)
            self.region = i_manager.get_region(region, lon, lat)
        timezone.set_request_timezone(self.region)

        # create direction type filter
        if args['direction_type']:
            args['filter'] = self._add_direction_type_filter(
                args['direction_type'], args['filter'])
        logging.getLogger(__name__).debug("Schedule filter: %s",
                                          args["filter"])

        if not args["from_datetime"] and not args["until_datetime"]:
            # no datetime given, default is the current time, and we activate the realtime
            args['from_datetime'] = args['_current_datetime']
            if args["calendar"]:  # if we have a calendar, the dt is only used for sorting, so 00:00 is fine
                args['from_datetime'] = args['from_datetime'].replace(hour=0,
                                                                      minute=0)
        elif not args.get('calendar'):
            # if a calendar is given all times will be given in local (because the calendar might span over dst)
            if args['from_datetime']:
                args['from_datetime'] = self.convert_to_utc(
                    args['from_datetime'])
            if args['until_datetime']:
                args['until_datetime'] = self.convert_to_utc(
                    args['until_datetime'])

        # we save the original datetime for debugging purpose
        args['original_datetime'] = args['from_datetime']
        if args['from_datetime']:
            args['from_datetime'] = utils.date_to_timestamp(
                args['from_datetime'])
        if args['until_datetime']:
            args['until_datetime'] = utils.date_to_timestamp(
                args['until_datetime'])

        if not args['data_freshness']:
            args['data_freshness'] = self._get_default_freshness()

        if not args["from_datetime"] and args[
                "until_datetime"] and self.endpoint[:4] == "next":
            self.endpoint = "previous" + self.endpoint[4:]

        # Add timezone in request for availability in greenlet
        args['timezone'] = timezone.get_timezone()

        self._register_interpreted_parameters(args)
        return i_manager.dispatch(args,
                                  self.endpoint,
                                  instance_name=self.region)