131 def __set__( self, obj, value ):
132
133 if obj.isLocked():
134 raise RuntimeError(
135 'can not change property "%s" of locked configurable "%s"' %
136 (self.descr.__name__, obj.getJobOptName()) )
137
138
139 proptype = None
140 if hasattr( self, 'default' ):
141 proptype =
type(self.default)
142 elif obj in self.history:
143 proptype =
type( self.history[ obj ][ 0 ] )
144
145
146 if proptype
and not isinstance(proptype,
type(
None)):
147
148 value = _isCompatible( proptype, value, self.fullPropertyName(obj) )
149
150
151 if proptype == tuple or proptype == list:
152 try:
153 oldvec = self.descr.__get__( obj, type )
154 if oldvec:
155 tpo =
type(oldvec[0])
156 for v in value:
157 _isCompatible( tpo, v, self.fullPropertyName(obj) )
158 except AttributeError:
159
160 pass
161
162
163
164 if not obj._isInSetDefaults() or obj not in self.history:
165
166 if hasattr( self, 'default' ) and self.default is None:
167 obj.__iadd__( value, self.descr )
168 else:
169 self.descr.__set__( obj, value )
170 self.history.setdefault( obj, [] ).append( value )
171