[pypy-svn] r29775 - in pypy/dist/pypy/module/rctime: . test
rhymes at codespeak.net
rhymes at codespeak.net
Fri Jul 7 19:29:02 CEST 2006
Author: rhymes
Date: Fri Jul 7 19:29:00 2006
New Revision: 29775
Modified:
pypy/dist/pypy/module/rctime/__init__.py
pypy/dist/pypy/module/rctime/interp_time.py
pypy/dist/pypy/module/rctime/test/test_rctime.py
Log:
implemented time.mktime(). thanks to arre and arigo for the hints.
Modified: pypy/dist/pypy/module/rctime/__init__.py
==============================================================================
--- pypy/dist/pypy/module/rctime/__init__.py (original)
+++ pypy/dist/pypy/module/rctime/__init__.py Fri Jul 7 19:29:00 2006
@@ -3,12 +3,13 @@
class Module(MixedModule):
interpleveldefs = {
- 'accept2dyear' : 'interp_time.accept2dyear',
+ 'accept2dyear': 'interp_time.accept2dyear',
'time': 'interp_time.time',
'clock': 'interp_time.clock',
'ctime': 'interp_time.ctime',
'gmtime': 'interp_time.gmtime',
'localtime': 'interp_time.localtime',
+ 'mktime': 'interp_time.mktime',
}
# def init(self, space):
Modified: pypy/dist/pypy/module/rctime/interp_time.py
==============================================================================
--- pypy/dist/pypy/module/rctime/interp_time.py (original)
+++ pypy/dist/pypy/module/rctime/interp_time.py Fri Jul 7 19:29:00 2006
@@ -4,10 +4,10 @@
from pypy.rpython.rctypes.aerrno import geterrno
from pypy.interpreter.error import OperationError
from pypy.interpreter.gateway import ObjSpace
-from pypy.interpreter.gateway import W_Root, NoneNotWrapped
-from pypy.objspace.std.noneobject import W_NoneObject
+from pypy.interpreter.gateway import W_Root
from ctypes import *
import os
+import math
_POSIX = os.name == "posix"
@@ -50,6 +50,8 @@
libc.gmtime.restype = POINTER(cConfig.tm)
libc.localtime.argtypes = [POINTER(cConfig.time_t)]
libc.localtime.restype = POINTER(cConfig.tm)
+libc.mktime.argtypes = [POINTER(cConfig.tm)]
+libc.mktime.restype = cConfig.time_t
def _init_accept2dyear():
return (1, 0)[bool(os.getenv("PYTHONY2K"))]
@@ -125,6 +127,40 @@
w_time_tuple = space.newtuple(time_tuple)
return space.call_function(w_struct_time, w_time_tuple)
+def _gettmarg(space, w_tup, buf):
+ y = space.int_w(w_tup[0])
+ buf.tm_mon = space.int_w(w_tup[1])
+ buf.tm_mday = space.int_w(w_tup[2])
+ buf.tm_hour = space.int_w(w_tup[3])
+ buf.tm_min = space.int_w(w_tup[4])
+ buf.tm_sec = space.int_w(w_tup[5])
+ buf.tm_wday = space.int_w(w_tup[6])
+ buf.tm_yday = space.int_w(w_tup[7])
+ buf.tm_isdst = space.int_w(w_tup[8])
+
+ w_accept2dyear = _get_app_object(space, "accept2dyear")
+ accept2dyear = space.int_w(w_accept2dyear)
+
+ if y < 1900:
+ if not accept2dyear:
+ raise OperationError(space.w_ValueError,
+ space.wrap("year >= 1900 required"))
+
+ if 69 <= y <= 99:
+ y += 1900
+ elif 0 <= y <= 68:
+ y += 2000
+ else:
+ raise OperationError(space.w_ValueError,
+ space.wrap("year out of range"))
+
+ buf.tm_year = y - 1900
+ buf.tm_mon = buf.tm_mon - 1
+ buf.tm_wday = int(math.fmod((buf.tm_wday + 1), 7))
+ buf.tm_yday = buf.tm_yday - 1
+
+ return buf
+
def time(space):
secs = _floattime()
return space.wrap(secs)
@@ -191,6 +227,7 @@
if not p:
raise OperationError(space.w_ValueError, space.wrap(_get_error_msg()))
return _tm_to_tuple(space, p.contents)
+gmtime.unwrap_spec = [ObjSpace, W_Root]
def localtime(space, w_seconds=None):
"""localtime([seconds]) -> (tm_year, tm_mon, tm_day, tm_hour, tm_min,
@@ -206,4 +243,36 @@
if not p:
raise OperationError(space.w_ValueError, space.wrap(_get_error_msg()))
return _tm_to_tuple(space, p.contents)
+localtime.unwrap_spec = [ObjSpace, W_Root]
+
+def mktime(space, w_tup):
+ """mktime(tuple) -> floating point number
+
+ Convert a time tuple in local time to seconds since the Epoch."""
+
+ if space.is_w(w_tup, space.w_None):
+ raise OperationError(space.w_TypeError,
+ space.wrap("argument must be 9-item sequence not None"))
+ else:
+ tup = space.unpackiterable(w_tup)
+
+ if 1 < len(tup) < 9:
+ raise OperationError(space.w_TypeError,
+ space.wrap("argument must be a sequence of length 9, not %d"\
+ % len(tup)))
+
+ tt = cConfig.time_t(int(_floattime()))
+
+ buf = libc.localtime(byref(tt))
+ if not buf:
+ raise OperationError(space.w_ValueError, space.wrap(_get_error_msg()))
+
+ buf = _gettmarg(space, tup, buf.contents)
+
+ tt = libc.mktime(byref(buf))
+ if tt == -1:
+ raise OperationError(space.w_OverflowError,
+ space.wrap("mktime argument out of range"))
+ return space.wrap(float(tt))
+mktime.unwrap_spec = [ObjSpace, W_Root]
Modified: pypy/dist/pypy/module/rctime/test/test_rctime.py
==============================================================================
--- pypy/dist/pypy/module/rctime/test/test_rctime.py (original)
+++ pypy/dist/pypy/module/rctime/test/test_rctime.py Fri Jul 7 19:29:00 2006
@@ -1,10 +1,6 @@
from py.test import raises
from pypy.conftest import gettestobjspace
-# def setup_module(mod):
-# mod.t = rctime.time()
-# mod.tup = (1, 2, 3, 4, 5, 6, 7, 8, 9)
-# mod.st_time = rctime.struct_time(mod.tup)
class AppTestRCTime:
def setup_class(cls):
space = gettestobjspace(usemodules=('rctime',))
@@ -55,10 +51,11 @@
rctime.gmtime(0)
res = rctime.gmtime(rctime.time())
assert res[-1] == 0 # DST is always zero in gmtime()
-# t0 = rctime.mktime(rctime.gmtime())
-# t1 = rctime.mktime(rctime.gmtime(None))
-# assert 0 <= (t1 - t0) < 0.2
-# assert rctime.gmtime(t) == rctime.gmtime(t)
+ t0 = rctime.mktime(rctime.gmtime())
+ t1 = rctime.mktime(rctime.gmtime(None))
+ assert 0 <= (t1 - t0) < 0.2
+ t = rctime.time()
+ assert rctime.gmtime(t) == rctime.gmtime(t)
def test_localtime(self):
import rctime
@@ -67,53 +64,51 @@
rctime.localtime(None)
rctime.localtime(0)
rctime.localtime(rctime.time())
- # t0 = rctime.mktime(rctime.gmtime())
- # t1 = rctime.mktime(rctime.gmtime(None))
- # assert 0 <= (t1 - t0) < 0.2
- # assert rctime.localtime(t) == rctime.localtime(t)
- #
- # def test_mktime():
- # py.test.raises(TypeError, rctime.mktime, "foo")
- # py.test.raises(TypeError, rctime.mktime, None)
- # py.test.raises(TypeError, rctime.mktime, (1, 2))
- #
- # arg = rctime.localtime(t)
- #
- # assert rctime.mktime(arg) != None
- # assert rctime.mktime(arg) != 0.0
- #
- # rctime.accept2dyear == 0
- # arg = list(arg)
- # arg[0] = 1899
- # arg = tuple(arg)
- # py.test.raises(ValueError, rctime.mktime, arg)
- # rctime.accept2dyear == 1
- #
- # arg = list(arg)
- # arg[0] = 67
- # arg = tuple(arg)
- # py.test.raises(ValueError, rctime.mktime, arg)
- #
- # arg = list(arg)
- # arg[0] = 100
- # arg = tuple(arg)
- # py.test.raises(ValueError, rctime.mktime, arg)
- #
- # assert long(rctime.mktime(rctime.localtime(t))) == long(t)
- # assert long(rctime.mktime(rctime.gmtime(t))) != long(t)
- # lt = rctime.localtime()
- # assert rctime.mktime(tuple(lt)) == rctime.mktime(lt)
- #
- # def test_asrctime():
- # py.test.raises(TypeError, rctime.asrctime, "foo")
- # py.test.raises(TypeError, rctime.asrctime, None)
- # py.test.raises(TypeError, rctime.asrctime, (1, 2))
- # assert rctime.asrctime() != None
- # assert rctime.asrctime() != ""
- # assert rctime.rctime(t) == rctime.asrctime(rctime.localtime(t))
- # assert rctime.rctime(t) != rctime.asrctime(rctime.gmtime(t))
+ t0 = rctime.mktime(rctime.gmtime())
+ t1 = rctime.mktime(rctime.gmtime(None))
+ assert 0 <= (t1 - t0) < 0.2
+ t = rctime.time()
+ assert rctime.localtime(t) == rctime.localtime(t)
+
+ def test_mktime(self):
+ import rctime
+ raises(TypeError, rctime.mktime, "foo")
+ raises(TypeError, rctime.mktime, None)
+ raises(TypeError, rctime.mktime, (1, 2))
+ rctime.mktime(rctime.localtime())
+
+ ltime = rctime.localtime()
+ rctime.accept2dyear == 0
+ ltime = list(ltime)
+ ltime[0] = 1899
+ raises(ValueError, rctime.mktime, tuple(ltime))
+ rctime.accept2dyear == 1
+
+ ltime = list(ltime)
+ ltime[0] = 67
+ ltime = tuple(ltime)
+ raises(OverflowError, rctime.mktime, ltime)
+
+ ltime = list(ltime)
+ ltime[0] = 100
+ raises(ValueError, rctime.mktime, tuple(ltime))
+
+ t = rctime.time()
+ assert long(rctime.mktime(rctime.localtime(t))) == long(t)
+ assert long(rctime.mktime(rctime.gmtime(t))) != long(t)
+ ltime = rctime.localtime()
+ assert rctime.mktime(tuple(ltime)) == rctime.mktime(ltime)
+ #
+ # def test_asctime():
+ # py.test.raises(TypeError, rctime.asctime, "foo")
+ # py.test.raises(TypeError, rctime.asctime, None)
+ # py.test.raises(TypeError, rctime.asctime, (1, 2))
+ # assert rctime.asctime() != None
+ # assert rctime.asctime() != ""
+ # assert rctime.rctime(t) == rctime.asctime(rctime.localtime(t))
+ # assert rctime.rctime(t) != rctime.asctime(rctime.gmtime(t))
# lt = rctime.localtime()
- # assert rctime.asrctime(tuple(lt)) == rctime.asrctime(lt)
+ # assert rctime.asctime(tuple(lt)) == rctime.asctime(lt)
#
def test_struct_time(self):
import rctime
More information about the Pypy-commit
mailing list