NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

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)