7575from types import UnionType
7676from typing import Any , Callable , TypeVar , Union , get_args , get_origin
7777
78- _log = logging .getLogger (__name__ )
78+ _logger = logging .getLogger (__name__ )
7979
8080
8181DataclassT = TypeVar ("DataclassT" , bound = "FromDictMixin" )
@@ -346,7 +346,7 @@ def start(self, task: Callable[..., None], **kwargs: Any) -> None:
346346 """
347347 self .task = task
348348 self ._task_name = task .__name__
349- _log .info (
349+ _logger .info (
350350 "Starting scheduler for task '%s' to execute every %d seconds and %s" ,
351351 self ._task_name ,
352352 self ._config .interval ,
@@ -365,18 +365,18 @@ def stop(self) -> None:
365365 """Stop the scheduler."""
366366 if self ._thread is not None :
367367 if self ._thread .is_alive ():
368- _log .info ("Stopping scheduler for task '%s'" , self ._task_name )
368+ _logger .info ("Stopping scheduler for task '%s'" , self ._task_name )
369369 self ._stop_event .set ()
370370 if not self ._stop_event .is_set ():
371- _log .error (
371+ _logger .error (
372372 "Failed to stop scheduler for task '%s'" , self ._task_name
373373 )
374374 else :
375- _log .warning (
375+ _logger .warning (
376376 "Attempted to stop scheduler for task '%s', but no active thread was found." ,
377377 self ._task_name ,
378378 )
379- _log .info ("Scheduler successfully stopped" )
379+ _logger .info ("Scheduler successfully stopped" )
380380
381381 def _run_task (self , kwargs : dict [str , Any ]) -> None :
382382 """Run the scheduled task.
@@ -389,19 +389,21 @@ def _run_task(self, kwargs: dict[str, Any]) -> None:
389389 elapsed = self ._execute_task (kwargs )
390390 self ._pace (elapsed )
391391 else :
392- _log .info (
392+ _logger .info (
393393 "Waiting for first interval before sending the first notification."
394394 )
395395 self ._pace (0 )
396396 while not self ._should_stop ():
397397 elapsed = self ._execute_task (kwargs )
398398 self ._pace (elapsed )
399- _log .info ("Scheduler stopping: stop condition met." )
399+ _logger .info ("Scheduler stopping: stop condition met." )
400400 self .stop ()
401401
402402 def _should_stop (self ) -> bool :
403403 """Return True if the scheduler should stop."""
404- _log .debug ("Checking if scheduler for task '%s' should stop." , self ._task_name )
404+ _logger .debug (
405+ "Checking if scheduler for task '%s' should stop." , self ._task_name
406+ )
405407 return self ._stop_event .is_set () or (
406408 self ._config .duration is not None
407409 and self ._start_time is not None
@@ -422,14 +424,14 @@ def _execute_task(self, kwargs: dict[str, Any]) -> float:
422424 if self .task :
423425 self .task (** kwargs )
424426 except Exception as e : # pylint: disable=broad-except
425- _log .error (
427+ _logger .error (
426428 "Error occurred during scheduled execution of %s: %s" ,
427429 self ._task_name ,
428430 e ,
429431 )
430432 finally :
431433 task_elapsed = time .time () - task_start_time
432- _log .debug (
434+ _logger .debug (
433435 "Execution of task '%s' completed in %.2f seconds." ,
434436 self ._task_name ,
435437 task_elapsed ,
@@ -465,7 +467,9 @@ def _pace(self, elapsed_task_time: float) -> None:
465467 actual_sleep = max (0 , sleep_duration - elapsed_task_time )
466468 if self ._stop_event .is_set ():
467469 return
468- _log .info ("Sleeping for %.2f seconds before next task execution." , actual_sleep )
470+ _logger .info (
471+ "Sleeping for %.2f seconds before next task execution." , actual_sleep
472+ )
469473 self ._stop_event .wait (actual_sleep )
470474
471475
@@ -503,15 +507,17 @@ def send_with_retry(
503507 for attempt in range (retries + 1 ):
504508 try :
505509 send_func (** kwargs )
506- _log .info ("Successfully sent notification on attempt %d" , attempt + 1 )
510+ _logger .info (
511+ "Successfully sent notification on attempt %d" , attempt + 1
512+ )
507513 return
508514 except Exception as e : # pylint: disable=broad-except
509515 last_exception = e
510- _log .error ("Attempt %d failed: %s" , attempt + 1 , e )
516+ _logger .error ("Attempt %d failed: %s" , attempt + 1 , e )
511517 if attempt < retries - 1 :
512518 linear_backoff = backoff_factor * (attempt + 1 )
513519 time .sleep (min (max_sleep , linear_backoff ))
514- _log .error ("Failed to send notification after %d retries" , retries )
520+ _logger .error ("Failed to send notification after %d retries" , retries )
515521 raise NotificationSendError (
516522 "Notification failed after all retry attempts." ,
517523 last_exception = last_exception ,
@@ -520,17 +526,17 @@ def send_with_retry(
520526 def start_scheduler (self ) -> None :
521527 """Start the scheduler if configured."""
522528 if self ._scheduler :
523- _log .info ("Starting scheduler for %s" , self .__class__ .__name__ )
529+ _logger .info ("Starting scheduler for %s" , self .__class__ .__name__ )
524530 self ._scheduler .start (self .send )
525531 else :
526- _log .warning ("No scheduler config provided. Cannot start scheduler." )
532+ _logger .warning ("No scheduler config provided. Cannot start scheduler." )
527533
528534 def stop_scheduler (self ) -> None :
529535 """Stop the running scheduler."""
530536 if not self ._scheduler :
531- _log .warning ("No active scheduler to stop." )
537+ _logger .warning ("No active scheduler to stop." )
532538 return
533- _log .info ("Stopping scheduler for notification: %s" , self .__class__ .__name__ )
539+ _logger .info ("Stopping scheduler for notification: %s" , self .__class__ .__name__ )
534540 self ._scheduler .stop ()
535541
536542 @abstractmethod
@@ -559,7 +565,7 @@ def __init__(self, config: EmailConfig) -> None:
559565 super ().__init__ ()
560566 self ._config : EmailConfig = config
561567 if self ._config .scheduler :
562- _log .debug (
568+ _logger .debug (
563569 "EmailNotification configured with scheduler: %s" ,
564570 self ._config .scheduler ,
565571 )
@@ -625,9 +631,9 @@ def _attach_files(self, msg: EmailMessage, attachments: list[str]) -> None:
625631 )
626632 except OSError as e :
627633 failed_attachments .append (file )
628- _log .error ("Failed to attach file %s: %s" , file , e )
634+ _logger .error ("Failed to attach file %s: %s" , file , e )
629635 if failed_attachments :
630- _log .warning (
636+ _logger .warning (
631637 "The following attachments could not be added: %s" , failed_attachments
632638 )
633639
@@ -676,9 +682,9 @@ def _connect_and_send(
676682 server .starttls ()
677683 server .login (str (smtp_settings ["user" ]), str (smtp_settings ["password" ]))
678684 server .send_message (msg )
679- _log .info ("Email sent successfully to %s" , to_emails )
685+ _logger .info ("Email sent successfully to %s" , to_emails )
680686 except SMTPException as e :
681- _log .error ("Failed to send email: %s" , e )
687+ _logger .error ("Failed to send email: %s" , e )
682688 raise
683689
684690
0 commit comments