def add_prop(self, *, prop: PropertyBase) -> None: """ Add a property to this context. An error message will be generated, if a property with the same name has already been added previously. * `prop`: The property object that should be added. """ if prop.id() in self._properties: logger.error(f"Attempt to add property {prop.id()} twice!") return with self._lock: # register property self._properties[prop.id()] = prop # register all of the property's signals for signal in prop.signals(): self._add_sig(signal)
def rm_prop(self, *, prop: PropertyBase) -> None: """ Remove a property from this context. Generates error message, if the property was not added with add_prop() to the context previously * `prop`: The property to remove.object """ if prop.id() not in self._properties: logger.error(f"Attempt to remove unknown property {prop.id()}!") return # remove property from context self._properties.pop(prop.id()) states_to_remove: Set[State] = set() with self._lock: # remove all of the property's signals for signal in prop.signals(): self._rm_sig(signal) # remove all states that depend upon property for st in self._activations_per_state: if prop.id() in st.read_props + st.write_props: states_to_remove.add(st) for st in states_to_remove: self.rm_state(st=st)