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

Change subject: cleanup: drop support for MediaWiki <= 1.32
......................................................................

cleanup: drop support for MediaWiki <= 1.32

Bug: T430457
Change-Id: I8f1f7a388491c88ff742795f9feff1acca4e6f2c
---
M README.rst
M docs/index.rst
M pywikibot/data/api/_generators.py
M pywikibot/page/_revision.py
M pywikibot/site/_apisite.py
M pywikibot/site/_generators.py
M pywikibot/site_detect.py
M tests/README.rst
M tests/api_tests.py
M tests/aspects.py
M tests/mediawikiversion_tests.py
M tests/site_decorators_tests.py
M tests/site_detect_tests.py
M tests/site_generators_tests.py
M tests/tests_tests.py
15 files changed, 68 insertions(+), 72 deletions(-)

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




diff --git a/README.rst b/README.rst
index c8d6ab9..1a71bdf 100644
--- a/README.rst
+++ b/README.rst
@@ -33,7 +33,7 @@
 
 The Pywikibot framework is a Python library that interfaces with the
 `MediaWiki API <https://www.mediawiki.org/wiki/API:Main_page>`_
-version 1.31 or higher.
+version 1.33 or higher.

 Also included are various general function scripts that can be adapted for
 different tasks.
diff --git a/docs/index.rst b/docs/index.rst
index b78ca3b..fea801b 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -12,7 +12,7 @@
 The project started in 2003 and is currently on core version |version|.
 It features full API usage and is up-to-date with new MediaWiki features and
 a Pythonic package layout. But it also works with older installations of
-MediaWiki 1.31 or higher. For older MediaWiki versions you have to use older
+MediaWiki 1.33 or higher. For older MediaWiki versions you have to use older
 Pywikibot releases; refer :ref:`Version compatibility`.

 Pywikibot supports Microsoft Windows, macOS and Linux when used with a
diff --git a/pywikibot/data/api/_generators.py 
b/pywikibot/data/api/_generators.py
index 81e4a06..ed73940 100644
--- a/pywikibot/data/api/_generators.py
+++ b/pywikibot/data/api/_generators.py
@@ -385,8 +385,8 @@
     def _add_slots(self) -> None:
         """Add slots to params if the site supports multi-content revisions.

-        On MW 1.32+ the following query parameters require slots to be given
-        when content or contentmodel is requested.
+        The following query parameters require slots to be given when
+        content or contentmodel is requested.

         * prop=revisions
         * prop=deletedrevisions or
@@ -396,8 +396,6 @@
         More info:
         
https://lists.wikimedia.org/hyperkitty/list/[email protected]/message/AXO4G4OOMTG7CEUU5TGAWXBI2LD4G3BC/
         """
-        if self.site.mw_version < '1.32':
-            return
         request = self.request
         # If using any deprecated_params, do not add slots. Usage of
         # these parameters together with slots is forbidden and the user will
diff --git a/pywikibot/page/_revision.py b/pywikibot/page/_revision.py
index dc4a724..bb5794c 100644
--- a/pywikibot/page/_revision.py
+++ b/pywikibot/page/_revision.py
@@ -49,14 +49,11 @@

         data.setdefault('comment', '')
         data.setdefault('user', '')
+        data.setdefault('slots', {})

-        if 'slots' in data:  # mw 1.32+
-            mainslot = data['slots'].get('main', {})
-            data['text'] = mainslot.get('*')
-            data['contentmodel'] = mainslot.get('contentmodel')
-        else:
-            data['slots'] = None
-            data['text'] = data.get('*')
+        mainslot = data['slots'].get('main', {})
+        data['text'] = mainslot.get('*')
+        data['contentmodel'] = mainslot.get('contentmodel')

         data.setdefault('sha1')
         if data['sha1'] is None and data['text'] is not None:
