Author: Amaury Forgeot d'Arc <[email protected]>
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
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit