def test3Methods(self): """Test various methods of CfgKeyStore""" ks = CfgKeyStore("MyStore") self.failUnless(ks.streamESD() == []) self.failUnless(ks['streamESD']() == []) ks.streamESD.add({ 'McEventCollection': ['GEN_EVENT', 'GEN_AOD', 'TruthEvent'], }) self.failUnless(len(ks.streamESD()) == 3) self.failUnless(len(ks.transient()) == 3) self.failUnless(ks.streamESD.has_item('McEventCollection#TruthEvent')) self.failUnless(not ks.streamESD.has_item('McEventCollection#gen_aod')) ks.streamAOD += CfgItemList('subAod', items=['Klass#key1', 'Klass#key2']) self.failUnless(len(ks.streamAOD()) == 2) self.failUnless(len(ks.transient()) == 5) ks.streamESD.add({ 'JetCollection': ['Cone4Jets', 'Cone7Jets', 'KtJets', 'Cone4TruthJets'], }) self.failUnless(len(ks.streamESD()) == 3 + 4) self.failUnless(len(ks.streamESD.dict().keys()) == 2) self.failUnless(len(ks.transient.dict().keys()) == 3) ks.streamESD.add( {'JetCollection': ['Cone4Jets', 'Cone7Jets', 'KtJets']}) self.failUnless(len(ks.streamESD()) == 3 + 4) self.failUnless(len(ks.streamESD.dict().keys()) == 2) self.failUnless(len(ks.transient.dict().keys()) == 3) ks.streamAOD.add('ParticleJetContainer#ConeTowerParticleJets') self.failUnless(len(ks.streamAOD()) == 3) self.failUnless(len(ks.streamAOD.dict().keys()) == 2) self.failUnless(len(ks.transient.dict().keys()) == 4) ks.streamAOD.add(['ParticleJetContainer#ConeTowerParticleJets']) self.failUnless(len(ks.streamAOD()) == 3) self.failUnless(len(ks.streamAOD.dict().keys()) == 2) self.failUnless(len(ks.transient.dict().keys()) == 4) ks.streamAOD.add(['ParticleJetContainer#Cone4TowerParticleJets']) self.failUnless(len(ks.streamAOD()) == 4) self.failUnless(len(ks.streamAOD.dict().keys()) == 2) self.failUnless(len(ks.transient.dict().keys()) == 4) caught = False try: ks['unallowedKey'] = range(10) except KeyError, err: caught = True
def test3Methods( self ): """Test various methods of CfgKeyStore""" ks = CfgKeyStore( "MyStore" ) self.failUnless( ks.streamESD() == [] ) self.failUnless( ks['streamESD']() == [] ) ks.streamESD.add( { 'McEventCollection' : [ 'GEN_EVENT', 'GEN_AOD', 'TruthEvent' ], } ) self.failUnless( len(ks.streamESD()) == 3 ) self.failUnless( len(ks.transient()) == 3 ) self.failUnless(ks.streamESD.has_item('McEventCollection#TruthEvent')) self.failUnless(not ks.streamESD.has_item('McEventCollection#gen_aod')) ks.streamAOD += CfgItemList( 'subAod', items = [ 'Klass#key1', 'Klass#key2' ] ) self.failUnless( len(ks.streamAOD()) == 2 ) self.failUnless( len(ks.transient()) == 5 ) ks.streamESD.add( { 'JetCollection' : [ 'Cone4Jets', 'Cone7Jets', 'KtJets', 'Cone4TruthJets' ], } ) self.failUnless( len(ks.streamESD()) == 3+4 ) self.failUnless( len(ks.streamESD.dict().keys()) == 2 ) self.failUnless( len(ks.transient.dict().keys()) == 3 ) ks.streamESD.add( { 'JetCollection' : [ 'Cone4Jets', 'Cone7Jets', 'KtJets' ] } ) self.failUnless( len(ks.streamESD()) == 3+4 ) self.failUnless( len(ks.streamESD.dict().keys()) == 2 ) self.failUnless( len(ks.transient.dict().keys()) == 3 ) ks.streamAOD.add( 'ParticleJetContainer#ConeTowerParticleJets' ) self.failUnless( len(ks.streamAOD()) == 3 ) self.failUnless( len(ks.streamAOD.dict().keys()) == 2 ) self.failUnless( len(ks.transient.dict().keys()) == 4 ) ks.streamAOD.add( ['ParticleJetContainer#ConeTowerParticleJets'] ) self.failUnless( len(ks.streamAOD()) == 3 ) self.failUnless( len(ks.streamAOD.dict().keys()) == 2 ) self.failUnless( len(ks.transient.dict().keys()) == 4 ) ks.streamAOD.add( ['ParticleJetContainer#Cone4TowerParticleJets'] ) self.failUnless( len(ks.streamAOD()) == 4 ) self.failUnless( len(ks.streamAOD.dict().keys()) == 2 ) self.failUnless( len(ks.transient.dict().keys()) == 4 ) caught = False try: ks['unallowedKey'] = range(10) except KeyError, err: caught = True
def test6KeyStoreDiff(self): """Test keystore_diff""" from AthenaCommon.KeyStore import keystore_diff # reference ref = CfgKeyStore("ref") self.failUnless(ref.streamESD() == []) self.failUnless(ref.streamAOD() == []) self.failUnless(ref.transient() == []) ref.streamESD.add({ 'McEvent': ['GEN_EVENT', 'GEN_AOD', 'TruthEvent'], 'NoEvent': ['GEN_EVENT', 'GEN_AOD', 'TruthEvent'], }) self.failUnless(len(ref.streamESD()) == 6) self.failUnless(len(ref.streamAOD()) == 0) self.failUnless(len(ref.transient()) == 6) # check chk = CfgKeyStore("chk") self.failUnless(chk.streamESD() == []) self.failUnless(chk.streamAOD() == []) self.failUnless(chk.transient() == []) chk.streamESD.add({ 'NoEvent': ['GEN_EVENT', 'TruthEvent'], }) self.failUnless(len(chk.streamESD()) == 2) self.failUnless(len(chk.streamAOD()) == 0) self.failUnless(len(chk.transient()) == 2) diff_ref = "".join([ "- len(ref[streamESD]) == 6", "+ len(chk[streamESD]) == 2", "- ref[streamESD] : McEvent#GEN_AOD", "- ref[streamESD] : McEvent#GEN_EVENT", "- ref[streamESD] : McEvent#TruthEvent", "- ref[streamESD] : NoEvent#GEN_AOD", "" ]) import os, atexit test1_fname = 'test1_%s.diff' % str(os.getpid()) otest1 = open(test1_fname, 'w') atexit.register(os.unlink, test1_fname) diff = keystore_diff(ref, chk, labels='streamESD', ofile=otest1) self.failUnless(diff == diff_ref) self.failUnless(os.path.exists(test1_fname)) diff = keystore_diff("ref", "chk", labels='streamESD', ofile=otest1) self.failUnless(diff == diff_ref) self.failUnless(os.path.exists(test1_fname)) test2_fname = 'test2_%s.diff' % str(os.getpid()) otest2 = open(test2_fname, 'w') atexit.register(os.unlink, test2_fname) diff_ref = "".join([ "- len(ref[transient]) == 6", "+ len(chk[transient]) == 2", "- ref[transient] : McEvent#GEN_AOD", "- ref[transient] : McEvent#GEN_EVENT", "- ref[transient] : McEvent#TruthEvent", "- ref[transient] : NoEvent#GEN_AOD", "- len(ref[streamESD]) == 6", "+ len(chk[streamESD]) == 2", "- ref[streamESD] : McEvent#GEN_AOD", "- ref[streamESD] : McEvent#GEN_EVENT", "- ref[streamESD] : McEvent#TruthEvent", "- ref[streamESD] : NoEvent#GEN_AOD", "" ]) diff = keystore_diff(ref, chk, ofile=otest2) self.failUnless(diff == diff_ref) self.failUnless(os.path.exists(test2_fname)) diff = keystore_diff("ref", "chk", ofile=otest2) self.failUnless(diff == diff_ref) self.failUnless(os.path.exists(test2_fname)) test3_fname = 'test3_%s.diff' % str(os.getpid()) otest3 = open(test3_fname, 'w') atexit.register(os.unlink, test3_fname) diff = keystore_diff(ref, ref, otest3) self.failUnless(diff == '') self.failUnless(os.path.exists(test3_fname)) diff = keystore_diff("ref", "ref", otest3) self.failUnless(diff == '') ## valid arguments... err_msg = None test4_fname = 'test4_%s.diff' % str(os.getpid()) otest4 = open(test4_fname, 'w') atexit.register(os.unlink, test4_fname) try: diff = keystore_diff("ref", "typo-chk", ofile=otest4) except ValueError, err: err_msg = str(err)
def test4Persistency(self): """Test persistency of CfgKeyStore""" ks = CfgKeyStore("MyStore") self.failUnless(ks.streamESD() == []) self.failUnless(ks.streamAOD() == []) self.failUnless(ks.transient() == []) ks.streamESD.add({ 'McEventCollection': ['GEN_EVENT', 'GEN_AOD', 'TruthEvent'], }) self.failUnless(len(ks.streamESD()) == 3) self.failUnless(len(ks.streamAOD()) == 0) self.failUnless(len(ks.transient()) == 3) import os outFileName = 'esd_%s.py' % str(os.getpid()) ks.write(outFileName, 'streamESD') del ks ks = CfgKeyStore("MyStore") self.failUnless(ks.streamESD() == []) self.failUnless(ks.streamAOD() == []) self.failUnless(ks.transient() == []) ks.read(outFileName, 'streamAOD') self.failUnless(len(ks.streamESD()) == 0) self.failUnless(len(ks.streamAOD()) == 3) self.failUnless(len(ks.transient()) == 3) del ks ks = CfgKeyStore("MyStore") self.failUnless(ks.streamESD() == []) self.failUnless(ks.streamAOD() == []) self.failUnless(ks.transient() == []) ks.read(outFileName, 'streamAOD') self.failUnless(len(ks.streamESD()) == 0) self.failUnless(len(ks.streamAOD()) == 3) self.failUnless(len(ks.transient()) == 3) del ks ks = CfgKeyStore("MyStore") self.failUnless(ks.streamESD() == []) self.failUnless(ks.streamAOD() == []) self.failUnless(ks.transient() == []) ks.read(outFileName, 'streamESD') self.failUnless(len(ks.streamESD()) == 3) self.failUnless(len(ks.streamAOD()) == 0) self.failUnless(len(ks.transient()) == 3) del ks ks = CfgKeyStore("MyStore") self.failUnless(ks.streamESD() == []) self.failUnless(ks.streamAOD() == []) self.failUnless(ks.transient() == []) ks.read(outFileName, 'streamESD') ks.read(outFileName, 'streamAOD') self.failUnless(len(ks.streamESD()) == 3) self.failUnless(len(ks.streamAOD()) == 3) self.failUnless(len(ks.transient()) == 3) os.remove(outFileName) os.remove(outFileName + 'c') import shelve outFileName = 'esd_%s.dat' % str(os.getpid()) del ks ks = CfgKeyStore("MyStore") ks.streamESD.add({ 'McEventCollection': ['GEN_EVENT', 'GEN_AOD', 'TruthEvent'], }) self.failUnless(len(ks.streamESD()) == 3) self.failUnless(len(ks.streamAOD()) == 0) self.failUnless(len(ks.transient()) == 3) print 'outFileName:', outFileName db = shelve.open(outFileName, 'c') db['store'] = ks db.close() del ks db = shelve.open(outFileName, 'r') ks = db['store'] db.close() self.failUnless(len(ks.streamESD()) == 3) self.failUnless(len(ks.streamAOD()) == 0) self.failUnless(len(ks.transient()) == 3) ## MacOSX silently appends the .db suffix to shelve files. I haven't found a ## mechanism for determining the actual filename, which is why I've added the ## MacOSX-specific hack. from sys import platform if platform != 'darwin': os.remove(outFileName) else: os.remove(outFileName + '.db')
fullESDList += CfgItemList("caloRingerEsd", items=caloRingerESDList) from RecExConfig.ObjKeyStore import objKeyStore objKeyStore['metaData'] += CfgItemList("caloRingerMeta", items=caloRingerMetaDataList) except: treatException("Could not load CaloRinger ESD item list") pass pass # now merge the explicit ESD list to the one coming from ObjKeyStore # (more and more will be taken from ObjKeyStore) from AthenaCommon.KeyStore import CfgItemList, CfgKeyStore theCKS = CfgKeyStore("KeyStore") CILMergeESD = CfgItemList("ESDMerge", allowWildCard=True) CILMergeESD.add(fullESDList()) CILMergeESD.add(theCKS.streamESD()) #now prune the itemlist from the object which are soft linked # this doe not work CILMergeESD.remove("DataVector<INavigable4Momentum>") #this does for k in CILMergeESD('DataVector<INavigable4Momentum>'): CILMergeESD.removeItem(k) # The only items declared in StreamESD are those written here. # Note the use of "=" instead of "+=" is deliberate #DR moved to RecExCommon_topOptions.py #StreamESD.ItemList = CILMergeESD() #merge back the complete list in objkeystore #(note that oks and theCKS are two interfaces on the same underlying object)
def test3Methods( self ): """Test various methods of CfgKeyStore""" ks = CfgKeyStore( "MyStore" ) self.assertTrue( ks.streamESD() == [] ) self.assertTrue( ks['streamESD']() == [] ) ks.streamESD.add( { 'McEventCollection' : [ 'GEN_EVENT', 'GEN_AOD', 'TruthEvent' ], } ) self.assertTrue( len(ks.streamESD()) == 3 ) self.assertTrue( len(ks.transient()) == 3 ) self.assertTrue(ks.streamESD.has_item('McEventCollection#TruthEvent')) self.assertTrue(not ks.streamESD.has_item('McEventCollection#gen_aod')) ks.streamAOD += CfgItemList( 'subAod', items = [ 'Klass#key1', 'Klass#key2' ] ) self.assertTrue( len(ks.streamAOD()) == 2 ) self.assertTrue( len(ks.transient()) == 5 ) ks.streamESD.add( { 'JetCollection' : [ 'Cone4Jets', 'Cone7Jets', 'KtJets', 'Cone4TruthJets' ], } ) self.assertTrue( len(ks.streamESD()) == 3+4 ) self.assertTrue( len(ks.streamESD.dict().keys()) == 2 ) self.assertTrue( len(ks.transient.dict().keys()) == 3 ) ks.streamESD.add( { 'JetCollection' : [ 'Cone4Jets', 'Cone7Jets', 'KtJets' ] } ) self.assertTrue( len(ks.streamESD()) == 3+4 ) self.assertTrue( len(ks.streamESD.dict().keys()) == 2 ) self.assertTrue( len(ks.transient.dict().keys()) == 3 ) ks.streamAOD.add( 'ParticleJetContainer#ConeTowerParticleJets' ) self.assertTrue( len(ks.streamAOD()) == 3 ) self.assertTrue( len(ks.streamAOD.dict().keys()) == 2 ) self.assertTrue( len(ks.transient.dict().keys()) == 4 ) ks.streamAOD.add( ['ParticleJetContainer#ConeTowerParticleJets'] ) self.assertTrue( len(ks.streamAOD()) == 3 ) self.assertTrue( len(ks.streamAOD.dict().keys()) == 2 ) self.assertTrue( len(ks.transient.dict().keys()) == 4 ) ks.streamAOD.add( ['ParticleJetContainer#Cone4TowerParticleJets'] ) self.assertTrue( len(ks.streamAOD()) == 4 ) self.assertTrue( len(ks.streamAOD.dict().keys()) == 2 ) self.assertTrue( len(ks.transient.dict().keys()) == 4 ) caught = False try: ks['unallowedKey'] = range(10) except KeyError as err: caught = True self.assertTrue( caught ) caught = False try: dummy = ks['unallowedKey'] except KeyError as err: caught = True self.assertTrue( caught ) caught = False try: dummy = ks['streamAOD'] except KeyError as err: caught = True self.assertTrue( not caught ) del dummy ## test reset... ks.streamTAG.add( 'JetCollection#Tag_Cone4Jets' ) self.assertTrue( len(ks.streamTAG()) == 1 ) ks.streamTAG.clear() self.assertTrue( len(ks.streamTAG()) == 0 ) self.assertTrue( len(ks.streamAOD.dict().keys()) == 2 ) self.assertTrue( len(ks.transient.dict().keys()) == 4 ) ks.transient.clear() self.assertTrue( len(ks.transient.dict().keys()) == 0 ) ## might be a bit confusing but 'clear' also removes children caught = False try: dummy = ks.streamAOD except AttributeError as err: caught = True self.assertTrue( caught ) self.assertTrue( len(list(CfgKeyStore.instances.keys())) == 1 ) del ks ## FIXME ## ARGH!!! Somebody is keeping a ref toward ks! ## OK with py3 if six.PY3: self.assertTrue( len(list(CfgKeyStore.instances.keys())) == 0 )
def test6KeyStoreDiff( self ): """Test keystore_diff""" from AthenaCommon.KeyStore import keystore_diff # reference ref = CfgKeyStore( "ref" ) self.failUnless( ref.streamESD() == [] ) self.failUnless( ref.streamAOD() == [] ) self.failUnless( ref.transient() == [] ) ref.streamESD.add( { 'McEvent' : [ 'GEN_EVENT', 'GEN_AOD', 'TruthEvent' ], 'NoEvent' : [ 'GEN_EVENT', 'GEN_AOD', 'TruthEvent' ], } ) self.failUnless( len(ref.streamESD()) == 6 ) self.failUnless( len(ref.streamAOD()) == 0 ) self.failUnless( len(ref.transient()) == 6 ) # check chk = CfgKeyStore( "chk" ) self.failUnless( chk.streamESD() == [] ) self.failUnless( chk.streamAOD() == [] ) self.failUnless( chk.transient() == [] ) chk.streamESD.add( { 'NoEvent' : [ 'GEN_EVENT', 'TruthEvent' ], } ) self.failUnless( len(chk.streamESD()) == 2 ) self.failUnless( len(chk.streamAOD()) == 0 ) self.failUnless( len(chk.transient()) == 2 ) diff_ref = "".join ([ "- len(ref[streamESD]) == 6", "+ len(chk[streamESD]) == 2", "- ref[streamESD] : McEvent#GEN_AOD", "- ref[streamESD] : McEvent#GEN_EVENT", "- ref[streamESD] : McEvent#TruthEvent", "- ref[streamESD] : NoEvent#GEN_AOD", "" ]) import os,atexit test1_fname = 'test1_%s.diff' % str(os.getpid()) otest1 = open (test1_fname, 'w') atexit.register (os.unlink, test1_fname) diff = keystore_diff (ref, chk, labels='streamESD', ofile=otest1) self.failUnless (diff==diff_ref) self.failUnless (os.path.exists (test1_fname)) diff = keystore_diff ("ref", "chk", labels='streamESD', ofile=otest1) self.failUnless (diff==diff_ref) self.failUnless (os.path.exists (test1_fname)) test2_fname = 'test2_%s.diff' % str(os.getpid()) otest2 = open (test2_fname, 'w') atexit.register (os.unlink, test2_fname) diff_ref = "".join ([ "- len(ref[transient]) == 6", "+ len(chk[transient]) == 2", "- ref[transient] : McEvent#GEN_AOD", "- ref[transient] : McEvent#GEN_EVENT", "- ref[transient] : McEvent#TruthEvent", "- ref[transient] : NoEvent#GEN_AOD", "- len(ref[streamESD]) == 6", "+ len(chk[streamESD]) == 2", "- ref[streamESD] : McEvent#GEN_AOD", "- ref[streamESD] : McEvent#GEN_EVENT", "- ref[streamESD] : McEvent#TruthEvent", "- ref[streamESD] : NoEvent#GEN_AOD", "" ]) diff = keystore_diff (ref, chk, ofile=otest2) self.failUnless (diff==diff_ref) self.failUnless (os.path.exists (test2_fname)) diff = keystore_diff ("ref", "chk", ofile=otest2) self.failUnless (diff==diff_ref) self.failUnless (os.path.exists (test2_fname)) test3_fname = 'test3_%s.diff' % str(os.getpid()) otest3 = open (test3_fname, 'w') atexit.register (os.unlink, test3_fname) diff = keystore_diff (ref, ref, otest3) self.failUnless (diff=='') self.failUnless (os.path.exists (test3_fname)) diff = keystore_diff ("ref", "ref", otest3) self.failUnless (diff=='') ## valid arguments... err_msg = None test4_fname = 'test4_%s.diff' % str(os.getpid()) otest4 = open (test4_fname, 'w') atexit.register (os.unlink, test4_fname) try: diff = keystore_diff ("ref", "typo-chk", ofile=otest4) except ValueError, err: err_msg = str(err)
def test4Persistency( self ): """Test persistency of CfgKeyStore""" ks = CfgKeyStore( "MyStore" ) self.failUnless( ks.streamESD() == [] ) self.failUnless( ks.streamAOD() == [] ) self.failUnless( ks.transient() == [] ) ks.streamESD.add( { 'McEventCollection' : [ 'GEN_EVENT', 'GEN_AOD', 'TruthEvent' ], } ) self.failUnless( len(ks.streamESD()) == 3 ) self.failUnless( len(ks.streamAOD()) == 0 ) self.failUnless( len(ks.transient()) == 3 ) import os outFileName = 'esd_%s.py' % str(os.getpid()) ks.write( outFileName, 'streamESD' ) del ks ks = CfgKeyStore( "MyStore" ) self.failUnless( ks.streamESD() == [] ) self.failUnless( ks.streamAOD() == [] ) self.failUnless( ks.transient() == [] ) ks.read( outFileName, 'streamAOD' ) self.failUnless( len(ks.streamESD()) == 0 ) self.failUnless( len(ks.streamAOD()) == 3 ) self.failUnless( len(ks.transient()) == 3 ) del ks ks = CfgKeyStore( "MyStore" ) self.failUnless( ks.streamESD() == [] ) self.failUnless( ks.streamAOD() == [] ) self.failUnless( ks.transient() == [] ) ks.read( outFileName, 'streamAOD' ) self.failUnless( len(ks.streamESD()) == 0 ) self.failUnless( len(ks.streamAOD()) == 3 ) self.failUnless( len(ks.transient()) == 3 ) del ks ks = CfgKeyStore( "MyStore" ) self.failUnless( ks.streamESD() == [] ) self.failUnless( ks.streamAOD() == [] ) self.failUnless( ks.transient() == [] ) ks.read( outFileName, 'streamESD' ) self.failUnless( len(ks.streamESD()) == 3 ) self.failUnless( len(ks.streamAOD()) == 0 ) self.failUnless( len(ks.transient()) == 3 ) del ks ks = CfgKeyStore( "MyStore" ) self.failUnless( ks.streamESD() == [] ) self.failUnless( ks.streamAOD() == [] ) self.failUnless( ks.transient() == [] ) ks.read( outFileName, 'streamESD' ) ks.read( outFileName, 'streamAOD' ) self.failUnless( len(ks.streamESD()) == 3 ) self.failUnless( len(ks.streamAOD()) == 3 ) self.failUnless( len(ks.transient()) == 3 ) os.remove( outFileName ) os.remove( outFileName+'c' ) import shelve outFileName = 'esd_%s.dat' % str(os.getpid()) del ks ks = CfgKeyStore( "MyStore" ) ks.streamESD.add( { 'McEventCollection' : [ 'GEN_EVENT', 'GEN_AOD', 'TruthEvent' ], } ) self.failUnless( len(ks.streamESD()) == 3 ) self.failUnless( len(ks.streamAOD()) == 0 ) self.failUnless( len(ks.transient()) == 3 ) print 'outFileName:',outFileName db = shelve.open( outFileName, 'c' ) db['store'] = ks db.close() del ks db = shelve.open( outFileName, 'r' ) ks = db['store'] db.close() self.failUnless( len(ks.streamESD()) == 3 ) self.failUnless( len(ks.streamAOD()) == 0 ) self.failUnless( len(ks.transient()) == 3 ) ## MacOSX silently appends the .db suffix to shelve files. I haven't found a ## mechanism for determining the actual filename, which is why I've added the ## MacOSX-specific hack. from sys import platform if platform != 'darwin' : os.remove( outFileName ) else: os.remove( outFileName+'.db')