taskregistry.py (3719B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\behaviors\registry\taskregistry.py 2 from . import COMPOSITE, ACTION, CONDITION, DECORATOR, MONITOR 3 from functoolsext import lru_cache 4 5 def get_full_class_name(task_class): 6 return task_class['task_class'] 7 8 9 def get_class_from_name(full_class_name): 10 module_name, class_name = full_class_name.rsplit('.', 1) 11 mod = __import__(module_name, fromlist=[class_name]) 12 return getattr(mod, class_name) 13 14 15 class TaskRegistry(object): 16 17 def __init__(self): 18 self._registered_tasks_by_class_name = {} 19 self._tasks_by_type = {COMPOSITE: set(), 20 ACTION: set(), 21 CONDITION: set(), 22 DECORATOR: set(), 23 MONITOR: set()} 24 25 def register_task(self, task_type, task_class): 26 task_name = get_full_class_name(task_class) 27 self._registered_tasks_by_class_name[task_name] = task_class 28 self._tasks_by_type[task_type].add(task_name) 29 30 def register_action(self, task_class): 31 self.register_task(ACTION, task_class) 32 33 def register_condition(self, task_class): 34 self.register_task(CONDITION, task_class) 35 36 def register_composite(self, task_class): 37 self.register_task(COMPOSITE, task_class) 38 39 def register_decorator(self, task_class): 40 self.register_task(DECORATOR, task_class) 41 42 def register_monitor(self, task_class): 43 self.register_task(MONITOR, task_class) 44 45 def _get_classes_by_type(self, task_type): 46 return [ get_class_from_name(name) for name in self._tasks_by_type[task_type] ] 47 48 def get_tasks_by_type(self, task_type): 49 return list(self._tasks_by_type.get(task_type)) 50 51 def get_actions(self): 52 return self._get_classes_by_type(ACTION) 53 54 def get_conditions(self): 55 return self._get_classes_by_type(CONDITION) 56 57 def get_composites(self): 58 return self._get_classes_by_type(COMPOSITE) 59 60 def get_decorators(self): 61 return self._get_classes_by_type(DECORATOR) 62 63 def get_monitors(self): 64 return self._get_classes_by_type(MONITOR) 65 66 def action_list(self): 67 return self.get_tasks_by_type(ACTION) 68 69 def condition_list(self): 70 return self.get_tasks_by_type(CONDITION) 71 72 def composite_list(self): 73 return self.get_tasks_by_type(COMPOSITE) 74 75 def decorator_list(self): 76 return self.get_tasks_by_type(DECORATOR) 77 78 def monitor_list(self): 79 return self.get_tasks_by_type(MONITOR) 80 81 def is_action(self, task_name): 82 return task_name in self._tasks_by_type[ACTION] 83 84 def is_condition(self, task_name): 85 return task_name in self._tasks_by_type[CONDITION] 86 87 def is_composite(self, task_name): 88 return task_name in self._tasks_by_type[COMPOSITE] 89 90 def is_decorator(self, task_name): 91 return task_name in self._tasks_by_type[DECORATOR] 92 93 def is_monitor(self, task_name): 94 return task_name in self._tasks_by_type[MONITOR] 95 96 def get_task_type(self, task_name): 97 return self._registered_tasks_by_class_name[task_name]['task_type'] 98 99 def get_class_attributes(self, task_name): 100 return self._registered_tasks_by_class_name[task_name]['attributes'] 101 102 def get_class_short_description(self, task_name): 103 return self._registered_tasks_by_class_name[task_name]['short_description'] 104 105 def get_class_detailed_description(self, task_name): 106 return self._registered_tasks_by_class_name[task_name]['detailed_description'] 107 108 @lru_cache(maxsize=256) 109 def get_class_from_name(self, full_class_name): 110 return get_class_from_name(str(full_class_name)) 111 112 def get_full_class_name(self, task_class): 113 get_full_class_name(task_class)