( self, parameter, value, rootName )
| 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 |
no test coverage detected