@@ -40,6 +40,8 @@ class TelemetryEvent:
4040
4141
4242class IterativeTelemetryLogger :
43+ # pylint: disable=R0902
44+
4345 def __init__ (
4446 self ,
4547 tool_name ,
@@ -60,6 +62,8 @@ def __init__(
6062 logger .debug ("IterativeTelemetryLogger is in debug mode" )
6163 self ._current_event : Optional [TelemetryEvent ] = None
6264
65+ self ._event_sent = False
66+
6367 def log_param (self , key : str , value ):
6468 if self ._current_event :
6569 self ._current_event .kwargs [key ] = value
@@ -79,8 +83,8 @@ def event_scope(
7983 def log (
8084 self ,
8185 interface : str ,
82- action : str = None ,
83- skip : Union [bool , Callable [[TelemetryEvent ], bool ]] = None ,
86+ action : Optional [ str ] = None ,
87+ skip : Union [bool , Callable [[TelemetryEvent ], bool ], None ] = None ,
8488 ):
8589 def decorator (func ):
8690 @wraps (func )
@@ -110,14 +114,16 @@ def inner(*args, **kwargs):
110114
111115 return decorator
112116
113- def send_cli_call (self , cmd_name : str , error : str = None , ** kwargs ):
117+ def send_cli_call (
118+ self , cmd_name : str , error : Optional [str ] = None , ** kwargs
119+ ):
114120 self .send_event ("cli" , cmd_name , error = error , ** kwargs )
115121
116122 def send_event (
117123 self ,
118124 interface : str ,
119125 action : str ,
120- error : str = None ,
126+ error : Optional [ str ] = None ,
121127 use_thread : bool = False ,
122128 use_daemon : bool = True ,
123129 ** kwargs ,
@@ -133,6 +139,28 @@ def send_event(
133139 use_daemon = use_daemon ,
134140 )
135141
142+ def send_event_once (
143+ self ,
144+ interface : str ,
145+ action : str ,
146+ error : Optional [str ] = None ,
147+ use_thread : bool = False ,
148+ use_daemon : bool = True ,
149+ ** kwargs ,
150+ ):
151+ if self ._event_sent :
152+ return
153+
154+ self .send_event (
155+ interface ,
156+ action ,
157+ error = error ,
158+ use_thread = use_thread ,
159+ use_daemon = use_daemon ,
160+ ** kwargs ,
161+ )
162+ self ._event_sent = True
163+
136164 def is_enabled (self ):
137165 return (
138166 os .environ .get (DO_NOT_TRACK_ENV , None ) is None and self .enabled ()
0 commit comments