def test_all_subclasses(): num = random.randint(1, 10) class TestClass: pass classes = [type(f"TestClass{i}", (TestClass, ), {}) for i in range(num)] assert utils.all_subclasses(TestClass) == classes
def resolve_by_type(type_name) -> Type["Slot"]: """Returns a slots class by its type name.""" for cls in utils.all_subclasses(Slot): if cls.type_name == type_name: return cls try: return class_from_module_path(type_name) except (ImportError, AttributeError): raise ValueError( "Failed to find slot type, '{}' is neither a known type nor " "user-defined. If you are creating your own slot type, make " "sure its module path is correct.".format(type_name))
def resolve_by_type(type_name): """Returns a slots class by its type name.""" # 给一个slot类型名称(字符串),返回对应的slot类 for cls in utils.all_subclasses(Slot): if cls.type_name == type_name: return cls try: # Slot子类中没有该种类的类,可以指定lookup_path去查找 return class_from_module_path(type_name) except (ImportError, AttributeError): raise ValueError( "Failed to find slot type, '{}' is neither a known type nor " "user-defined. If you are creating your own slot type, make " "sure its module path is correct.".format(type_name))
def resolve_by_type( type_name: Text, default: Optional[Type["Event"]] = None ) -> Optional[Type["Event"]]: """Returns a slots class by its type name.""" from rasa.core import utils for cls in utils.all_subclasses(Event): if cls.type_name == type_name: return cls if type_name == "topic": return None # backwards compatibility to support old TopicSet evts elif default is not None: return default else: raise ValueError("Unknown event name '{}'.".format(type_name))
time.sleep(0.01) event2 = event_class() assert event.timestamp < event2.timestamp @pytest.mark.parametrize("event_class", [SlotSet, ActionExecuted, FollowupAction]) def test_correct_timestamp_setting(event_class): event = event_class("test") time.sleep(0.01) event2 = event_class("test") assert event.timestamp < event2.timestamp @pytest.mark.parametrize("event_class", utils.all_subclasses(Event)) def test_event_metadata_dict(event_class): metadata = {"foo": "bar", "quux": 42} # Create the event from a dict that will be accepted by the _from_parameters # method of any Event subclass (the values themselves are not important). event = Event.from_parameters( { "metadata": metadata, "event": event_class.type_name, "parse_data": {}, "date_time": "2019-11-20T16:09:16Z", } ) assert event.as_dict()["metadata"] == metadata