[pypy-svn] r49409 - in pypy/branch/pypy-interp-file: interpreter module/_file

arigo at codespeak.net arigo at codespeak.net
Wed Dec 5 20:05:20 CET 2007


Author: arigo
Date: Wed Dec  5 20:05:19 2007
New Revision: 49409

Modified:
   pypy/branch/pypy-interp-file/interpreter/typedef.py
   pypy/branch/pypy-interp-file/module/_file/app_file.py
   pypy/branch/pypy-interp-file/module/_file/interp_file.py
Log:
file.__repr__, file.mode, file.name.


Modified: pypy/branch/pypy-interp-file/interpreter/typedef.py
==============================================================================
--- pypy/branch/pypy-interp-file/interpreter/typedef.py	(original)
+++ pypy/branch/pypy-interp-file/interpreter/typedef.py	Wed Dec  5 20:05:19 2007
@@ -380,13 +380,13 @@
     def descr_get_objclass(space, property):
         return property.objclass_getter(space)
 
-def interp_attrproperty(name, cls):
+def interp_attrproperty(name, cls, doc=None):
     "NOT_RPYTHON: initialization-time only"
     def fget(space, obj):
         return space.wrap(getattr(obj, name))
-    return GetSetProperty(fget, cls=cls)
+    return GetSetProperty(fget, cls=cls, doc=doc)
 
-def interp_attrproperty_w(name, cls):
+def interp_attrproperty_w(name, cls, doc=None):
     "NOT_RPYTHON: initialization-time only"
     def fget(space, obj):
         w_value = getattr(obj, name)
@@ -395,7 +395,7 @@
         else:
             return w_value
     
-    return GetSetProperty(fget, cls=cls)
+    return GetSetProperty(fget, cls=cls, doc=doc)
 
 GetSetProperty.typedef = TypeDef(
     "getset_descriptor",

Modified: pypy/branch/pypy-interp-file/module/_file/app_file.py
==============================================================================
--- pypy/branch/pypy-interp-file/module/_file/app_file.py	(original)
+++ pypy/branch/pypy-interp-file/module/_file/app_file.py	Wed Dec  5 20:05:19 2007
@@ -82,7 +82,7 @@
     mode     = property(lambda self: self._mode,
                         doc = "file mode ('r', 'U', 'w', 'a', "
                               "possibly with 'b' or '+' added)")
-    name     = property(lambda self: self._name, doc = "file name")
+    #name     = property(lambda self: self._name, doc = "file name")
     closed   = property(lambda self: self._closed,
                         doc = "True if the file is closed")
     #newlines = property(lambda self: self.getnewlines(),
@@ -217,15 +217,15 @@
             raise ValueError('I/O operation on closed file')
         self.stream.seek(offset, whence)
 
-    def __iter__(self):
+    #def __iter__(self):
         """Iterating over files, as in 'for line in f:', returns each line of
 the file one by one."""
         if self._closed:
             raise ValueError('I/O operation on closed file')
         return self
-    xreadlines = __iter__
+    #xreadlines = __iter__
     
-    def next(self):
+    #def next(self):
         """next() -> the next line in the file, or raise StopIteration"""
         if self._closed:
             raise ValueError('I/O operation on closed file')
@@ -303,7 +303,7 @@
         import os
         return os.isatty(self.fd)
 
-    def __repr__(self):
+    #def __repr__(self):
         return "<%s file '%s', mode %r at 0x%x>" % (
             self._closed and 'closed' or 'open',
             self._name,

Modified: pypy/branch/pypy-interp-file/module/_file/interp_file.py
==============================================================================
--- pypy/branch/pypy-interp-file/module/_file/interp_file.py	(original)
+++ pypy/branch/pypy-interp-file/module/_file/interp_file.py	Wed Dec  5 20:05:19 2007
@@ -5,6 +5,7 @@
 from pypy.interpreter.error import OperationError
 from pypy.interpreter.gateway import ObjSpace, W_Root, Arguments
 from pypy.interpreter.typedef import TypeDef, GetSetProperty
+from pypy.interpreter.typedef import interp_attrproperty
 from pypy.interpreter.gateway import interp2app
 
 
@@ -297,6 +298,15 @@
 For backward compatibility. File objects now include the performance
 optimizations previously implemented in the xreadlines module.""")
 
+    def file__repr__(self):
+        if self.stream is None:
+            head = "closed"
+        else:
+            head = "open"
+        info = "%s file '%s', mode '%s'" % (head, self.name, self.mode)
+        return self.getrepr(self.space, info)
+    file__repr__.unwrap_spec = ['self']
+
 
 # ____________________________________________________________
 
@@ -355,8 +365,11 @@
 """,
     __new__  = interp2app(descr_file__new__),
     fdopen   = interp2app(descr_file_fdopen, as_classmethod=True),
+    name     = interp_attrproperty('name', cls=W_File),
+    mode     = interp_attrproperty('mode', cls=W_File),
     newlines = GetSetProperty(descr_file_newlines, cls=W_File,
                               doc="end-of-line convention used in this file"),
+    __repr__ = interp2app(W_File.file__repr__),
     **dict([(name, interp2app(getattr(W_File, 'file_' + name)))
                 for name in W_File._exposed_method_names])
     )



More information about the Pypy-commit mailing list