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