Ejemplo n.º 1
0
        def wrapper(*args, **kwargs):
            objects = f(*args, **kwargs)
            if objects[1] != 200:
                return objects
            #self is the first parameter, so the ressources
            region = i_manager.instances[args[0].region]
            if region and hasattr(region.scenario, 'extremes') and callable(
                    region.scenario.extremes):
                datetime_before, datetime_after = region.scenario.extremes(
                    objects[0])
            else:
                datetime_before, datetime_after = self.extremes(objects[0])
            if datetime_before and datetime_after:
                if not "links" in objects[0]:
                    objects[0]["links"] = []

                args = dict(deepcopy(request.args))
                args["datetime"] = datetime_before.strftime(f_datetime)
                args["datetime_represents"] = "arrival"
                if "region" in kwargs:
                    args["region"] = kwargs["region"]
                # Note, it's not the right thing to do, the rel should be 'next' and
                # the type 'journey' but for compatibility reason we cannot change before the v2
                objects[0]["links"].append(
                    create_external_link("v1.journeys",
                                         rel='prev',
                                         _type='prev',
                                         **args))
                args["datetime"] = datetime_after.strftime(f_datetime)
                args["datetime_represents"] = "departure"
                objects[0]["links"].append(
                    create_external_link("v1.journeys",
                                         rel='next',
                                         _type='next',
                                         **args))

            datetime_first, datetime_last = self.first_and_last(objects[0])
            if datetime_first and datetime_last:
                if not "links" in objects[0]:
                    objects[0]["links"] = []

                args = dict(deepcopy(request.args))
                args["datetime"] = datetime_first.strftime(f_datetime)
                args["datetime_represents"] = "departure"
                if "region" in kwargs:
                    args["region"] = kwargs["region"]
                objects[0]["links"].append(
                    create_external_link("v1.journeys",
                                         rel='first',
                                         _type='first',
                                         **args))
                args["datetime"] = datetime_last.strftime(f_datetime)
                args["datetime_represents"] = "arrival"
                objects[0]["links"].append(
                    create_external_link("v1.journeys",
                                         rel='last',
                                         _type='last',
                                         **args))
            return objects
Ejemplo n.º 2
0
 def wrapper(*args, **kwargs):
     objects = f(*args, **kwargs)
     if objects[1] != 200:
         return objects
     if not "journeys" in objects[0].keys():
         return objects
     if "region" in kwargs.keys():
         del kwargs["region"]
     if "uri" in kwargs.keys():
         kwargs["from"] = kwargs["uri"].split("/")[-1]
         del kwargs["uri"]
     if "lon" in kwargs.keys() and "lat" in kwargs.keys():
         if not "from" in kwargs.keys():
             kwargs["from"] = kwargs["lon"] + ';' + kwargs["lat"]
         del kwargs["lon"]
         del kwargs["lat"]
     for journey in objects[0]['journeys']:
         if not "sections" in journey.keys():
             kwargs["datetime"] = journey["requested_date_time"]
             kwargs["to"] = journey["to"]["id"]
             journey['links'] = [
                 create_external_link("v1.journeys",
                                      rel="journeys",
                                      **kwargs)
             ]
     return objects
Ejemplo n.º 3
0
        def wrapper(*args, **kwargs):
            response, status, other = f(*args, **kwargs)
            api = "departures" if "departures" in response else "arrivals" if "arrivals" in response else None
            if not api:
                return response, status, other
            passages = response[api]

            max_dt = "19000101T000000"
            min_dt = "29991231T235959"
            time_field = "arrival_date_time" if api == "arrivals" else "departure_date_time"
            for passage_ in passages:
                dt = passage_["stop_date_time"][time_field]
                if min_dt > dt:
                    min_dt = dt
                if max_dt < dt:
                    max_dt = dt
            if "links" not in response:
                response["links"] = []
            kwargs_links = dict(deepcopy(request.args))
            if "region" in kwargs:
                kwargs_links["region"] = kwargs["region"]
            if "uri" in kwargs:
                kwargs_links["uri"] = kwargs["uri"]
            if 'from_datetime' in kwargs_links:
                kwargs_links.pop('from_datetime')
            delta = datetime.timedelta(seconds=1)
            dt = datetime.datetime.strptime(min_dt, "%Y%m%dT%H%M%S")
            kwargs_links['until_datetime'] = (dt -
                                              delta).strftime("%Y%m%dT%H%M%S")
            response["links"].append(
                create_external_link("v1." + api,
                                     rel="prev",
                                     _type=api,
                                     **kwargs_links))
            kwargs_links.pop('until_datetime')
            kwargs_links['from_datetime'] = (
                datetime.datetime.strptime(max_dt, "%Y%m%dT%H%M%S") +
                delta).strftime("%Y%m%dT%H%M%S")
            response["links"].append(
                create_external_link("v1." + api,
                                     rel="next",
                                     _type=api,
                                     **kwargs_links))
            return response, status, other