diff --git a/FWCore/MessageLogger/python/MessageLogger_cfi.py b/FWCore/MessageLogger/python/MessageLogger_cfi.py index 03fbc08480b71..3047fb252bcb7 100644 --- a/FWCore/MessageLogger/python/MessageLogger_cfi.py +++ b/FWCore/MessageLogger/python/MessageLogger_cfi.py @@ -1,4 +1,2 @@ -import FWCore.ParameterSet.Config as cms - -from FWCore.MessageService.MessageLogger_cfi import * +from FWCore.ParameterSet.MessageLogger import * diff --git a/FWCore/MessageService/python/MessageLogger_cfi.py b/FWCore/MessageService/python/MessageLogger_cfi.py index 88fa79fac2eb5..28523953bf054 100644 --- a/FWCore/MessageService/python/MessageLogger_cfi.py +++ b/FWCore/MessageService/python/MessageLogger_cfi.py @@ -1,91 +1 @@ -import FWCore.ParameterSet.Config as cms - -_category = cms.optional.untracked.PSetTemplate( - reportEvery = cms.untracked.int32(1), - limit = cms.optional.untracked.int32, - timespan = cms.optional.untracked.int32 -) - -_destination_base = cms.untracked.PSet( - noLineBreaks = cms.optional.untracked.bool, - noTimeStamps = cms.optional.untracked.bool, - lineLength = cms.optional.untracked.int32, - threshold = cms.optional.untracked.string, - statisticsThreshold = cms.optional.untracked.string, - allowAnyLabel_ = _category -) -_destination_no_stat = _destination_base.clone( - enableStatistics = cms.untracked.bool(False), - resetStatistics = cms.untracked.bool(False) -) - -_file_destination = cms.optional.untracked.PSetTemplate( - noLineBreaks = cms.optional.untracked.bool, - noTimeStamps = cms.optional.untracked.bool, - lineLength = cms.optional.untracked.int32, - threshold = cms.optional.untracked.string, - statisticsThreshold = cms.optional.untracked.string, - enableStatistics = cms.untracked.bool(False), - resetStatistics = cms.untracked.bool(False), - filename = cms.optional.untracked.string, - extension = cms.optional.untracked.string, - output = cms.optional.untracked.string, - allowAnyLabel_ = _category -) - -_default_pset = cms.untracked.PSet( - reportEvery = cms.untracked.int32(1), - limit = cms.optional.untracked.int32, - timespan = cms.optional.untracked.int32, - - noLineBreaks = cms.untracked.bool(False), - noTimeStamps = cms.untracked.bool(False), - lineLength = cms.untracked.int32(80), - threshold = cms.untracked.string("INFO"), - statisticsThreshold = cms.untracked.string("INFO"), - allowAnyLabel_ = _category -) - - -MessageLogger = cms.Service("MessageLogger", - suppressWarning = cms.untracked.vstring(), - suppressFwkInfo = cms.untracked.vstring(), - suppressInfo = cms.untracked.vstring(), - suppressDebug = cms.untracked.vstring(), - debugModules = cms.untracked.vstring(), - cout = _destination_no_stat.clone( - enable = cms.untracked.bool(False) - ), - default = _default_pset.clone(), - cerr = _destination_base.clone( - enable = cms.untracked.bool(True), - enableStatistics = cms.untracked.bool(True), - resetStatistics = cms.untracked.bool(False), - statisticsThreshold = cms.untracked.string('WARNING'), - INFO = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ), - noTimeStamps = cms.untracked.bool(False), - FwkReport = cms.untracked.PSet( - reportEvery = cms.untracked.int32(1), - limit = cms.untracked.int32(10000000) - ), - default = cms.untracked.PSet( - limit = cms.untracked.int32(10000000) - ), - Root_NoDictionary = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ), - FwkSummary = cms.untracked.PSet( - reportEvery = cms.untracked.int32(1), - limit = cms.untracked.int32(10000000) - ), - threshold = cms.untracked.string('INFO') - ), - files = cms.untracked.PSet( - allowAnyLabel_ = _file_destination - ), - allowAnyLabel_ = _category -) - - +from FWCore.ParameterSet.MessageLogger import MessageLogger diff --git a/FWCore/ParameterSet/python/Config.py b/FWCore/ParameterSet/python/Config.py index e4fdcb0367e82..6d8cf069dd4d5 100644 --- a/FWCore/ParameterSet/python/Config.py +++ b/FWCore/ParameterSet/python/Config.py @@ -18,6 +18,7 @@ from .SequenceTypes import * from .SequenceTypes import _ModuleSequenceType, _Sequenceable #extend needs it from .SequenceVisitors import PathValidator, EndPathValidator, ScheduleTaskValidator, NodeVisitor, CompositeVisitor, ModuleNamesFromGlobalsVisitor +from .MessageLogger import MessageLogger from . import DictTypes from .ExceptionHandling import * @@ -137,6 +138,11 @@ def __init__(self,name,*Mods): self.options = Process.defaultOptions_() self.maxEvents = Process.defaultMaxEvents_() self.maxLuminosityBlocks = Process.defaultMaxLuminosityBlocks_() + # intentionally not cloned to ensure that everyone taking + # MessageLogger still via + # FWCore.Message(Logger|Service).MessageLogger_cfi + # use the very same MessageLogger object. + self.MessageLogger = MessageLogger for m in self.__modifiers: m._setChosen() @@ -1479,6 +1485,8 @@ def __init__(self,process, SelectEvents = untracked.PSet(), outputCommands = unt self.__process = process self.__SelectEvents = SelectEvents self.__outputCommands = outputCommands + # Need to remove MessageLogger from the subprocess now that MessageLogger is always present + del self.__process.MessageLogger def dumpPython(self, options=PrintOptions()): out = "parentProcess"+str(hash(self))+" = process\n" out += self.__process.dumpPython() @@ -1885,9 +1893,9 @@ def testProcessInsertion(self): p.a = EDAnalyzer("MyAnalyzer") self.assertTrue( 'a' in p.analyzers_() ) self.assertTrue( 'a' in p.analyzers) - p.add_(Service("MessageLogger")) - self.assertTrue('MessageLogger' in p.services_()) - self.assertEqual(p.MessageLogger.type_(), "MessageLogger") + p.add_(Service("SomeService")) + self.assertTrue('SomeService' in p.services_()) + self.assertEqual(p.SomeService.type_(), "SomeService") p.Tracer = Service("Tracer") self.assertTrue('Tracer' in p.services_()) self.assertRaises(TypeError, setattr, *(p,'b',"this should fail")) @@ -2036,6 +2044,101 @@ def testProcessDumpPython(self): wantSummary = cms.untracked.bool(False) ) +process.MessageLogger = cms.Service("MessageLogger", + cerr = cms.untracked.PSet( + FwkReport = cms.untracked.PSet( + limit = cms.untracked.int32(10000000), + reportEvery = cms.untracked.int32(1) + ), + FwkSummary = cms.untracked.PSet( + limit = cms.untracked.int32(10000000), + reportEvery = cms.untracked.int32(1) + ), + INFO = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + Root_NoDictionary = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ), + default = cms.untracked.PSet( + limit = cms.untracked.int32(10000000) + ), + enable = cms.untracked.bool(True), + enableStatistics = cms.untracked.bool(True), + lineLength = cms.optional.untracked.int32, + noLineBreaks = cms.optional.untracked.bool, + noTimeStamps = cms.untracked.bool(False), + resetStatistics = cms.untracked.bool(False), + statisticsThreshold = cms.untracked.string('WARNING'), + threshold = cms.untracked.string('INFO'), + allowAnyLabel_=cms.optional.untracked.PSetTemplate( + limit = cms.optional.untracked.int32, + reportEvery = cms.untracked.int32(1), + timespan = cms.optional.untracked.int32 + ) + ), + cout = cms.untracked.PSet( + enable = cms.untracked.bool(False), + enableStatistics = cms.untracked.bool(False), + lineLength = cms.optional.untracked.int32, + noLineBreaks = cms.optional.untracked.bool, + noTimeStamps = cms.optional.untracked.bool, + resetStatistics = cms.untracked.bool(False), + statisticsThreshold = cms.optional.untracked.string, + threshold = cms.optional.untracked.string, + allowAnyLabel_=cms.optional.untracked.PSetTemplate( + limit = cms.optional.untracked.int32, + reportEvery = cms.untracked.int32(1), + timespan = cms.optional.untracked.int32 + ) + ), + debugModules = cms.untracked.vstring(), + default = cms.untracked.PSet( + limit = cms.optional.untracked.int32, + lineLength = cms.untracked.int32(80), + noLineBreaks = cms.untracked.bool(False), + noTimeStamps = cms.untracked.bool(False), + reportEvery = cms.untracked.int32(1), + statisticsThreshold = cms.untracked.string('INFO'), + threshold = cms.untracked.string('INFO'), + timespan = cms.optional.untracked.int32, + allowAnyLabel_=cms.optional.untracked.PSetTemplate( + limit = cms.optional.untracked.int32, + reportEvery = cms.untracked.int32(1), + timespan = cms.optional.untracked.int32 + ) + ), + files = cms.untracked.PSet( + allowAnyLabel_=cms.optional.untracked.PSetTemplate( + enableStatistics = cms.untracked.bool(False), + extension = cms.optional.untracked.string, + filename = cms.optional.untracked.string, + lineLength = cms.optional.untracked.int32, + noLineBreaks = cms.optional.untracked.bool, + noTimeStamps = cms.optional.untracked.bool, + output = cms.optional.untracked.string, + resetStatistics = cms.untracked.bool(False), + statisticsThreshold = cms.optional.untracked.string, + threshold = cms.optional.untracked.string, + allowAnyLabel_=cms.optional.untracked.PSetTemplate( + limit = cms.optional.untracked.int32, + reportEvery = cms.untracked.int32(1), + timespan = cms.optional.untracked.int32 + ) + ) + ), + suppressDebug = cms.untracked.vstring(), + suppressFwkInfo = cms.untracked.vstring(), + suppressInfo = cms.untracked.vstring(), + suppressWarning = cms.untracked.vstring(), + allowAnyLabel_=cms.optional.untracked.PSetTemplate( + limit = cms.optional.untracked.int32, + reportEvery = cms.untracked.int32(1), + timespan = cms.optional.untracked.int32 + ) +) + + """) p = Process("test") p.a = EDAnalyzer("MyAnalyzer") @@ -2842,7 +2945,19 @@ def testSubProcess(self): process.addSubProcess(cms.SubProcess(process = childProcess, SelectEvents = cms.untracked.PSet( ), outputCommands = cms.untracked.vstring()))""" equalD = equalD.replace("parentProcess","parentProcess"+str(hash(process.subProcesses_()[0]))) - self.assertEqual(_lineDiff(d,Process('Parent').dumpPython()+Process('Child').dumpPython()),equalD) + # SubProcesses are dumped before Services, so in order to + # craft the dump of the Parent and Child manually the dump + # of the Parent needs to be split at the MessageLogger + # boundary (now when it is part of Process by default), + # and insert the dump of the Child between the top part of + # the Parent (before MessageLogger) and the bottom part of + # the Parent (after and including MessageLogger) + messageLoggerSplit = 'process.MessageLogger = cms.Service' + parentDumpSplit = Process('Parent').dumpPython().split(messageLoggerSplit) + childProcess = Process('Child') + del childProcess.MessageLogger + combinedDump = parentDumpSplit[0] + childProcess.dumpPython() + messageLoggerSplit + parentDumpSplit[1] + self.assertEqual(_lineDiff(d, combinedDump), equalD) p = TestMakePSet() process.fillProcessDesc(p) self.assertEqual((True,['a']),p.values["subProcesses"][1][0].values["process"][1].values['@all_modules']) diff --git a/FWCore/ParameterSet/python/MessageLogger.py b/FWCore/ParameterSet/python/MessageLogger.py new file mode 100644 index 0000000000000..9f7f25796c971 --- /dev/null +++ b/FWCore/ParameterSet/python/MessageLogger.py @@ -0,0 +1,93 @@ +#import FWCore.ParameterSet.Config as cms +from .Types import * +from .Modules import Service + +_category = optional.untracked.PSetTemplate( + reportEvery = untracked.int32(1), + limit = optional.untracked.int32, + timespan = optional.untracked.int32 +) + +_destination_base = untracked.PSet( + noLineBreaks = optional.untracked.bool, + noTimeStamps = optional.untracked.bool, + lineLength = optional.untracked.int32, + threshold = optional.untracked.string, + statisticsThreshold = optional.untracked.string, + allowAnyLabel_ = _category +) +_destination_no_stat = _destination_base.clone( + enableStatistics = untracked.bool(False), + resetStatistics = untracked.bool(False) +) + +_file_destination = optional.untracked.PSetTemplate( + noLineBreaks = optional.untracked.bool, + noTimeStamps = optional.untracked.bool, + lineLength = optional.untracked.int32, + threshold = optional.untracked.string, + statisticsThreshold = optional.untracked.string, + enableStatistics = untracked.bool(False), + resetStatistics = untracked.bool(False), + filename = optional.untracked.string, + extension = optional.untracked.string, + output = optional.untracked.string, + allowAnyLabel_ = _category +) + +_default_pset = untracked.PSet( + reportEvery = untracked.int32(1), + limit = optional.untracked.int32, + timespan = optional.untracked.int32, + + noLineBreaks = untracked.bool(False), + noTimeStamps = untracked.bool(False), + lineLength = untracked.int32(80), + threshold = untracked.string("INFO"), + statisticsThreshold = untracked.string("INFO"), + allowAnyLabel_ = _category +) + + +MessageLogger = Service("MessageLogger", + suppressWarning = untracked.vstring(), + suppressFwkInfo = untracked.vstring(), + suppressInfo = untracked.vstring(), + suppressDebug = untracked.vstring(), + debugModules = untracked.vstring(), + cout = _destination_no_stat.clone( + enable = untracked.bool(False) + ), + default = _default_pset.clone(), + cerr = _destination_base.clone( + enable = untracked.bool(True), + enableStatistics = untracked.bool(True), + resetStatistics = untracked.bool(False), + statisticsThreshold = untracked.string('WARNING'), + INFO = untracked.PSet( + limit = untracked.int32(0) + ), + noTimeStamps = untracked.bool(False), + FwkReport = untracked.PSet( + reportEvery = untracked.int32(1), + limit = untracked.int32(10000000) + ), + default = untracked.PSet( + limit = untracked.int32(10000000) + ), + Root_NoDictionary = untracked.PSet( + limit = untracked.int32(0) + ), + FwkSummary = untracked.PSet( + reportEvery = untracked.int32(1), + limit = untracked.int32(10000000) + ), + threshold = untracked.string('INFO') + ), + files = untracked.PSet( + allowAnyLabel_ = _file_destination + ), + allowAnyLabel_ = _category +) + + diff --git a/FWCore/PythonParameterSet/test/makeprocess_t.cppunit.cc b/FWCore/PythonParameterSet/test/makeprocess_t.cppunit.cc index eb807819edd5c..45a1b188c8ce9 100644 --- a/FWCore/PythonParameterSet/test/makeprocess_t.cppunit.cc +++ b/FWCore/PythonParameterSet/test/makeprocess_t.cppunit.cc @@ -288,27 +288,10 @@ void testmakeprocess::taskTest() { for (auto const& pset : vpsetServices) { serviceNames.insert(pset.getParameter("@service_type")); } - std::vector expectedServiceNames; - expectedServiceNames.emplace_back("serv1"); - expectedServiceNames.emplace_back("serv2"); - expectedServiceNames.emplace_back("serv11"); - expectedServiceNames.emplace_back("serv12"); - expectedServiceNames.emplace_back("serv13"); - expectedServiceNames.emplace_back("serv14"); - expectedServiceNames.emplace_back("serv15"); - expectedServiceNames.emplace_back("serv16"); - expectedServiceNames.emplace_back("serv17"); - expectedServiceNames.emplace_back("serv18"); - expectedServiceNames.emplace_back("serv19"); - expectedServiceNames.emplace_back("serv20"); - expectedServiceNames.emplace_back("serv21"); - expectedServiceNames.emplace_back("serv22"); - expectedServiceNames.emplace_back("serv23"); - expectedServiceNames.emplace_back("serv24"); - expectedServiceNames.emplace_back("serv25"); - expectedServiceNames.emplace_back("serv26"); - expectedServiceNames.emplace_back("serv27"); - expectedServiceNames.emplace_back("serv28"); + std::vector expectedServiceNames{"MessageLogger", "serv1", "serv2", "serv11", "serv12", "serv13", + "serv14", "serv15", "serv16", "serv17", "serv18", "serv19", + "serv20", "serv21", "serv22", "serv23", "serv24", "serv25", + "serv26", "serv27", "serv28"}; bool result = true; for (auto const& name : expectedServiceNames) { if (serviceNames.find(name) == serviceNames.end()) { @@ -407,11 +390,7 @@ void testmakeprocess::taskTestWithEmptySchedule() { for (auto const& pset : vpsetServices) { serviceNames.insert(pset.getParameter("@service_type")); } - std::vector expectedServiceNames; - expectedServiceNames.emplace_back("serv1"); - expectedServiceNames.emplace_back("serv2"); - expectedServiceNames.emplace_back("serv27"); - expectedServiceNames.emplace_back("serv28"); + std::vector expectedServiceNames{"MessageLogger", "serv1", "serv2", "serv27", "serv28"}; bool result = true; for (auto const& name : expectedServiceNames) { if (serviceNames.find(name) == serviceNames.end()) { @@ -516,29 +495,10 @@ void testmakeprocess::taskTestWithSchedule() { for (auto const& pset : vpsetServices) { serviceNames.insert(pset.getParameter("@service_type")); } - std::vector expectedServiceNames; - expectedServiceNames.emplace_back("serv1"); - expectedServiceNames.emplace_back("serv2"); - expectedServiceNames.emplace_back("serv3"); - expectedServiceNames.emplace_back("serv4"); - expectedServiceNames.emplace_back("serv11"); - expectedServiceNames.emplace_back("serv12"); - expectedServiceNames.emplace_back("serv13"); - expectedServiceNames.emplace_back("serv14"); - expectedServiceNames.emplace_back("serv15"); - expectedServiceNames.emplace_back("serv16"); - expectedServiceNames.emplace_back("serv17"); - expectedServiceNames.emplace_back("serv18"); - expectedServiceNames.emplace_back("serv19"); - expectedServiceNames.emplace_back("serv20"); - expectedServiceNames.emplace_back("serv21"); - expectedServiceNames.emplace_back("serv22"); - expectedServiceNames.emplace_back("serv23"); - expectedServiceNames.emplace_back("serv24"); - expectedServiceNames.emplace_back("serv25"); - expectedServiceNames.emplace_back("serv26"); - expectedServiceNames.emplace_back("serv27"); - expectedServiceNames.emplace_back("serv28"); + std::vector expectedServiceNames{"MessageLogger", "serv1", "serv2", "serv3", "serv4", "serv11", + "serv12", "serv13", "serv14", "serv15", "serv16", "serv17", + "serv18", "serv19", "serv20", "serv21", "serv22", "serv23", + "serv24", "serv25", "serv26", "serv27", "serv28"}; bool result = true; for (auto const& name : expectedServiceNames) { if (serviceNames.find(name) == serviceNames.end()) {