Author: Amaury Forgeot d'Arc <amaur...@gmail.com>
Branch: missing-os-functions
Changeset: r61150:0a0abe7ca7a4
Date: 2013-02-12 22:43 +0100
http://bitbucket.org/pypy/pypy/changeset/0a0abe7ca7a4/

Log:    Use explicit names for posix functions and methods. It still relies
        on host Python for configuration, though

diff --git a/pypy/module/posix/__init__.py b/pypy/module/posix/__init__.py
--- a/pypy/module/posix/__init__.py
+++ b/pypy/module/posix/__init__.py
@@ -33,13 +33,13 @@
     applevel_name = os.name
 
     appleveldefs = {
-    'error'      : 'app_posix.error',
-    'stat_result': 'app_posix.stat_result',
-    'fdopen'     : 'app_posix.fdopen',
-    'tmpfile'    : 'app_posix.tmpfile',
-    'popen'      : 'app_posix.popen',
-    'tmpnam'     : 'app_posix.tmpnam',
-    'tempnam'    : 'app_posix.tempnam',
+        'error'      : 'app_posix.error',
+        'stat_result': 'app_posix.stat_result',
+        'fdopen'     : 'app_posix.fdopen',
+        'tmpfile'    : 'app_posix.tmpfile',
+        'popen'      : 'app_posix.popen',
+        'tmpnam'     : 'app_posix.tmpnam',
+        'tempnam'    : 'app_posix.tempnam',
     }
     if os.name == 'nt':
         appleveldefs.update({
@@ -47,140 +47,92 @@
                 'popen3' : 'app_posix.popen3',
                 'popen4' : 'app_posix.popen4',
                 })
-
-    if hasattr(os, 'wait'):
+    if hasattr(posix, 'wait'):
         appleveldefs['wait'] = 'app_posix.wait'
-    if hasattr(os, 'wait3'):
+    if hasattr(posix, 'wait3'):
         appleveldefs['wait3'] = 'app_posix.wait3'
-    if hasattr(os, 'wait4'):
+    if hasattr(posix, 'wait4'):
         appleveldefs['wait4'] = 'app_posix.wait4'
         
+    # Functions implemented on all platforms
     interpleveldefs = {
-    'open'      : 'interp_posix.open',
-    'lseek'     : 'interp_posix.lseek',
-    'write'     : 'interp_posix.write',
-    'isatty'    : 'interp_posix.isatty',
-    'read'      : 'interp_posix.read',
-    'close'     : 'interp_posix.close',
-    'closerange': 'interp_posix.closerange',
-    'fstat'     : 'interp_posix.fstat',
-    'stat'      : 'interp_posix.stat',
-    'lstat'     : 'interp_posix.lstat',
-    'stat_float_times' : 'interp_posix.stat_float_times',
-    'dup'       : 'interp_posix.dup',
-    'dup2'      : 'interp_posix.dup2',
-    'access'    : 'interp_posix.access',
-    'times'     : 'interp_posix.times',
-    'system'    : 'interp_posix.system',
-    'unlink'    : 'interp_posix.unlink',
-    'remove'    : 'interp_posix.remove',
-    'getcwd'    : 'interp_posix.getcwd',
-    'getcwdu'   : 'interp_posix.getcwdu',
-    'chdir'     : 'interp_posix.chdir',
-    'mkdir'     : 'interp_posix.mkdir',
-    'rmdir'     : 'interp_posix.rmdir',
-    'environ'   : 'interp_posix.get(space).w_environ',
-    'listdir'   : 'interp_posix.listdir',
-    'strerror'  : 'interp_posix.strerror',
-    'pipe'      : 'interp_posix.pipe',
-    'chmod'     : 'interp_posix.chmod',
-    'rename'    : 'interp_posix.rename',
-    'umask'     : 'interp_posix.umask',
-    '_exit'     : 'interp_posix._exit',
-    'utime'     : 'interp_posix.utime',
-    '_statfields': 'interp_posix.getstatfields(space)',
-    'kill'      : 'interp_posix.kill',
-    'abort'     : 'interp_posix.abort',
-    'urandom'   : 'interp_posix.urandom',
-    }
+        'open'      : 'interp_posix.open',
+        'lseek'     : 'interp_posix.lseek',
+        'write'     : 'interp_posix.write',
+        'isatty'    : 'interp_posix.isatty',
+        'read'      : 'interp_posix.read',
+        'close'     : 'interp_posix.close',
+        'closerange': 'interp_posix.closerange',
+        'fstat'     : 'interp_posix.fstat',
+        'stat'      : 'interp_posix.stat',
+        'lstat'     : 'interp_posix.lstat',
+        'stat_float_times' : 'interp_posix.stat_float_times',
+        'dup'       : 'interp_posix.dup',
+        'dup2'      : 'interp_posix.dup2',
+        'access'    : 'interp_posix.access',
+        'times'     : 'interp_posix.times',
+        'system'    : 'interp_posix.system',
+        'unlink'    : 'interp_posix.unlink',
+        'remove'    : 'interp_posix.remove',
+        'getcwd'    : 'interp_posix.getcwd',
+        'getcwdu'   : 'interp_posix.getcwdu',
+        'chdir'     : 'interp_posix.chdir',
+        'mkdir'     : 'interp_posix.mkdir',
+        'rmdir'     : 'interp_posix.rmdir',
+        'environ'   : 'interp_posix.get(space).w_environ',
+        'listdir'   : 'interp_posix.listdir',
+        'strerror'  : 'interp_posix.strerror',
+        'pipe'      : 'interp_posix.pipe',
+        'chmod'     : 'interp_posix.chmod',
+        'rename'    : 'interp_posix.rename',
+        'umask'     : 'interp_posix.umask',
+        '_exit'     : 'interp_posix._exit',
+        'utime'     : 'interp_posix.utime',
+        '_statfields': 'interp_posix.getstatfields(space)',
+        'kill'      : 'interp_posix.kill',
+        'abort'     : 'interp_posix.abort',
+        'urandom'   : 'interp_posix.urandom',
+        }
 
