1+ from __future__ import annotations
12import os
23import random
34import threading
45from datetime import datetime , timezone
5- from typing import Optional , List , Callable , TYPE_CHECKING , Any
66
77from sentry_sdk .utils import format_timestamp , safe_repr
88from sentry_sdk .envelope import Envelope , Item , PayloadRef
99
10+ from typing import TYPE_CHECKING
11+
1012if TYPE_CHECKING :
1113 from sentry_sdk ._types import Log
14+ from typing import Optional , List , Callable , Any
1215
1316
1417class LogBatcher :
1518 MAX_LOGS_BEFORE_FLUSH = 100
1619 FLUSH_WAIT_TIME = 5.0
1720
18- def __init__ (
19- self ,
20- capture_func , # type: Callable[[Envelope], None]
21- ):
22- # type: (...) -> None
23- self ._log_buffer = [] # type: List[Log]
21+ def __init__ (self , capture_func : Callable [[Envelope ], None ]) -> None :
22+ self ._log_buffer : List [Log ] = []
2423 self ._capture_func = capture_func
2524 self ._running = True
2625 self ._lock = threading .Lock ()
2726
28- self ._flush_event = threading .Event () # type: threading.Event
27+ self ._flush_event : threading .Event = threading .Event ()
2928
30- self ._flusher = None # type : Optional[threading.Thread]
31- self ._flusher_pid = None # type : Optional[int]
29+ self ._flusher : Optional [threading .Thread ] = None
30+ self ._flusher_pid : Optional [int ] = None
3231
33- def _ensure_thread (self ):
34- # type: (...) -> bool
32+ def _ensure_thread (self ) -> bool :
3533 """For forking processes we might need to restart this thread.
3634 This ensures that our process actually has that thread running.
3735 """
@@ -63,18 +61,13 @@ def _ensure_thread(self):
6361
6462 return True
6563
66- def _flush_loop (self ):
67- # type: (...) -> None
64+ def _flush_loop (self ) -> None :
6865 while self ._running :
6966 self ._flush_event .wait (self .FLUSH_WAIT_TIME + random .random ())
7067 self ._flush_event .clear ()
7168 self ._flush ()
7269
73- def add (
74- self ,
75- log , # type: Log
76- ):
77- # type: (...) -> None
70+ def add (self , log : Log ) -> None :
7871 if not self ._ensure_thread () or self ._flusher is None :
7972 return None
8073
@@ -83,24 +76,20 @@ def add(
8376 if len (self ._log_buffer ) >= self .MAX_LOGS_BEFORE_FLUSH :
8477 self ._flush_event .set ()
8578
86- def kill (self ):
87- # type: (...) -> None
79+ def kill (self ) -> None :
8880 if self ._flusher is None :
8981 return
9082
9183 self ._running = False
9284 self ._flush_event .set ()
9385 self ._flusher = None
9486
95- def flush (self ):
96- # type: (...) -> None
87+ def flush (self ) -> None :
9788 self ._flush ()
9889
9990 @staticmethod
100- def _log_to_transport_format (log ):
101- # type: (Log) -> Any
102- def format_attribute (val ):
103- # type: (int | float | str | bool) -> Any
91+ def _log_to_transport_format (log : Log ) -> Any :
92+ def format_attribute (val : int | float | str | bool ) -> Any :
10493 if isinstance (val , bool ):
10594 return {"value" : val , "type" : "boolean" }
10695 if isinstance (val , int ):
@@ -128,8 +117,7 @@ def format_attribute(val):
128117
129118 return res
130119
131- def _flush (self ):
132- # type: (...) -> Optional[Envelope]
120+ def _flush (self ) -> Optional [Envelope ]:
133121
134122 envelope = Envelope (
135123 headers = {"sent_at" : format_timestamp (datetime .now (timezone .utc ))}
0 commit comments