Xqt submitted this change.

View Change

Approvals: Xqt: Verified; Looks good to me, approved
[IMPR] move api.Request to api._requests.py file (part 2)

Change-Id: I922092660558c978de57a58ac759a2beaf77757c
---
R pywikibot/data/api/__init__.py
M pywikibot/data/api/_requests.py
2 files changed, 3 insertions(+), 87 deletions(-)

diff --git a/pywikibot/data/api/__init.py b/pywikibot/data/api/__init__.py
similarity index 100%
rename from pywikibot/data/api/__init.py
rename to pywikibot/data/api/__init__.py
diff --git a/pywikibot/data/api/_requests.py b/pywikibot/data/api/_requests.py
index c64d4ab..710eff5 100644
--- a/pywikibot/data/api/_requests.py
+++ b/pywikibot/data/api/_requests.py
@@ -13,10 +13,7 @@
import re
import traceback
from collections.abc import MutableMapping
-from email.generator import BytesGenerator
-from email.mime.multipart import MIMEMultipart as MIMEMultipartOrig
from email.mime.nonmultipart import MIMENonMultipart
-from io import BytesIO
from typing import Any, Optional, Union
from urllib.parse import unquote, urlencode
from warnings import warn
@@ -25,18 +22,6 @@
from pywikibot import config
from pywikibot.backports import Callable, Dict, Match, Tuple, removeprefix
from pywikibot.comms import http
-from pywikibot.data.api._generators import (
- APIGenerator,
- ListGenerator,
- LogEntryListGenerator,
- PageGenerator,
- PropertyGenerator,
- QueryGenerator,
- update_page,
-)
-from pywikibot.data.api._login import LoginManager
-from pywikibot.data.api._paraminfo import ParamInfo
-from pywikibot.data.api._optionset import OptionSet
from pywikibot.exceptions import (
Error,
FatalServerError,
@@ -47,86 +32,17 @@
SiteDefinitionError,
TimeoutError,
)
-from pywikibot.family import SubdomainFamily
from pywikibot.login import LoginStatus
from pywikibot.textlib import removeHTMLParts
from pywikibot.tools import PYTHON_VERSION

-__all__ = (
- 'APIGenerator',
- 'CachedRequest',
- 'ListGenerator',
- 'LogEntryListGenerator',
- 'LoginManager',
- 'OptionSet',
- 'PageGenerator',
- 'ParamInfo',
- 'PropertyGenerator',
- 'QueryGenerator',
- 'Request',
- 'encode_url',
- 'update_page',
-)
+__all__ = ('CachedRequest', 'Request', 'encode_url')


lagpattern = re.compile(
r'Waiting for [\w.: ]+: (?P<lag>\d+(?:\.\d+)?) seconds? lagged')


-def _invalidate_superior_cookies(family) -> None:
- """
- Clear cookies for site's second level domain.
-
- get_login_token() will generate new cookies needed.
- This is a workaround for requests bug, see :phab:`T224712`
- and https://github.com/psf/requests/issues/5411
- for more details.
- """
- if isinstance(family, SubdomainFamily):
- for cookie in http.cookie_jar:
- if family.domain == cookie.domain:
- http.cookie_jar.clear(cookie.domain, cookie.path, cookie.name)
-
-
-# Bug: T113120, T228841
-# Subclassing necessary to fix bug of the email package in Python 3:
-# see https://bugs.python.org/issue19003
-# see https://bugs.python.org/issue18886
-# The following solution might be removed if the bug is fixed for
-# Python versions which are supported by PWB, probably with Python 3.5
-
-class CTEBinaryBytesGenerator(BytesGenerator):
-
- """Workaround for bug in python 3 email handling of CTE binary."""
-
- def __init__(self, *args, **kwargs) -> None:
- """Initializer."""
- super().__init__(*args, **kwargs)
- self._writeBody = self._write_body
-
- def _write_body(self, msg) -> None:
- if msg['content-transfer-encoding'] == 'binary':
- self._fp.write(msg.get_payload(decode=True))
- else:
- super()._handle_text(msg)
-
-
-class CTEBinaryMIMEMultipart(MIMEMultipartOrig):
-
- """Workaround for bug in python 3 email handling of CTE binary."""
-
- def as_bytes(self, unixfrom: bool = False, policy=None):
- """Return unmodified binary payload."""
- policy = self.policy if policy is None else policy
- fp = BytesIO()
- g = CTEBinaryBytesGenerator(fp, mangle_from_=False, policy=policy)
- g.flatten(self, unixfrom=unixfrom)
- return fp.getvalue()
-
-
-MIMEMultipart = CTEBinaryMIMEMultipart
-
-
class Request(MutableMapping):

"""A request to a Site's api.php interface.
@@ -709,7 +625,7 @@
:return: HTTP request headers and body
"""
# construct a MIME message containing all API key/values
- container = MIMEMultipart(_subtype='form-data')
+ container = pywikibot.data.api.MIMEMultipart(_subtype='form-data')
for key, value in params.items():
submsg = cls._generate_mime_part(key, value)
container.attach(submsg)
@@ -1021,7 +937,7 @@
.format(self.site.user(),
'", "'.join(sorted(set(invalid_param.values())))))
# invalidate superior wiki cookies (T224712)
- _invalidate_superior_cookies(self.site.family)
+ pywikibot.data.api._invalidate_superior_cookies(self.site.family)
# request new token(s) instead of invalid
self.site.tokens.load_tokens(set(invalid_param.values()))
# fix parameters; lets hope that it doesn't mistake actual

To view, visit change 806499. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Change-Id: I922092660558c978de57a58ac759a2beaf77757c
Gerrit-Change-Number: 806499
Gerrit-PatchSet: 4
Gerrit-Owner: Xqt <info@gno.de>
Gerrit-Reviewer: Xqt <info@gno.de>
Gerrit-Reviewer: jenkins-bot
Gerrit-MessageType: merged