MCPcopy Create free account
hub / github.com/ImageEngine/cortex / __serialiseWalk

Method __serialiseWalk

python/IECore/ParameterParser.py:164–220  ·  view source on GitHub ↗
( self, parameter, value, rootName )

Source from the content-addressed store, hash-verified

162 return self.__serialiseWalk( parameters, values, "" )
163
164 def __serialiseWalk( self, parameter, value, rootName ) :
165
166 # Allow parameters to request not to be serialised.
167 if "parser" in parameter.userData() and "serialise" in parameter.userData()["parser"]:
168 if not parameter.userData()["parser"]["serialise"].value:
169 return []
170
171 # Try to find a serialiser
172 serialiser = None
173 typeId = parameter.typeId()
174 while typeId != IECore.TypeId.Invalid :
175 if typeId in self.__typesToSerialisers :
176 serialiser = self.__typesToSerialisers[typeId]
177 break
178 if typeId != IECore.TypeId.CompoundParameter :
179 # consider serialisers for base classes.
180 typeId = IECore.RunTimeTyped.baseTypeId( typeId )
181 else :
182 # don't consider serialiser for base classes of CompoundParameter
183 # so that it doesn't get an unecessary serialisation in the case
184 # of a serialiser for Parameter being registered.
185 break
186
187 if serialiser is None and not isinstance( parameter, IECore.CompoundParameter ) :
188 # bail if no serialiser available, unless it's a CompoundParameter in which case we'll content
189 # ourselves with serialising the children if no serialiser is available.
190 raise RuntimeError( "No serialiser available for parameter \"%s\"" % parameter.name )
191
192 result = []
193 if serialiser is not None :
194 # we have a registered serialiser - use it
195 try:
196 s = serialiser( parameter, value )
197 if not isinstance( s, list ) :
198 raise RuntimeError( "Serialiser did not return a list." )
199 for ss in s :
200 if not isinstance( ss, str ) :
201 raise RuntimeError( "Serialiser returned a list with an element which is not a string." )
202 except Exception as e:
203 raise RuntimeError("Problem serialising parameter \"%s\" : %s" % (parameter.name, e))
204
205 # serialize
206 result += [ '-' + rootName + parameter.name ] + s
207
208 # recurse to children of CompoundParameters
209 if parameter.isInstanceOf( IECore.CompoundParameter.staticTypeId() ) :
210 path = rootName
211 if parameter.name :
212 path = path + parameter.name + '.'
213 # recurse
214 for childParm in parameter.values() :
215 if value is not None and childParm.name in value.keys() :
216 result += self.__serialiseWalk( childParm, value[childParm.name], path )
217 else :
218 result += self.__serialiseWalk( childParm, value, path )
219
220 return result
221

Callers 1

serialiseMethod · 0.95

Calls 7

typeIdMethod · 0.80
baseTypeIdMethod · 0.80
isInstanceOfMethod · 0.80
staticTypeIdMethod · 0.80
userDataMethod · 0.45
valuesMethod · 0.45
keysMethod · 0.45

Tested by

no test coverage detected