[pypy-svn] r29736 - in pypy/dist/pypy/module/rctime: . test
rhymes at codespeak.net
rhymes at codespeak.net
Fri Jul 7 14:46:12 CEST 2006
Author: rhymes
Date: Fri Jul 7 14:46:06 2006
New Revision: 29736
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:
(rhymes, sad, arre): time.ctime() now works. there is a problem in the translation process that makes mixed modules not working well if you have a optional argument with None as default.
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 14:46:06 2006
@@ -5,7 +5,8 @@
interpleveldefs = {
'accept2dyear' : 'interp_time.accept2dyear',
'time': 'interp_time.time',
- 'clock': 'interp_time.clock'
+ 'clock': 'interp_time.clock',
+ 'ctime': 'interp_time.ctime',
}
# def init(self, space):
@@ -19,5 +20,6 @@
buildloaders = classmethod(buildloaders)
appleveldefs = {
- 'sleep': 'app_time.sleep'
+ 'sleep': 'app_time.sleep',
+ '_check_float': 'app_time._check_float'
}
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 14:46:06 2006
@@ -3,6 +3,9 @@
import pypy.rpython.rctypes.implementation # this defines rctypes magic
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 ctypes import *
import os
@@ -16,6 +19,7 @@
timeval = ctypes_platform.Struct("struct timeval", [("tv_sec", c_int), ("tv_usec", c_int)])
CLOCKS_PER_SEC = ctypes_platform.ConstantInteger("CLOCKS_PER_SEC")
clock_t = ctypes_platform.SimpleType("clock_t", c_ulong)
+ time_t = ctypes_platform.SimpleType("time_t", c_long)
class cConfig:
pass
@@ -31,6 +35,10 @@
has_gettimeofday = True
libc.clock.restype = cConfig.clock_t
+libc.time.argtypes = [POINTER(cConfig.time_t)]
+libc.time.restype = cConfig.time_t
+libc.ctime.argtypes = [POINTER(cConfig.time_t)]
+libc.ctime.restype = c_char_p
def _init_accept2dyear():
return (1, 0)[bool(os.getenv("PYTHONY2K"))]
@@ -101,3 +109,29 @@
# windll.kernel32.QueryPerformanceCounter(byref(now))
# diff = float(now.QuadPart - ctrStart.QuadPart)
# return float(diff / divisor)
+
+def ctime(space, w_seconds=None):
+ """ctime(seconds) -> string
+
+ Convert a time in seconds since the Epoch to a string in local time.
+ This is equivalent to asctime(localtime(seconds)). When the time tuple is
+ not present, current time as returned by localtime() is used."""
+
+ # this check is done because None will be automatically wrapped
+ if space.is_w(w_seconds, space.w_None):
+ tt = cConfig.time_t()
+ tt = cConfig.time_t(libc.time(byref(tt)))
+ else:
+ seconds = space.float_w(w_seconds)
+ w_module = space.getbuiltinmodule('rctime')
+ w_check_float = space.getattr(w_module, space.wrap('_check_float'))
+ space.call_function(w_check_float, space.wrap(seconds))
+ tt = cConfig.time_t(int(seconds))
+
+ p = libc.ctime(byref(tt))
+
+ if not p:
+ raise OperationError(space.w_ValueError, space.wrap("unconvertible time"))
+
+ return space.wrap(p[:-1]) # get rid of new line
+ctime.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 14:46:06 2006
@@ -36,12 +36,15 @@
rctime.time()
assert isinstance(rctime.time(), float)
- # def test_time():
- # py.test.raises(TypeError, rctime.rctime, "foo")
- # assert rctime.time() != None
- # assert rctime.time() != ""
- # assert rctime.time(None) != None
- # assert rctime.time(None) != ""
+ def test_ctime(self):
+ import rctime
+ raises(TypeError, rctime.ctime, "foo")
+ rctime.ctime(None)
+ rctime.ctime()
+ res = rctime.ctime(0)
+ assert isinstance(res, str)
+ rctime.ctime(rctime.time())
+
#
# def test_gmtime():
# py.test.raises(TypeError, rctime.gmtime, "foo")
More information about the Pypy-commit
mailing list