[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