jenkins-bot has submitted this change. (
https://gerrit.wikimedia.org/r/c/pywikibot/core/+/1345968?usp=email )
Change subject: release: Prepare next release 11.9.0
......................................................................
release: Prepare next release 11.9.0
Change-Id: I7d29eec1242ff9e91b877b113140d9930ab642bb
---
M .github/workflows/doctest.yml
M .github/workflows/graalpy_tests.yml
M .github/workflows/login_tests-ci.yml
M .github/workflows/oauth_tests-ci.yml
M .github/workflows/pre-commit.yml
M .github/workflows/pywikibot-ci.yml
M .github/workflows/sysop_write_tests-ci.yml
M .github/workflows/windows_tests.yml
M .pre-commit-config.yaml
M HISTORY.rst
M ROADMAP.rst
M dev-requirements.txt
M pywikibot/__metadata__.py
M scripts/__init__.py
M scripts/commonscat.py
M scripts/pyproject.toml
16 files changed, 105 insertions(+), 97 deletions(-)
Approvals:
jenkins-bot: Verified
Xqt: Looks good to me, approved
diff --git a/.github/workflows/doctest.yml b/.github/workflows/doctest.yml
index e5b3104..e15a12d 100644
--- a/.github/workflows/doctest.yml
+++ b/.github/workflows/doctest.yml
@@ -20,7 +20,7 @@
jobs:
build:
runs-on: ${{ matrix.os || 'ubuntu-latest' }}
- timeout-minutes: 12
+ timeout-minutes: 16
strategy:
fail-fast: false
matrix:
diff --git a/.github/workflows/graalpy_tests.yml
b/.github/workflows/graalpy_tests.yml
index 30eeba5..412b628 100644
--- a/.github/workflows/graalpy_tests.yml
+++ b/.github/workflows/graalpy_tests.yml
@@ -21,7 +21,7 @@
build:
runs-on: ${{ matrix.os || 'ubuntu-latest' }}
continue-on-error: ${{ matrix.experimental || false }}
- timeout-minutes: 55
+ timeout-minutes: 40
strategy:
fail-fast: false
matrix:
diff --git a/.github/workflows/login_tests-ci.yml
b/.github/workflows/login_tests-ci.yml
index fc21905..1f14029 100644
--- a/.github/workflows/login_tests-ci.yml
+++ b/.github/workflows/login_tests-ci.yml
@@ -39,7 +39,7 @@
name: Run Login/Logout Tests
runs-on: ${{ matrix.os || 'ubuntu-latest' }}
needs: wait_for_all
- timeout-minutes: 40
+ timeout-minutes: 45
strategy:
fail-fast: false
max-parallel: 1
diff --git a/.github/workflows/oauth_tests-ci.yml
b/.github/workflows/oauth_tests-ci.yml
index 76671e0..aa14b95 100644
--- a/.github/workflows/oauth_tests-ci.yml
+++ b/.github/workflows/oauth_tests-ci.yml
@@ -21,7 +21,7 @@
build:
runs-on: ${{ matrix.os || 'ubuntu-latest' }}
continue-on-error: ${{ matrix.experimental || false }}
- timeout-minutes: 7
+ timeout-minutes: 6
strategy:
fail-fast: false
matrix:
diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml
index 8ba3c80..96a423a 100644
--- a/.github/workflows/pre-commit.yml
+++ b/.github/workflows/pre-commit.yml
@@ -20,7 +20,7 @@
pre-commit:
runs-on: ${{ matrix.os || 'ubuntu-latest' }}
continue-on-error: ${{ matrix.experimental || false }}
- timeout-minutes: 7
+ timeout-minutes: 8
strategy:
fail-fast: false
matrix:
diff --git a/.github/workflows/pywikibot-ci.yml
b/.github/workflows/pywikibot-ci.yml
index e2fc925..1bc3e97 100644
--- a/.github/workflows/pywikibot-ci.yml
+++ b/.github/workflows/pywikibot-ci.yml
@@ -23,7 +23,7 @@
build:
runs-on: ${{ matrix.os || 'ubuntu-latest' }}
continue-on-error: ${{ matrix.experimental || false }}
- timeout-minutes: 65
+ timeout-minutes: 55
strategy:
fail-fast: false
matrix:
diff --git a/.github/workflows/sysop_write_tests-ci.yml
b/.github/workflows/sysop_write_tests-ci.yml
index fa421c5..2e0c85f 100644
--- a/.github/workflows/sysop_write_tests-ci.yml
+++ b/.github/workflows/sysop_write_tests-ci.yml
@@ -21,7 +21,7 @@
build:
runs-on: ubuntu-latest
continue-on-error: ${{ matrix.experimental || false }}
- timeout-minutes: 20
+ timeout-minutes: 25
strategy:
fail-fast: false
matrix:
diff --git a/.github/workflows/windows_tests.yml
b/.github/workflows/windows_tests.yml
index 859eda3..8877b83 100644
--- a/.github/workflows/windows_tests.yml
+++ b/.github/workflows/windows_tests.yml
@@ -21,7 +21,7 @@
build:
runs-on: windows-latest
continue-on-error: ${{ matrix.experimental || false }}
- timeout-minutes: 60
+ timeout-minutes: 55
strategy:
fail-fast: false
matrix:
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 3626540..23999e1 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -64,7 +64,7 @@
hooks:
- id: yamlfix
- repo: https://github.com/astral-sh/ruff-pre-commit
- rev: v0.16.4
+ rev: v0.16.9
hooks:
- id: ruff-check
alias: ruff
@@ -75,7 +75,7 @@
- id: pyupgrade
args: [--py39-plus]
- repo: https://github.com/PyCQA/autoflake
- rev: v2.3.3
+ rev: v2.4.0
hooks:
- id: autoflake
args:
@@ -86,7 +86,7 @@
- --remove-unused-variables
exclude: ^pywikibot/backports\.py$
- repo: https://github.com/PyCQA/isort
- rev: 9.0.0b5
+ rev: 9.0.2
hooks:
- id: isort
name: isort
@@ -101,7 +101,7 @@
- id: docsig
exclude: ^(tests|scripts)
- repo: https://github.com/PyCQA/flake8
- rev: 7.3.0
+ rev: 7.4.1
hooks:
- id: flake8
args:
diff --git a/HISTORY.rst b/HISTORY.rst
index fcd35a7..7f576f7 100644
--- a/HISTORY.rst
+++ b/HISTORY.rst
@@ -1,6 +1,90 @@
Release History
===============
+11.8.0
+------
+
+*29 September 2026*
+
+* Various performance, stability, and code quality improvements.
+* Raise ServerError instead of AssertionError for invalid
:meth:`APISite.userinfo()
+ <pywikibot.site._apisite.APISite.userinfo>` API response. (:phab:`T423061`)
+* Load only current revision ID with :attr:`page.BasePage.latest_revision_id`.
+* Return non-option defaults with :func:`bot.input_list_choice`.
(:phab:`T305937`)
+* Add
:meth:`APISite.geosearch()<pywikibot.site._extensions.GeoDataMixin.geosearch>`
+ method. (:phab:`T438772`)
+* Preserve labels with different prefixes in :func:`textlib.replace_links`.
(:phab:`T396719`)
+* Resolve :func:`i18n.bundles` paths from package.
+* Add :meth:`pywikibot.User.is_globally_blocked` and
:meth:`APISite.is_globally_blocked()
+ <pywikibot.site._extensions.GlobalBlockingMixin.is_globally_blocked>` to
support
+ :ext:`GlobalBlocking extension<GlobalBlocking/API#list=globalblocks_(bg)>`.
(:phab:`T394628`)
+* Initialize the wrapped generator once per lifecycle with
+ :class:`tools.collections.GeneratorWrapper`.
+* Use ``functools.cache`` for :func:`date.escapePattern2`.
+* Avoid mutating request inputs in :func:`comms.http.fetch`.
+* Buffer :class:`textlib.GetDataHTML` output in
:attr:`textlib.GetDataHTML.textdata`.
+* Short-circuit intersection cache checks in
:func:`tools.itertools.intersect_generators`.
+* Add :ext:`PageViewInfo` extension support with
:meth:`page.BasePage.pageviews`
+ and
:class:`site.PageViewInfoMixin<pywikibot.site._extensions.PageViewInfoMixin>`.
+ (:phab:`T325473`)
+* Use plain dictionaries for Wikibase :class:`pywikibot.Claim` mappings.
+* Add :attr:`page.BasePage.flagged_state` and :meth:`APSite.flagged_state()
+ <pywikibot.site._extensions.FlaggedRevsMixin.flagged_state>` site method
+ for :ext:`FlaggedRevs` info. (:phab:`T410893`)
+* Disable ``maxlag`` for meta queries, paraminfo and help. (:phab:`T421642`)
+* Added Ukrainian Vikidia and updated testing subdomains for that family.
+* Correctly propagate reference group hashes after
+ :meth:`page.WikibaseEntity.editEntity`. (:phab:`T367324`)
+* Prevent recursive logging :func:`handler initialization<bot.init_handlers>`.
(:phab:`T436130`)
+* Avoid duplicate revision updates and avoid constructing cached file revisions
+ again in :class:`FilePage<page.FilePage>`.
+* Stop pre-encoding API titles because :class:`data.api.Request` normalizes
+ byte parameters back to strings before serialization.
+* Isolate cached tables by server URL in :mod:`data.wikistats` module.
+* Exceptions from the :meth:`tools.threading.ThreadedGenerator.run` producer
+ are re-raised during iteration after yielding any queued results.
+* Release bounded capacity in
:meth:`tools.threading.BoundedPoolExecutor.submit`
+ when submission fails with any Exception.
+* Avoid duplicate key evaluation in :func:`tools.itertools.filter_unique`.
+* Replace :func:`tools.strtobool` value checks with constant mapping.
+* Avoid unnecessary request if *total* is 0 in
:meth:`Category.articles()<page.Category.articles>`.
+* Reject invalid :class:`tools.threading.ThreadList` limits.
+* Public *reason* and *comment* parameters used for page-action and upload
+ summaries were renamed to *summary*. The old parameter names remain
+ available as deprecated aliases. (:phab:`T62442`)
+* Cache valid site codes in :func:`titletranslate.translate`.
+* Normalize family aliases in :meth:`data.wikistats.WikiStats.get` before
cache lookup.
+* Preserve Windows commands without a file placeholder in
:class:`editor.TextEditor`.
+* Preserve existing endpoint query parameters in
:meth:`data.sparql.SparqlQuery.query`.
+* Reset the retry counter for each query in :class:`data.sparql.SparqlQuery`.
+* Deduplicate intersections with a single input in
:func:`tools.itertools.intersect_generators`.
+* Accept path-like filenames and detect suffixes case-insensitively in
:func:`tools.open_archive`.
+* Add support for all existing Beta Cluster wikis. (:phab:`T225892`)
+* Support selective page preloading of :meth:`APISite.preloadpages
+ <pywikibot.site._generators.GeneratorsMixin.preloadpages>` with
+ :func:`pagegenerators.PreloadingGenerator` and
:func:`pagegenerators.DequePreloadingGenerator`.
+* Apply title filters first in
:meth:`pagegenerators.GeneratorFactory.getCombinedGenerator`
+ and avoid loading page data for titles rejected by title filters.
+* Support immutable sequences in :func:`data.api.encode_url`.
+* Clear bundle cache when switching packages with
:func:`i18n.set_messages_package`.
+* Use pathlib for path containment in :func:`config.shortpath` and
+ :func:`version.get_module_filename`.
+* Add *depth* parameter to :func:`pagegenerators.PetScanPageGenerator`.
+* The :class:`specialbots.UploadRobot` class now cleans up temporary download
files
+ after upload completion or failure, while preserving caller-provided local
files.
+* Fix
:meth:`APISite.loadrevisions<pywikibot.site._generators.GeneratorsMixin.loadrevisions>`
+ *step* handling.
+* Keep preload *groupsize* per site in
:func:`pagegenerators.PreloadingGenerator`.
+* Preserve colliding intersection items without ``hash()`` in
+ :func:`tools.itertools.intersect_generators`.
+* :meth:`page.BasePage.get` no longer validates section fragments or raises
+ :exc:`exceptions.SectionError` for them, as the method always retrieves the
complete
+ page text (:phab:`T422856`, :phab:`T422859`).
+* Update translations (i18n).
+* Add new :class:`family.WikimediaSubdomainFamily`.
+* Update documentation for :meth:`page.BasePage.exists`. (:phab:`T334341`)
+
+
11.7.0
------
*22 August 2026*
diff --git a/ROADMAP.rst b/ROADMAP.rst
index 012e334..0a674f2 100644
--- a/ROADMAP.rst
+++ b/ROADMAP.rst
@@ -1,83 +1,7 @@
-Release 11.8
+Release 11.9
============
-* Various performance, stability, and code quality improvements.
-* Raise ServerError instead of AssertionError for invalid
:meth:`APISite.userinfo()
- <pywikibot.site._apisite.APISite.userinfo>` API response. (:phab:`T423061`)
-* Load only current revision ID with :attr:`page.BasePage.latest_revision_id`.
-* Return non-option defaults with :func:`bot.input_list_choice`.
(:phab:`T305937`)
-* Add
:meth:`APISite.geosearch()<pywikibot.site._extensions.GeoDataMixin.geosearch>`
- method. (:phab:`T438772`)
-* Preserve labels with different prefixes in :func:`textlib.replace_links`.
(:phab:`T396719`)
-* Resolve :func:`i18n.bundles` paths from package.
-* Add :meth:`pywikibot.User.is_globally_blocked` and
:meth:`APISite.is_globally_blocked()
- <pywikibot.site._extensions.GlobalBlockingMixin.is_globally_blocked>` to
support
- :ext:`GlobalBlocking extension<GlobalBlocking/API#list=globalblocks_(bg)>`.
(:phab:`T394628`)
-* Initialize the wrapped generator once per lifecycle with
- :class:`tools.collections.GeneratorWrapper`.
-* Use ``functools.cache`` for :func:`date.escapePattern2`.
-* Avoid mutating request inputs in :func:`comms.http.fetch`.
-* Buffer :class:`textlib.GetDataHTML` output in
:attr:`textlib.GetDataHTML.textdata`.
-* Short-circuit intersection cache checks in
:func:`tools.itertools.intersect_generators`.
-* Add :ext:`PageViewInfo` extension support with
:meth:`page.BasePage.pageviews`
- and
:class:`site.PageViewInfoMixin<pywikibot.site._extensions.PageViewInfoMixin>`.
- (:phab:`T325473`)
-* Use plain dictionaries for Wikibase :class:`pywikibot.Claim` mappings.
-* Add :attr:`page.BasePage.flagged_state` and :meth:`APSite.flagged_state()
- <pywikibot.site._extensions.FlaggedRevsMixin.flagged_state>` site method
- for :ext:`FlaggedRevs` info. (:phab:`T410893`)
-* Disable ``maxlag`` for meta queries, paraminfo and help. (:phab:`T421642`)
-* Added Ukrainian Vikidia and updated testing subdomains for that family.
-* Correctly propagate reference group hashes after
- :meth:`page.WikibaseEntity.editEntity`. (:phab:`T367324`)
-* Prevent recursive logging :func:`handler initialization<bot.init_handlers>`.
(:phab:`T436130`)
-* Avoid duplicate revision updates and avoid constructing cached file revisions
- again in :class:`FilePage<page.FilePage>`.
-* Stop pre-encoding API titles because :class:`data.api.Request` normalizes
- byte parameters back to strings before serialization.
-* Isolate cached tables by server URL in :mod:`data.wikistats` module.
-* Exceptions from the :meth:`tools.threading.ThreadedGenerator.run` producer
- are re-raised during iteration after yielding any queued results.
-* Release bounded capacity in
:meth:`tools.threading.BoundedPoolExecutor.submit`
- when submission fails with any Exception.
-* Avoid duplicate key evaluation in :func:`tools.itertools.filter_unique`.
-* Replace :func:`tools.strtobool` value checks with constant mapping.
-* Avoid unnecessary request if *total* is 0 in
:meth:`Category.articles()<page.Category.articles>`.
-* Reject invalid :class:`tools.threading.ThreadList` limits.
-* Public *reason* and *comment* parameters used for page-action and upload
- summaries were renamed to *summary*. The old parameter names remain
- available as deprecated aliases. (:phab:`T62442`)
-* Cache valid site codes in :func:`titletranslate.translate`.
-* Normalize family aliases in :meth:`data.wikistats.WikiStats.get` before
cache lookup.
-* Preserve Windows commands without a file placeholder in
:class:`editor.TextEditor`.
-* Preserve existing endpoint query parameters in
:meth:`data.sparql.SparqlQuery.query`.
-* Reset the retry counter for each query in :class:`data.sparql.SparqlQuery`.
-* Deduplicate intersections with a single input in
:func:`tools.itertools.intersect_generators`.
-* Accept path-like filenames and detect suffixes case-insensitively in
:func:`tools.open_archive`.
-* Add support for all existing Beta Cluster wikis. (:phab:`T225892`)
-* Support selective page preloading of :meth:`APISite.preloadpages
- <pywikibot.site._generators.GeneratorsMixin.preloadpages>` with
- :func:`pagegenerators.PreloadingGenerator` and
:func:`pagegenerators.DequePreloadingGenerator`.
-* Apply title filters first in
:meth:`pagegenerators.GeneratorFactory.getCombinedGenerator`
- and avoid loading page data for titles rejected by title filters.
-* Support immutable sequences in :func:`data.api.encode_url`.
-* Clear bundle cache when switching packages with
:func:`i18n.set_messages_package`.
-* Use pathlib for path containment in :func:`config.shortpath` and
- :func:`version.get_module_filename`.
-* Add *depth* parameter to :func:`pagegenerators.PetScanPageGenerator`.
-* The :class:`specialbots.UploadRobot` class now cleans up temporary download
files
- after upload completion or failure, while preserving caller-provided local
files.
-* Fix
:meth:`APISite.loadrevisions<pywikibot.site._generators.GeneratorsMixin.loadrevisions>`
- *step* handling.
-* Keep preload *groupsize* per site in
:func:`pagegenerators.PreloadingGenerator`.
-* Preserve colliding intersection items without ``hash()`` in
- :func:`tools.itertools.intersect_generators`.
-* :meth:`page.BasePage.get` no longer validates section fragments or raises
- :exc:`exceptions.SectionError` for them, as the method always retrieves the
complete
- page text (:phab:`T422856`, :phab:`T422859`).
-* Update translations (i18n).
-* Add new :class:`family.WikimediaSubdomainFamily`.
-* Update documentation for :meth:`page.BasePage.exists`. (:phab:`T334341`)
+* (no changes yet)
Deprecations
diff --git a/dev-requirements.txt b/dev-requirements.txt
index b3a7755..c68f0b1 100644
--- a/dev-requirements.txt
+++ b/dev-requirements.txt
@@ -6,7 +6,7 @@
pytest-xvfb >= 3.1.1
pre-commit >= 4.6.2; python_version > "3.9"
-coverage >= 7.15.4; python_version > "3.9"
+coverage >= 7.16.2; python_version > "3.9"
coverage==7.10.7; python_version == "3.9"
# required for coverage (T380697)
tomli >= 2.4.1; python_version < "3.11"
diff --git a/pywikibot/__metadata__.py b/pywikibot/__metadata__.py
index 31fb95e..fdbd1c8 100644
--- a/pywikibot/__metadata__.py
+++ b/pywikibot/__metadata__.py
@@ -12,6 +12,6 @@
from time import strftime
-__version__ = '11.8.0'
+__version__ = '11.9.0.dev0'
__url__ = 'https://www.mediawiki.org/wiki/Manual:Pywikibot'
__copyright__ = f'2003-{strftime("%Y")}, Pywikibot team'
diff --git a/scripts/__init__.py b/scripts/__init__.py
index ba81280..0e1a927 100644
--- a/scripts/__init__.py
+++ b/scripts/__init__.py
@@ -34,7 +34,7 @@
from pathlib import Path
-__version__ = '11.8.0'
+__version__ = '11.9.0'
#: defines the entry point for pywikibot-scripts package
base_dir = Path(__file__).parent
diff --git a/scripts/commonscat.py b/scripts/commonscat.py
index 39f529f..87c0de6 100755
--- a/scripts/commonscat.py
+++ b/scripts/commonscat.py
@@ -469,8 +469,8 @@
commonsSite = self.current_page.site.image_repository()
commonsPage = pywikibot.Page(commonsSite, 'Category:' + name)
- try: # parse title (T26742)
- str(commonsPage)
+ try: # parse title (T267742)
+ str(commonsPage) # noqa: B018
except InvalidTitleError:
return ''
diff --git a/scripts/pyproject.toml b/scripts/pyproject.toml
index a9bd93d..26f3deb 100644
--- a/scripts/pyproject.toml
+++ b/scripts/pyproject.toml
@@ -7,7 +7,7 @@
[project]
name = "pywikibot-scripts"
-version = "11.8.0"
+version = "11.9.0"
authors = [
{name = "xqt", email = "[email protected]"},
@@ -19,7 +19,7 @@
readme = "scripts/README.rst"
requires-python = ">=3.9.0"
dependencies = [
- "pywikibot >= 11.8.0",
+ "pywikibot >= 11.9.0",
"langdetect",
"mwparserfromhell",
"pydot",
--
To view, visit
https://gerrit.wikimedia.org/r/c/pywikibot/core/+/1345968?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: I7d29eec1242ff9e91b877b113140d9930ab642bb
Gerrit-Change-Number: 1345968
Gerrit-PatchSet: 1
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]