jenkins-bot has submitted this change. ( 
https://gerrit.wikimedia.org/r/c/pywikibot/core/+/1200414?usp=email )

Change subject: Cleanup: Drop support for Python 3.9
......................................................................

Cleanup: Drop support for Python 3.9

Python 3.9 support will be dropped.

- remove deprecation message in pwb.py
- no longer run tests with Python 3.9
- update github workflows
- update dependencies
- update utils
- update pyproject.toml

Bug: T401802
Change-Id: I656b129db7d86157c7a5288b90a8db5f9f64f29f
---
M .github/workflows/doctest.yml
M .github/workflows/login_tests-ci.yml
M .github/workflows/oauth_tests-ci.yml
M .github/workflows/pywikibot-ci.yml
M .github/workflows/sysop_write_tests-ci.yml
M .github/workflows/windows_tests.yml
M dev-requirements.txt
M pwb.py
M pyproject.toml
M requirements.txt
M scripts/pyproject.toml
M setup.py
M tests/utils.py
13 files changed, 68 insertions(+), 111 deletions(-)

Approvals:
  jenkins-bot: Verified
  Xqt: Looks good to me, approved




diff --git a/.github/workflows/doctest.yml b/.github/workflows/doctest.yml
index 419bb23..bb7e9f4 100644
--- a/.github/workflows/doctest.yml
+++ b/.github/workflows/doctest.yml
@@ -20,9 +20,8 @@
     timeout-minutes: 10
     strategy:
       fail-fast: false
-      max-parallel: 17
       matrix:
-        python-version: [pypy3.8, pypy3.11, '3.8', '3.9', '3.10', '3.11', 
'3.12', '3.13', '3.14']
+        python-version: [pypy3.9, pypy3.11, '3.9', '3.10', '3.11', '3.12', 
'3.13', '3.14']
         os: ['windows-latest', 'macOS-latest', 'ubuntu-latest']
         include:
           - python-version: 3.15-dev
@@ -47,12 +46,11 @@
         run: |
           python -m pip install --upgrade pip
           pip --version
-          pip install "coverage == 7.6.1; python_version < '3.9'"
-          pip install "coverage >= 7.6.10; python_version > '3.8'"
+          pip install coverage
           pip install "tomli; python_version < '3.11'"
           pip install mwparserfromhell
           pip install packaging
-          pip install "PyMySQL >= 1.0.0"
+          pip install PyMySQL
           pip install pytest
           pip install requests-sse
           pip install wikitextparser
diff --git a/.github/workflows/login_tests-ci.yml 
b/.github/workflows/login_tests-ci.yml
index ea6d595..702d9bf 100644
--- a/.github/workflows/login_tests-ci.yml
+++ b/.github/workflows/login_tests-ci.yml
@@ -42,30 +42,30 @@
       fail-fast: false
       max-parallel: 1
       matrix:
-        python-version: [pypy3.8, pypy3.11, '3.8', '3.9', '3.10', '3.11', 
'3.12', '3.13', '3.14', 3.15-dev]
+        python-version: [pypy3.9, pypy3.11, '3.9', '3.10', '3.11', '3.12', 
'3.13', '3.14', 3.15-dev]
         site: ['wikipedia:en', 'wikisource:zh', 'wikipedia:test']
         include:
-          - python-version: '3.8'
+          - python-version: '3.9'
             site: false
             family: wpbeta
             code: en
             os: ubuntu-22.04
-          - python-version: '3.8'
+          - python-version: '3.9'
             site: false
             family: wpbeta
             code: zh
             os: ubuntu-22.04
-          - python-version: '3.9'
+          - python-version: '3.10'
             site: wsbeta:en
-          - python-version: '3.8'
+          - python-version: '3.9'
             site: wikidata:test
             os: ubuntu-22.04
-          - python-version: '3.10'
+          - python-version: '3.11'
             site: wiktionary:ar
-          - python-version: '3.8'
+          - python-version: '3.9'
             site: wikidata:wikidata
             os: ubuntu-22.04
-          - python-version: '3.9'
+          - python-version: '3.10'
             site: wowwiki:uk
           - python-version: 3
             site: wikipedia:de
@@ -91,8 +91,7 @@
         run: |
           python -m pip install --upgrade pip
           pip --version
-          pip install "coverage == 7.6.1; python_version < '3.9'"
-          pip install "coverage >= 7.6.10; python_version > '3.8'"
+          pip install coverage
           pip install "tomli; python_version < '3.11'"
           pip install mwparserfromhell
           pip install packaging
diff --git a/.github/workflows/oauth_tests-ci.yml 
b/.github/workflows/oauth_tests-ci.yml
index 2f880af..6584f05 100644
--- a/.github/workflows/oauth_tests-ci.yml
+++ b/.github/workflows/oauth_tests-ci.yml
@@ -22,17 +22,17 @@
     strategy:
       fail-fast: false
       matrix:
-        python-version: [pypy3.8, pypy3.11, '3.8', '3.9', '3.10', '3.11', 
'3.12', '3.13', '3.14', 3.15-dev]
+        python-version: [pypy3.9, pypy3.11, '3.9', '3.10', '3.11', '3.12', 
'3.13', '3.14', 3.15-dev]
         family: [wikipedia]
         code: [test]
         domain: [test.wikipedia.org]
         include:
-          - python-version: '3.8'
+          - python-version: '3.9'
             family: wpbeta
             code: en
             domain: en.wikipedia.beta.wmcloud.org
             experimental: true
-          - python-version: '3.8'
+          - python-version: '3.9'
             family: wpbeta
             code: zh
             domain: zh.wikipedia.beta.wmcloud.org
@@ -71,13 +71,12 @@
         run: |
           python -m pip install --upgrade pip
           pip --version
-          pip install "coverage == 7.6.1; python_version < '3.9'"
-          pip install "coverage >= 7.6.10; python_version > '3.8'"
+          pip install coverage
           # tomli required for coverage due to T380697
           pip install "tomli; python_version < '3.11'"
           pip install mwparserfromhell
           # PyJWT added due to T380270
-          pip install "PyJWT != 2.10.0, != 2.10.1 ; python_version > '3.8'"
+          pip install "PyJWT != 2.10.0, != 2.10.1"
           pip install mwoauth
           pip install packaging
           pip install requests
diff --git a/.github/workflows/pywikibot-ci.yml 
b/.github/workflows/pywikibot-ci.yml
index 9635b67..de0939d 100644
--- a/.github/workflows/pywikibot-ci.yml
+++ b/.github/workflows/pywikibot-ci.yml
@@ -23,42 +23,35 @@
     timeout-minutes: 100
     strategy:
       fail-fast: false
-      max-parallel: 19
       matrix:
-        python-version: [pypy3.10, pypy3.11, '3.8', '3.9', '3.10', '3.11', 
'3.12', '3.13', '3.14']
+        python-version: [pypy3.9, pypy3.10, pypy3.11, '3.9', '3.10', '3.11', 
'3.12', '3.13', '3.14']
         site: ['wikipedia:en', 'wikisource:zh']
         include:
-          - python-version: '3.8'
+          - python-version: '3.9'
             site: wikipedia:test
-          - python-version: '3.8'
+          - python-version: '3.9'
             site: false
             family: wpbeta
             code: en
-          - python-version: '3.8'
+          - python-version: '3.9'
             site: false
             family: wpbeta
             code: zh
-          - python-version: '3.9'
-            site: wsbeta:en
-          - python-version: '3.8'
-            site: wikidata:test
           - python-version: '3.10'
+            site: wsbeta:en
+          - python-version: '3.9'
+            site: wikidata:test
+          - python-version: '3.11'
             site: wiktionary:ar
             test_no_rc: true
-          - python-version: '3.8'
-            site: wikidata:wikidata
           - python-version: '3.9'
+            site: wikidata:wikidata
+          - python-version: '3.10'
             site: wowwiki:uk
           - python-version: '3'
             site: wikipedia:de
             os: macOS-latest
-          # ubuntu-22.04 required for pypy3.8 and 3.14-dev due to T382214
-          - python-version: pypy3.8
-            site: wikipedia:en
-            os: ubuntu-22.04
-          - python-version: pypy3.8
-            site: wikisource:zh
-            os: ubuntu-22.04
+          # ubuntu-22.04 required 3.15-dev due to T382214
           - python-version: 3.15-dev
             site: wikipedia:en
             os: ubuntu-22.04
diff --git a/.github/workflows/sysop_write_tests-ci.yml 
b/.github/workflows/sysop_write_tests-ci.yml
index 8993ab6..2645b80 100644
--- a/.github/workflows/sysop_write_tests-ci.yml
+++ b/.github/workflows/sysop_write_tests-ci.yml
@@ -22,7 +22,7 @@
     strategy:
       fail-fast: false
       matrix:
-        python-version: ['3.8']
+        python-version: ['3.9']
         site: ['wikipedia:test']
         attr: [write and not rights, write and rights, rights and not write]
     steps:
diff --git a/.github/workflows/windows_tests.yml 
b/.github/workflows/windows_tests.yml
index 9c54f80..9eac771 100644
--- a/.github/workflows/windows_tests.yml
+++ b/.github/workflows/windows_tests.yml
@@ -22,7 +22,7 @@
     strategy:
       fail-fast: false
       matrix:
-        python-version: [3.8.0, '3.8', '3.9', '3.10', '3.11', '3.12', '3.13', 
'3.14']
+        python-version: [3.9.0, '3.9', '3.10', '3.11', '3.12', '3.13', '3.14']
         python-arch: [x64, x86]
         site: ['wikipedia:en']
     steps:
diff --git a/dev-requirements.txt b/dev-requirements.txt
index 823b1fb..dd0dbbe 100644
--- a/dev-requirements.txt
+++ b/dev-requirements.txt
@@ -1,23 +1,13 @@
-# This is a PIP 6+ requirements file for development dependencies
+# This is a requirements file for development dependencies
 #
 
-pytest >= 8.4.2; python_version > "3.8"
-pytest == 8.3.5; python_version < "3.9"
-pytest-subtests >= 0.14.2; python_version > "3.8"
-pytest-subtests == 0.13.1; python_version < "3.9"
-pytest-attrib>=0.1.3
-pytest-xvfb>=3.1.1; python_version > "3.8"
-pytest-xvfb==3.0.0; python_version < "3.9"
+pytest >= 8.4.2
+pytest-subtests >= 0.15.0
+pytest-attrib >= 0.1.3
+pytest-xvfb>=3.1.1

-pre-commit >= 4.3.0; python_version > "3.8"
-pre-commit == 3.5.0; python_version < "3.9"
+pre-commit >= 4.3.0
 coverage>=7.11.0; python_version > "3.9"
 coverage==7.10.7; python_version == "3.9"
-coverage==7.6.1; python_version < "3.9"
 # required for coverage (T380697)
 tomli>=2.3.0; python_version < "3.11"
-
-
-# optional but needed for tests
-fake-useragent >= 2.2.0; python_version > "3.8"
-fake-useragent == 1.5.1; python_version < "3.9"
diff --git a/pwb.py b/pwb.py
index 07debd3..e8c5ed6 100755
--- a/pwb.py
+++ b/pwb.py
@@ -16,36 +16,18 @@
 Pywikibot is not available on:
 {version}

-This version of Pywikibot only supports Python 3.8+.
-"""
-DEPRECATED_PYTHON_MESSAGE = """
-
-Python {version} will be dropped soon with Pywikibot 11.
-It is recommended to use Python 3.9 or above.
-See phab: T401802 for further information.
+This version of Pywikibot only supports Python 3.9+.
 """


 def python_is_supported():
     """Check that Python is supported."""
-    return sys.version_info[:3] >= (3, 8)
-
-
-def python_is_deprecated():
-    """Check that Python is deprecated."""
-    return sys.version_info[:3] < (3, 9)
+    return sys.version_info[:3] >= (3, 9)


 if not python_is_supported():  # pragma: no cover
     sys.exit(VERSIONS_REQUIRED_MESSAGE.format(version=sys.version))

-if python_is_deprecated():
-    import warnings
-    msg = DEPRECATED_PYTHON_MESSAGE.format(
-        version=sys.version.split(maxsplit=1)[0])
-    warnings.warn(msg, FutureWarning)  # adjust this line no in utils.execute()
-    del warnings
-

 def main() -> None:
     """Entry point for :func:`tests.utils.execute_pwb`."""
diff --git a/pyproject.toml b/pyproject.toml
index 9c305cd..f5a48d8 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -17,7 +17,7 @@
     {name = "The Pywikibot team", email = "[email protected]"},
 ]
 description = "Python MediaWiki Bot Framework"
-requires-python = ">=3.8.0"
+requires-python = ">=3.9.0"
 keywords = [
     "API", "bot", "client", "framework", "mediawiki", "pwb", "pybot", "python",
     "pywiki", "pywikibase", "pywikibot", "pywikipedia", "pywikipediabot",
@@ -92,7 +92,6 @@
     "Programming Language :: Python",
     "Programming Language :: Python :: 3",
     "Programming Language :: Python :: 3 :: Only",
-    "Programming Language :: Python :: 3.8",
     "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
diff --git a/requirements.txt b/requirements.txt
index 42f78a5..bf1fc49 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -26,38 +26,39 @@
 # mwparserfromhell is mandatory but wikitextparser can be used instead
 # mwparserfromhell is still required for commons_information.py and patrol.py
 # wikitextparser is required for Page.authorship()
-wikitextparser>=0.56.3
+wikitextparser>=0.56.4

 # OAuth support
 # mwoauth 0.2.4 is needed because it supports getting identity information
 # about the user
 # Due to T380270 PyJWT must be set
-PyJWT != 2.10.0, != 2.10.1; python_version > '3.8'
-mwoauth>=0.2.4,!=0.3.1
+PyJWT != 2.10.0, != 2.10.1
+mwoauth>=0.4.0

 # interwiki_graph.py module and category_graph.py script:
-pydot >= 3.0.2
+pydot >= 4.0.1

 # cosmetic_changes
-python-stdnum >= 1.20
+python-stdnum >= 2.1

 # GUI
-Pillow==10.4.0; platform_python_implementation == "PyPy" and python_version < 
"3.9"
 Pillow>=11.1.0,<11.3.0; platform_python_implementation == "PyPy" and 
python_version >= "3.9" and python_version < "3.11"
 Pillow>=11.1.0; platform_python_implementation == "PyPy" and python_version >= 
"3.11"
-Pillow==10.4.0; platform_python_implementation != "PyPy" and python_version < 
"3.9"
 Pillow>=11.1.0,<11.3.0; platform_python_implementation != "PyPy" and 
python_version == "3.9"
-Pillow>=11.1.0; platform_python_implementation != "PyPy" and python_version >= 
"3.10"
+Pillow>=12.0.0; platform_python_implementation != "PyPy" and python_version >= 
"3.10"

 # core pagegenerators
 googlesearch-python >= 1.3.0
-requests-sse >= 0.5.0
+requests-sse >= 0.5.2

 # The mysql generator in pagegenerators depends on PyMySQL
-PyMySQL >= 1.1.1
+PyMySQL >= 1.1.2

 # core HTML comparison parser in diff module
-beautifulsoup4>=4.7.1
+beautifulsoup4>=4.14.2

 # scripts/weblinkchecker.py
 memento_client==0.6.1
+
+# optional but also needed for tests
+fake-useragent >= 2.2.0
diff --git a/scripts/pyproject.toml b/scripts/pyproject.toml
index 842206b..3f80c35 100644
--- a/scripts/pyproject.toml
+++ b/scripts/pyproject.toml
@@ -17,7 +17,7 @@
 ]
 description = "Pywikibot Scripts Collection"
 readme = "scripts/README.rst"
-requires-python = ">=3.8.0"
+requires-python = ">=3.9.0"
 dependencies = [
     "pywikibot >= 11.0.0",
     "isbnlib",
@@ -103,6 +103,13 @@
     "Programming Language :: Python",
     "Programming Language :: Python :: 3",
     "Programming Language :: Python :: 3 :: Only",
+    "Programming Language :: Python :: 3.9",
+    "Programming Language :: Python :: 3.10",
+    "Programming Language :: Python :: 3.11",
+    "Programming Language :: Python :: 3.12",
+    "Programming Language :: Python :: 3.13",
+    "Programming Language :: Python :: 3.14",
+    "Programming Language :: Python :: 3.15",
     "Programming Language :: Python :: Implementation :: CPython",
     "Programming Language :: Python :: Implementation :: PyPy",
     "Topic :: Internet :: WWW/HTTP :: Dynamic Content :: Wiki",
diff --git a/setup.py b/setup.py
index 806f3ec..13b4766 100755
--- a/setup.py
+++ b/setup.py
@@ -37,36 +37,30 @@
 # ------- setup extra_requires ------- #
 extra_deps = {
     # Core library dependencies
-    'eventstreams': ['requests-sse>=0.5.0'],
-    'isbn': ['python-stdnum>=1.20'],
-    'Graphviz': ['pydot>=3.0.2'],
+    'eventstreams': ['requests-sse>=0.5.2'],
+    'isbn': ['python-stdnum>=2.1'],
+    'Graphviz': ['pydot>=4.0.1'],
     'Google': ['googlesearch-python >= 1.3.0'],
     'memento': ['memento_client==0.6.1'],
-    'wikitextparser': ['wikitextparser>=0.56.3'],
-    'mysql': ['PyMySQL >= 1.1.1'],
-    # vulnerability found in Pillow<8.1.2 but toolforge uses 5.4.1
+    'wikitextparser': ['wikitextparser>=0.56.4'],
+    'mysql': ['PyMySQL >= 1.1.2'],
     'Tkinter': [
-        'Pillow==10.4.0; platform_python_implementation == "PyPy" '
-        'and python_version < "3.9"',
         'Pillow>=11.1.0,<11.3.0; platform_python_implementation == "PyPy" '
         'and python_version >= "3.9" and python_version < "3.11"',
         'Pillow>=11.1.0; platform_python_implementation == "PyPy" '
         'and python_version >= "3.11"',
-        'Pillow==10.4.0; platform_python_implementation != "PyPy" '
-        'and python_version < "3.9"',
         'Pillow>=11.1.0,<11.3.0; platform_python_implementation != "PyPy" '
         'and python_version == "3.9"',
-        'Pillow>=11.1.0; platform_python_implementation != "PyPy" '
+        'Pillow>=12.0.0; platform_python_implementation != "PyPy" '
         'and python_version >= "3.10"',
     ],
     'mwoauth': [
-        'PyJWT != 2.10.0, != 2.10.1; python_version > "3.8"',  # T380270
-        'mwoauth!=0.3.1,>=0.2.4',
+        'PyJWT != 2.10.0, != 2.10.1',  # T380270
+        'mwoauth>=0.4.0',
     ],
     'html': ['beautifulsoup4>=4.7.1'],
     'http': [
-        'fake-useragent >= 2.0.3; python_version > "3.8"',
-        'fake-useragent == 1.5.1; python_version < "3.9"',
+        'fake-useragent >= 2.2.0',
     ],
 }

diff --git a/tests/utils.py b/tests/utils.py
index bba040a..cf5860f 100644
--- a/tests/utils.py
+++ b/tests/utils.py
@@ -25,7 +25,6 @@
 from pywikibot.exceptions import APIError
 from pywikibot.login import LoginStatus
 from pywikibot.site import Namespace
-from pywikibot.tools import PYTHON_VERSION
 from pywikibot.tools.collections import EMPTY_DEFAULT
 from tests import _pwb_py

@@ -475,10 +474,6 @@

     :param command: executable to run and arguments to use
     """
-    if PYTHON_VERSION < (3, 9):
-        command.insert(1, '-W ignore::FutureWarning:pwb:46')
-        command.insert(1, '-W ignore::FutureWarning:__main__:46')
-
     env = os.environ.copy()

     # Prevent output by test package; e.g. 'max_retries reduced from x to y'

--
To view, visit 
https://gerrit.wikimedia.org/r/c/pywikibot/core/+/1200414?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: I656b129db7d86157c7a5288b90a8db5f9f64f29f
Gerrit-Change-Number: 1200414
Gerrit-PatchSet: 3
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]

Reply via email to