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 abc
import asyncio import asyncio
import collections
import inspect import inspect
import logging import logging
import platform import platform
@ -258,6 +259,11 @@ class TelegramBaseClient(abc.ABC):
self._events_pending_resolve = [] self._events_pending_resolve = []
self._event_resolve_lock = asyncio.Lock() 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 # Default parse mode
self._parse_mode = markdown self._parse_mode = markdown

View File

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