def can_register_and_unregister(): try: assert Description.bases is str register_description(str) assert Description.bases is str register_description(int) assert Description.bases == (str, int) register_description(int) assert Description.bases == (str, int) register_description(float) assert Description.bases == (str, int, float) unregister_description(int) assert Description.bases == (str, float) unregister_description(float) assert Description.bases is str unregister_description(str) assert Description.bases is object register_description(str) assert Description.bases is str register_description(object) assert Description.bases is object Description.bases = (str,) unregister_description(str) assert Description.bases is object unregister_description(str) assert Description.bases is object finally: Description.bases = str
def can_only_unregister_types(): with raises(TypeError, match="Only types can be unregistered\\."): # noinspection PyTypeChecker unregister_description("foo") # type: ignore
def registered(base: type): register_description(base) try: yield None finally: unregister_description(LazyString)