278 def store(self, value):
279 if isinstance(value, Configurable):
280 value.name
281 elif isinstance(value, str):
282
283 if value in Configurable.instances:
284 value = Configurable.instances[value]
285 else:
286
287 if "/" in value:
288 t, n = value.split("/")
289 else:
290 t = n = value
291 value = Configurables.getByType(t).getInstance(n)
292 else:
293 raise TypeError(
294 "cannot assign {!r} to {!r}, requested string or {!r}".
format(
295 value, self.name, self.cpp_type
296 )
297 )
298 if value.__component_type__ != self.cpp_type:
299 raise TypeError(
300 "wrong type for {!r}: expected {!r}, got {!r}".
format(
301 self.name, self.cpp_type, value.__component_type__
302 )
303 )
304 try:
305
306 if value.__interfaces__:
307 if not self.interfaces.issubset(value.__interfaces__):
308 raise TypeError(
309 "wrong interfaces for {!r}: required {}".
format(
310 self.name, list(self.interfaces)
311 )
312 )
313 except AttributeError:
314 pass
315 return value
316
GAUDI_API std::string format(const char *,...)
MsgStream format utility "a la sprintf(...)".