Keep track of how many events for each type were added

This commit is contained in:
Lonami Exo 2018-07-11 10:50:19 +02:00
parent e902304360
commit 81f31e09c8
2 changed files with 12 additions and 0 deletions

View File

@ -1,5 +1,6 @@
import abc
import asyncio
import collections
import inspect
import logging
import platform
@ -258,6 +259,11 @@ class TelegramBaseClient(abc.ABC):
self._events_pending_resolve = []
self._event_resolve_lock = asyncio.Lock()
# Keep track of how many event builders there are for
# each type {type: count}. If there's at least one then
# the event will be built, and the same event be reused.
self._event_builders_count = collections.defaultdict(int)
# Default parse mode
self._parse_mode = markdown

View File

@ -90,6 +90,7 @@ class UpdateMethods(UserMethods):
event = events.Raw()
self._events_pending_resolve.append(event)
self._event_builders_count[type(event)] += 1
self._event_builders.append((event, callback))
def remove_event_handler(self, callback, event=None):
@ -108,6 +109,11 @@ class UpdateMethods(UserMethods):
i -= 1
ev, cb = self._event_builders[i]
if cb == callback and (not event or isinstance(ev, event)):
type_ev = type(ev)
self._event_builders_count[type_ev] -= 1
if not self._event_builders_count[type_ev]:
del self._event_builders_count[type_ev]
del self._event_builders[i]
found += 1