Skip to content

Commit

Permalink
0.1.3
Browse files Browse the repository at this point in the history
  • Loading branch information
RF-Tar-Railt authored Nov 25, 2021
1 parent f860eed commit eedaf6e
Showing 1 changed file with 20 additions and 29 deletions.
49 changes: 20 additions & 29 deletions arclet/letoderea/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from .entities.publisher import Publisher
from .entities.decorator import TemplateDecorator
from .entities.subscriber import Subscriber
from .utils import Condition_T
from .utils import Condition_T, search_event, event_class_generator


class EventSystem:
Expand All @@ -29,17 +29,17 @@ def __init__(
def event_spread(self, target: Union[TemplateEvent, Dict[str, Any]]):
if (datetime.now() - self.last_run).total_seconds() >= self.safety_interval:
try:
for pub in self.publisher_generator():
for pub in self.publisher_generator(target):
if pub.on_event(target):
self.loop.create_task(pub.current_executor)
except asyncio.CancelledError:
return
self.last_run = datetime.now()

def publisher_generator(self):
def publisher_generator(self, current_event):
return list(
filter(
lambda x: all([condition.judge() for condition in x.external_conditions]),
lambda x: all([condition.judge(current_event) for condition in x.external_conditions]),
self.publisher_list,
)
)
Expand All @@ -56,19 +56,6 @@ def get_publisher(self, target: Type[TemplateEvent]):
def remove_publisher(self, target):
self.publisher_list.remove(target)

@staticmethod
def event_class_generator(target=TemplateEvent):
for i in target.__subclasses__():
yield i
if i.__subclasses__():
yield from EventSystem.event_class_generator(i)

@staticmethod
def search_event(name: str):
for i in EventSystem.event_class_generator():
if i.__name__ == name:
return i

def register(
self,
event: Union[str, Type[TemplateEvent]],
Expand All @@ -79,9 +66,12 @@ def register(
):
if isinstance(event, str):
name = event
event = self.search_event(event)
event = search_event(event)
if not event:
raise Exception(name + " cannot found!")

events = [event]
events.extend(event_class_generator(event))
conditions = conditions or []
decorators = decorators or []

Expand All @@ -92,18 +82,19 @@ def register_wrapper(exec_target):
priority=priority,
decorators=decorators
)
may_publishers = self.get_publisher(event)
_event_handler = EventDelegate(event=event)
_event_handler += exec_target
if not may_publishers:
self.publisher_list.append(Publisher(conditions, _event_handler))
else:
for m_publisher in may_publishers:
if m_publisher.equal_conditions(conditions):
m_publisher += _event_handler
break
else:
for e in events:
may_publishers = self.get_publisher(e)
_event_handler = EventDelegate(event=e)
_event_handler += exec_target
if not may_publishers:
self.publisher_list.append(Publisher(conditions, _event_handler))
else:
for m_publisher in may_publishers:
if m_publisher.equal_conditions(conditions):
m_publisher += _event_handler
break
else:
self.publisher_list.append(Publisher(conditions, _event_handler))

return exec_target

Expand Down

0 comments on commit eedaf6e

Please sign in to comment.