[pypy-svn] r62026 - in pypy/trunk/pypy: module/_winreg module/_winreg/test rlib
afa at codespeak.net
afa at codespeak.net
Thu Feb 19 20:02:48 CET 2009
Author: afa
Date: Thu Feb 19 20:02:45 2009
New Revision: 62026
Modified:
pypy/trunk/pypy/module/_winreg/__init__.py
pypy/trunk/pypy/module/_winreg/interp_winreg.py
pypy/trunk/pypy/module/_winreg/test/test_winreg.py
pypy/trunk/pypy/rlib/rwinreg.py
Log:
winreg: add DeleteValue and DeleteKey
Modified: pypy/trunk/pypy/module/_winreg/__init__.py
==============================================================================
--- pypy/trunk/pypy/module/_winreg/__init__.py (original)
+++ pypy/trunk/pypy/module/_winreg/__init__.py Thu Feb 19 20:02:45 2009
@@ -12,6 +12,8 @@
'QueryValue': 'interp_winreg.QueryValue',
'QueryValueEx' : 'interp_winreg.QueryValueEx',
'CreateKey': 'interp_winreg.CreateKey',
+ 'DeleteKey' : 'interp_winreg.DeleteKey',
+ 'DeleteValue' : 'interp_winreg.DeleteValue',
'OpenKey' : 'interp_winreg.OpenKey',
'OpenKeyEx' : 'interp_winreg.OpenKey',
'EnumValue' : 'interp_winreg.EnumValue',
Modified: pypy/trunk/pypy/module/_winreg/interp_winreg.py
==============================================================================
--- pypy/trunk/pypy/module/_winreg/interp_winreg.py (original)
+++ pypy/trunk/pypy/module/_winreg/interp_winreg.py Thu Feb 19 20:02:45 2009
@@ -14,6 +14,10 @@
def __init__(self, hkey):
self.hkey = hkey
+ def descr_del(self, space):
+ self.Close(space)
+ descr_del.unwrap_spec = ['self', ObjSpace]
+
def descr_nonzero(self, space):
return self.wrap(self.hkey != 0)
descr_nonzero.unwrap_spec = ['self', ObjSpace]
@@ -38,6 +42,7 @@
W_HKEY.typedef = TypeDef(
"_winreg.HKEYType",
__new__ = descr_HKEY_new,
+ __del__ = interp2app(W_HKEY.descr_del),
__repr__ = interp2app(W_HKEY.descr_repr),
__int__ = interp2app(W_HKEY.descr_int),
__nonzero__ = interp2app(W_HKEY.descr_nonzero),
@@ -231,7 +236,6 @@
ret = rwinreg.RegQueryValueEx(hkey, subkey, null_dword, null_dword,
None, retDataSize)
if ret != 0:
- print "AFA??", hkey, subkey
raiseWindowsError(space, ret, 'RegQueryValueEx')
databuf = lltype.malloc(rffi.CCHARP.TO, retDataSize[0], flavor='raw')
try:
@@ -268,6 +272,20 @@
lltype.free(rethkey, flavor='raw')
CreateKey.unwrap_spec = [ObjSpace, W_Root, str]
+def DeleteKey(space, w_hkey, subkey):
+ hkey = hkey_w(w_hkey, space)
+ ret = rwinreg.RegDeleteKey(hkey, subkey)
+ if ret != 0:
+ raiseWindowsError(space, ret, 'RegDeleteKey')
+DeleteKey.unwrap_spec = [ObjSpace, W_Root, str]
+
+def DeleteValue(space, w_hkey, subkey):
+ hkey = hkey_w(w_hkey, space)
+ ret = rwinreg.RegDeleteValue(hkey, subkey)
+ if ret != 0:
+ raiseWindowsError(space, ret, 'RegDeleteValue')
+DeleteValue.unwrap_spec = [ObjSpace, W_Root, str]
+
def OpenKey(space, w_hkey, subkey, res=0, sam=rwinreg.KEY_READ):
hkey = hkey_w(w_hkey, space)
rethkey = lltype.malloc(rwinreg.PHKEY.TO, 1, flavor='raw')
Modified: pypy/trunk/pypy/module/_winreg/test/test_winreg.py
==============================================================================
--- pypy/trunk/pypy/module/_winreg/test/test_winreg.py (original)
+++ pypy/trunk/pypy/module/_winreg/test/test_winreg.py Thu Feb 19 20:02:45 2009
@@ -100,8 +100,18 @@
index = index + 1
assert index == len(self.test_data)
- for name, data, type in self.test_data:
- assert QueryValueEx(sub_key, name) == (data, type)
+ for name, value, type in self.test_data:
+ assert QueryValueEx(sub_key, name) == (value, type)
assert EnumKey(key, 0) == "sub_key"
raises(EnvironmentError, EnumKey, key, 1)
+
+ def test_delete(self):
+ from _winreg import OpenKey, KEY_ALL_ACCESS, DeleteValue, DeleteKey
+ key = OpenKey(self.root_key, self.test_key_name, 0, KEY_ALL_ACCESS)
+ sub_key = OpenKey(key, "sub_key", 0, KEY_ALL_ACCESS)
+
+ for name, value, type in self.test_data:
+ DeleteValue(sub_key, name)
+
+ DeleteKey(key, "sub_key")
Modified: pypy/trunk/pypy/rlib/rwinreg.py
==============================================================================
--- pypy/trunk/pypy/rlib/rwinreg.py (original)
+++ pypy/trunk/pypy/rlib/rwinreg.py Thu Feb 19 20:02:45 2009
@@ -71,6 +71,16 @@
[HKEY, rffi.CCHARP, PHKEY],
rffi.LONG)
+RegDeleteValue = external(
+ 'RegDeleteValueA',
+ [HKEY, rffi.CCHARP],
+ rffi.LONG)
+
+RegDeleteKey = external(
+ 'RegDeleteKeyA',
+ [HKEY, rffi.CCHARP],
+ rffi.LONG)
+
RegOpenKeyEx = external(
'RegOpenKeyExA',
[HKEY, rffi.CCHARP, rwin32.DWORD, REGSAM, PHKEY],
More information about the Pypy-commit
mailing list