@@ -41,7 +41,7 @@ def conn(*args, **kwargs):
4141 logger .warning ("ConnectionError exhausted retries" )
4242 raise e
4343 logger .warning (
44- "ConnectionError, retrying in {self.retry_after_conn }s"
44+ "ConnectionError, retrying in {}s" . format ( self . retry_after_conn )
4545 )
4646 sleep (retry_after_conn )
4747 continue
@@ -56,20 +56,20 @@ def _handle_maxlag(response):
5656 data = response .json ()
5757 try :
5858 if data ["error" ]["code" ] != "maxlag" :
59- return data
59+ return response
6060 except KeyError :
61- return data
61+ return response
6262
6363 retry_after = float (response .headers .get ("Retry-After" , 5 ))
6464 retry_on_lag_error = 50
6565 no_retry = 0 <= retry_on_lag_error < try_count
6666
6767 message = "Server exceeded maxlag"
6868 if not no_retry :
69- message += f ", retrying in { retry_after } s"
69+ message += ", retrying in {}s" . format ( retry_after )
7070 if "lag" in data ["error" ]:
71- message += f ", lag={ data [' error' ][ ' lag' ] } "
72- message += f ", API={ self .url } "
71+ message += ", lag={}" . format ( data [" error" ][ " lag" ])
72+ message += ", API=" . format ( self .url )
7373
7474 log = logger .warning if no_retry else logger .info
7575 log (
@@ -117,6 +117,7 @@ def __init__(
117117 self .email_token = None
118118 self .session = None
119119 self ._lock = RLock ()
120+ logger .info ("Email connection constructed." )
120121
121122 def open (self ):
122123 """
@@ -164,15 +165,26 @@ def open(self):
164165 raise Exception ("There was an error in the request for the login." )
165166
166167 # GET request to fetch Email token
168+ # see: https://www.mediawiki.org/wiki/API:Emailuser#Token
167169 email_token_params = {"action" : "query" , "meta" : "tokens" , "format" : "json" }
168170
169171 logger .info ("Getting email token..." )
170172 email_token_response = session .get (url = self .url , params = email_token_params )
173+ if email_token_response .status_code != 200 :
174+ raise Exception (
175+ "There was an error in the request for the email token."
176+ )
177+
171178 email_token_data = email_token_response .json ()
172179
180+ email_token = email_token_data ["query" ]["tokens" ]["csrftoken" ]
181+ if not email_token :
182+ raise Exception ("There was an error obtaining the email token." )
183+
173184 # Assign the session and email token
174- self .email_token = email_token_data [ "query" ][ "tokens" ][ "csrftoken" ]
185+ self .email_token = email_token
175186 self .session = session
187+ logger .info ("Email API session ready." )
176188 return True
177189 except :
178190 if not self .fail_silently :
@@ -232,10 +244,10 @@ def _send(self, email_message):
232244 emailable_response = self .session .post (
233245 url = self .url , data = emailable_params
234246 )
235- logger .info (emailable_response .text )
236247 emailable_data = emailable_response .json ()
237248 emailable = "emailable" in emailable_data ["query" ]["users" ][0 ]
238249 if not emailable :
250+ logger .warning ("User not emailable, email skipped." )
239251 continue
240252
241253 # POST request to send an email
@@ -250,12 +262,17 @@ def _send(self, email_message):
250262 }
251263
252264 logger .info ("Sending email..." )
253- emailuser_data = _handle_maxlag (
265+ emailuser_response = _handle_maxlag (
254266 self .session .post (url = self .url , data = email_params )
255267 )
256- logger .info (emailuser_data )
268+ if emailuser_response .status_code != 200 :
269+ raise Exception (
270+ "There was an error in the request to send the email."
271+ )
272+ emailuser_data = emailuser_response .json ()
257273 if emailuser_data ["emailuser" ]["result" ] != "Success" :
258274 raise Exception ("There was an error when trying to send the email." )
275+ logger .info ("Email sent." )
259276 except :
260277 if not self .fail_silently :
261278 raise
0 commit comments