-    if hasattr(os, 'chown'):
-        interpleveldefs['chown'] = 'interp_posix.chown'
-    if hasattr(os, 'lchown'):
-        interpleveldefs['lchown'] = 'interp_posix.lchown'
-    if hasattr(os, 'fchown'):
-        interpleveldefs['fchown'] = 'interp_posix.fchown'
-    if hasattr(os, 'fchmod'):
-        interpleveldefs['fchmod'] = 'interp_posix.fchmod'
-    if hasattr(os, 'ftruncate'):
-        interpleveldefs['ftruncate'] = 'interp_posix.ftruncate'
-    if hasattr(os, 'fsync'):
-        interpleveldefs['fsync'] = 'interp_posix.fsync'
-    if hasattr(os, 'fdatasync'):
-        interpleveldefs['fdatasync'] = 'interp_posix.fdatasync'
-    if hasattr(os, 'fchdir'):
-        interpleveldefs['fchdir'] = 'interp_posix.fchdir'
-    if hasattr(os, 'putenv'):
-        interpleveldefs['putenv'] = 'interp_posix.putenv'
-    if hasattr(posix, 'unsetenv'): # note: emulated in os
-        interpleveldefs['unsetenv'] = 'interp_posix.unsetenv'
-    if hasattr(os, 'killpg'):
-        interpleveldefs['killpg'] = 'interp_posix.killpg'
-    if hasattr(os, 'getpid'):
-        interpleveldefs['getpid'] = 'interp_posix.getpid'
-    if hasattr(os, 'link'):
-        interpleveldefs['link'] = 'interp_posix.link'
-    if hasattr(os, 'symlink'):
-        interpleveldefs['symlink'] = 'interp_posix.symlink'
-    if hasattr(os, 'readlink'):
-        interpleveldefs['readlink'] = 'interp_posix.readlink'
-    if hasattr(os, 'fork'):
-        interpleveldefs['fork'] = 'interp_posix.fork'
-    if hasattr(os, 'openpty'):
-        interpleveldefs['openpty'] = 'interp_posix.openpty'
-    if hasattr(os, 'forkpty'):
-        interpleveldefs['forkpty'] = 'interp_posix.forkpty'
-    if hasattr(os, 'waitpid'):
-        interpleveldefs['waitpid'] = 'interp_posix.waitpid'
-    if hasattr(os, 'execv'):
-        interpleveldefs['execv'] = 'interp_posix.execv'
-    if hasattr(os, 'execve'):
-        interpleveldefs['execve'] = 'interp_posix.execve'
-    if hasattr(posix, 'spawnv'):
-        interpleveldefs['spawnv'] = 'interp_posix.spawnv'
-    if hasattr(posix, 'spawnve'):
-        interpleveldefs['spawnve'] = 'interp_posix.spawnve'
-    if hasattr(os, 'uname'):
-        interpleveldefs['uname'] = 'interp_posix.uname'
-    if hasattr(os, 'sysconf'):
-        interpleveldefs['sysconf'] = 'interp_posix.sysconf'
+    for name in '''
+            wait wait3 wait4 chown lchown fchown fchmod ftruncate
+            fsync fdatasync fchdir putenv unsetenv killpg getpid
+            link symlink readlink
+            fork openpty forkpty waitpid execv execve uname sysconf fpathconf
+            ttyname getloadavg makedev major minor mkfifo mknod nice getlogin
+            getsid getuid geteuid getgid getegid getpgrp getpgid
+            setsid setuid seteuid setgid setegid setpgrp setpgid
+            getppid getgroups setreuid setregid chroot
+            _getfullpathname
+            '''.split():
+        if hasattr(posix, name):
+            interpleveldefs[name] = 'interp_posix.%s' % (name,)
+
+    for constant in '''
+            F_OK R_OK W_OK X_OK NGROUPS_MAX TMP_MAX
+            WNOHANG WCONTINUED WUNTRACED
+            O_RDONLY O_WRONLY O_RDWR O_NDELAY O_NONBLOCK O_APPEND
+            O_DSYNC O_RSYNC O_SYNC O_NOCTTY O_CREAT O_EXCL O_TRUNC
+            O_BINARY O_TEXT O_LARGEFILE O_SHLOCK O_EXLOCK
+            O_NOINHERIT O_TEMPORARY O_RANDOM O_SEQUENTIAL
+            O_ASYNC O_DIRECT O_DIRECTORY O_NOFOLLOW O_NOATIME 
+            EX_OK EX_USAGE EX_DATAERR EX_NOINPUT EX_NOUSER EX_NOHOST
+            EX_UNAVAILABLE EX_SOFTWARE EX_OSERR EX_OSFILE EX_CANTCREAT
+            EX_IOERR EX_TEMPFAIL EX_PROTOCOL EX_NOPERM EX_CONFIG EX_NOTFOUND
+            '''.split():
+        if hasattr(posix, constant):
+            value = getattr(posix, constant)
+            interpleveldefs[constant] = "space.wrap(%s)" % value
+
+    # XXX don't use the os module here
+    if 'sysconf' in interpleveldefs:
         interpleveldefs['sysconf_names'] = 'space.wrap(os.sysconf_names)'
