Exemplo n.º 1
0
def initialize_date(interp,
                    func_name,
                    this,
                    time_string=None,
                    w_datetimezone=None):
    from hippy.module.date.datetimezone_klass import W_DateTimeZone, k_DateTimeZone

    this.timelib_time, error = timelib.timelib_time_from_string(time_string)
    this.timelib_time.c_zone_type, this.timelib_time.c_tz_info
    zone_type = rffi.cast(lltype.Signed, this.timelib_time.c_zone_type)

    timezone_offset = None

    if w_datetimezone:
        timelib_timezone = w_datetimezone.timelib_timezone
    elif zone_type == timelib.ZONETYPE_ID:
        timelib_timezone = this.timelib_time.c_tz_info
    elif zone_type == timelib.ZONETYPE_ABBR:
        timelib_timezone = timelib.timelib_parse_tzfile(
            this.timelib_time.c_tz_abbr, timelib.timelib_builtin_db())

        if not timelib_timezone:
            timelib_timezone = interp.get_default_timezone(
                func_name).timelib_timezone

    elif zone_type == timelib.ZONETYPE_OFFSET:
        timelib_timezone = lltype.nullptr(timelib.timelib_tzinfo.TO)

        offset = timelib.timelib_get_current_offset(this.timelib_time) / 36
        mark = '+' if offset >= 0 else ''
        h, m = offset / 100, offset % 100
        "%s%s:%s" % (mark, timelib.format_to(2, h), timelib.format_to(2, m))

        timezone_offset = "%s%s:%s" % (mark, timelib.format_to(
            2, h), timelib.format_to(2, m))

    else:
        timelib_timezone = interp.get_default_timezone(
            func_name).timelib_timezone

    if timelib_timezone:
        now = timelib.timelib_time_ctor()
        now.c_zone_type = timelib.TIMELIB_ZONETYPE_ID
        now.c_tz_info = timelib_timezone

        timelib.timelib_unixtime2local(now, int(time.time()))
        timelib.timelib_fill_holes(this.timelib_time, now,
                                   timelib.TIMELIB_NO_CLONE)
        timelib.timelib_update_ts(this.timelib_time, timelib_timezone)
        timelib.timelib_time_dtor(now)

        this.timelib_time.c_have_relative = rffi.cast(
            timelib.timelib_time.TO.c_have_relative, 1)

    this.w_datetimezone = W_DateTimeZone(k_DateTimeZone, [])

    this.w_datetimezone.timezone_info = TimeZoneWrapper(
        timelib_timezone, zone_type, timezone_offset)

    return error
Exemplo n.º 2
0
def initialize_date(interp, func_name, this, time_string=None, w_datetimezone=None):
    from hippy.module.date.datetimezone_klass import W_DateTimeZone, k_DateTimeZone

    this.timelib_time, error = timelib.timelib_time_from_string(time_string)
    this.timelib_time.c_zone_type, this.timelib_time.c_tz_info
    zone_type = rffi.cast(lltype.Signed, this.timelib_time.c_zone_type)

    timezone_offset = None

    if w_datetimezone:
        timelib_timezone = w_datetimezone.timelib_timezone
    elif zone_type == timelib.ZONETYPE_ID:
        timelib_timezone = this.timelib_time.c_tz_info
    elif zone_type == timelib.ZONETYPE_ABBR:
        timelib_timezone = timelib.timelib_parse_tzfile(
            this.timelib_time.c_tz_abbr,
            timelib.timelib_builtin_db()
        )

        if not timelib_timezone:
            timelib_timezone = interp.get_default_timezone(func_name).timelib_timezone

    elif zone_type == timelib.ZONETYPE_OFFSET:
        timelib_timezone = lltype.nullptr(timelib.timelib_tzinfo.TO)

        offset = timelib.timelib_get_current_offset(this.timelib_time) / 36
        mark = '+' if offset >= 0 else ''
        h, m = offset / 100, offset % 100
        "%s%s:%s" % (mark, timelib.format_to(2, h), timelib.format_to(2, m))

        timezone_offset = "%s%s:%s" % (
            mark, timelib.format_to(2, h),
            timelib.format_to(2, m)
        )

    else:
        timelib_timezone = interp.get_default_timezone(func_name).timelib_timezone

    if timelib_timezone:
        now = timelib.timelib_time_ctor()
        now.c_zone_type = timelib.TIMELIB_ZONETYPE_ID
        now.c_tz_info = timelib_timezone

        timelib.timelib_unixtime2local(now, int(time.time()))
        timelib.timelib_fill_holes(this.timelib_time, now, timelib.TIMELIB_NO_CLONE)
        timelib.timelib_update_ts(this.timelib_time, timelib_timezone)
        timelib.timelib_time_dtor(now)

        this.timelib_time.c_have_relative = rffi.cast(
            timelib.timelib_time.TO.c_have_relative, 1
        )

    this.w_datetimezone = W_DateTimeZone(k_DateTimeZone, [])

    this.w_datetimezone.timezone_info = TimeZoneWrapper(
        timelib_timezone, zone_type, timezone_offset
    )

    return error
