Xqt has submitted this change. (
https://gerrit.wikimedia.org/r/c/pywikibot/core/+/1200448?usp=email )
Change subject: cleanup: remove removeprefix and removesuffix from packports
......................................................................
cleanup: remove removeprefix and removesuffix from packports
use PEP 616 string methods introduced with Python 3.9 instead.
Bug: T401802
Change-Id: If19269a8ee914d9e825ec93ea2b13c81d63e107f
---
M pywikibot/__init__.py
M pywikibot/backports.py
M pywikibot/config.py
M pywikibot/data/api/_requests.py
M pywikibot/data/sparql.py
M pywikibot/family.py
M pywikibot/i18n.py
M pywikibot/pagegenerators/_factory.py
M pywikibot/site/_apisite.py
M pywikibot/site_detect.py
M pywikibot/userinterfaces/terminal_interface_base.py
M scripts/claimit.py
M scripts/delinker.py
M scripts/patrol.py
M scripts/reflinks.py
M scripts/weblinkchecker.py
M tests/__init__.py
M tests/aspects.py
18 files changed, 37 insertions(+), 96 deletions(-)
Approvals:
Xqt: Verified; Looks good to me, approved
diff --git a/pywikibot/__init__.py b/pywikibot/__init__.py
index 9b35fde..a69dfb8 100644
--- a/pywikibot/__init__.py
+++ b/pywikibot/__init__.py
@@ -30,7 +30,7 @@
WbTime,
WbUnknown,
)
-from pywikibot.backports import Callable, cache, removesuffix
+from pywikibot.backports import Callable, cache
from pywikibot.bot import (
Bot,
CurrentPageBot,
@@ -111,8 +111,7 @@
if not matched_sites:
if not name: # create a name from url
- name = urlparse(url).netloc.split('.')[-2]
- name = removesuffix(name, 'wiki')
+ name = urlparse(url).netloc.split('.')[-2].removesuffix('wiki')
family = AutoFamily(name, url)
matched_sites.append((family.code, family))
diff --git a/pywikibot/backports.py b/pywikibot/backports.py
index ca4d3c6..c15df77 100644
--- a/pywikibot/backports.py
+++ b/pywikibot/backports.py
@@ -81,47 +81,6 @@
else:
from collections.abc import Callable
-
-# PEP 616 string methods
-if PYTHON_VERSION < (3, 9) or SPHINX_RUNNING:
- def removeprefix(string: str, prefix: str) -> str: # skipcq: TYP-053
- """Remove prefix from a string or return a copy otherwise.
-
- >>> removeprefix('TestHook', 'Test')
- 'Hook'
- >>> removeprefix('BaseTestCase', 'Test')
- 'BaseTestCase'
-
- .. seealso:: :python:`str.removeprefix
- <library/stdtypes.html#str.removeprefix>`,
- backported from Python 3.9.
- .. versionadded:: 5.4
- """
- if string.startswith(prefix):
- return string[len(prefix):]
- return string
-
- def removesuffix(string: str, suffix: str) -> str: # skipcq: TYP-053
- """Remove suffix from a string or return a copy otherwise.
-
- >>> removesuffix('MiscTests', 'Tests')
- 'Misc'
- >>> removesuffix('TmpDirMixin', 'Tests')
- 'TmpDirMixin'
-
- .. seealso:: :python:`str.removesuffix
- <library/stdtypes.html#str.removesuffix>`,
- backported from Python 3.9.
- .. versionadded:: 5.4
- """
- if string.endswith(suffix):
- return string[:-len(suffix)]
- return string
-else:
- removeprefix = str.removeprefix # type: ignore[assignment]
- removesuffix = str.removesuffix # type: ignore[assignment]
-
-
if PYTHON_VERSION < (3, 10) or SPHINX_RUNNING:
from itertools import tee
diff --git a/pywikibot/config.py b/pywikibot/config.py
index ced631c..18ea53c 100644
--- a/pywikibot/config.py
+++ b/pywikibot/config.py
@@ -56,12 +56,7 @@
from zipfile import ZipFile, is_zipfile
from pywikibot.__metadata__ import __version__ as pwb_version
-from pywikibot.backports import (
- DefaultDict,
- Mapping,
- removeprefix,
- removesuffix,
-)
+from pywikibot.backports import DefaultDict, Mapping
from pywikibot.logging import error, info, warning
@@ -338,7 +333,7 @@
base_dir = ''
for arg in sys.argv[1:]:
if arg.startswith('-dir:'):
- base_dir = removeprefix(arg, '-dir:')
+ base_dir = arg.removeprefix('-dir:')
base_dir = os.path.expanduser(base_dir)
break
else:
@@ -440,7 +435,7 @@
if os.path.isdir(folder_path):
for file_name in os.listdir(folder_path):
if file_name.endswith(suffix):
- family_name = removesuffix(file_name, suffix)
+ family_name = file_name.removesuffix(suffix)
family_files[family_name] = os.path.join(folder_path,
file_name)
return
@@ -462,7 +457,7 @@
for file_name in zip_file.namelist():
if file_name.endswith(suffix):
file_path = Path(file_name)
- family_name = removesuffix(file_path.name, suffix)
+ family_name = file_path.name.removesuffix(suffix)
family_files[family_name] = os.path.join(folder_path,
file_path.name)
diff --git a/pywikibot/data/api/_requests.py b/pywikibot/data/api/_requests.py
index 5fd6e11..26ed60a 100644
--- a/pywikibot/data/api/_requests.py
+++ b/pywikibot/data/api/_requests.py
@@ -25,7 +25,7 @@
import pywikibot
from pywikibot import config
-from pywikibot.backports import Callable, Match, removeprefix
+from pywikibot.backports import Callable, Match
from pywikibot.comms import http
from pywikibot.data import WaitingMixin
from pywikibot.exceptions import (
@@ -945,7 +945,7 @@
return False
# T154011
- class_name = code if code == 'readonly' else removeprefix(code, iae)
+ class_name = code if code == 'readonly' else code.removeprefix(iae)
del error['code'] # is added via class_name
e = pywikibot.exceptions.APIMWError(class_name, **error)
diff --git a/pywikibot/data/sparql.py b/pywikibot/data/sparql.py
index ca5042d..ea06b32 100644
--- a/pywikibot/data/sparql.py
+++ b/pywikibot/data/sparql.py
@@ -14,7 +14,7 @@
from requests.exceptions import Timeout
from pywikibot import Site
-from pywikibot.backports import Dict, removeprefix
+from pywikibot.backports import Dict
from pywikibot.comms import http
from pywikibot.data import WaitingMixin
from pywikibot.exceptions import Error, NoUsernameError, ServerError
@@ -239,7 +239,8 @@
:return: ID of Wikibase object, e.g. Q1234
"""
if self.value.startswith(self.entity_url):
- return removeprefix(self.value, self.entity_url)
+ return self.value.removeprefix(self.entity_url)
+
return None
def __repr__(self) -> str:
diff --git a/pywikibot/family.py b/pywikibot/family.py
index 390e8b0..c3cdef6 100644
--- a/pywikibot/family.py
+++ b/pywikibot/family.py
@@ -22,7 +22,7 @@
import pywikibot
from pywikibot import config
-from pywikibot.backports import DefaultDict, Mapping, Sequence, removesuffix
+from pywikibot.backports import DefaultDict, Mapping, Sequence
from pywikibot.data import wikistats
from pywikibot.exceptions import FamilyMaintenanceWarning, UnknownFamilyError
from pywikibot.tools import classproperty, deprecated
@@ -1195,7 +1195,7 @@
def scriptpath(self, code):
"""Extract the script path from the URL."""
if self.url.path.endswith('/api.php'):
- return removesuffix(self.url.path, '/api.php')
+ return self.url.path.removesuffix('/api.php')
# AutoFamily refers to the variable set below, not the function
# but the reference must be given here
diff --git a/pywikibot/i18n.py b/pywikibot/i18n.py
index 62d5b27..d92f3b2 100644
--- a/pywikibot/i18n.py
+++ b/pywikibot/i18n.py
@@ -41,7 +41,6 @@
Match,
Sequence,
cache,
- removesuffix,
)
from pywikibot.plural import plural_rule
@@ -878,7 +877,7 @@
pathname = os.path.join(next(iter(mod.__path__)), package)
# build a list of languages in that directory
- langs = [removesuffix(filename, '.json')
+ langs = [filename.removesuffix('.json')
for filename in sorted(os.listdir(pathname))
if filename.endswith('.json')]
diff --git a/pywikibot/pagegenerators/_factory.py
b/pywikibot/pagegenerators/_factory.py
index ba4c648..3ba9460 100644
--- a/pywikibot/pagegenerators/_factory.py
+++ b/pywikibot/pagegenerators/_factory.py
@@ -16,7 +16,7 @@
import pywikibot
from pywikibot import i18n
-from pywikibot.backports import Callable, Iterable, Sequence, removeprefix
+from pywikibot.backports import Callable, Iterable, Sequence
from pywikibot.bot import ShowingListOption
from pywikibot.data import api
from pywikibot.exceptions import (
@@ -636,7 +636,7 @@
value = pywikibot.input('What namespace are you filtering on?')
not_key = 'not:'
if value.startswith(not_key):
- value = removeprefix(value, not_key)
+ value = value.removeprefix(not_key)
resolve = self.site.namespaces.resolve
not_ns = set(resolve(value.split(',')))
if not self._namespaces:
diff --git a/pywikibot/site/_apisite.py b/pywikibot/site/_apisite.py
index a796814..9c0f525 100644
--- a/pywikibot/site/_apisite.py
+++ b/pywikibot/site/_apisite.py
@@ -20,7 +20,6 @@
from pywikibot import login
from pywikibot.backports import DefaultDict, Iterable, Match
from pywikibot.backports import OrderedDict as OrderedDictType
-from pywikibot.backports import removesuffix
from pywikibot.comms import http
from pywikibot.data import api
from pywikibot.exceptions import (
@@ -228,7 +227,7 @@
if m_site['dbname'] == dbname:
# extract site from dbname
family = m_site['code']
- code = removesuffix(dbname, family).replace('_', '-')
+ code = dbname.removesuffix(family).replace('_', '-')
if family == 'wiki':
family = 'wikipedia'
return pywikibot.Site(code, family)
@@ -1772,7 +1771,7 @@
user_tokens = {}
if data.get('tokens'):
- user_tokens = {removesuffix(key, 'token'): val
+ user_tokens = {key.removesuffix('token'): val
for key, val in data['tokens'].items()
if val != '+\\'}
diff --git a/pywikibot/site_detect.py b/pywikibot/site_detect.py
index 95b6ddb..97f59d3 100644
--- a/pywikibot/site_detect.py
+++ b/pywikibot/site_detect.py
@@ -1,6 +1,6 @@
"""Classes for detecting a MediaWiki site."""
#
-# (C) Pywikibot team, 2010-2024
+# (C) Pywikibot team, 2010-2025
#
# Distributed under the terms of the MIT license.
#
@@ -17,7 +17,6 @@
from requests.exceptions import RequestException
import pywikibot
-from pywikibot.backports import removesuffix
from pywikibot.comms.http import fetch
from pywikibot.exceptions import ClientError, ServerError
from pywikibot.tools import MediaWikiVersion
@@ -42,7 +41,7 @@
:raises RuntimeError: Version not found or version less than
1.31
"""
- fromurl = removesuffix(fromurl, '$1')
+ fromurl = fromurl.removesuffix('$1')
r = fetch(fromurl, **kwargs)
check_response(r)
diff --git a/pywikibot/userinterfaces/terminal_interface_base.py
b/pywikibot/userinterfaces/terminal_interface_base.py
index 6c4c8e3..ba9d4c6 100644
--- a/pywikibot/userinterfaces/terminal_interface_base.py
+++ b/pywikibot/userinterfaces/terminal_interface_base.py
@@ -15,13 +15,7 @@
import pywikibot
from pywikibot import config
-from pywikibot.backports import (
- Iterable,
- RLock,
- Sequence,
- batched,
- removeprefix,
-)
+from pywikibot.backports import Iterable, RLock, Sequence, batched
from pywikibot.bot_choice import (
ChoiceException,
Option,
@@ -505,7 +499,7 @@
if force:
raise ValueError(
f'{default!r} is not a valid Option for '
- f'{removeprefix(output, question).lstrip()}')
+ f'{output.removeprefix(question).lstrip()}')
if isinstance(answer, ChoiceException):
raise answer
diff --git a/scripts/claimit.py b/scripts/claimit.py
index ebfe875..2ed502f 100755
--- a/scripts/claimit.py
+++ b/scripts/claimit.py
@@ -44,7 +44,7 @@
but 'p' must be included.
"""
#
-# (C) Pywikibot team, 2013-2024
+# (C) Pywikibot team, 2013-2025
#
# Distributed under the terms of the MIT license.
#
@@ -52,7 +52,7 @@
import pywikibot
from pywikibot import WikidataBot, pagegenerators
-from pywikibot.backports import batched, removeprefix
+from pywikibot.backports import batched
# This is required for the text that is shown when you run this script
@@ -114,7 +114,7 @@
for arg in local_args:
# Handle args specifying how to handle duplicate claims
if arg.startswith('-exists:'):
- exists_arg = removeprefix(arg, '-exists:')
+ exists_arg = arg.removeprefix('-exists:')
continue
# Handle page generator args
if gen.handle_arg(arg):
diff --git a/scripts/delinker.py b/scripts/delinker.py
index 73ae0f3..9357bee 100755
--- a/scripts/delinker.py
+++ b/scripts/delinker.py
@@ -36,7 +36,7 @@
*-category* option was added.
"""
#
-# (C) Pywikibot team, 2006-2024
+# (C) Pywikibot team, 2006-2025
#
# Distributed under the terms of the MIT license.
#
@@ -48,7 +48,6 @@
from difflib import get_close_matches
import pywikibot
-from pywikibot.backports import removeprefix
from pywikibot.bot import (
AutomaticTWSummaryBot,
ConfigParserBot,
@@ -232,7 +231,7 @@
local_args = pywikibot.handle_args()
for arg in local_args:
opt, _, value = arg.partition(':')
- opt = removeprefix(opt, '-')
+ opt = opt.removeprefix('-')
if opt == 'localonly':
options[opt] = True
elif opt == 'category':
diff --git a/scripts/patrol.py b/scripts/patrol.py
index 05f000a..1e76518 100755
--- a/scripts/patrol.py
+++ b/scripts/patrol.py
@@ -40,7 +40,7 @@
-usercontribs Filter generators above to the given user
"""
#
-# (C) Pywikibot team, 2011-2024
+# (C) Pywikibot team, 2011-2025
#
# Distributed under the terms of the MIT license.
#
@@ -54,7 +54,7 @@
import pywikibot
from pywikibot import pagegenerators
-from pywikibot.backports import Container, removeprefix
+from pywikibot.backports import Container
from pywikibot.bot import BaseBot, suggest_help
from pywikibot.site import Namespace
@@ -269,7 +269,7 @@
author_ns = self.site.family.authornamespaces[self.site.lang][0]
author_ns_prefix = self.site.namespace(author_ns) + ':'
- author_page_name = removeprefix(title, author_ns_prefix)
+ author_page_name = title.removeprefix(author_ns_prefix)
if title != author_page_name:
verbose_output('Found author ' + author_page_name)
return True
diff --git a/scripts/reflinks.py b/scripts/reflinks.py
index b851e79..4395f01 100755
--- a/scripts/reflinks.py
+++ b/scripts/reflinks.py
@@ -45,7 +45,7 @@
¶ms;
"""
-# (C) Pywikibot team, 2008-2024
+# (C) Pywikibot team, 2008-2025
#
# Distributed under the terms of the MIT license.
#
@@ -66,7 +66,6 @@
import pywikibot
from pywikibot import comms, config, i18n, pagegenerators, textlib
-from pywikibot.backports import removeprefix
from pywikibot.bot import ConfigParserBot, ExistingPageBot, SingleSiteBot
from pywikibot.comms.http import get_charset_from_content_type
from pywikibot.exceptions import ServerError
@@ -369,7 +368,7 @@
# Find used autogenerated numbers
used_numbers = set()
for name in found_ref_names:
- number = removeprefix(name, self.autogen)
+ number = name.removeprefix(self.autogen)
with suppress(ValueError):
used_numbers.add(int(number))
diff --git a/scripts/weblinkchecker.py b/scripts/weblinkchecker.py
index 4da1a67..1b8d2c8 100755
--- a/scripts/weblinkchecker.py
+++ b/scripts/weblinkchecker.py
@@ -122,7 +122,6 @@
import pywikibot
from pywikibot import comms, config, i18n, pagegenerators, textlib
-from pywikibot.backports import removeprefix
from pywikibot.bot import ExistingPageBot, SingleSiteBot, suggest_help
from pywikibot.exceptions import (
IsRedirectPageError,
@@ -568,7 +567,7 @@
# use hostname as thread.name
hostname = urlparse.urlparse(url).hostname
if hostname is not None:
- thread.name = removeprefix(hostname, 'www.')
+ thread.name = hostname.removeprefix('www.')
self.threads.append(thread)
def teardown(self) -> None:
diff --git a/tests/__init__.py b/tests/__init__.py
index dca5690..f223aed 100644
--- a/tests/__init__.py
+++ b/tests/__init__.py
@@ -30,7 +30,6 @@
import pywikibot.data.api
from pywikibot import config
-from pywikibot.backports import removesuffix
from pywikibot.data.api import CachedRequest
from pywikibot.data.api import Request as _original_Request
@@ -180,7 +179,7 @@
def _unknown_test_modules():
"""List tests which are to be executed."""
dir_list = os.listdir(join_tests_path())
- all_test_set = {removesuffix(name, '_tests.py') for name in dir_list
+ all_test_set = {name.removesuffix('_tests.py') for name in dir_list
if name.endswith('_tests.py')
and not name.startswith('_')} # skip __init__.py and _*
diff --git a/tests/aspects.py b/tests/aspects.py
index 34a6ea1..0f38749 100644
--- a/tests/aspects.py
+++ b/tests/aspects.py
@@ -27,7 +27,7 @@
import pywikibot
from pywikibot import Site, config
-from pywikibot.backports import Iterable, Iterator, removeprefix, removesuffix
+from pywikibot.backports import Iterable, Iterator
from pywikibot.comms import http
from pywikibot.data.api import Request as _original_Request
from pywikibot.exceptions import (
@@ -859,7 +859,7 @@
# sitedata['family'] may be an AutoFamily. Use str() for its name
sitename = str(sitedata['family']) + ':' + sitedata['code']
if func.__doc__:
- wrapped_method.__doc__ = removesuffix(func.__doc__, '.')
+ wrapped_method.__doc__ = func.__doc__.removesuffix('.')
wrapped_method.__doc__ += ' on ' + sitename
else:
wrapped_method.__doc__ = 'Test ' + sitename # pragma: no cover
@@ -1185,7 +1185,7 @@
return self._mainpage
maintitle = site.siteinfo['mainpage']
- maintitle = removeprefix(maintitle, 'Special:MyLanguage/') # T278702
+ maintitle = maintitle.removeprefix('Special:MyLanguage/') # T278702
mainpage = pywikibot.Page(site, maintitle)
if not isinstance(site, DrySite) and mainpage.isRedirectPage():
mainpage = mainpage.getRedirectTarget() # pragma: no cover
--
To view, visit
https://gerrit.wikimedia.org/r/c/pywikibot/core/+/1200448?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.wikimedia.org/r/settings?usp=email
Gerrit-MessageType: merged
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Change-Id: If19269a8ee914d9e825ec93ea2b13c81d63e107f
Gerrit-Change-Number: 1200448
Gerrit-PatchSet: 2
Gerrit-Owner: Xqt <[email protected]>
Gerrit-Reviewer: Xqt <[email protected]>
Gerrit-Reviewer: jenkins-bot
_______________________________________________
Pywikibot-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]