@@ -143,29 +143,31 @@ def process_request(self, request):
143143 request_model = RequestModelFactory (request ).construct_request_model ()
144144 DataCollector ().configure (request_model , should_profile = should_profile )
145145
146- @transaction .atomic (using = router .db_for_write (models .SQLQuery ))
147146 def _process_response (self , request , response ):
148- Logger .debug ('Process response' )
149- with silk_meta_profiler ():
150- collector = DataCollector ()
151- collector .stop_python_profiler ()
152- silk_request = collector .request
147+ # Use a context manager instead of a decorator so db_for_write is evaluated at runtime,
148+ # which is important for dynamic database configurations (e.g., multitenancy).
149+ with transaction .atomic (using = router .db_for_write (models .SQLQuery )):
150+ Logger .debug ('Process response' )
151+ with silk_meta_profiler ():
152+ collector = DataCollector ()
153+ collector .stop_python_profiler ()
154+ silk_request = collector .request
155+ if silk_request :
156+ ResponseModelFactory (response ).construct_response_model ()
157+ silk_request .end_time = timezone .now ()
158+ collector .finalise ()
159+ else :
160+ Logger .error (
161+ 'No request model was available when processing response. '
162+ 'Did something go wrong in process_request/process_view?'
163+ '\n ' + str (request ) + '\n \n ' + str (response )
164+ )
165+ # Need to save the data outside the silk_meta_profiler
166+ # Otherwise the meta time collected in the context manager
167+ # is not taken in account
153168 if silk_request :
154- ResponseModelFactory (response ).construct_response_model ()
155- silk_request .end_time = timezone .now ()
156- collector .finalise ()
157- else :
158- Logger .error (
159- 'No request model was available when processing response. '
160- 'Did something go wrong in process_request/process_view?'
161- '\n ' + str (request ) + '\n \n ' + str (response )
162- )
163- # Need to save the data outside the silk_meta_profiler
164- # Otherwise the meta time collected in the context manager
165- # is not taken in account
166- if silk_request :
167- silk_request .save ()
168- Logger .debug ('Process response done.' )
169+ silk_request .save ()
170+ Logger .debug ('Process response done.' )
169171
170172 def process_response (self , request , response ):
171173 max_attempts = 2
0 commit comments