CMS 3D CMS Logo

SequenceVisitors.py
Go to the documentation of this file.
1 from __future__ import absolute_import
2 from .SequenceTypes import *
3 from .Modules import OutputModule, EDProducer, EDFilter, EDAnalyzer, Service, ESProducer, ESSource, _Module
4 from .Mixins import _Labelable
5 
6 # Use this on Tasks in the Schedule
8  def __init__(self):
9  pass
10  def enter(self,visitee):
11  if visitee.isLeaf():
12  if isinstance(visitee, _Labelable):
13  if not visitee.hasLabel_():
14  raise ValueError("A task associated with the Schedule contains a module of type '"+visitee.type_()+"'\nwhich has no assigned label.")
15  elif isinstance(visitee, Service):
16  if not visitee._inProcess:
17  raise ValueError("A task associated with the Schedule contains a service of type '"+visitee.type_()+"'\nwhich is not attached to the process.")
18  def leave(self,visitee):
19  pass
20 
21 # Use this on Paths
22 class PathValidator(object):
23  def __init__(self):
24  self.__label = ''
25  def setLabel(self,label):
26  self.__label = "'"+label+"' "
27  def enter(self,visitee):
28  if isinstance(visitee,OutputModule):
29  raise ValueError("Path "+self.__label+"cannot contain an OutputModule, '"+visitee.type_()+"', with label '"+visitee.label_()+"'")
30  if visitee.isLeaf():
31  if isinstance(visitee, _Labelable):
32  if not visitee.hasLabel_():
33  raise ValueError("Path "+self.__label+"contains a module of type '"+visitee.type_()+"' which has no assigned label.")
34  elif isinstance(visitee, Service):
35  if not visitee._inProcess:
36  raise ValueError("Path "+self.__label+"contains a service of type '"+visitee.type_()+"' which is not attached to the process.\n")
37  def leave(self,visitee):
38  pass
39 
40 # Use this on EndPaths
41 class EndPathValidator(object):
42  _presetFilters = ["TriggerResultsFilter", "HLTPrescaler"]
43  def __init__(self):
45  self.__label = ''
46  self._levelInTasks = 0
47  def setLabel(self,label):
48  self.__label = "'"+label+"' "
49  def enter(self,visitee):
50  if visitee.isLeaf():
51  if isinstance(visitee, _Labelable):
52  if not visitee.hasLabel_():
53  raise ValueError("EndPath "+self.__label+"contains a module of type '"+visitee.type_()+"' which has\nno assigned label.")
54  elif isinstance(visitee, Service):
55  if not visitee._inProcess:
56  raise ValueError("EndPath "+self.__label+"contains a service of type '"+visitee.type_()+"' which is not attached to the process.\n")
57  if isinstance(visitee, Task):
58  self._levelInTasks += 1
59  if self._levelInTasks > 0:
60  return
61  if isinstance(visitee,EDFilter):
62  if (visitee.type_() in self._presetFilters):
63  if (visitee.type_() not in self.filtersOnEndpaths):
64  self.filtersOnEndpaths.append(visitee.type_())
65  def leave(self,visitee):
66  if self._levelInTasks > 0:
67  if isinstance(visitee, Task):
68  self._levelInTasks -= 1
69 
71  """Form sets of all modules, ESProducers, ESSources and Services in visited objects. Can be used
72  to visit Paths, EndPaths, Sequences or Tasks. Includes in sets objects on sub-Sequences and sub-Tasks"""
73  def __init__(self):
74  self.modules = set()
75  self.esProducers = set()
76  self.esSources = set()
77  self.services = set()
78  def enter(self,visitee):
79  if visitee.isLeaf():
80  if isinstance(visitee, _Module):
81  self.modules.add(visitee)
82  elif isinstance(visitee, ESProducer):
83  self.esProducers.add(visitee)
84  elif isinstance(visitee, ESSource):
85  self.esSources.add(visitee)
86  elif isinstance(visitee, Service):
87  self.services.add(visitee)
88  def leave(self,visitee):
89  pass
90 
91 class CompositeVisitor(object):
92  """ Combines 3 different visitor classes in 1 so we only have to visit all the paths and endpaths once"""
93  def __init__(self, validator, node, decorated):
94  self._validator = validator
95  self._node = node
96  self._decorated = decorated
97  def enter(self, visitee):
98  self._validator.enter(visitee)
99  self._node.enter(visitee)
100  self._decorated.enter(visitee)
101  def leave(self, visitee):
102  self._validator.leave(visitee)
103  # The node visitor leave function does nothing
104  #self._node.leave(visitee)
105  self._decorated.leave(visitee)
106 
108  """Fill a list with the names of Event module types in a sequence. The names are determined
109  by using globals() to lookup the variable names assigned to the modules. This
110  allows the determination of the labels before the modules have been attached to a Process."""
111  def __init__(self,globals_,l):
112  self._moduleToName = { v[1]:v[0] for v in globals_.items() if isinstance(v[1],_Module) }
113  self._names =l
114  def enter(self,node):
115  if isinstance(node,_Module):
116  self._names.append(self._moduleToName[node])
117  def leave(self,node):
118  return
119 
120 if __name__=="__main__":
121  import unittest
122  class TestModuleCommand(unittest.TestCase):
123  def setUp(self):
124  """Nothing to do """
125  pass
126  def testValidators(self):
127  producer = EDProducer("Producer")
128  analyzer = EDAnalyzer("Analyzer")
129  output = OutputModule("Out")
130  filter = EDFilter("Filter")
131  unlabeled = EDAnalyzer("UnLabeled")
132  producer.setLabel("producer")
133  analyzer.setLabel("analyzer")
134  output.setLabel("output")
135  filter.setLabel("filter")
136  s1 = Sequence(analyzer*producer)
137  s2 = Sequence(output+filter)
138  p1 = Path(s1)
139  p2 = Path(s1*s2)
140  p3 = Path(s1+unlabeled)
141  ep1 = EndPath(producer+output+analyzer)
142  ep2 = EndPath(filter+output)
143  ep3 = EndPath(s2)
144  ep4 = EndPath(unlabeled)
145  pathValidator = PathValidator()
146  endpathValidator = EndPathValidator()
147  p1.visit(pathValidator)
148  self.assertRaises(ValueError, p2.visit, pathValidator)
149  self.assertRaises(ValueError, p3.visit, pathValidator)
150  ep1.visit(endpathValidator)
151  ep2.visit(endpathValidator)
152  ep3.visit(endpathValidator)
153  self.assertRaises(ValueError, ep4.visit, endpathValidator)
154 
155  unittest.main()
156 
SequenceTypes.TestModuleCommand
Definition: SequenceTypes.py:1656
SequenceVisitors.NodeVisitor
Definition: SequenceVisitors.py:70
resolutioncreator_cfi.object
object
Definition: resolutioncreator_cfi.py:4
SequenceVisitors.ModuleNamesFromGlobalsVisitor.leave
def leave(self, node)
Definition: SequenceVisitors.py:117
SequenceVisitors.PathValidator.__label
__label
Definition: SequenceVisitors.py:24
SequenceTypes.Path
Definition: SequenceTypes.py:642
SequenceVisitors.EndPathValidator.__init__
def __init__(self)
Definition: SequenceVisitors.py:43
SequenceVisitors.PathValidator.setLabel
def setLabel(self, label)
Definition: SequenceVisitors.py:25
SequenceVisitors.NodeVisitor.enter
def enter(self, visitee)
Definition: SequenceVisitors.py:78
SequenceVisitors.PathValidator.enter
def enter(self, visitee)
Definition: SequenceVisitors.py:27
SequenceVisitors.EndPathValidator.leave
def leave(self, visitee)
Definition: SequenceVisitors.py:65
SequenceVisitors.NodeVisitor.esProducers
esProducers
Definition: SequenceVisitors.py:75
SequenceVisitors.CompositeVisitor.leave
def leave(self, visitee)
Definition: SequenceVisitors.py:101
SequenceVisitors.EndPathValidator.__label
__label
Definition: SequenceVisitors.py:45
SequenceVisitors.CompositeVisitor.__init__
def __init__(self, validator, node, decorated)
Definition: SequenceVisitors.py:93
SequenceVisitors.CompositeVisitor.enter
def enter(self, visitee)
Definition: SequenceVisitors.py:97
Modules.EDAnalyzer
Definition: Modules.py:179
SequenceVisitors.CompositeVisitor._decorated
_decorated
Definition: SequenceVisitors.py:96
SequenceVisitors.PathValidator.leave
def leave(self, visitee)
Definition: SequenceVisitors.py:37
SequenceVisitors.EndPathValidator._levelInTasks
_levelInTasks
Definition: SequenceVisitors.py:46
SequenceVisitors.EndPathValidator.setLabel
def setLabel(self, label)
Definition: SequenceVisitors.py:47
SequenceVisitors.ModuleNamesFromGlobalsVisitor.__init__
def __init__(self, globals_, l)
Definition: SequenceVisitors.py:111
SequenceTypes.Sequence
Definition: SequenceTypes.py:654
SequenceVisitors.NodeVisitor.leave
def leave(self, visitee)
Definition: SequenceVisitors.py:88
Modules.EDFilter
Definition: Modules.py:171
SequenceVisitors.ModuleNamesFromGlobalsVisitor
Definition: SequenceVisitors.py:107
SequenceTypes.TestModuleCommand.setUp
def setUp(self)
Definition: SequenceTypes.py:1657
SequenceVisitors.NodeVisitor.services
services
Definition: SequenceVisitors.py:77
SequenceVisitors.CompositeVisitor._validator
_validator
Definition: SequenceVisitors.py:94
SequenceVisitors.EndPathValidator
Definition: SequenceVisitors.py:41
PVValHelper::add
void add(std::map< std::string, TH1 * > &h, TH1 *hist)
Definition: PVValidationHelpers.cc:12
SequenceVisitors.NodeVisitor.__init__
def __init__(self)
Definition: SequenceVisitors.py:73
SequenceVisitors.ScheduleTaskValidator
Definition: SequenceVisitors.py:7
mps_setup.append
append
Definition: mps_setup.py:85
SequenceVisitors.NodeVisitor.esSources
esSources
Definition: SequenceVisitors.py:76
SequenceVisitors.PathValidator.__init__
def __init__(self)
Definition: SequenceVisitors.py:23
SequenceVisitors.PathValidator
Definition: SequenceVisitors.py:22
SequenceVisitors.ScheduleTaskValidator.enter
def enter(self, visitee)
Definition: SequenceVisitors.py:10
Modules.EDProducer
Definition: Modules.py:163
SequenceVisitors.EndPathValidator.filtersOnEndpaths
filtersOnEndpaths
Definition: SequenceVisitors.py:44
Modules.OutputModule
Definition: Modules.py:186
SequenceVisitors.ModuleNamesFromGlobalsVisitor._names
_names
Definition: SequenceVisitors.py:113
SequenceVisitors.EndPathValidator.enter
def enter(self, visitee)
Definition: SequenceVisitors.py:49
SequenceVisitors.CompositeVisitor._node
_node
Definition: SequenceVisitors.py:95
SequenceVisitors.ScheduleTaskValidator.__init__
def __init__(self)
Definition: SequenceVisitors.py:8
SequenceVisitors.ModuleNamesFromGlobalsVisitor._moduleToName
_moduleToName
Definition: SequenceVisitors.py:112
SequenceTypes.EndPath
Definition: SequenceTypes.py:648
SequenceVisitors.ModuleNamesFromGlobalsVisitor.enter
def enter(self, node)
Definition: SequenceVisitors.py:114
SequenceVisitors.NodeVisitor.modules
modules
Definition: SequenceVisitors.py:74
SequenceVisitors.ScheduleTaskValidator.leave
def leave(self, visitee)
Definition: SequenceVisitors.py:18
SequenceVisitors.EndPathValidator._presetFilters
_presetFilters
Definition: SequenceVisitors.py:42