Exemplo n.º 3
0
def initialize_timezone_info(tz_name):
    tzi = TimeZoneInfo(tz_name is None)
    with rffi.scoped_str2charp("UTC") as ll_s:
        ll_tzi = timelib.timelib_parse_tzfile(
            ll_s, timelib.timelib_builtin_db())
    if not ll_tzi:
        raise Exception("failed to initialize timezone")
    tzi.timezone = tz_name
    tzi.utc_tzi = ll_tzi
    if tz_name is None:
        tzi.timezone = 'UTC'
        return tzi
    with rffi.scoped_str2charp(tz_name) as ll_s:
        ll_tzi = timelib.timelib_parse_tzfile(
            ll_s, timelib.timelib_builtin_db())
    if not ll_tzi:
        raise Exception("failed to initialize timezone")
    tzi.local_tzi = ll_tzi
    return tzi
Exemplo n.º 4
0
def initialize_timezone(interp, func_name, this, name, warning=False):
    this.timelib_timezone = timelib.timelib_parse_tzfile(
        rffi.str2charp(name), timelib.timelib_builtin_db())

    if this.timelib_timezone == lltype.nullptr(timelib.timelib_tzinfo.TO):
        message = "%s(): Unknown or bad timezone (%s)" % (func_name, name)
        if warning:
            interp.space.ec.warn(message)
        else:
            raise PHPException(
                k_Exception.call_args(interp, [interp.space.wrap(message)]))
        return False
    return True
Exemplo n.º 5
0
def initialize_timezone(interp, func_name, this, name, warning=False):
    this.timelib_timezone = timelib.timelib_parse_tzfile(
        rffi.str2charp(name),
        timelib.timelib_builtin_db()
    )

    if this.timelib_timezone == lltype.nullptr(timelib.timelib_tzinfo.TO):
        message = "%s(): Unknown or bad timezone (%s)" % (func_name, name)
        if warning:
            interp.space.ec.warn(message)
        else:
            raise PHPException(k_Exception.call_args(
                interp, [interp.space.wrap(message)]
            ))
        return False
    return True
