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]
