4 "PublicToolHandle",
"PrivateToolHandle",
8 "PublicToolHandleArray",
"PrivateToolHandleArray",
10 __version__ =
"$Revision: 1.6 $"
11 __doc__ =
"""The python module holding python bindings to XyzHandles"""
13 from os
import linesep
16 componentType =
"Unspecified"
19 def __init__(self,typeAndName):
21 if hasattr(typeAndName,
"toStringProperty"):
23 typeAndName = typeAndName.toStringProperty()
24 if type(typeAndName) != str:
25 raise TypeError(
"Argument to %s must be a string. Got a %s instead" % \
26 ( self.__class__.__name__,
type(typeAndName).__name__) )
27 self.typeAndName = typeAndName
30 return "%s(%r)" % (self.__class__.__name__,self.toStringProperty())
35 return self.toStringProperty()
40 def toStringProperty(self):
41 return self.typeAndName
44 """Get the 'type' part of the \"type/name\" string."""
45 slash = self.typeAndName.find(
'/')
48 return self.typeAndName[0:slash]
51 return self.typeAndName
54 """Get the 'name' part of the \"type/name\" string.
55 If only a type is given, this will be returned as the name.
56 If the \"type/name\" string is empty, it will return an emtpy string."""
57 slash = self.typeAndName.find(
'/')
60 return self.typeAndName[slash+1:]
63 return self.typeAndName
65 def getGaudiHandle(self):
68 def getFullName(self):
69 return self.toStringProperty()
73 componentType =
"AlgTool"
76 def __init__(self, toolTypeAndName=''):
77 GaudiHandle.__init__( self, toolTypeAndName )
82 componentType =
"AlgTool"
85 def __init__(self, toolTypeAndName=''):
86 GaudiHandle.__init__( self, toolTypeAndName )
91 componentType =
"Service"
94 def __init__(self, serviceName=''):
95 GaudiHandle.__init__( self, serviceName )
101 """A list of GaudiHandles. Only handles of one type are allowed, as specified by self.__class__.handleType
103 __slots__ = (
'typesAndNames' )
106 def __init__(self,typesAndNames=None):
107 if typesAndNames
is None: typesAndNames = []
110 if type(typesAndNames) != list:
111 raise TypeError(
"Argument to %s must be a list. Got a %s instead" % \
112 ( self.__class__.__name__,
type(typesAndNames).__name__) )
114 for tn
in typesAndNames: self.append( tn )
117 """Return class name with list of type/name strings as argument"""
118 rep = self.__class__.__name__ +
'(['
120 rep += repr(h.toStringProperty()) +
','
122 if rep[-1] ==
',': rep = rep[:-1]
126 """Print entries, one per line"""
127 shortName = self.__class__.__name__
128 return "%s:%s" % (shortName, linesep + linesep.join([str(s)
for s
in self]))
130 def __getitem__(self,index):
131 if type(index) == str:
134 if h.getName() == index:
136 raise IndexError(
"%s does not have a %s with instance name %s" % \
137 (self.__class__.__name__, self.handleType.componentType, index) )
139 return list.__getitem__(self,index)
141 def __delitem__( self, key ):
142 super( GaudiHandleArray, self ).__delitem__( self.index(self[key]) )
144 def __iadd__(self,array):
145 arrayType =
type(array)
146 if arrayType == list
or arrayType ==
type(self):
150 raise TypeError(
"Can not add a %s to a %s" % (arrayType.__name__, self.__class__.__name__) )
154 def append( self, value ):
155 """Only allow appending compatible types. It accepts a string, a handle or a configurable."""
156 if type(value) == str:
158 value = self.__class__.handleType(value)
159 elif type(value) == self.__class__.handleType:
161 elif isinstance( value, GaudiHandle ):
163 raise TypeError(
"Can not add a %s to a %s" % (value.__class__.__name__, self.__class__.__name__) )
164 elif value.getGaudiType() != self.__class__.handleType.componentType:
166 raise TypeError(
"Can not append %s (%s) to a %s" % \
167 (value.__class__.__name__, value.getGaudiType(), self.__class__.__name__) )
168 elif hasattr(value,
'isPublic'):
170 pop = value.isPublic()
and 'Public' or 'Private'
171 if value.isPublic() != self.__class__.handleType.isPublic:
172 raise TypeError(
"Can not append %s (%s %s) to a %s" % \
173 (value.__class__.__name__, pop, value.getGaudiType(), self.__class__.__name__) )
177 oldValue = self.__getitem__( value.getName() )
180 list.append( self, value )
182 print "%s WARNING %r with instance name %r already in list. Not adding %r" % \
183 (self.__class__.__name__, oldValue, oldValue.getName(), value)
187 return self.__class__.handleType.isPublic
192 def toStringProperty(self):
196 rep += repr( v.toStringProperty() ) +
','
198 if rep[-1] ==
',': rep = rep[:-1]
202 def __getstate__ (self):
203 return {
'typesAndNames' : self.typesAndNames }
205 def __setstate__ ( self, dict ):
206 self.typesAndNames = dict[
'typesAndNames' ]
211 handleType = ServiceHandle
213 def __init__(self, serviceTypesAndNames=None):
214 GaudiHandleArray.__init__( self, serviceTypesAndNames )
218 handleType = PublicToolHandle
220 def __init__(self, toolTypesAndNames=None):
221 GaudiHandleArray.__init__( self, toolTypesAndNames )
226 handleType = PrivateToolHandle
228 def __init__(self, toolTypesAndNames=None):
229 GaudiHandleArray.__init__( self, toolTypesAndNames )
Handle to be used in lieu of naked pointers to services.
Handle to be used in lieu of naked pointers to gaudis.
Array of Handles to be used in lieu of vector of naked pointers to tools.
T is the concrete handle type, e.g.