-    if hasattr(os, 'fpathconf'):
-        interpleveldefs['fpathconf'] = 'interp_posix.fpathconf'
+    if 'fpathconf' in interpleveldefs:
         interpleveldefs['pathconf_names'] = 'space.wrap(os.pathconf_names)'
-    if hasattr(os, 'ttyname'):
-        interpleveldefs['ttyname'] = 'interp_posix.ttyname'
-    if hasattr(os, 'getloadavg'):
-        interpleveldefs['getloadavg'] = 'interp_posix.getloadavg'
-    if hasattr(os, 'makedev'):
-        interpleveldefs['makedev'] = 'interp_posix.makedev'
-    if hasattr(os, 'major'):
-        interpleveldefs['major'] = 'interp_posix.major'
-    if hasattr(os, 'minor'):
-        interpleveldefs['minor'] = 'interp_posix.minor'
-    if hasattr(os, 'mkfifo'):
-        interpleveldefs['mkfifo'] = 'interp_posix.mkfifo'
-    if hasattr(os, 'mknod'):
-        interpleveldefs['mknod'] = 'interp_posix.mknod'
-    if hasattr(os, 'nice'):
-        interpleveldefs['nice'] = 'interp_posix.nice'
-    if hasattr(os, 'getlogin'):
-        interpleveldefs['getlogin'] = 'interp_posix.getlogin'
 
-    for name in ['setsid', 'getuid', 'geteuid', 'getgid', 'getegid', 'setuid',
-                 'seteuid', 'setgid', 'setegid', 'getgroups', 'getpgrp', 
-                 'setpgrp', 'getppid', 'getpgid', 'setpgid', 'setreuid', 
-                 'setregid', 'getsid', 'setsid']:
-        if hasattr(os, name):
-            interpleveldefs[name] = 'interp_posix.%s' % (name,)
-    # not visible via os, inconsistency in nt:
-    if hasattr(posix, '_getfullpathname'):
-        interpleveldefs['_getfullpathname'] = 'interp_posix._getfullpathname'
-    if hasattr(os, 'chroot'):
-        interpleveldefs['chroot'] = 'interp_posix.chroot'
-    
+    # Macros for process exit statuses: WIFEXITED &co
     for name in RegisterOs.w_star:
-        if hasattr(os, name):
+        if hasattr(posix, name):
             interpleveldefs[name] = 'interp_posix.' + name
 
     def __init__(self, space, w_name):
@@ -195,8 +147,3 @@
     def startup(self, space):
         from pypy.module.posix import interp_posix
         interp_posix.get(space).startup(space)
-        
-for constant in dir(os):
-    value = getattr(os, constant)
-    if constant.isupper() and type(value) is int:
-        Module.interpleveldefs[constant] = "space.wrap(%s)" % value
diff --git a/pypy/module/posix/test/test_posix2.py 
b/pypy/module/posix/test/test_posix2.py
--- a/pypy/module/posix/test/test_posix2.py
+++ b/pypy/module/posix/test/test_posix2.py
@@ -92,6 +92,15 @@
     def test_posix_is_pypy_s(self):
         assert self.posix.__file__
 
+    def test_expected_functions(self):
+        import sys
+        if sys.platform.startswith('linux'):
+            for name in '''fork wait wait3 wait4 fchown fchmod'''.split():
+                assert name in dir(self.posix)
+        if sys.platform.startswith('win32'):
+            for name in '''_getfullpathname O_TEXT O_BINARY'''.split():
+                assert name in dir(self.posix)
+
     def test_some_posix_basic_operation(self):
         path = self.path
         posix = self.posix
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to