|
12 | 12 | from pathlib import Path |
13 | 13 | from pprint import pprint |
14 | 14 | from time import sleep |
15 | | -from typing import Dict, List, Optional, Union |
| 15 | +from typing import Any, Dict, List, Optional, Union |
16 | 16 |
|
17 | 17 | import mwclient |
18 | 18 | from jsonpath_ng.ext import parse |
@@ -57,6 +57,9 @@ class WtSiteConfig(OswBaseModel): |
57 | 57 | login: Optional[str] |
58 | 58 | """The preferred login name when multiple logins are possible (not supported |
59 | 59 | yet)""" |
| 60 | + connection_options: Optional[Dict[str, Any]] = None |
| 61 | + """Parameters for the mwclient.Site connection: Additional arguments to be |
| 62 | + passed to the requests.Session.request() method when performing API calls.""" |
60 | 63 |
|
61 | 64 | @deprecated("Use WtSiteConfig instead") |
62 | 65 | class WtSiteLegacyConfig(OswBaseModel): |
@@ -91,19 +94,27 @@ def __init__(self, config=Union[WtSiteConfig, WtSiteLegacyConfig]): |
91 | 94 | if "//" in config.iri: |
92 | 95 | scheme = config.iri.split("://")[0] |
93 | 96 | config.iri = config.iri.split("://")[1] |
| 97 | + site_args = [config.iri] |
| 98 | + site_kwargs = { |
| 99 | + "path": "/w/", |
| 100 | + "scheme": scheme, |
| 101 | + } |
| 102 | + if getattr(config, "connection_options") is not None: |
| 103 | + site_kwargs["reqs"] = config.connection_options |
| 104 | + # reqs might be a deprecated alias for "connection_options" |
94 | 105 | if isinstance(cred, CredentialManager.UserPwdCredential): |
95 | | - self._site = mwclient.Site(config.iri, path="/w/", scheme=scheme) |
| 106 | + self._site = mwclient.Site(*site_args, **site_kwargs) |
96 | 107 | self._site.login(username=cred.username, password=cred.password) |
97 | 108 | elif isinstance(cred, CredentialManager.OAuth1Credential): |
98 | | - self._site = mwclient.Site( |
99 | | - config.iri, |
100 | | - path="/w/", |
101 | | - scheme=scheme, |
102 | | - consumer_token=cred.consumer_token, |
103 | | - consumer_secret=cred.consumer_secret, |
104 | | - access_token=cred.access_token, |
105 | | - access_secret=cred.access_secret, |
| 109 | + site_kwargs.update( |
| 110 | + **{ |
| 111 | + "consumer_token": cred.consumer_token, |
| 112 | + "consumer_secret": cred.consumer_secret, |
| 113 | + "access_token": cred.access_token, |
| 114 | + "access_secret": cred.access_secret, |
| 115 | + } |
106 | 116 | ) |
| 117 | + self._site = mwclient.Site(*site_args, **site_kwargs) |
107 | 118 | else: |
108 | 119 | raise ValueError("Unsupported credential type: " + str(type(cred))) |
109 | 120 | del cred |
|
0 commit comments