Remove the winreg module from the project. I don't believe any
docs changes are needed (only reference to winreg I could find was in libwinreg.tex, which is documenting _winreg, and merely mentions that a higher-level winreg module *may* appear someday; that's still true).
This commit is contained in:
parent
a98e92bc13
commit
e82e7ccdbd
|
@ -1,386 +0,0 @@
|
|||
"""
|
||||
Windows registry support.
|
||||
|
||||
openKey( keyname )
|
||||
open existing key object
|
||||
|
||||
>>> key=openKey( r"HKLM\HARDWARE\DESCRIPTION\System" )
|
||||
|
||||
createKey( keyname )
|
||||
create a key if it doesn't already exist
|
||||
|
||||
>>> key=createKey( r"HKLM\SOFTWARE\Python\Test" )
|
||||
|
||||
deleteKey( keyname )
|
||||
delete a key if it exists
|
||||
Note: deleteKey may not be recursive on all platforms.
|
||||
|
||||
>>> key=deleteKey( r"HKLM\SOFTWARE\Python\Test" )
|
||||
|
||||
RemoteKey( machine, top_level_key ):
|
||||
open a key on another machine.
|
||||
You can use the returned key as a basis for opens, creates and deletes
|
||||
on the other machine.
|
||||
|
||||
>>> key=RemoteKey( "somemachine", "HKLM" )
|
||||
|
||||
For information on the key API, open a key and look at its docstring.
|
||||
|
||||
|
||||
"""
|
||||
|
||||
import _winreg
|
||||
import sys
|
||||
import exceptions
|
||||
import array
|
||||
from types import *
|
||||
import string
|
||||
|
||||
class RegType:
|
||||
"Represents one of the types that can go into the registry"
|
||||
def __init__( self, msname, friendlyname ):
|
||||
self.msname=msname
|
||||
self.friendlyname=friendlyname
|
||||
self.intval=getattr( _winreg, msname )
|
||||
|
||||
def __repr__( self ):
|
||||
"Return a useful representation of the type object"
|
||||
return "<RegType %d: %s %s>" % \
|
||||
(self.intval, self.msname, self.friendlyname )
|
||||
|
||||
_typeConstants={
|
||||
_winreg.REG_NONE:
|
||||
RegType( "REG_NONE", "None" ),
|
||||
_winreg.REG_SZ:
|
||||
RegType( "REG_SZ", "String" ),
|
||||
_winreg.REG_EXPAND_SZ:
|
||||
RegType("REG_EXPAND_SZ", "Expandable Template String" ),
|
||||
_winreg.REG_BINARY:
|
||||
RegType("REG_BINARY", "Binary Data"),
|
||||
_winreg.REG_DWORD :
|
||||
RegType("REG_DWORD", "Integer" ),
|
||||
# _winreg.REG_DWORD_LITTLE_ENDIAN :
|
||||
# RegType("REG_DWORD_LITTLE_ENDIAN", "Integer"),
|
||||
_winreg.REG_DWORD_BIG_ENDIAN :
|
||||
RegType("REG_DWORD_BIG_ENDIAN", "Big Endian Integer"),
|
||||
_winreg.REG_LINK :
|
||||
RegType("REG_LINK", "Link"),
|
||||
_winreg.REG_MULTI_SZ :
|
||||
RegType("REG_MULTI_SZ", "List of Strings"),
|
||||
_winreg.REG_RESOURCE_LIST :
|
||||
RegType("REG_RESOURCE_LIST", "Resource List"),
|
||||
_winreg.REG_FULL_RESOURCE_DESCRIPTOR :
|
||||
RegType( "REG_FULL_RESOURCE_DESCRIPTOR",
|
||||
"Full Resource Descriptor" ),
|
||||
_winreg.REG_RESOURCE_REQUIREMENTS_LIST:
|
||||
RegType( "REG_RESOURCE_REQUIREMENTS_LIST",
|
||||
"Resource Requirements List" )
|
||||
}
|
||||
|
||||
regtypes={}
|
||||
for constant in _typeConstants.values():
|
||||
regtypes[constant.msname]=constant
|
||||
|
||||
class _DictBase:
|
||||
"Base class for dictionary-type objects"
|
||||
def __init__( self, key ):
|
||||
self.key=key
|
||||
|
||||
def clear( self ):
|
||||
"Clear the list of keys/data values, as in dictionaries"
|
||||
keys=list( self.keys() )
|
||||
map( self.__delitem__, keys )
|
||||
|
||||
def get( self, item, defaultVal=None ):
|
||||
"Get a key/value by name or index"
|
||||
try:
|
||||
return self.__getitem__( item )
|
||||
except (IndexError, EnvironmentError, WindowsError):
|
||||
return defaultVal
|
||||
|
||||
def has_key( self, item ):
|
||||
"Check if a key/data value with a particular name exists"
|
||||
try:
|
||||
self.__getitem__( item )
|
||||
return 1
|
||||
except (IndexError, EnvironmentError, WindowsError):
|
||||
return 0
|
||||
|
||||
def keys( self ):
|
||||
"Get a list of key/data value names"
|
||||
keys=[]
|
||||
try:
|
||||
for i in xrange( 0, sys.maxint ):
|
||||
keyname = self._nameFromNum( i )
|
||||
keys.append( keyname )
|
||||
except (IndexError, EnvironmentError, WindowsError):
|
||||
pass
|
||||
return keys
|
||||
|
||||
def values( self ):
|
||||
"Get a list of key objects or data values"
|
||||
values=[] # map() doesn't use the IndexError semantics...
|
||||
for i in self:
|
||||
values.append( i )
|
||||
return values
|
||||
|
||||
def items( self ):
|
||||
"Get pairs of keyname/key object or valuename/value data"
|
||||
return map( None, self.keys(), self.values() )
|
||||
|
||||
def __len__( self ):
|
||||
return len( self.keys() )
|
||||
|
||||
def _getName( item, nameFromNum ):
|
||||
"Helper function -- don't use it directly"
|
||||
if type( item ) == IntType:
|
||||
try:
|
||||
keyname = nameFromNum( item )
|
||||
except (WindowsError, EnvironmentError):
|
||||
raise IndexError, item
|
||||
|
||||
elif type( item ) in [StringType, UnicodeType]:
|
||||
keyname=item
|
||||
else:
|
||||
raise exceptions.TypeError, \
|
||||
"Requires integer index or string key name"
|
||||
return keyname
|
||||
|
||||
|
||||
class RegValuesDict( _DictBase ):
|
||||
"A dictionary of registry data values"
|
||||
def _nameFromNum( self, i ):
|
||||
return self.key._nameFromNum( i )
|
||||
|
||||
def __getitem__( self, item ):
|
||||
return self.key.getValueNameDataAndType( item )
|
||||
|
||||
def __setitem__( self, name, val):
|
||||
if type( val )==TupleType:
|
||||
data, datatype=val
|
||||
assert isinstance( datatype, RegType )
|
||||
self.key.setValue( name, data, datatype )
|
||||
else:
|
||||
self.key.setValue( name, val )
|
||||
|
||||
def __delitem__( self, item ):
|
||||
valname=_getName( item, self._nameFromNum )
|
||||
self.key.deleteValue( valname )
|
||||
|
||||
class RegKeysDict( _DictBase ):
|
||||
"A dictionary of registry keys"
|
||||
def _nameFromNum( self, item ):
|
||||
return _winreg.EnumKey( self.key.handle, item )
|
||||
|
||||
def __getitem__( self, item ):
|
||||
keyname=_getName( item, self._nameFromNum )
|
||||
return self.key.openSubkey( keyname )
|
||||
|
||||
def __delitem__( self, item ):
|
||||
keyname=_getName( item, self._nameFromNum )
|
||||
self.key.deleteSubkey( keyname )
|
||||
|
||||
def openKey( keyname, samFlags=None ):
|
||||
"Open a key by name"
|
||||
lst=string.split( keyname, "\\", 1 )
|
||||
if len( lst )==2:
|
||||
hivename,path=lst
|
||||
return hives[hivename].openSubkey( path )
|
||||
else:
|
||||
hivename=lst[0]
|
||||
return hives[hivename]
|
||||
|
||||
def createKey( keyname ):
|
||||
lst=string.split( keyname, "\\", 1 )
|
||||
assert len( lst )==2
|
||||
hivename,path=lst
|
||||
return hives[hivename].createSubkey( path )
|
||||
|
||||
def deleteKey( keyname ):
|
||||
lst=string.split( keyname, "\\", 1 )
|
||||
assert len( lst )==2
|
||||
hivename,path=lst
|
||||
return hives[hivename].deleteSubkey( path )
|
||||
|
||||
|
||||
class RegKey:
|
||||
"A registry key object"
|
||||
|
||||
def __init__( self, name, handle=None ):
|
||||
self.name=name
|
||||
self.handle=handle
|
||||
|
||||
def _nameFromNum( self, item ):
|
||||
"internal"
|
||||
(name,data,datatype)=_winreg.EnumValue( self.handle, item )
|
||||
return name
|
||||
|
||||
def __nonzero__(self):
|
||||
"Is the key open?"
|
||||
if self.handle:
|
||||
return 1
|
||||
else:
|
||||
return 0
|
||||
|
||||
def __cmp__ (self, other ):
|
||||
"Compare two keys for equality"
|
||||
if hasattr( other, "handle" ) and hasattr( other, "name" ):
|
||||
return cmp( self.name, other.name )
|
||||
else:
|
||||
return cmp( self.handle, other )
|
||||
|
||||
def __repr__( self ):
|
||||
return "<Windows RegKey: %s>"% self.name
|
||||
|
||||
def close(self ):
|
||||
"Close the key"
|
||||
return _winreg.CloseKey( self.handle )
|
||||
|
||||
def getSubkeyNames( self ):
|
||||
"Get a list of subkey names"
|
||||
return self.getSubkeys().keys()
|
||||
|
||||
def getValueNames( self ):
|
||||
"Get a list of value names"
|
||||
return self.getValues().keys()
|
||||
|
||||
def deleteSubkey( self, subkey ):
|
||||
"Delete a subkey by name"
|
||||
return _winreg.DeleteKey( self.handle, subkey )
|
||||
|
||||
def deleteValue( self, valname ):
|
||||
"Delete a value by name"
|
||||
return _winreg.DeleteValue( self.handle, valname )
|
||||
|
||||
def createSubkey( self, keyname ):
|
||||
"Create a subkey by name"
|
||||
handle=_winreg.CreateKey( self.handle, keyname )
|
||||
return RegKey( self.name+"\\"+keyname, handle)
|
||||
|
||||
def openSubkey( self, keyname, samFlags=None ):
|
||||
"Open a named subkey"
|
||||
if samFlags:
|
||||
handle=_winreg.OpenKey( self.handle, keyname, 0, samFlags )
|
||||
else:
|
||||
handle=_winreg.OpenKey( self.handle, keyname, 0 )
|
||||
return RegKey( self.name+"\\"+keyname, handle )
|
||||
|
||||
def getSubkeys( self ):
|
||||
"Get a dictionary-like mapping of subkeys"
|
||||
return RegKeysDict( self )
|
||||
|
||||
def getValues( self ):
|
||||
"Get a dictionary-like mapping of data values"
|
||||
return RegValuesDict( self )
|
||||
|
||||
def getValueNameDataAndType( self, valname ):
|
||||
"Get a data value's name, data and type all at one time"
|
||||
try:
|
||||
if type( valname )==IntType:
|
||||
(valname,data,datatype)=_winreg.EnumValue( self.handle, valname )
|
||||
else:
|
||||
keyname=_getName( valname, self._nameFromNum )
|
||||
(data,datatype)=_winreg.QueryValueEx( self.handle, keyname )
|
||||
except (WindowsError, EnvironmentError):
|
||||
raise IndexError, valname
|
||||
|
||||
if datatype==_winreg.REG_BINARY:
|
||||
# use arrays for binary data
|
||||
data=array.array( 'c', data )
|
||||
|
||||
return (valname, data, _typeConstants[datatype] )
|
||||
|
||||
def getValueData( self, valname ):
|
||||
"Get a data value's data."
|
||||
name, data, type=self.getValueNameDataAndType( valname )
|
||||
return data
|
||||
|
||||
def setValue( self, valname, data, regtype=None ):
|
||||
"Set a data value's data (and optionally type)"
|
||||
if regtype:
|
||||
typeint=regtype.intval
|
||||
else:
|
||||
if type( data ) in [StringType, UnicodeType]:
|
||||
typeint=_winreg.REG_SZ
|
||||
elif type( data )==ListType:
|
||||
# XXX - _winreg currently only supports lists
|
||||
# Also, probably should check each element is
|
||||
# string/unicode.
|
||||
typeint = _winreg.REG_MULTI_SZ
|
||||
elif type( data )==IntType:
|
||||
typeint=_winreg.REG_DWORD
|
||||
elif type( data )==array.ArrayType:
|
||||
typeint=_winreg.REG_BINARY
|
||||
_winreg.SetValueEx( self.handle, valname, 0, typeint, data )
|
||||
|
||||
def flush(self ):
|
||||
"Make sure that all changes are written to the registry. "
|
||||
"Only use this if you know what you are doing. "
|
||||
"It isn't usually needed."
|
||||
_winreg.FlushKey( self.keyobbj )
|
||||
|
||||
def save( self, filename ):
|
||||
"Save a key to a filename"
|
||||
_winreg.SaveKey( self.keyobj, filename )
|
||||
|
||||
def load( self, subkey, filename ):
|
||||
"Load a key from a filename"
|
||||
return _winreg.RegLoadKey( self.handle, subkey, filename )
|
||||
|
||||
|
||||
class RemoteKey( RegKey ):
|
||||
"Open a key on a remote machine"
|
||||
def __init__( self, machine, topLevelKey ):
|
||||
assert topLevelKey in _hivenames
|
||||
self.handle = _winreg.ConnectRegistry( machine, parentKey )
|
||||
self.name=r"\\%s\%s" % (machine, topLevelKey )
|
||||
|
||||
_hivenames = ["HKEY_CLASSES_ROOT","HKEY_CURRENT_USER","HKEY_LOCAL_MACHINE",
|
||||
"HKEY_USERS","HKEY_CURRENT_CONFIG","HKEY_DYN_DATA",
|
||||
"HKEY_PERFORMANCE_DATA"]
|
||||
hives={}
|
||||
for name in _hivenames:
|
||||
hives[name]=RegKey( name, getattr( _winreg, name ) )
|
||||
hives["HKLM"]=hives["HKEY_LOCAL_MACHINE"]
|
||||
hives["HKCR"]=hives["HKEY_CLASSES_ROOT"]
|
||||
hives["HKCU"]=hives["HKEY_CURRENT_USER"]
|
||||
|
||||
_flagnames = ["KEY_ALL_ACCESS","KEY_CREATE_LINK", "KEY_CREATE_SUB_KEY",
|
||||
"KEY_ENUMERATE_SUB_KEYS", "KEY_EXECUTE", "KEY_NOTIFY",
|
||||
"KEY_QUERY_VALUE", "KEY_READ", "KEY_SET_VALUE"]
|
||||
flags={}
|
||||
for name in _flagnames:
|
||||
flags[name]=getattr( _winreg, name )
|
||||
|
||||
_RegNotifyChangeKeyValueOptions=[ "REG_NOTIFY_CHANGE_ATTRIBUTES",
|
||||
"REG_NOTIFY_CHANGE_SECURITY", "REG_NOTIFY_CHANGE_LAST_SET",
|
||||
"REG_NOTIFY_CHANGE_NAME", "REG_LEGAL_CHANGE_FILTER" ]
|
||||
|
||||
_RegRestoreKeyOptions=["REG_WHOLE_HIVE_VOLATILE",
|
||||
"REG_NO_LAZY_FLUSH",
|
||||
"REG_OPTION_VOLATILE",
|
||||
"REG_REFRESH_HIVE",
|
||||
"REG_OPTION_NON_VOLATILE",
|
||||
"REG_OPTION_BACKUP_RESTORE" ]
|
||||
|
||||
_RegCreateKeyExOptions=[
|
||||
"REG_LEGAL_OPTION",
|
||||
"REG_OPTION_RESERVED",
|
||||
"REG_OPTION_VOLATILE",
|
||||
"REG_OPTION_NON_VOLATILE",
|
||||
"REG_OPTION_BACKUP_RESTORE",
|
||||
"REG_CREATED_NEW_KEY",
|
||||
"REG_OPENED_EXISTING_KEY",
|
||||
"REG_OPTION_CREATE_LINK"]
|
||||
|
||||
|
||||
#unusednames=_RegNotifyChangeKeyValueOptions+_RegRestoreKeyOptions+_RegCreateKeyExOptions
|
||||
|
||||
#typeConstantNames=map( lambda x: x.msname, typeConstants.values() )
|
||||
|
||||
#allnames=_hivenames+_flagnames+typeConstantNames+unusednames
|
||||
#winregnames=_winreg.__dict__.keys()
|
||||
#for name in winregnames:
|
||||
# if name not in allnames:
|
||||
# print name
|
||||
|
|
@ -1,77 +0,0 @@
|
|||
test_winreg2
|
||||
Test Passed: testKeyDict_Values
|
||||
Test Passed: testKeyDict_Items
|
||||
Test Passed: testGetValueNames
|
||||
Test Passed: testSetDwordBigEndian
|
||||
Test Passed: testGetSubkeyNames
|
||||
Test Passed: testResourceRequirementsListType
|
||||
Test Passed: testLoad
|
||||
Test Passed: testDeleteKey
|
||||
Test Passed: testValueDict_Length
|
||||
Test Passed: testResourceDescriptionType
|
||||
Test Passed: testSetMultiSz
|
||||
Test Passed: testSetFullResourceDescription
|
||||
HKEY_CLASSES_ROOT
|
||||
HKEY_CURRENT_USER
|
||||
HKEY_LOCAL_MACHINE
|
||||
HKEY_USERS
|
||||
HKEY_CURRENT_CONFIG
|
||||
HKEY_DYN_DATA
|
||||
HKEY_PERFORMANCE_DATA
|
||||
Test Passed: testHives
|
||||
Test Passed: testDWordType
|
||||
Test Passed: testRemote
|
||||
Test Passed: testKeyDict_DelItem
|
||||
Test Passed: testSetIntValue
|
||||
Test Passed: testResourceLinkType
|
||||
Test Passed: testNoneType
|
||||
Test Passed: testValueDict_Map
|
||||
Test Passed: testSetResourceList
|
||||
Test Passed: testKeyDict_Length
|
||||
Test Passed: testKeyDict_ClearKeys
|
||||
Test Passed: testDWordBigEndianType
|
||||
Test Passed: testOpen
|
||||
Test Passed: testSetBinaryData
|
||||
Test Passed: testGetValueNameDataAndType
|
||||
Test Passed: testSetBinaryValue
|
||||
Test Passed: testSetResourceRequirementsList
|
||||
Test Passed: testUnicodeValueName
|
||||
Test Passed: testGetValueDataFromEnum
|
||||
Test Passed: testValueDict_Get
|
||||
Test Passed: testValueDict_GetItem
|
||||
Test Passed: testValueDict_Keys
|
||||
Test Passed: testKeyDict_HasKey
|
||||
Test Passed: testExpandStringType
|
||||
Test Passed: testValueDict_HasKey
|
||||
Test Passed: testCreateKey
|
||||
Test Passed: testGetBinaryData
|
||||
Test Passed: testKeyDict_Get
|
||||
Test Passed: testSave
|
||||
Test Passed: testValueDict_ClearKeys
|
||||
Test Passed: testCmp
|
||||
Test Passed: testLinkType
|
||||
Test Passed: testSetExpandString
|
||||
Test Passed: testKeyDict_GetItem
|
||||
Test Passed: testRepr
|
||||
Test Passed: testClose
|
||||
Test Passed: testSetLink
|
||||
Test Passed: testGetValueDataFromName
|
||||
Test Passed: testUnicodeKeyName
|
||||
Test Passed: testShortcuts
|
||||
Test Passed: testKeyDict_Map
|
||||
Test Passed: testStringType
|
||||
Test Passed: testOpenFailure
|
||||
Test Passed: testSetDword
|
||||
Test Passed: testOpenKeyWithFlags
|
||||
Test Passed: testSetNone
|
||||
Test Passed: testKeyDict_Keys
|
||||
Test Passed: testMultiStringType
|
||||
Test Passed: testSetStringValue
|
||||
Test Passed: testValueDict_Items
|
||||
Test Passed: testValueDict_DelItem
|
||||
Test Passed: testNonZero
|
||||
Test Passed: testFlush
|
||||
Test Passed: testGetSubkeys
|
||||
Test Passed: testDeleteValue
|
||||
Test Passed: testSetString
|
||||
Test Passed: testValueDict_Values
|
|
@ -1,350 +0,0 @@
|
|||
from winreg import hives, createKey, openKey, flags, deleteKey, regtypes
|
||||
import sys, traceback
|
||||
import time
|
||||
import array
|
||||
|
||||
def testHives():
|
||||
hivenames = ["HKEY_CLASSES_ROOT","HKEY_CURRENT_USER","HKEY_LOCAL_MACHINE",
|
||||
"HKEY_USERS","HKEY_CURRENT_CONFIG"] #, #
|
||||
for hivename in hivenames:
|
||||
hive = hives[ hivename ]
|
||||
print hive.name
|
||||
assert hive.handle
|
||||
assert hive.getSubkeys()
|
||||
for hivename in ["HKEY_DYN_DATA", "HKEY_PERFORMANCE_DATA"]:
|
||||
hive = hives[ hivename ]
|
||||
print hive.name
|
||||
assert hive.handle
|
||||
assert not hive.getValues()
|
||||
assert not hive.getSubkeys()
|
||||
|
||||
def testNonZero():
|
||||
key=hives["HKLM"].openSubkey( "SOFTWARE" )
|
||||
assert key.openSubkey( "Microsoft" )
|
||||
assert key
|
||||
key.close()
|
||||
assert not key
|
||||
try:
|
||||
key.openSubkey( "Microsoft" )
|
||||
assert 0
|
||||
except EnvironmentError:
|
||||
pass
|
||||
|
||||
def testCmp():
|
||||
HKLM=hives["HKLM"]
|
||||
assert (openKey("HKLM\\SOFTWARE")==\
|
||||
HKLM.openSubkey("SOFTWARE"))
|
||||
assert not HKLM.openSubkey("SYSTEM")!=HKLM.openSubkey("SYSTEM")
|
||||
assert HKLM.openSubkey("SOFTWARE")!=HKLM.openSubkey("SYSTEM")
|
||||
assert not HKLM.openSubkey("SOFTWARE")==HKLM.openSubkey("SYSTEM")
|
||||
assert not HKLM.openSubkey("SOFTWARE")=="spam"
|
||||
assert ((HKLM.openSubkey("SOFTWARE")<"spam") !=
|
||||
(HKLM.openSubkey("SOFTWARE")>"spam"))
|
||||
|
||||
def testClose():
|
||||
key=hives["HKLM"].openSubkey( "SOFTWARE" )
|
||||
assert key
|
||||
key.close()
|
||||
assert not key
|
||||
|
||||
def testOpen():
|
||||
assert openKey( r"HKLM" )
|
||||
assert openKey( r"HKLM\HARDWARE" )
|
||||
assert openKey( r"HKLM\HARDWARE\DESCRIPTION\System" )
|
||||
|
||||
def testOpenFailure():
|
||||
try:
|
||||
print openKey( r"HKCU\Software\Python\A\B\C\D" )
|
||||
assert 0 #
|
||||
except EnvironmentError:
|
||||
pass
|
||||
|
||||
def testDeleteKey():
|
||||
createKey( r"HKCU\Software\Python\A\B\C\D" )
|
||||
deleteKey( r"HKCU\Software\Python\A\B\C\D" )
|
||||
deleteKey( r"HKCU\Software\Python\A\B\C" )
|
||||
deleteKey( r"HKCU\Software\Python\A\B" )
|
||||
assert "A" in \
|
||||
openKey(r"HKCU\Software\Python").getSubkeys().keys()
|
||||
openKey( r"HKCU\Software\Python" ).deleteSubkey( r"A" )
|
||||
assert "A" not in \
|
||||
openKey(r"HKCU\Software\Python").getSubkeys().keys()
|
||||
|
||||
def testDeleteValue():
|
||||
key=createKey( r"HKCU\Software\Python\A" )
|
||||
key.setValue( "abcde", "fghij" )
|
||||
assert key.getValueData( "abcde" )=="fghij"
|
||||
assert "abcde" in key.getValues().keys()
|
||||
assert "fghij" in map( lambda x:x[1], key.getValues().values() )
|
||||
assert "abcde" in key.getValues().keys()
|
||||
key.deleteValue( "abcde" )
|
||||
assert "abcde" not in key.getValues().keys()
|
||||
assert "fghij" not in map( lambda x:x[1], key.getValues().values() )
|
||||
deleteKey( r"HKCU\Software\Python\A" )
|
||||
|
||||
def testCreateKey():
|
||||
key=createKey( r"HKCU\Software\Python\A" )
|
||||
assert openKey( r"HKCU\Software\Python").getSubkeys().has_key( "A" )
|
||||
deleteKey( r"HKCU\Software\Python\A" )
|
||||
assert not openKey( r"HKCU\Software\Python").getSubkeys().\
|
||||
has_key( "A" )
|
||||
key=openKey( r"HKCU\Software\Python" ).createSubkey( "A" )
|
||||
|
||||
def testOpenKeyWithFlags():
|
||||
assert openKey( r"HKCU\Software\Python",
|
||||
flags["KEY_READ"])
|
||||
assert openKey( r"HKCU\Software\Python",
|
||||
flags["KEY_ALL_ACCESS"])
|
||||
|
||||
def testGetSubkeys():
|
||||
keys=openKey( r"HKCU\Software" ).getSubkeys()
|
||||
assert keys
|
||||
index=0
|
||||
for i in keys:
|
||||
index=index+1
|
||||
assert index==len( keys )
|
||||
|
||||
def testGetValueNameDataAndType(): pass
|
||||
|
||||
def testGetSubkeyNames():
|
||||
subkeyNames=hives["HKLM"].getSubkeyNames()
|
||||
assert len( subkeyNames )==len(hives["HKLM"].getSubkeys())
|
||||
for name in subkeyNames:
|
||||
assert type( name )==type("")
|
||||
|
||||
def testGetValueNames():
|
||||
valNames=hives["HKLM"].getValueNames()
|
||||
assert len( valNames )==len(hives["HKLM"].getValues())
|
||||
for name in valNames:
|
||||
assert type( name )==type("")
|
||||
|
||||
def testRepr():
|
||||
assert repr(hives["HKCU"])==str(hives["HKCU"])
|
||||
|
||||
def testSetStringValue():
|
||||
hives["HKCU"].setValue( "Blah", "abc" )
|
||||
assert hives["HKCU"].getValueData( "Blah" )=="abc"
|
||||
assert hives["HKCU"].getValues().has_key( "Blah" )
|
||||
del hives["HKCU"].getValues()[ "Blah" ]
|
||||
assert not hives["HKCU"].getValues().has_key( "Blah" )
|
||||
|
||||
# Ensure Unicode works as we expect
|
||||
hives["HKCU"].setValue( u"Blah", u"abc" )
|
||||
assert hives["HKCU"].getValueData( "Blah" )=="abc"
|
||||
assert hives["HKCU"].getValues().has_key( u"Blah" )
|
||||
del hives["HKCU"].getValues()[ u"Blah" ]
|
||||
assert not hives["HKCU"].getValues().has_key( u"Blah" )
|
||||
|
||||
def testDeleteValue():
|
||||
hives["HKCU"].setValue( "Blah", "abc" )
|
||||
assert hives["HKCU"].getValues().has_key( "Blah" )
|
||||
del hives["HKCU"].getValues()[ "Blah" ]
|
||||
assert not hives["HKCU"].getValues().has_key( "Blah" )
|
||||
hives["HKCU"].setValue( "Blah", "abc" )
|
||||
hives["HKCU"].deleteValue( "Blah" )
|
||||
assert not hives["HKCU"].getValues().has_key( "Blah" )
|
||||
|
||||
def testKeyDict_ClearKeys():
|
||||
createKey( "HKLM\\Software\\a\\b\\c\\d\\e" )
|
||||
createKey( "HKLM\\Software\\a\\b\\c\\d\\f" )
|
||||
createKey( "HKLM\\Software\\a\\b\\c\\d\\g" )
|
||||
createKey( "HKLM\\Software\\a\\b\\c\\d\\h" )
|
||||
createKey( "HKLM\\Software\\a\\b\\c\\d\\i" )
|
||||
key=openKey( "HKLM\\Software\\a\\b\\c\\d" )
|
||||
assert key.getSubkeys()
|
||||
key.getSubkeys().clear()
|
||||
assert not key.getSubkeys()
|
||||
assert not openKey( "HKLM\\Software\\a\\b\\c\\d").getSubkeys()
|
||||
deleteKey( "HKLM\\Software\\a\\b\\c\\d" )
|
||||
deleteKey( "HKLM\\Software\\a\\b\\c" )
|
||||
deleteKey( "HKLM\\Software\\a\\b" )
|
||||
deleteKey( "HKLM\\Software\\a" )
|
||||
|
||||
def testUnicodeKeyName(): pass
|
||||
|
||||
def testUnicodeValueName(): pass
|
||||
|
||||
def testGetValueDataFromEnum(): pass
|
||||
|
||||
def testGetValueDataFromName(): pass
|
||||
|
||||
def testGetBinaryData(): pass
|
||||
|
||||
|
||||
def testSetIntValue():
|
||||
key=createKey( "HKLM\\Software\\a\\b")
|
||||
key.setValue( "abcd", 5 )
|
||||
assert key.getValueData( "abcd" )==5
|
||||
assert key.getValues()[ "abcd" ][1]==5
|
||||
key.deleteValue( "abcd" )
|
||||
key.getValues()["abcd"]=5
|
||||
assert key.getValues()[ "abcd" ][1]==5
|
||||
key.deleteValue( "abcd" )
|
||||
key.getValues()["abcd"]=(5,regtypes["REG_DWORD"])
|
||||
assert key.getValues()[ "abcd" ][1]==5
|
||||
key.deleteValue( "abcd" )
|
||||
deleteKey( "HKLM\\Software\\a\\b")
|
||||
deleteKey( "HKLM\\Software\\a")
|
||||
|
||||
def testSetBinaryValue():
|
||||
key=createKey( "HKLM\\Software\\a\\b")
|
||||
key.setValue( "abcd", array.array( 'c', "PPPPPPPPPPPPPPP") )
|
||||
key.setValue( "abcde", array.array( 'c', "PPPPPPPPPPPPPPP"),
|
||||
regtypes["REG_BINARY"] )
|
||||
assert key.getValues()["abcd"][1]==key.getValues()["abcde"][1]
|
||||
key = None # Remove our reference.
|
||||
deleteKey( "HKLM\\Software\\a\\b")
|
||||
deleteKey( "HKLM\\Software\\a")
|
||||
|
||||
def testSetNone(): pass
|
||||
|
||||
def testSetString(): pass
|
||||
|
||||
def testSetExpandString(): pass
|
||||
|
||||
def testSetBinaryData(): pass
|
||||
|
||||
def testSetDword(): pass
|
||||
|
||||
def testSetDwordBigEndian(): pass
|
||||
|
||||
def testSetLink(): pass
|
||||
|
||||
def testSetMultiSz(): pass
|
||||
|
||||
def testSetResourceList(): pass
|
||||
|
||||
def testSetFullResourceDescription(): pass
|
||||
|
||||
def testSetResourceRequirementsList(): pass
|
||||
|
||||
|
||||
|
||||
def testFlush(): pass
|
||||
|
||||
def testSave(): pass
|
||||
|
||||
def testLoad(): pass
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
def testNoneType(): pass
|
||||
|
||||
def testStringType(): pass
|
||||
|
||||
def testExpandStringType(): pass
|
||||
|
||||
def testDWordType(): pass
|
||||
|
||||
def testDWordBigEndianType(): pass
|
||||
|
||||
def testLinkType(): pass
|
||||
|
||||
def testMultiStringType(): pass
|
||||
|
||||
def testResourceLinkType(): pass
|
||||
|
||||
def testResourceDescriptionType(): pass
|
||||
|
||||
def testResourceRequirementsListType(): pass
|
||||
|
||||
|
||||
def getSubkeysDict(): pass
|
||||
|
||||
def testKeyDict_Get(): pass
|
||||
|
||||
def testKeyDict_HasKey(): pass
|
||||
|
||||
def testKeyDict_Keys(): pass
|
||||
|
||||
def testKeyDict_Values(): pass
|
||||
|
||||
def testKeyDict_Items(): pass
|
||||
|
||||
def testKeyDict_Length(): pass
|
||||
|
||||
def testKeyDict_Map(): pass
|
||||
|
||||
def testKeyDict_GetItem(): pass
|
||||
|
||||
def testKeyDict_DelItem(): pass
|
||||
|
||||
def testRemote(): pass
|
||||
|
||||
def testShortcuts(): pass
|
||||
|
||||
|
||||
|
||||
def getValues(): pass
|
||||
|
||||
def testValueDict_ClearKeys(): pass
|
||||
|
||||
def testValueDict_Get(): pass
|
||||
|
||||
def testValueDict_HasKey(): pass
|
||||
|
||||
def testValueDict_Keys(): pass
|
||||
|
||||
def testValueDict_Values(): pass
|
||||
|
||||
def testValueDict_Items(): pass
|
||||
|
||||
def testValueDict_Length(): pass
|
||||
|
||||
def testValueDict_Map(): pass
|
||||
|
||||
def testValueDict_GetItem(): pass
|
||||
|
||||
def testValueDict_DelItem(): pass
|
||||
|
||||
for name in globals().keys():
|
||||
if name[0:4]=="test":
|
||||
func=globals()[ name ]
|
||||
try:
|
||||
func()
|
||||
print "Test Passed: %s" % name
|
||||
except Exception, e:
|
||||
print "Test Failed: %s" % name
|
||||
traceback.print_exc()
|
||||
|
||||
j=[0]*len( regtypes )
|
||||
|
||||
k=0
|
||||
|
||||
def test1( basekey ):
|
||||
global k
|
||||
for (name, data, type) in basekey.getValues():
|
||||
j[type.intval]=j[type.intval]+1
|
||||
if j[type.intval]==1:
|
||||
pass
|
||||
#print "[[%s]] %s [%s] = %s "% (type.msname, name, basekey, value)
|
||||
keys=basekey.getSubkeys()
|
||||
index=0
|
||||
k=k+1
|
||||
if(k%2500)==0:
|
||||
dump()
|
||||
while 1:
|
||||
try:
|
||||
test1( keys[index] )
|
||||
index=index+1
|
||||
except IndexError:
|
||||
break
|
||||
print "Done", basekey, index
|
||||
except (WindowsError, EnvironmentError):
|
||||
index=index+1
|
||||
dumpfile.write( "Skipping %s %s"% (basekey, index))
|
||||
|
||||
def dump(dumpfile):
|
||||
for i in range( len( j )):
|
||||
dumpfile.write( "%s %s\n" %( i,j[i] ))
|
||||
|
||||
def testRecursive():
|
||||
dumpfile=open( "foo.txt", "w" )
|
||||
start=time.time()
|
||||
for hive in hives.values():
|
||||
dumpfile.write( "Hive: %s\n" % hive )
|
||||
test1( hive )
|
||||
dump(dumpfile)
|
||||
print time.time()-start
|
Loading…
Reference in New Issue