@@ -40,6 +40,8 @@ class TelemetryEvent:
40
40
41
41
42
42
class IterativeTelemetryLogger :
43
+ # pylint: disable=R0902
44
+
43
45
def __init__ (
44
46
self ,
45
47
tool_name ,
@@ -60,6 +62,8 @@ def __init__(
60
62
logger .debug ("IterativeTelemetryLogger is in debug mode" )
61
63
self ._current_event : Optional [TelemetryEvent ] = None
62
64
65
+ self ._event_sent = False
66
+
63
67
def log_param (self , key : str , value ):
64
68
if self ._current_event :
65
69
self ._current_event .kwargs [key ] = value
@@ -79,8 +83,8 @@ def event_scope(
79
83
def log (
80
84
self ,
81
85
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 ,
84
88
):
85
89
def decorator (func ):
86
90
@wraps (func )
@@ -110,14 +114,16 @@ def inner(*args, **kwargs):
110
114
111
115
return decorator
112
116
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
+ ):
114
120
self .send_event ("cli" , cmd_name , error = error , ** kwargs )
115
121
116
122
def send_event (
117
123
self ,
118
124
interface : str ,
119
125
action : str ,
120
- error : str = None ,
126
+ error : Optional [ str ] = None ,
121
127
use_thread : bool = False ,
122
128
use_daemon : bool = True ,
123
129
** kwargs ,
@@ -133,6 +139,28 @@ def send_event(
133
139
use_daemon = use_daemon ,
134
140
)
135
141
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
+
136
164
def is_enabled (self ):
137
165
return (
138
166
os .environ .get (DO_NOT_TRACK_ENV , None ) is None and self .enabled ()
0 commit comments