44import logging
55import time
66import webbrowser
7- from typing import Optional
7+ from typing import Any , Optional
88
99from mwoauth import ConsumerToken , Handshaker , OAuthException
1010from oauthlib .oauth2 import BackendApplicationClient , InvalidClientError
@@ -199,7 +199,7 @@ def continue_oauth(self, oauth_callback_data: Optional[str] = None) -> None:
199199
200200class Login (_Login ):
201201 @wbi_backoff ()
202- def __init__ (self , user : Optional [str ] = None , password : Optional [str ] = None , mediawiki_api_url : Optional [str ] = None , token_renew_period : int = 1800 , user_agent : Optional [str ] = None ):
202+ def __init__ (self , user : Optional [str ] = None , password : Optional [str ] = None , mediawiki_api_url : Optional [str ] = None , token_renew_period : int = 1800 , user_agent : Optional [str ] = None , ** kwargs : Any ):
203203 """
204204 This class is used to log in with a bot password
205205
@@ -208,6 +208,7 @@ def __init__(self, user: Optional[str] = None, password: Optional[str] = None, m
208208 :param mediawiki_api_url: The URL to the MediaWiki API (default Wikidata)
209209 :param token_renew_period: Seconds after which a new token should be requested from the Wikidata server
210210 :param user_agent: UA string to use for API requests.
211+ :param kwargs: Additional parameters to pass to the requests.sessions.Session.post method, such as headers or proxies.
211212 """
212213
213214 mediawiki_api_url = str (mediawiki_api_url or config ['MEDIAWIKI_API_URL' ])
@@ -225,9 +226,13 @@ def __init__(self, user: Optional[str] = None, password: Optional[str] = None, m
225226 'User-Agent' : get_user_agent (user_agent )
226227 }
227228
228- # get login token
229- login_token = session .post (mediawiki_api_url , data = params_login , headers = headers ).json ()['query' ]['tokens' ]['logintoken' ]
229+ allowed_kwargs = {'headers' , 'proxies' , 'timeout' , 'verify' }
230+ filtered_kwargs = {key : value for key , value in kwargs .items () if key in allowed_kwargs }
231+ if len (filtered_kwargs ) < len (kwargs ):
232+ log .warning ("Unsupported kwargs were ignored: %s" , set (kwargs ) - allowed_kwargs )
230233
234+ # get login token
235+ login_token = session .post (mediawiki_api_url , data = params_login , headers = headers , ** filtered_kwargs ).json ()['query' ]['tokens' ]['logintoken' ]
231236 params = {
232237 'action' : 'login' ,
233238 'lgname' : user ,
@@ -236,7 +241,7 @@ def __init__(self, user: Optional[str] = None, password: Optional[str] = None, m
236241 'format' : 'json'
237242 }
238243
239- login_result = session .post (mediawiki_api_url , data = params , headers = headers ).json ()
244+ login_result = session .post (mediawiki_api_url , data = params , headers = headers , ** filtered_kwargs ).json ()
240245
241246 if 'login' in login_result and login_result ['login' ]['result' ] == 'Success' :
242247 log .info ("Successfully logged in as %s" , login_result ['login' ]['lgusername' ])
@@ -253,7 +258,7 @@ def __init__(self, user: Optional[str] = None, password: Optional[str] = None, m
253258
254259class Clientlogin (_Login ):
255260 @wbi_backoff ()
256- def __init__ (self , user : Optional [str ] = None , password : Optional [str ] = None , mediawiki_api_url : Optional [str ] = None , token_renew_period : int = 1800 , user_agent : Optional [str ] = None ):
261+ def __init__ (self , user : Optional [str ] = None , password : Optional [str ] = None , mediawiki_api_url : Optional [str ] = None , token_renew_period : int = 1800 , user_agent : Optional [str ] = None , ** kwargs : Any ):
257262 """
258263 This class is used to log in with a user account
259264
@@ -262,6 +267,7 @@ def __init__(self, user: Optional[str] = None, password: Optional[str] = None, m
262267 :param mediawiki_api_url: The URL to the MediaWiki API (default Wikidata)
263268 :param token_renew_period: Seconds after which a new token should be requested from the Wikidata server
264269 :param user_agent: UA string to use for API requests.
270+ :param kwargs: Additional parameters to pass to the requests.sessions.Session.post method, such as headers or proxies.
265271 """
266272
267273 mediawiki_api_url = str (mediawiki_api_url or config ['MEDIAWIKI_API_URL' ])
@@ -279,8 +285,13 @@ def __init__(self, user: Optional[str] = None, password: Optional[str] = None, m
279285 'User-Agent' : get_user_agent (user_agent )
280286 }
281287
288+ allowed_kwargs = {'headers' , 'proxies' , 'timeout' , 'verify' }
289+ filtered_kwargs = {key : value for key , value in kwargs .items () if key in allowed_kwargs }
290+ if len (filtered_kwargs ) < len (kwargs ):
291+ log .warning ("Unsupported kwargs were ignored: %s" , set (kwargs ) - allowed_kwargs )
292+
282293 # get login token
283- login_token = session .post (mediawiki_api_url , data = params_login , headers = headers ).json ()['query' ]['tokens' ]['logintoken' ]
294+ login_token = session .post (mediawiki_api_url , data = params_login , headers = headers , ** filtered_kwargs ).json ()['query' ]['tokens' ]['logintoken' ]
284295
285296 params = {
286297 'action' : 'clientlogin' ,
@@ -291,7 +302,7 @@ def __init__(self, user: Optional[str] = None, password: Optional[str] = None, m
291302 'format' : 'json'
292303 }
293304
294- login_result = session .post (mediawiki_api_url , data = params , headers = headers ).json ()
305+ login_result = session .post (mediawiki_api_url , data = params , headers = headers , ** filtered_kwargs ).json ()
295306
296307 log .debug (login_result )
297308
0 commit comments