def decode_data(data: str): logging.debug(f'data {type(data)} = {data}') try: splitted_data = data.split('|') view_class_name_str = splitted_data[0] logging.debug( f'view_class_name_str {type(view_class_name_str)} = {view_class_name_str}' ) model_class_name_str = splitted_data[1] logging.debug( f'model_class_name_str {type(model_class_name_str)} = {model_class_name_str}' ) model_value_str = splitted_data[2] logging.debug( f'model_value_str {type(model_value_str)} = {model_value_str}') except IndexError: return (StartMenu, None) view_class = None model_class = None model_value = None for cls in View.__subclasses__(): if cls.__name__ in view_class_name_str: view_class = cls break if model_class_name_str is not None and model_value_str is not None: for cls in Models.__subclasses__(): if cls.__name__ in model_class_name_str: model_value = cls(model_value_str) break return (view_class, model_value) else: return (view_class, None)