[pypy-svn] r74574 - in pypy/trunk/pypy: module/sys module/sys/test rlib
afa at codespeak.net
afa at codespeak.net
Wed May 19 15:45:14 CEST 2010
Author: afa
Date: Wed May 19 15:45:13 2010
New Revision: 74574
Modified:
pypy/trunk/pypy/module/sys/__init__.py
pypy/trunk/pypy/module/sys/test/test_sysmodule.py
pypy/trunk/pypy/module/sys/version.py
pypy/trunk/pypy/module/sys/vm.py
pypy/trunk/pypy/rlib/rwin32.py
Log:
Add sys.winver: version of the python DLL, and sys.getwindowsversion(): OS version info.
Modified: pypy/trunk/pypy/module/sys/__init__.py
==============================================================================
--- pypy/trunk/pypy/module/sys/__init__.py (original)
+++ pypy/trunk/pypy/module/sys/__init__.py Wed May 19 15:45:13 2010
@@ -1,5 +1,6 @@
from pypy.interpreter.mixedmodule import MixedModule
from pypy.interpreter.error import OperationError
+import sys
class Module(MixedModule):
"""Sys Builtin Module. """
@@ -71,6 +72,10 @@
'setdefaultencoding' : 'interp_encoding.setdefaultencoding',
'getfilesystemencoding' : 'interp_encoding.getfilesystemencoding',
}
+
+ if sys.platform == 'win32':
+ interpleveldefs['winver'] = 'version.get_winver(space)'
+ interpleveldefs['getwindowsversion'] = 'vm.getwindowsversion'
appleveldefs = {
'excepthook' : 'app.excepthook',
Modified: pypy/trunk/pypy/module/sys/test/test_sysmodule.py
==============================================================================
--- pypy/trunk/pypy/module/sys/test/test_sysmodule.py (original)
+++ pypy/trunk/pypy/module/sys/test/test_sysmodule.py Wed May 19 15:45:13 2010
@@ -331,6 +331,10 @@
assert isinstance(v[3], int)
assert isinstance(v[4], str)
+ def test_winver(self):
+ if hasattr(sys, "winver"):
+ assert sys.winver == sys.version[:3]
+
def test_dlopenflags(self):
if hasattr(sys, "setdlopenflags"):
assert hasattr(sys, "getdlopenflags")
Modified: pypy/trunk/pypy/module/sys/version.py
==============================================================================
--- pypy/trunk/pypy/module/sys/version.py (original)
+++ pypy/trunk/pypy/module/sys/version.py Wed May 19 15:45:13 2010
@@ -58,6 +58,11 @@
PYPY_VERSION[1],
PYPY_VERSION[2]))
+def get_winver(space):
+ return space.wrap("%d.%d" % (
+ CPYTHON_VERSION[0],
+ CPYTHON_VERSION[1]))
+
def get_hexversion(space):
return space.wrap(tuple2hex(CPYTHON_VERSION))
Modified: pypy/trunk/pypy/module/sys/vm.py
==============================================================================
--- pypy/trunk/pypy/module/sys/vm.py (original)
+++ pypy/trunk/pypy/module/sys/vm.py Wed May 19 15:45:13 2010
@@ -117,3 +117,12 @@
saved, and restored afterwards. This is intended to be called from
a debugger from a checkpoint, to recursively debug some other code."""
return space.getexecutioncontext().call_tracing(w_func, w_args)
+
+def getwindowsversion(space):
+ from pypy.rlib import rwin32
+ info = rwin32.GetVersionEx()
+ return space.newtuple([space.wrap(info[0]),
+ space.wrap(info[1]),
+ space.wrap(info[2]),
+ space.wrap(info[3]),
+ space.wrap(info[4])])
Modified: pypy/trunk/pypy/rlib/rwin32.py
==============================================================================
--- pypy/trunk/pypy/rlib/rwin32.py (original)
+++ pypy/trunk/pypy/rlib/rwin32.py Wed May 19 15:45:13 2010
@@ -50,6 +50,15 @@
SYSTEMTIME = rffi_platform.Struct('SYSTEMTIME',
[])
+ OSVERSIONINFO = rffi_platform.Struct(
+ 'OSVERSIONINFO',
+ [('dwOSVersionInfoSize', rffi.UINT),
+ ('dwMajorVersion', rffi.UINT),
+ ('dwMinorVersion', rffi.UINT),
+ ('dwBuildNumber', rffi.UINT),
+ ('dwPlatformId', rffi.UINT),
+ ('szCSDVersion', rffi.CFixedArray(lltype.Char, 1))])
+
LPSECURITY_ATTRIBUTES = rffi_platform.SimpleType(
"LPSECURITY_ATTRIBUTES", rffi.CCHARP)
@@ -184,3 +193,22 @@
return ''.join([buf[i] for i in range(res)])
finally:
lltype.free(buf, flavor='raw')
+
+ _GetVersionEx = winexternal('GetVersionExA',
+ [lltype.Ptr(OSVERSIONINFO)],
+ DWORD)
+
+ def GetVersionEx():
+ info = lltype.malloc(OSVERSIONINFO, flavor='raw')
+ rffi.setintfield(info, 'c_dwOSVersionInfoSize',
+ rffi.sizeof(OSVERSIONINFO))
+ try:
+ if not _GetVersionEx(info):
+ raise lastWindowsError()
+ return (rffi.cast(lltype.Signed, info.c_dwMajorVersion),
+ rffi.cast(lltype.Signed, info.c_dwMinorVersion),
+ rffi.cast(lltype.Signed, info.c_dwBuildNumber),
+ rffi.cast(lltype.Signed, info.c_dwPlatformId),
+ rffi.charp2str(info.c_szCSDVersion))
+ finally:
+ lltype.free(info, flavor='raw')
More information about the Pypy-commit
mailing list