diff --git a/pywikibot/site/_apisite.py b/pywikibot/site/_apisite.py
index ed772d2..40c00b2 100644
--- a/pywikibot/site/_apisite.py
+++ b/pywikibot/site/_apisite.py
@@ -1315,10 +1315,10 @@
             pywikibot.error(msg)
             raise

-        if MediaWikiVersion(version) < '1.31':
+        if MediaWikiVersion(version) < '1.33':
             raise RuntimeError(f'Pywikibot "{pywikibot.__version__}" does not '
                                f'support MediaWiki "{version}".\nUse '
-                               f'Pywikibot prior to "10.0" branch instead.')
+                               f'Pywikibot prior to "12.0" branch instead.')
         return version

     @property
diff --git a/pywikibot/site/_generators.py b/pywikibot/site/_generators.py
index 33c0b61..8aa97a7 100644
--- a/pywikibot/site/_generators.py
+++ b/pywikibot/site/_generators.py
@@ -764,12 +764,12 @@

         :return: rvprop items
         """
-        props = ['comment', 'contentmodel', 'flags', 'ids', 'parsedcomment',
-                 'sha1', 'size', 'tags', 'timestamp', 'user', 'userid']
+        props = [
+            'comment', 'contentmodel', 'flags', 'ids', 'parsedcomment',
+            'roles', 'sha1', 'size', 'tags', 'timestamp', 'user', 'userid',
+        ]
         if content:
             props.append('content')
-        if self.mw_version >= '1.32':
-            props.append('roles')
         return props

     def loadrevisions(
diff --git a/pywikibot/site_detect.py b/pywikibot/site_detect.py
index 10e92c9..8ccbb63 100644
--- a/pywikibot/site_detect.py
+++ b/pywikibot/site_detect.py
@@ -25,7 +25,7 @@
 SERVER_DB_ERROR_MSG = \
     '<h1>Sorry! This site is experiencing technical difficulties.</h1>'

-MIN_VERSION = MediaWikiVersion('1.31')
+MIN_VERSION = MediaWikiVersion('1.33')


 class MWSite:
@@ -39,7 +39,7 @@
             occurred while loading the site
         :raises Timeout: a timeout occurred while loading the site
         :raises RuntimeError: Version not found or version less than
-            1.31
+            1.33
         """
         fromurl = fromurl.removesuffix('$1')

@@ -79,7 +79,8 @@
             raise RuntimeError(f'Unsupported url: {self.fromurl}')

         if not self.version or self.version < MIN_VERSION:
-            raise RuntimeError(f'Unsupported version: {self.version}')
+            raise RuntimeError(
+                f'Unsupported version of {self.fromurl}: {self.version}')

         if not self.articlepath:
             if isinstance(self.private_wiki, Exception):
diff --git a/tests/README.rst b/tests/README.rst
index ab0a25b..e7b1720 100644
--- a/tests/README.rst
+++ b/tests/README.rst
@@ -217,7 +217,7 @@

   from tests.aspects import require_version
   [......]
-  @require_version('>=1.31.0')
+  @require_version('>=1.33.0')
   def test_require_version(self):

 @unittest.mock.patch
