[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