Exemplo n.º 6
0
def date_parse(interp, date_string):

    return_val = []
    space = interp.space

    with rffi.scoped_str2charp(date_string) as ll_date_string:
        error_c = lltype.malloc(timelib.timelib_error_containerP.TO,
                                1,
                                flavor='raw')
        timelib_time = timelib.timelib_strtotime(ll_date_string,
                                                 len(date_string), error_c,
                                                 timelib.timelib_builtin_db(),
                                                 timelib.tzinfo_callback)

        lltype.free(error_c, flavor='raw')

        date_parse_element(space, return_val, timelib_time.c_y, "year")
        date_parse_element(space, return_val, timelib_time.c_m, "month")
        date_parse_element(space, return_val, timelib_time.c_d, "day")
        date_parse_element(space, return_val, timelib_time.c_h, "hour")
        date_parse_element(space, return_val, timelib_time.c_i, "minute")
        date_parse_element(space, return_val, timelib_time.c_s, "second")
        date_parse_element(space, return_val, timelib_time.c_s, "fraction")

        return_val.append((space.wrap("warning_count"), space.wrap(0)))
        return_val.append(
            (space.wrap("warnings"), space.new_array_from_list([])))
        return_val.append((space.wrap("error_count"), space.wrap(0)))
        return_val.append(
            (space.wrap("errors"), space.new_array_from_list([])))

        return_val.append(
            (space.wrap("is_localtime"),
             space.wrap(intmask(timelib_time.c_is_localtime) == 1)))

        if intmask(timelib_time.c_is_localtime):
            zone_type = rffi.cast(lltype.Signed, timelib_time.c_zone_type)

            return_val.append((space.wrap("zone_type"), space.wrap(zone_type)))

            if zone_type == timelib.ZONETYPE_OFFSET:
                return_val.append((space.wrap("zone"),
                                   space.wrap(intmask(timelib_time.c_z))))
                return_val.append((space.wrap("is_dst"),
                                   space.wrap(intmask(timelib_time.c_dst))))

            if zone_type == timelib.ZONETYPE_ID:
                if timelib_time.c_tz_abbr:
                    return_val.append(
                        (space.wrap("tz_abbr"),
                         space.wrap(rffi.charp2str(timelib_time.c_tz_abbr))))

                if timelib_time.c_tz_info:
                    return_val.append(
                        (space.wrap("tz_id"),
                         space.wrap(
                             rffi.charp2str(timelib_time.c_tz_info.c_name))))

            if zone_type == timelib.ZONETYPE_ABBR:
                return_val.append((space.wrap("zone"),
                                   space.wrap(intmask(timelib_time.c_z))))
                return_val.append(
                    (space.wrap("is_dst"),
                     space.wrap(intmask(timelib_time.c_dst) == 1)))
                return_val.append(
                    (space.wrap("tz_abbr"),
                     space.wrap(rffi.charp2str(timelib_time.c_tz_abbr))))

        if intmask(timelib_time.c_have_relative):
            raise NotImplementedError()  # check bug51096.php

            relative_elements = [
                (space.wrap("year"),
                 space.wrap(intmask(timelib_time.c_relative.c_y))),
                (space.wrap("month"),
                 space.wrap(intmask(timelib_time.c_relative.c_m))),
                (space.wrap("day"),
                 space.wrap(intmask(timelib_time.c_relative.c_d))),
                (space.wrap("hour"),
                 space.wrap(intmask(timelib_time.c_relative.c_h))),
                (space.wrap("minute"),
                 space.wrap(intmask(timelib_time.c_relative.c_i))),
                (space.wrap("second"),
                 space.wrap(intmask(timelib_time.c_relative.c_s)))
            ]

            if intmask(timelib_time.c_relative.c_have_weekday_relative):
                relative_elements.append(
                    (space.wrap("weekday"),
                     space.wrap(
                         intmask(timelib_time.c_relative.c_relative.weekday))))

            if intmask(timelib_time.c_relative.c_have_special_relative):
                raise NotImplementedError()

            if intmask(timelib_time.c_relative.c_first_last_day_of):
                if intmask(timelib_time.c_relative.c_first_last_day_of) == 1:
                    relative_elements.append(
                        (space.wrap("first_day_of_month"), space.w_True))
                else:
                    relative_elements.append(
                        (space.wrap("last_day_of_month"), space.w_True))

            return_val.append((space.wrap("relative"),
                               space.new_array_from_pairs(relative_elements)))

    return space.new_array_from_pairs(return_val)
