Skip to content

Commit a62d1a4

Browse files
authored
Refactor add_handler and error handling logic
1 parent 8a050c2 commit a62d1a4

1 file changed

Lines changed: 26 additions & 12 deletions

File tree

pyrogram/dispatcher.py

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -297,20 +297,27 @@ async def stop(self, clear_handlers: bool = True):
297297

298298
log.info("Stopped %s HandlerTasks", self.client.workers)
299299

300-
def add_handler(self, handler: Union[Handler, ErrorHandler], group: int):
300+
def add_handler(self, handler: Handler, group: int):
301301
async def fn():
302302
for lock in self.locks_list:
303303
await lock.acquire()
304304

305305
try:
306306
if isinstance(handler, ErrorHandler):
307-
self.error_handlers_groups.setdefault(group, []).append(handler)
308-
self.error_handlers_groups = OrderedDict(sorted(self.error_handlers_groups.items(), key=itemgetter(0)))
307+
if group not in self.error_handlers_groups:
308+
self.error_handlers_groups[group] = []
309+
self.error_handlers_groups = OrderedDict(
310+
sorted(self.error_handlers_groups.items(), key=itemgetter(0))
311+
)
312+
313+
self.error_handlers_groups[group].append(handler)
309314
else:
310315
if group not in self.groups:
311316
self.groups[group] = []
312-
self.groups = OrderedDict(sorted(self.groups.items()))
313-
317+
self.groups = OrderedDict(
318+
sorted(self.groups.items(), key=itemgetter(0))
319+
)
320+
314321
self.groups[group].append(handler)
315322
finally:
316323
for lock in self.locks_list:
@@ -327,19 +334,23 @@ async def fn():
327334
if isinstance(handler, ErrorHandler):
328335
if group not in self.error_handlers_groups:
329336
raise ValueError(
330-
f"Group {group} does not exist in error handlers; "
331-
"Error handler was not removed"
337+
f"Group {group} does not exist. Error handler was not removed."
332338
)
333-
339+
334340
self.error_handlers_groups[group].remove(handler)
335-
341+
336342
if not self.error_handlers_groups[group]:
337343
del self.error_handlers_groups[group]
338344
else:
339345
if group not in self.groups:
340-
raise ValueError(f"Group {group} does not exist. Handler was not removed.")
346+
raise ValueError(
347+
f"Group {group} does not exist. Update handler was not removed."
348+
)
341349

342350
self.groups[group].remove(handler)
351+
352+
if not self.groups[group]:
353+
del self.groups[group]
343354
finally:
344355
for lock in self.locks_list:
345356
lock.release()
@@ -410,7 +421,9 @@ async def handler_worker(self, lock):
410421
except Exception as e:
411422
log.exception(e)
412423

413-
async def handle_update_handler_exception(self, exc: Exception, update_handler: Handler, args: Tuple[Any, ...]) -> None:
424+
async def handle_update_handler_exception(
425+
self, exc: Exception, update_handler: Handler, args: Tuple[Any, ...]
426+
) -> None:
414427
handled = False
415428
try:
416429
for group in self.error_handlers_groups.values():
@@ -447,4 +460,5 @@ async def handle_update_handler_exception(self, exc: Exception, update_handler:
447460
log.error(
448461
f"Unexpected exception raised in {type(update_handler).__name__}:",
449462
exc_info=(type(exc), exc, exc.__traceback__)
450-
)
463+
)
464+

0 commit comments

Comments
 (0)