Example #1
0
def get_timezone_str(default='Africa/Abidjan'):
    try:
        timezone = get_timezone()
    except TechnicalError:
        return default
    else:
        return timezone.zone if timezone else default
Example #2
0
def timestamp_to_datetime(timestamp):
    dt = datetime.utcfromtimestamp(timestamp)

    timezone = get_timezone()
    if timezone:
        dt = pytz.utc.localize(dt)
        return dt.astimezone(timezone)
    return None
Example #3
0
def local_str_date_to_utc(str, tz=None):
    timezone = tz or get_timezone()
    dt = str_to_dt(str)
    if timezone:
        local = pytz.timezone(timezone)
        local_dt = local.localize(dt, is_dst=None)
        utc_date = local_dt.astimezone(pytz.UTC)
        return utc_date
    return None
Example #4
0
    def output(self, key, obj):
        tz = get_timezone()

        value = fields.get_value(
            key if self.attribute is None else self.attribute, obj)

        if value is None:
            return self.default

        return self.format(value, tz)
Example #5
0
    def output(self, key, obj):

        date = fields.get_value(self.date, obj) if self.date else None
        time = fields.get_value(self.time, obj)

        if time == __date_time_null_value__:
            return ""

        if not date:
            return self.format_time(time)

        date_time = date + time
        tz = get_timezone()
        return self.format(date_time, timezone=tz)
Example #6
0
def timestamp_to_datetime(timestamp, tz=None):
    """
    Convert a timestamp to datetime
    if timestamp > MAX_INT we return None
    """
    maxint = 9223372036854775807
    # when a date is > 2038-01-19 03:14:07
    # we receive a timestamp = 18446744071562142720 (64 bits) > 9223372036854775807 (MAX_INT 32 bits)
    # And ValueError: timestamp out of range for platform time_t is raised
    if timestamp >= maxint:
        return None

    dt = datetime.utcfromtimestamp(timestamp)

    timezone = tz or get_timezone()
    if timezone:
        dt = pytz.utc.localize(dt)
        return dt.astimezone(timezone)
    return None
Example #7
0
    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(uri.split("/"), args)
            self.region = i_manager.get_region(region, lon, lat)
        timezone.set_request_timezone(self.region)

        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)

            if not args['data_freshness']:
                args['data_freshness'] = 'realtime'
        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 debuging 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']:
            # The data freshness depends on the API
            # for route_schedule, by default we want the base schedule
            if self.endpoint == 'route_schedules':
                args['data_freshness'] = 'base_schedule'
            # for stop_schedule and previous/next departure/arrival, we want the freshest data by default
            else:
                args['data_freshness'] = 'realtime'

        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)