diff --git a/Control/AthenaCommon/CMakeLists.txt b/Control/AthenaCommon/CMakeLists.txt index 0f9f732bbd17181617702b9bdf7425a36e180afe..b85eb17e3ec46267791e641f7a718b520024297f 100644 --- a/Control/AthenaCommon/CMakeLists.txt +++ b/Control/AthenaCommon/CMakeLists.txt @@ -5,9 +5,6 @@ # Declare the package name: atlas_subdir( AthenaCommon ) -# External dependencies: -find_package( six ) - # Install files from the package: atlas_install_python_modules( python/*.py python/Utils POST_BUILD_CMD ${ATLAS_FLAKE8} ) diff --git a/Control/AthenaCommon/python/AppMgr.py b/Control/AthenaCommon/python/AppMgr.py index 6ef4fd5ede171fa1775b75e62e98c668b1d5d12a..89104ed8538195ca009d9fb3c8abc5082b8434cc 100755 --- a/Control/AthenaCommon/python/AppMgr.py +++ b/Control/AthenaCommon/python/AppMgr.py @@ -5,10 +5,7 @@ """Application manager and other global Gaudi components.""" -from __future__ import print_function - import sys, os -import six from AthenaCommon import ExitCodes from AthenaCommon import AlgSequence, Configurable, Logging @@ -281,7 +278,7 @@ class AthAppMgr( AppMgr ): # transfer old TopAlg to new AthAlgSeq _top_alg = _as.AlgSequence("TopAlg") # first transfer properties - for n,prop in six.iteritems(_top_alg.properties()): + for n,prop in _top_alg.properties().items(): if hasattr(_top_alg, n) and n != "Members": setattr(athAlgSeq, n, prop) diff --git a/Control/AthenaCommon/python/ChapPy.py b/Control/AthenaCommon/python/ChapPy.py index 2a11b1bf555cf21f8f56f01cd25eea294726dcc0..0f1bc0e41d0322a446bf339e25f1552884a15f24 100755 --- a/Control/AthenaCommon/python/ChapPy.py +++ b/Control/AthenaCommon/python/ChapPy.py @@ -22,8 +22,7 @@ import sys import os import subprocess import time -import six -from past.builtins import basestring +import io def dump( buf, stdout = sys.stdout ): """ @@ -32,10 +31,7 @@ def dump( buf, stdout = sys.stdout ): fname = None if isinstance(buf, str): fname = buf - if six.PY3: - import io - file = io.IOBase # noqa: F811 - if isinstance(buf, file): + if isinstance(buf, io.IOBase): fname = buf.name with open(fname, 'r') as fd: map(stdout.write, (l for l in fd.readlines())) @@ -278,7 +274,7 @@ class AthenaApp(object): self._jobo = tempfile.NamedTemporaryFile(suffix='-jobo.py', mode='w+') if cmdlineargs is None: cmdlineargs = [] - if isinstance(cmdlineargs, basestring): + if isinstance(cmdlineargs, str): cmdlineargs = cmdlineargs.split() self._cmdlineargs = cmdlineargs[:] diff --git a/Control/AthenaCommon/python/Configurable.py b/Control/AthenaCommon/python/Configurable.py index f8a7d23f76db9011c768280bc65f8c0f3819ddf9..6fe8789e06a05aa023df4fca0ece26845c264cf7 100755 --- a/Control/AthenaCommon/python/Configurable.py +++ b/Control/AthenaCommon/python/Configurable.py @@ -7,7 +7,6 @@ from __future__ import print_function import copy, os, weakref -import six from AthenaCommon import ConfigurableMeta # Note: load iProperty etc. from GaudiPython only as-needed @@ -32,7 +31,7 @@ log = logging.getLogger( 'Configurable' ) ### base class for configurable Gaudi algorithms/services/algtools/etc. ====== -class Configurable( six.with_metaclass (ConfigurableMeta.ConfigurableMeta, object)): +class Configurable(metaclass=ConfigurableMeta.ConfigurableMeta ): """Base class for Gaudi components that implement the IProperty interface. Provides most of the boilerplate code, but the actual useful classes are its derived ConfigurableAlgorithm, ConfigurableService, and @@ -77,15 +76,15 @@ class Configurable( six.with_metaclass (ConfigurableMeta.ConfigurableMeta, objec if 'name' in kwargs: # simple keyword (by far the easiest) name = kwargs[ 'name' ] - elif 'name' in six.get_function_code(cls.__init__).co_varnames: + elif 'name' in cls.__init__.__code__.co_varnames: # either positional in args, or default - index = list(six.get_function_code(cls.__init__).co_varnames).index( 'name' ) + index = list(cls.__init__.__code__.co_varnames).index( 'name' ) try: # var names index is offset by one as __init__ is to be called with self name = args[ index - 1 ] except IndexError: # retrieve default value, then - name = six.get_function_defaults(cls.__init__)[ index - (len(args)+1) ] + name = cls.__init__.__defaults__[ index - (len(args)+1) ] else: # positional index is assumed (will work most of the time) try: @@ -144,7 +143,7 @@ class Configurable( six.with_metaclass (ConfigurableMeta.ConfigurableMeta, objec # the following may result in the same init tried several # times, but we shouldn't be in this loop too often anyway confinit = getattr( confklass, '__init__' ) - if n in six.get_function_code(confinit).co_varnames: + if n in confinit.__code__.co_varnames: acceptableKeyWord = True break except AttributeError: @@ -767,7 +766,7 @@ class Configurable( six.with_metaclass (ConfigurableMeta.ConfigurableMeta, objec self._flags |= self._fIsPrinting properties = self.getValuedProperties() propstr = "" - for key,val in sorted(six.iteritems(properties)): + for key,val in sorted(properties.items()): if isinstance(val,GaudiHandles.PublicToolHandle) or isinstance(val,GaudiHandles.PrivateToolHandle): propstr += val.getFullName() elif isinstance(val,Configurable): diff --git a/Control/AthenaCommon/python/ConfigurableDb.py b/Control/AthenaCommon/python/ConfigurableDb.py index ba9b2239eb78de4448377fb32ba7076317383184..471bfc094c5f6c6eb0eaa69bdca40c85a632cce9 100755 --- a/Control/AthenaCommon/python/ConfigurableDb.py +++ b/Control/AthenaCommon/python/ConfigurableDb.py @@ -11,18 +11,6 @@ This repository of (informations on) Configurables is used by the PropertyProxy class to locate Configurables and feed the JobOptionsSvc. It could also be used to feed the AthenaEmacs module...""" -from __future__ import with_statement, print_function - -import string -import six -if six.PY2: - _maketrans = string.maketrans - _translate = string.translate -else: - _maketrans = str.maketrans - _translate = str.translate - - ### data --------------------------------------------------------------------- __version__ = '3.0.0' __author__ = 'Sebastien Binet (binet@cern.ch)' @@ -31,7 +19,7 @@ __all__ = [ 'CfgDb', 'cfgDb', 'loadConfigurableDb', 'unloadConfigurableDb', 'getConfigurable' ] -_transtable = _maketrans('<>&*,: ().', '__rp__s___') +_transtable = str.maketrans('<>&*,: ().', '__rp__s___') ### helpers ------------------------------------------------------------------ def _fillConfDict(): @@ -236,7 +224,7 @@ def getConfigurable( className, requester = '', assumeCxxClass = True ): confClass = className if assumeCxxClass: # assume className is C++: --> translate to python - confClass = _translate( confClass, _transtable ) + confClass = str.translate( confClass, _transtable ) # attempt to retrieve existing information confClassInfo = cfgDb.get( confClass ) diff --git a/Control/AthenaCommon/python/ConfigurableMeta.py b/Control/AthenaCommon/python/ConfigurableMeta.py index 9fdad37ca0ca948acd052a2bb1a85604a9198ca8..875464eeafe8d066ca03f770de011e5c992a741a 100755 --- a/Control/AthenaCommon/python/ConfigurableMeta.py +++ b/Control/AthenaCommon/python/ConfigurableMeta.py @@ -3,10 +3,7 @@ # File: AthenaCommon/python/ConfigurableMeta.py # Author: Wim Lavrijsen (WLavrijsen@lbl.gov) -from __future__ import print_function - import weakref -import six from AthenaCommon import Logging, PropertyProxy @@ -50,13 +47,13 @@ class ConfigurableMeta( type ): for meth, nArgs in meths.items(): try: - f = six.get_unbound_function(getattr( newclass, meth )) + f = getattr( newclass, meth ) except AttributeError: raise NotImplementedError("%s is missing in class %s" % (meth,str(newclass))) # in addition, verify the number of arguments w/o defaults - nargcount = six.get_function_code(f).co_argcount - dflts = six.get_function_defaults(f) + nargcount = f.__code__.co_argcount + dflts = f.__defaults__ ndefaults = dflts and len(dflts) or 0 if not nargcount - ndefaults <= nArgs <= nargcount: raise TypeError("%s.%s requires exactly %d arguments" % (newclass,meth,nArgs)) diff --git a/Control/AthenaCommon/python/ConfigurationShelve.py b/Control/AthenaCommon/python/ConfigurationShelve.py index 7809424087fdce0c68336873f7a2f317692dd9bf..74724c4205202e69cec30c5e463fa366472d6f71 100644 --- a/Control/AthenaCommon/python/ConfigurationShelve.py +++ b/Control/AthenaCommon/python/ConfigurationShelve.py @@ -4,13 +4,7 @@ # @author: Wim Lavrijsen (WLavrijsen@lbl.gov) # @author: Sebastien Binet <binet@cern.ch> -from __future__ import print_function -import six - -try: - import cPickle as pickle -except ImportError: - import pickle +import pickle import shelve """Shelves for writing jars of configuration. Example: @@ -39,23 +33,6 @@ __all__ = [ 'ConfigurationShelve', 'ConfigurationJar', 'cmpConfigs', ] -### FIXME: --- hack to workaround bug #34752 -### http://savannah.cern.ch/bugs/?34752 -def _monkeypatch_bug_34752(): - from GaudiKernel.GaudiHandles import GaudiHandleArray - if 'typesAndNames' in GaudiHandleArray.__slots__: - try: - del GaudiHandleArray.__getstate__ - del GaudiHandleArray.__setstate__ - except AttributeError: pass # already done, or not relevant anymore - return -try: - _monkeypatch_bug_34752() -except: # noqa: E722 - pass -del _monkeypatch_bug_34752 - - ### representation of job databases ========================================== class ConfigurationShelve( object ): __openShelves = {} @@ -190,7 +167,7 @@ def storeJobOptionsCatalogue( cfg_fname ): theApp.setup( recursive = True ) app_props = [ (k,v.value()) - for k,v in six.iteritems(theApp.getHandle().properties()) ] + for k,v in theApp.getHandle().properties().items() ] _fillCfg( 'ApplicationMgr', app_props ) # get all services that now already exist, as they require special treatment; @@ -211,7 +188,7 @@ def storeJobOptionsCatalogue( cfg_fname ): evLoop = getattr( svcMgr, evLoopName ) props = [] - for k,v in six.iteritems(evLoop.properties()): + for k,v in evLoop.properties().items(): if v != C.propertyNoValue: props.append( (k,v) ) _fillCfg( evLoopName, props ) @@ -238,7 +215,7 @@ def storeJobOptionsCatalogue( cfg_fname ): # workaround for pycomps pycomps = [] - for c in six.itervalues(C.allConfigurables): + for c in C.allConfigurables.values(): if not isinstance( c, (PyAthena.Alg, PyAthena.AlgTool, PyAthena.Svc, @@ -304,13 +281,13 @@ def loadJobOptionsCatalogue( cfg_fname ): if client == "ApplicationMgr": # ApplicationMgr properties are already set continue - for n,v in six.iteritems(jocat[ client ]): + for n,v in jocat[ client ].items(): josvc.set( client+'.'+n, v ) # restore special services properties for client in jocfg: svc = PyAthena.py_svc( client, createIf = False, iface='IProperty' ) - for n,v in six.iteritems(jocfg[ client ]): + for n,v in jocfg[ client ].items(): # See comment above. p = gaudi.StringProperty() p.setName(n) @@ -466,7 +443,7 @@ def cmpConfigs (ref, chk, refName=None, chkName=None): return v from AthenaCommon.Configurable import Configurable - for k,v in six.iteritems(props): + for k,v in props.items(): if not isinstance(v, Configurable): all_cfgs[name][k] = _get_value(cfg,k,v) else: diff --git a/Control/AthenaCommon/python/Debugging.py b/Control/AthenaCommon/python/Debugging.py index e2584d1d4999204281a2c6a91c538468d7ab5a01..ed2848f745ef1272b42daf1af8bcb0e415af9fec 100644 --- a/Control/AthenaCommon/python/Debugging.py +++ b/Control/AthenaCommon/python/Debugging.py @@ -7,13 +7,12 @@ ## $Id: Debugging.py,v 1.1 2008-04-05 03:11:49 binet Exp $ ############################################################### -from __future__ import print_function -import six - __doc__ = """py-module to hold a few tools and utilities to help debugging configurables and/or Athena application. """ +import io + class DbgStage: """Class to hold the stage at which the user asked to hook the debugger """ @@ -43,10 +42,7 @@ def hookStrace(out=None): """ import os if out is None: out = 'athena.strace.log.%i' % os.getpid() - if six.PY3: - import io - file = io.IOBase - if isinstance(out, file): + if isinstance(out, io.IOBase): out = out.name elif not isinstance(out,str): raise TypeError('argument 0 needs to be either a file or a filename') diff --git a/Control/AthenaCommon/python/JobProperties.py b/Control/AthenaCommon/python/JobProperties.py index a9114a5753537dd193daf8cc9230d331013b2f55..1deb60791022c3416b85ee387cd49de7452df7b7 100755 --- a/Control/AthenaCommon/python/JobProperties.py +++ b/Control/AthenaCommon/python/JobProperties.py @@ -14,10 +14,7 @@ """ -from __future__ import print_function -from past.builtins import cmp import functools -import six # # @@ -53,7 +50,7 @@ def _isCompatible( allowedTypes, value ): elif type(value) == str and not isinstance( value, tp ): # similarly, insist on exact match for str (no conversions allowed) pass # offcount will cause a failure, unless another type matches - elif tp in six.integer_types and type(value) == float: + elif tp == int and type(value) == float: # special case, insist on strict match for integer types pass # id. as for strings above elif ( tp == bool ) and not (type(value) in [bool, int]): @@ -103,8 +100,7 @@ class _JobPropertyMeta(type): @functools.total_ordering -@six.add_metaclass(_JobPropertyMeta) -class JobProperty(object): +class JobProperty(metaclass = _JobPropertyMeta): """ Base class for the job properties. The job properties are class definitions that will be @@ -173,11 +169,6 @@ class JobProperty(object): return self() < rhs() return self() < rhs - def __cmp__(self, rhs): - if isinstance (rhs, JobProperty): - return cmp (self(), rhs()) - return cmp (self(), rhs) - def __call__(self): return self.get_Value() diff --git a/Control/AthenaCommon/python/KeyStore.py b/Control/AthenaCommon/python/KeyStore.py index a480a05d357c6fcb6f5c9a63a7d08e87c0d5272a..28c58b1df0c8b3564c43ceb4dbb343e56321dbaa 100644 --- a/Control/AthenaCommon/python/KeyStore.py +++ b/Control/AthenaCommon/python/KeyStore.py @@ -3,9 +3,6 @@ # @file: AthenaCommon/python/KeyStore.py # @author: Sebastien Binet (binet@cern.ch) -from __future__ import print_function -import six - ### data __version__ = '$Revision: 1.11 $' __author__ = 'Sebastien Binet <binet@cern.ch>' @@ -567,10 +564,7 @@ class CfgKeyStore( object ): try: from pprint import pprint from datetime import datetime - if six.PY2: - from cStringIO import StringIO - else: - from io import StringIO + from io import StringIO buf = StringIO() pprint( item.dict(), stream = buf ) diff --git a/Control/AthenaCommon/python/PropertyProxy.py b/Control/AthenaCommon/python/PropertyProxy.py index dded05cf1a2a95f78fe93bf426103e43f3eac0a6..6d2d94bf2add695a5e8d405db2cce7ff03e1d82b 100755 --- a/Control/AthenaCommon/python/PropertyProxy.py +++ b/Control/AthenaCommon/python/PropertyProxy.py @@ -4,19 +4,12 @@ # Author: Wim Lavrijsen (WLavrijsen@lbl.gov) # Author: Martin Woudstra (Martin.Woudstra@cern.ch) -from __future__ import print_function - -import six import os, weakref, copy from GaudiKernel.GaudiHandles import GaudiHandle, GaudiHandleArray # dictionary with configurable class : python module entries from AthenaCommon import ConfigurableDb -if six.PY3: - long = int - - ### data --------------------------------------------------------------------- __version__ = '2.0.0' __author__ = 'Wim Lavrijsen (WLavrijsen@lbl.gov), Martin Woudstra (Martin.Woudstra@cern.ch)' @@ -54,12 +47,10 @@ def _isCompatible( tp, value, context = "" ): # compatibility check that relies on conversion (which will always fail # for configurables) is acceptable. - if six.PY2 and type(value) == unicode: # noqa: F821 - value = value.encode() if ( tp == str or type(value) == str ) and not isinstance( value, tp ): # special case, insist on exact match for str (no conversions allowed) raise ValueError( "received an instance of %s, but %s expected, context: %s" % (type(value),tp, context) ) - elif ( tp == int or tp == long ) and type(value) == float: + elif ( tp == int ) and type(value) == float: # special case, insist on strict match for integer types raise ValueError( "received an instance of %s, but %s expected, context: %s" % (type(value),tp, context) ) else: diff --git a/Control/AthenaCommon/share/MemTraceInclude.py b/Control/AthenaCommon/share/MemTraceInclude.py index d9fb0f7a90e5f17bf9898fad186486b091d60829..a252734df6c093b738c78780f751a9e7c71816d7 100755 --- a/Control/AthenaCommon/share/MemTraceInclude.py +++ b/Control/AthenaCommon/share/MemTraceInclude.py @@ -1,11 +1,8 @@ -import string -import six - from AthenaCommon.Include import Include class MemTraceInclude( Include ): def __init__( self, org ): Include.__init__( self, org._show ) - for name, value in six.iteritems (org.__dict__): + for name, value in org.__dict__.items(): setattr (self, name, value) import AthenaCommon.Logging as L self.msg = L.logging.getLogger('Athena') diff --git a/Control/AthenaCommon/share/test_cfg_pickling.py b/Control/AthenaCommon/share/test_cfg_pickling.py index a4e0fa816941a4b0c486cc08a2c0df84fc4c1a04..190b754874187abfc2149d5eb77cec608309cc1b 100755 --- a/Control/AthenaCommon/share/test_cfg_pickling.py +++ b/Control/AthenaCommon/share/test_cfg_pickling.py @@ -1,14 +1,9 @@ #! /usr/bin/env python -from __future__ import with_statement import sys import os -from future import standard_library -standard_library.install_aliases() import subprocess -import six - def _make_jobo(job): import tempfile jobo = tempfile.NamedTemporaryFile(suffix='-jobo.py', mode='w') @@ -46,7 +41,7 @@ def _run_jobo(job, msg, logfile_name=None): out = [] cmd = [sh, app, jobo.name] import subprocess as sub - encargs = {} if six.PY2 else {'encoding' : 'utf-8'} + encargs = {'encoding' : 'utf-8'} app_handle = sub.Popen (args=[sh, app, jobo.name], stdout=logfile, stderr=logfile, diff --git a/Control/AthenaCommon/test/KeyStoreUnitTests.py b/Control/AthenaCommon/test/KeyStoreUnitTests.py index c4ffa3547bd250f6ebb3789738dffcc4cdcb0f4f..83d4de16b0d08271d83793ead1a386f357b8de0e 100755 --- a/Control/AthenaCommon/test/KeyStoreUnitTests.py +++ b/Control/AthenaCommon/test/KeyStoreUnitTests.py @@ -5,9 +5,6 @@ """Unit tests for verifying setting of CfgItemList and CfgKeyStore.""" -from __future__ import print_function -import six - import unittest, sys from AthenaCommon.KeyStore import CfgItemList, CfgKeyStore @@ -373,9 +370,7 @@ class BasicCfgKeyStoreTestCase( unittest.TestCase ): 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 ) + self.assertTrue( len(list(CfgKeyStore.instances.keys())) == 0 ) ## ks = CfgKeyStore( "MyStore" ) diff --git a/Control/AthenaExamples/AthExHelloWorld/share/HelloWorld_ATN.py b/Control/AthenaExamples/AthExHelloWorld/share/HelloWorld_ATN.py deleted file mode 100755 index e98490de74a4eb7e77292618d9fbd0b6686603ab..0000000000000000000000000000000000000000 --- a/Control/AthenaExamples/AthExHelloWorld/share/HelloWorld_ATN.py +++ /dev/null @@ -1,125 +0,0 @@ -############################################################### -# -# Job options file -# -#============================================================== - -#-------------------------------------------------------------- -# ATLAS default Application Configuration options -#-------------------------------------------------------------- - -# Use McEventSelector so we can run with AthenaMP -import AthenaCommon.AtlasUnixGeneratorJob - -#-------------------------------------------------------------- -# Private Application Configuration options -#-------------------------------------------------------------- - -# Full job is a list of algorithms -from AthenaCommon.AlgSequence import AlgSequence -job = AlgSequence() - -# Add top algorithms to be run -from AthExHelloWorld.AthExHelloWorldConf import HelloAlg -job += HelloAlg( "HelloWorld" ) # 1 alg, named "HelloWorld" - -#-------------------------------------------------------------- -# Set output level threshold (DEBUG, INFO, WARNING, ERROR, FATAL) -#-------------------------------------------------------------- - -# Output level for HelloAlg only (note name: instance, not type) -job.HelloWorld.OutputLevel = INFO - -# You can set the global output level on the message svc (not -# recommended) or by using the -l athena CLI parameter - -#-------------------------------------------------------------- -# Event related parameters -#-------------------------------------------------------------- - -# Number of events to be processed (default is until the end of -# input, or -1, however, since we have no input, a limit needs -# to be set explicitly, here, choose 10) -theApp.EvtMax = 10 - -#-------------------------------------------------------------- -# Algorithms Private Options (all optional) -#-------------------------------------------------------------- - -# For convenience, get a reference to the HelloAlg Algorithm -# named "HelloWorld" in the job -HelloWorld = job.HelloWorld - -# Set an int property -HelloWorld.MyInt = 42 - -# Set a boolean property (False, True, 0, 1) -HelloWorld.MyBool = True - -# Set a double property -HelloWorld.MyDouble = 3.14159 - -# Set a vector of strings property ... -HelloWorld.MyStringVec = [ "Welcome", "to", "Athena", "Framework", "Tutorial" ] - -# ... and add one more: -HelloWorld.MyStringVec += [ "!" ] - -# Set a map of strings to strings property ... -HelloWorld.MyDict = { 'Bonjour' : 'Guten Tag', - 'Good Morning' : 'Bonjour' , 'one' : 'uno' } - -# ... and add one more: -HelloWorld.MyDict[ "Goeiedag" ] = "Ni Hao" - -# Set a table (a vector of pairs of doubles) ... -HelloWorld.MyTable = [ ( 1 , 1 ) , ( 2 , 4 ) , ( 3 , 9 ) ] - -# ... and one more: -HelloWorld.MyTable += [ ( 4, 16 ) ] - -# Set a matrix (a vector of vectors) ... -HelloWorld.MyMatrix = [ [ 1, 2, 3 ], - [ 4, 5, 6 ] ] - -# ... and some more: -HelloWorld.MyMatrix += [ [ 7, 8, 9 ] ] - -#-------------------------------------------------------------- -# Algorithms Tool Usage Private Options (advanced and optional) -#-------------------------------------------------------------- - -# Import configurable for using our HelloTool -from AthExHelloWorld.AthExHelloWorldConf import HelloTool - -# Setup a public tool so that it can be used (again, note name) -ToolSvc += HelloTool( "PublicHello" ) -ToolSvc.PublicHello.MyMessage = "A Public Message!" - -# Tell "HelloWorld" to use this tool ("MyPublicHelloTool" is a -# ToolHandle property of HelloAlg) -HelloWorld.MyPublicHelloTool = ToolSvc.PublicHello - -# Hand "HelloWorld" a private HelloTool ("MyPrivateHelloTool" is -# a ToolHandler property of HelloAlg) -HelloWorld.MyPrivateHelloTool = HelloTool( "HelloTool" ) -HelloWorld.MyPrivateHelloTool.MyMessage = "A Private Message!" - - -#-------------------------------------------------------------- -# Test functioning of HistorySvc -#-------------------------------------------------------------- - -from GaudiSvc.GaudiSvcConf import HistorySvc -svcMgr += HistorySvc() -svcMgr.HistorySvc.OutputFile = 'hist.xml' -svcMgr.HistorySvc.Dump = False -svcMgr.HistorySvc.Activate = True -theApp.ActivateHistory = True - -#============================================================== -# -# End of job options file -# -############################################################### -