diff --git a/tests/api_tests.py b/tests/api_tests.py
index 8e93cfc..b2ba303 100755
--- a/tests/api_tests.py
+++ b/tests/api_tests.py
@@ -557,9 +557,10 @@
         titles = [link.title(with_section=False) for link in links]
         params = {
             'rvprop': 'ids|flags|timestamp|user|comment|content',
-            'titles': '|'.join(titles)}
-        if self.site.mw_version >= '1.32':
-            params['rvslots'] = 'main'
+            'rvslots': 'main',
+            'titles': '|'.join(titles),
+        }
+
         gen = api.PropertyGenerator(
             site=self.site,
             prop='revisions|info|categoryinfo|langlinks|templates',
diff --git a/tests/aspects.py b/tests/aspects.py
index bd11cd8..b567394 100644
--- a/tests/aspects.py
+++ b/tests/aspects.py
@@ -495,7 +495,7 @@
     """Skip test unless a minimum MediaWiki version is available.

     The required version must include a comparison operator (e.g.
-    :code:`<1.31wmf4` or :code:`>=1.43`). If the site's version does not
+    :code:`<1.33wmf4` or :code:`>=1.45`). If the site's version does not
     satisfy the condition, the test is skipped.

     This decorator can only be used for :class:`TestCase` having a
diff --git a/tests/mediawikiversion_tests.py b/tests/mediawikiversion_tests.py
index 6bd36f7..653617c 100755
--- a/tests/mediawikiversion_tests.py
+++ b/tests/mediawikiversion_tests.py
@@ -30,29 +30,29 @@

     def test_normal_versions(self) -> None:
         """Test comparison between release versions."""
-        self.assertGreater(self._make('1.33'), self._make('1.32.0'))
-        self.assertEqual(self._make('1.33'), self._make('1.33'))
+        self.assertGreater(self._make('1.43'), self._make('1.42.0'))
+        self.assertEqual(self._make('1.43'), self._make('1.43'))

     def test_wmf_versions(self) -> None:
         """Test comparison between wmf versions."""
-        self.assertGreater(self._make('1.33wmf10'), self._make('1.33wmf9'))
-        self.assertEqual(self._make('1.33wmf10'), self._make('1.33wmf10'))
+        self.assertGreater(self._make('1.43wmf10'), self._make('1.43wmf9'))
+        self.assertEqual(self._make('1.43wmf10'), self._make('1.43wmf10'))

     def test_combined_versions(self) -> None:
         """Test comparison between wmf versions and release versions."""
-        self.assertGreater(self._make('1.33wmf10'), self._make('1.32.3'))
-        self.assertGreater(self._make('1.33'), self._make('1.33wmf10'))
+        self.assertGreater(self._make('1.43wmf10'), self._make('1.42.3'))
+        self.assertGreater(self._make('1.43'), self._make('1.43wmf10'))

     def test_non_wmf_scheme(self) -> None:
         """Test version numbers not following the wmf-scheme."""
-        self.assertGreater(self._make('1.33alpha'), self._make('1.32.3'))
-        self.assertGreater(self._make('1.33alpha'), self._make('1.33wmf1'))
-        self.assertGreater(self._make('1.33beta1'), self._make('1.33alpha'))
-        self.assertGreater(self._make('1.33beta2'), self._make('1.33beta1'))
-        self.assertGreater(self._make('1.33-rc.1'), self._make('1.33beta2'))
-        self.assertGreater(self._make('1.33-rc.2'), self._make('1.33-rc.1'))
-        self.assertGreater(self._make('1.33'), self._make('1.33-rc.2'))
-        self.assertEqual(self._make('1.33rc1'), self._make('1.33-rc.1'))
+        self.assertGreater(self._make('1.43alpha'), self._make('1.42.3'))
+        self.assertGreater(self._make('1.43alpha'), self._make('1.43wmf1'))
+        self.assertGreater(self._make('1.43beta1'), self._make('1.43alpha'))
+        self.assertGreater(self._make('1.43beta2'), self._make('1.43beta1'))
+        self.assertGreater(self._make('1.43-rc.1'), self._make('1.43beta2'))
+        self.assertGreater(self._make('1.43-rc.2'), self._make('1.43-rc.1'))
+        self.assertGreater(self._make('1.43'), self._make('1.43-rc.2'))
+        self.assertEqual(self._make('1.43rc1'), self._make('1.43-rc.1'))

     def _version_check(self, version, digits, dev_version, suffix) -> None:
         v = self._make(version)
@@ -62,26 +62,26 @@

     def test_invalid_type_comparison(self) -> None:
         """Compare with a type other than a version or string."""
-        self.assertNotEqual(self._make('1.32.0'), ['wrong type'])
+        self.assertNotEqual(self._make('1.42.0'), ['wrong type'])

         exc = "Comparison between 'MediaWikiVersion' and 'list' unsupported"

         with self.assertRaisesRegex(TypeError, exc):
-            assert self._make('1.32.0') > ['wrong type']
+            assert self._make('1.42.0') > ['wrong type']

     def test_interpretation(self) -> None:
         """Test if the data is correctly interpreted."""
-        self._version_check('1.33', (1, 33), (4, ), '')
-        self._version_check('1.33wmf1', (1, 33), (0, 1), 'wmf1')
-        self._version_check('1.33alpha', (1, 33), (1, ), 'alpha')
+        self._version_check('1.43', (1, 43), (4, ), '')
+        self._version_check('1.43wmf1', (1, 43), (0, 1), 'wmf1')
+        self._version_check('1.43alpha', (1, 43), (1, ), 'alpha')
         self._version_check('1.27.0-alpha', (1, 27, 0), (1, ), '-alpha')
-        self._version_check('1.33beta1', (1, 33), (2, 1), 'beta1')
-        self._version_check('1.35-beta.1', (1, 35), (2, 1), '-beta.1')
-        self._version_check('1.33rc1', (1, 33), (3, 1), 'rc1')
-        self._version_check('1.33-rc1', (1, 33), (3, 1), '-rc1')
-        self._version_check('1.33-rc.1', (1, 33), (3, 1), '-rc.1')
-        self._version_check('1.35-rc-1', (1, 35), (3, 1), '-rc-1')
-        self._version_check('1.33text', (1, 33), (4, ), 'text')
+        self._version_check('1.43beta1', (1, 43), (2, 1), 'beta1')
+        self._version_check('1.45-beta.1', (1, 45), (2, 1), '-beta.1')
+        self._version_check('1.43rc1', (1, 43), (3, 1), 'rc1')
+        self._version_check('1.43-rc1', (1, 43), (3, 1), '-rc1')
+        self._version_check('1.43-rc.1', (1, 43), (3, 1), '-rc.1')
+        self._version_check('1.45-rc-1', (1, 45), (3, 1), '-rc-1')
+        self._version_check('1.43text', (1, 43), (4, ), 'text')

     def test_invalid_versions(self) -> None:
         """Verify that insufficient version fail creating."""
@@ -100,7 +100,7 @@
         with self.assertRaisesRegex(
                 ValueError,
                 'Found "wmf" in "wmf-1"'):
-            MediaWikiVersion('1.33wmf-1')
+            MediaWikiVersion('1.43wmf-1')

     def test_generator(self) -> None:
         """Test from_generator classmethod."""
diff --git a/tests/site_decorators_tests.py b/tests/site_decorators_tests.py
index 655cf45..05efa31 100755
--- a/tests/site_decorators_tests.py
+++ b/tests/site_decorators_tests.py
@@ -32,7 +32,7 @@
         self._logged_in_as = None
         self.obsolete = False
         super().setUp()
-        self.version = lambda: '1.27'  # lowest supported release
+        self.version = lambda: '1.33'  # lowest supported release

     def user(self):
         """Fake the logged in user."""
@@ -198,43 +198,43 @@
     def setUp(self) -> None:
         """Set up test method."""
         super().setUp()
-        self.version = lambda: '1.23'
+        self.version = lambda: '1.33'

-    @need_version('1.24')
+    @need_version('1.34')
     def too_new(self) -> bool:
         """Method which is to new."""
         return True  # pragma: no cover

-    @need_version('1.23')
+    @need_version('1.33')
     def old_enough(self) -> bool:
         """Method which is as new as the server."""
         return True

-    @need_version('1.22')
+    @need_version('1.32')
     def older(self) -> bool:
         """Method which is old enough."""
         return True

-    @need_version('1.24')
+    @need_version('1.34')
     @deprecated
     def deprecated_unavailable_method(self) -> bool:
         """Method which is to new and then deprecated."""
         return True  # pragma: no cover

     @deprecated
-    @need_version('1.24')
+    @need_version('1.34')
     def deprecated_unavailable_method2(self) -> bool:
         """Method which is deprecated first and then to new."""
         return True  # pragma: no cover

-    @need_version('1.22')
+    @need_version('1.32')
     @deprecated
     def deprecated_available_method(self) -> bool:
         """Method which is old enough and then deprecated."""
         return True

     @deprecated
-    @need_version('1.22')
+    @need_version('1.32')
     def deprecated_available_method2(self) -> bool:
         """Method which is deprecated first and then old enough."""
         return True
diff --git a/tests/site_detect_tests.py b/tests/site_detect_tests.py
index 7444452..3a2ae47 100755
--- a/tests/site_detect_tests.py
+++ b/tests/site_detect_tests.py
@@ -59,7 +59,6 @@

     standard_version_sites = (
         'http://www.ck-wissen.de/ckwiki/index.php?title=$1',
-        'http://www.wikichristian.org/index.php?title=$1',
     )

     non_standard_version_sites = (
@@ -70,6 +69,7 @@
         'http://tfwiki.net/wiki/$1',  # 1.19.5-1+deb7u1
         'http://www.werelate.org/wiki/$1',
         'https://en.wikifur.com/wiki/$1',  # 1.23.16
+        'http://www.wikichristian.org/index.php?title=$1',  # 1.32.1
     )

     no_sites = (
diff --git a/tests/site_generators_tests.py b/tests/site_generators_tests.py
index 1b6bc08..a06c62a 100755
--- a/tests/site_generators_tests.py
+++ b/tests/site_generators_tests.py
@@ -516,7 +516,6 @@
             self.assertIsInstance(impage, pywikibot.FilePage)
             self.assertTrue(impage.exists())
             self.assertGreaterEqual(impage.title(with_ns=False), 'Ba')
-        # Bug T17985 - reverse and start combined; fixed in v 1.14
         for impage in mysite.allimages(start='Da', reverse=True, total=5):
             self.assertIsInstance(impage, pywikibot.FilePage)
             self.assertTrue(impage.exists())
diff --git a/tests/tests_tests.py b/tests/tests_tests.py
index c792006..bc01582 100755
--- a/tests/tests_tests.py
+++ b/tests/tests_tests.py
@@ -110,12 +110,12 @@
         """Test method for decorator with invalid parameter."""
         self.assertTrue(False, 'should never happen')  # pragma: no cover

-    @require_version('>=1.31')
+    @require_version('>=1.33')
     def method_succeed(self) -> None:
         """Test that decorator passes."""
         self.assertTrue(False, 'intentional fail for method_succeed test')

-    @require_version('<1.31')
+    @require_version('<1.33')
     def method_fail(self) -> None:
         """Test that decorator skips."""
         self.assertTrue(False, 'intentional fail for test')  # pragma: no cover
@@ -143,12 +143,12 @@
         with self.assertRaisesRegex(ValueError, 'Invalid version number'):
             require_version('>bar')(self.method_failing)(self)
         with self.assertRaisesRegex(unittest.SkipTest,
-                                    r'MediaWiki < v1\.31 required'):
-            require_version('<1.31')(self.method_failing)(self)
+                                    r'MediaWiki < v1\.33 required'):
+            require_version('<1.33')(self.method_failing)(self)
         with self.assertRaisesRegex(
                 unittest.SkipTest,
-                r'MediaWiki < v1\.31 required to run this test'):
-            require_version('<1.31',
+                r'MediaWiki < v1\.33 required to run this test'):
+            require_version('<1.33',
                             'run this test')(self.method_failing)(self)

     def test_decorator(self) -> None:
@@ -158,7 +158,7 @@
                 'intentional fail for method_succeed test'):
             self.method_succeed()
         with self.assertRaisesRegex(unittest.SkipTest,
-                                    r'MediaWiki < v1\.31 required'):
+                                    r'MediaWiki < v1\.33 required'):
             self.method_fail()



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