Exemplo n.º 7
0
def date_parse(interp, date_string):

    return_val = []
    space = interp.space

    with rffi.scoped_str2charp(date_string) as ll_date_string:
        error_c = lltype.malloc(timelib.timelib_error_containerP.TO, 1, flavor='raw')
        timelib_time = timelib.timelib_strtotime(
            ll_date_string,
            len(date_string), error_c, timelib.timelib_builtin_db(),
            timelib.tzinfo_callback
        )

        lltype.free(error_c, flavor='raw')

        date_parse_element(space, return_val, timelib_time.c_y, "year")
        date_parse_element(space, return_val, timelib_time.c_m, "month")
        date_parse_element(space, return_val, timelib_time.c_d, "day")
        date_parse_element(space, return_val, timelib_time.c_h, "hour")
        date_parse_element(space, return_val, timelib_time.c_i, "minute")
        date_parse_element(space, return_val, timelib_time.c_s, "second")
        date_parse_element(space, return_val, timelib_time.c_s, "fraction")

        return_val.append((space.wrap("warning_count"), space.wrap(0)))
        return_val.append((space.wrap("warnings"), space.new_array_from_list([])))
        return_val.append((space.wrap("error_count"), space.wrap(0)))
        return_val.append((space.wrap("errors"), space.new_array_from_list([])))

        return_val.append((
            space.wrap("is_localtime"),
            space.wrap(intmask(timelib_time.c_is_localtime) == 1))
        )

        if intmask(timelib_time.c_is_localtime):
            zone_type = rffi.cast(lltype.Signed, timelib_time.c_zone_type)

            return_val.append((
                space.wrap("zone_type"),
                space.wrap(zone_type)
            ))

            if zone_type == timelib.ZONETYPE_OFFSET:
                return_val.append((
                    space.wrap("zone"),
                    space.wrap(intmask(timelib_time.c_z))
                ))
                return_val.append((
                    space.wrap("is_dst"),
                    space.wrap(intmask(timelib_time.c_dst))
                ))

            if zone_type == timelib.ZONETYPE_ID:
                if timelib_time.c_tz_abbr:
                    return_val.append((
                        space.wrap("tz_abbr"),
                        space.wrap(rffi.charp2str(timelib_time.c_tz_abbr)))
                    )

                if timelib_time.c_tz_info:
                    return_val.append((
                        space.wrap("tz_id"),
                        space.wrap(rffi.charp2str(timelib_time.c_tz_info.c_name)))
                    )

            if zone_type == timelib.ZONETYPE_ABBR:
                return_val.append((
                    space.wrap("zone"),
                    space.wrap(intmask(timelib_time.c_z))
                ))
                return_val.append((
                    space.wrap("is_dst"),
                    space.wrap(intmask(timelib_time.c_dst) == 1))
                )
                return_val.append((
                    space.wrap("tz_abbr"),
                    space.wrap(rffi.charp2str(timelib_time.c_tz_abbr)))
                )

        if intmask(timelib_time.c_have_relative):
            raise NotImplementedError() # check bug51096.php

            relative_elements = [
                (space.wrap("year"), space.wrap(intmask(timelib_time.c_relative.c_y))),
                (space.wrap("month"), space.wrap(intmask(timelib_time.c_relative.c_m))),
                (space.wrap("day"), space.wrap(intmask(timelib_time.c_relative.c_d))),
                (space.wrap("hour"), space.wrap(intmask(timelib_time.c_relative.c_h))),
                (space.wrap("minute"), space.wrap(intmask(timelib_time.c_relative.c_i))),
                (space.wrap("second"), space.wrap(intmask(timelib_time.c_relative.c_s)))
            ]

            if intmask(timelib_time.c_relative.c_have_weekday_relative):
                relative_elements.append((
                    space.wrap("weekday"),
                    space.wrap(intmask(timelib_time.c_relative.c_relative.weekday))
                ))

            if intmask(timelib_time.c_relative.c_have_special_relative):
                raise NotImplementedError()

            if intmask(timelib_time.c_relative.c_first_last_day_of):
                if intmask(timelib_time.c_relative.c_first_last_day_of) == 1:
                    relative_elements.append((
                        space.wrap("first_day_of_month"), space.w_True
                    ))
                else:
                    relative_elements.append((
                        space.wrap("last_day_of_month"), space.w_True
                    ))

            return_val.append((
                space.wrap("relative"), space.new_array_from_pairs(relative_elements)
            ))

    return space.new_array_from_pairs(return_val)