1
+ from __future__ import annotations
1
2
import sys
2
3
import weakref
3
4
from inspect import isawaitable
@@ -59,8 +60,9 @@ class SanicIntegration(Integration):
59
60
origin = f"auto.http.{ identifier } "
60
61
version = None
61
62
62
- def __init__ (self , unsampled_statuses = frozenset ({404 })):
63
- # type: (Optional[Container[int]]) -> None
63
+ def __init__ (
64
+ self , unsampled_statuses : Optional [Container [int ]] = frozenset ({404 })
65
+ ) -> None :
64
66
"""
65
67
The unsampled_statuses parameter can be used to specify for which HTTP statuses the
66
68
transactions should not be sent to Sentry. By default, transactions are sent for all
@@ -70,8 +72,7 @@ def __init__(self, unsampled_statuses=frozenset({404})):
70
72
self ._unsampled_statuses = unsampled_statuses or set ()
71
73
72
74
@staticmethod
73
- def setup_once ():
74
- # type: () -> None
75
+ def setup_once () -> None :
75
76
SanicIntegration .version = parse_version (SANIC_VERSION )
76
77
_check_minimum_version (SanicIntegration , SanicIntegration .version )
77
78
@@ -103,56 +104,45 @@ def setup_once():
103
104
104
105
105
106
class SanicRequestExtractor (RequestExtractor ):
106
- def content_length (self ):
107
- # type: () -> int
107
+ def content_length (self ) -> int :
108
108
if self .request .body is None :
109
109
return 0
110
110
return len (self .request .body )
111
111
112
- def cookies (self ):
113
- # type: () -> Dict[str, str]
112
+ def cookies (self ) -> Dict [str , str ]:
114
113
return dict (self .request .cookies )
115
114
116
- def raw_data (self ):
117
- # type: () -> bytes
115
+ def raw_data (self ) -> bytes :
118
116
return self .request .body
119
117
120
- def form (self ):
121
- # type: () -> RequestParameters
118
+ def form (self ) -> RequestParameters :
122
119
return self .request .form
123
120
124
- def is_json (self ):
125
- # type: () -> bool
121
+ def is_json (self ) -> bool :
126
122
raise NotImplementedError ()
127
123
128
- def json (self ):
129
- # type: () -> Optional[Any]
124
+ def json (self ) -> Optional [Any ]:
130
125
return self .request .json
131
126
132
- def files (self ):
133
- # type: () -> RequestParameters
127
+ def files (self ) -> RequestParameters :
134
128
return self .request .files
135
129
136
- def size_of_file (self , file ):
137
- # type: (Any) -> int
130
+ def size_of_file (self , file : Any ) -> int :
138
131
return len (file .body or ())
139
132
140
133
141
- def _setup_sanic ():
142
- # type: () -> None
134
+ def _setup_sanic () -> None :
143
135
Sanic ._startup = _startup
144
136
ErrorHandler .lookup = _sentry_error_handler_lookup
145
137
146
138
147
- def _setup_legacy_sanic ():
148
- # type: () -> None
139
+ def _setup_legacy_sanic () -> None :
149
140
Sanic .handle_request = _legacy_handle_request
150
141
Router .get = _legacy_router_get
151
142
ErrorHandler .lookup = _sentry_error_handler_lookup
152
143
153
144
154
- async def _startup (self ):
155
- # type: (Sanic) -> None
145
+ async def _startup (self : Sanic ) -> None :
156
146
# This happens about as early in the lifecycle as possible, just after the
157
147
# Request object is created. The body has not yet been consumed.
158
148
self .signal ("http.lifecycle.request" )(_context_enter )
@@ -171,8 +161,7 @@ async def _startup(self):
171
161
await old_startup (self )
172
162
173
163
174
- async def _context_enter (request ):
175
- # type: (Request) -> None
164
+ async def _context_enter (request : Request ) -> None :
176
165
request .ctx ._sentry_do_integration = (
177
166
sentry_sdk .get_client ().get_integration (SanicIntegration ) is not None
178
167
)
@@ -203,8 +192,9 @@ async def _context_enter(request):
203
192
).__enter__ ()
204
193
205
194
206
- async def _context_exit (request , response = None ):
207
- # type: (Request, Optional[BaseHTTPResponse]) -> None
195
+ async def _context_exit (
196
+ request : Request , response : Optional [BaseHTTPResponse ] = None
197
+ ) -> None :
208
198
with capture_internal_exceptions ():
209
199
if not request .ctx ._sentry_do_integration :
210
200
return
@@ -233,17 +223,17 @@ async def _context_exit(request, response=None):
233
223
request .ctx ._sentry_scope_manager .__exit__ (None , None , None )
234
224
235
225
236
- async def _set_transaction (request , route , ** _ ):
237
- # type: (Request, Route, **Any) -> None
226
+ async def _set_transaction (request : Request , route : Route , ** _ : Any ) -> None :
238
227
if request .ctx ._sentry_do_integration :
239
228
with capture_internal_exceptions ():
240
229
scope = sentry_sdk .get_current_scope ()
241
230
route_name = route .name .replace (request .app .name , "" ).strip ("." )
242
231
scope .set_transaction_name (route_name , source = TransactionSource .COMPONENT )
243
232
244
233
245
- def _sentry_error_handler_lookup (self , exception , * args , ** kwargs ):
246
- # type: (Any, Exception, *Any, **Any) -> Optional[object]
234
+ def _sentry_error_handler_lookup (
235
+ self : Any , exception : Exception , * args : Any , ** kwargs : Any
236
+ ) -> Optional [object ]:
247
237
_capture_exception (exception )
248
238
old_error_handler = old_error_handler_lookup (self , exception , * args , ** kwargs )
249
239
@@ -253,8 +243,9 @@ def _sentry_error_handler_lookup(self, exception, *args, **kwargs):
253
243
if sentry_sdk .get_client ().get_integration (SanicIntegration ) is None :
254
244
return old_error_handler
255
245
256
- async def sentry_wrapped_error_handler (request , exception ):
257
- # type: (Request, Exception) -> Any
246
+ async def sentry_wrapped_error_handler (
247
+ request : Request , exception : Exception
248
+ ) -> Any :
258
249
try :
259
250
response = old_error_handler (request , exception )
260
251
if isawaitable (response ):
@@ -276,8 +267,9 @@ async def sentry_wrapped_error_handler(request, exception):
276
267
return sentry_wrapped_error_handler
277
268
278
269
279
- async def _legacy_handle_request (self , request , * args , ** kwargs ):
280
- # type: (Any, Request, *Any, **Any) -> Any
270
+ async def _legacy_handle_request (
271
+ self : Any , request : Request , * args : Any , ** kwargs : Any
272
+ ) -> Any :
281
273
if sentry_sdk .get_client ().get_integration (SanicIntegration ) is None :
282
274
return await old_handle_request (self , request , * args , ** kwargs )
283
275
@@ -294,8 +286,7 @@ async def _legacy_handle_request(self, request, *args, **kwargs):
294
286
return response
295
287
296
288
297
- def _legacy_router_get (self , * args ):
298
- # type: (Any, Union[Any, Request]) -> Any
289
+ def _legacy_router_get (self : Any , * args : Union [Any , Request ]) -> Any :
299
290
rv = old_router_get (self , * args )
300
291
if sentry_sdk .get_client ().get_integration (SanicIntegration ) is not None :
301
292
with capture_internal_exceptions ():
@@ -325,8 +316,7 @@ def _legacy_router_get(self, *args):
325
316
326
317
327
318
@ensure_integration_enabled (SanicIntegration )
328
- def _capture_exception (exception ):
329
- # type: (Union[ExcInfo, BaseException]) -> None
319
+ def _capture_exception (exception : Union [ExcInfo , BaseException ]) -> None :
330
320
with capture_internal_exceptions ():
331
321
event , hint = event_from_exception (
332
322
exception ,
@@ -340,10 +330,8 @@ def _capture_exception(exception):
340
330
sentry_sdk .capture_event (event , hint = hint )
341
331
342
332
343
- def _make_request_processor (weak_request ):
344
- # type: (Callable[[], Request]) -> EventProcessor
345
- def sanic_processor (event , hint ):
346
- # type: (Event, Optional[Hint]) -> Optional[Event]
333
+ def _make_request_processor (weak_request : Callable [[], Request ]) -> EventProcessor :
334
+ def sanic_processor (event : Event , hint : Optional [Hint ]) -> Optional [Event ]:
347
335
348
336
try :
349
337
if hint and issubclass (hint ["exc_info" ][0 ], SanicException ):
0 commit comments