272 def store(self, value):
273 if isinstance(value, Configurable):
274 value.name
275 elif isinstance(value, str):
276
277 if value in Configurable.instances:
278 value = Configurable.instances[value]
279 else:
280
281 if "/" in value:
282 t, n = value.split("/")
283 else:
284 t = n = value
285 value = Configurables.getByType(t).getInstance(n)
286 else:
287 raise TypeError(
288 f"cannot assign {value!r} to {self.name!r}, requested string or {self.cpp_type!r}"
289 )
290 if value.__component_type__ != self.cpp_type:
291 raise TypeError(
292 f"wrong type for {self.name!r}: expected {self.cpp_type!r}, got {value.__component_type__!r}"
293 )
294 try:
295
296 if value.__interfaces__:
297 if not self.interfaces.issubset(value.__interfaces__):
298 raise TypeError(
299 f"wrong interfaces for {self.name!r}: required {list(self.interfaces)}"
300 )
301 except AttributeError:
302 pass
303 return value
304