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:
Tim Peters 2000-08-21 02:27:22 +00:00
parent a98e92bc13
commit e82e7ccdbd
3 changed files with 0 additions and 813 deletions

View File

@ -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

View File

@ -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

View File

@ -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