jenkins-bot merged this change.

View Change

Approvals: Xqt: Looks good to me, approved jenkins-bot: Verified
Introduce a new APISite property: mw_version

APISite.version() is a widely used method. In most of its usages the
version string is converted to a MediaWikiVersion object.

To improve readability and ease of use, introduce a new property,
mw_version, which returns a MediaWikiVersion object and caches
the result.

Use the new property throughout the codebase.

Deprecate pywikibot.MediaWikiVersion in favour of
pywikibot.tools.MediaWikiVersion.

Change-Id: I75de443b24d2eb478724c416db8f2d734b6bb806
---
M pywikibot/__init__.py
M pywikibot/cosmetic_changes.py
M pywikibot/data/api.py
M pywikibot/page.py
M pywikibot/pagegenerators.py
M pywikibot/site.py
M tests/api_tests.py
M tests/edit_tests.py
M tests/logentry_tests.py
M tests/page_tests.py
M tests/paraminfo_tests.py
M tests/site_tests.py
M tests/wikibase_edit_tests.py
M tests/wikibase_tests.py
14 files changed, 110 insertions(+), 113 deletions(-)

diff --git a/pywikibot/__init__.py b/pywikibot/__init__.py
index f850057..2d66ece 100644
--- a/pywikibot/__init__.py
+++ b/pywikibot/__init__.py
@@ -63,7 +63,7 @@
deprecated as __deprecated,
deprecate_arg as _deprecate_arg,
normalize_username,
- MediaWikiVersion,
+ MediaWikiVersion as _MediaWikiVersion,
redirect_func,
ModuleDeprecationWrapper as _ModuleDeprecationWrapper,
PY2,
@@ -740,8 +740,7 @@
"WbQuantity now expects a 'site' parameter. This is needed to "
"ensure correct handling of error bounds.")
return False
- return MediaWikiVersion(
- site.version()) < MediaWikiVersion('1.29.0-wmf.2')
+ return site.mw_version < '1.29.0-wmf.2'

@staticmethod
def _todecimal(value):
@@ -1457,3 +1456,8 @@
warning_message='pywikibot.UploadWarning is deprecated; '
'use APISite.upload with a warning handler instead.',
since='20150921')
+wrapper._add_deprecated_attr(
+ 'MediaWikiVersion', _MediaWikiVersion,
+ warning_message='pywikibot.MediaWikiVersion is deprecated; '
+ 'use pywikibot.tools.MediaWikiVersion instead.',
+ since='20180827')
diff --git a/pywikibot/cosmetic_changes.py b/pywikibot/cosmetic_changes.py
index ac4d548..318515a 100755
--- a/pywikibot/cosmetic_changes.py
+++ b/pywikibot/cosmetic_changes.py
@@ -74,7 +74,6 @@
from pywikibot.textlib import (_MultiTemplateMatchBuilder, FILE_LINK_REGEX,
_get_regexes)
from pywikibot.tools import deprecated_args, first_lower, first_upper
-from pywikibot.tools import MediaWikiVersion


# Subpage templates. Must be in lower case,
@@ -401,8 +400,8 @@
# a clone is needed. Won't change the namespace dict
namespaces = list(namespace)
if namespace == 6 and self.site.family.name == 'wikipedia':
- if self.site.code in ('en', 'fr') and MediaWikiVersion(
- self.site.version()) >= MediaWikiVersion('1.14'):
+ if self.site.code in ('en', 'fr') \
+ and self.site.mw_version >= '1.14':
# do not change "Image" on en-wiki and fr-wiki
assert u'Image' in namespaces
namespaces.remove(u'Image')
diff --git a/pywikibot/data/api.py b/pywikibot/data/api.py
index 9adc8f5..f10e838 100644
--- a/pywikibot/data/api.py
+++ b/pywikibot/data/api.py
@@ -249,23 +249,22 @@
assert ('query' in self._modules) is ('main' in self._paraminfo)
if 'query' in self._modules:
return
- _mw_ver = MediaWikiVersion(self.site.version())
+ mw_ver = self.site.mw_version

- if _mw_ver < MediaWikiVersion('1.15'):
- self._parse_help(_mw_ver)
+ if mw_ver < '1.15':
+ self._parse_help(mw_ver)

# The paraminfo api deprecated the old request syntax of
# querymodules='info'; to avoid warnings sites with 1.25wmf4+
# must only use 'modules' parameter.
if self.modules_only_mode is None:
- self.modules_only_mode = _mw_ver >= MediaWikiVersion('1.25wmf4')
+ self.modules_only_mode = mw_ver >= '1.25wmf4'
if self.modules_only_mode:
self.paraminfo_keys = frozenset(['modules'])

# v1.18 and earlier paraminfo doesnt include modules; must use 'query'
# Assume that by v1.26, it will be desirable to prefetch 'query'
- if _mw_ver > MediaWikiVersion('1.26') \
- or _mw_ver < MediaWikiVersion('1.19'):
+ if mw_ver > '1.26' or mw_ver < '1.19':
self.preloaded_modules |= {'query'}

self._fetch(self.preloaded_modules)
@@ -593,7 +592,7 @@

assert 'query' in self._modules or 'paraminfo' not in self._paraminfo

- if MediaWikiVersion(self.site.version()) < MediaWikiVersion("1.12"):
+ if self.site.mw_version < '1.12':
# When the help is parsed, all paraminfo should already be loaded
# and the caller is responsible for detecting missing modules.
pywikibot.log('ParamInfo did not detect modules: %s'
@@ -691,7 +690,7 @@
parameters = self._paraminfo[module].get('parameters', [])
submodules = set()
# Advanced submodule into added to MW API in df80f1ea
- if self.site.version() >= MediaWikiVersion('1.26wmf9'):
+ if self.site.mw_version >= '1.26wmf9':
# This is supplying submodules even if they aren't submodules
# of the given module so skip those
for param in parameters:
@@ -708,7 +707,7 @@
submodules.add(child)
else:
# Boolean submodule info added to MW API in afa153ae
- if self.site.version() < MediaWikiVersion('1.24wmf18'):
+ if self.site.mw_version < '1.24wmf18':
if module == 'main':
params = {'action'}
elif module == 'query':
@@ -1458,8 +1457,7 @@
# otherwise be a problem.
# This situation is only tripped when one of the first actions
# on the site is a write action and the extension isn't installed.
- if (self.write and MediaWikiVersion(
- self.site.version()) >= MediaWikiVersion('1.23')
+ if (self.write and self.site.mw_version >= '1.23'
or self.action == 'edit'
and self.site.has_extension('AssertEdit')):
pywikibot.debug(u"Adding user assertion", _logger)
@@ -2622,7 +2620,7 @@
% self.__class__.__name__)

parameters['indexpageids'] = True # always ask for list of pageids
- if MediaWikiVersion(self.site.version()) < MediaWikiVersion('1.21'):
+ if self.site.mw_version < '1.21':
self.continue_name = 'query-continue'
self.continue_update = self._query_continue
else:
@@ -3225,7 +3223,7 @@
login_request['lgdomain'] = self.site.family.ldapDomain

# get token using meta=tokens if supported
- if MediaWikiVersion(self.site.version()) >= MediaWikiVersion('1.27'):
+ if self.site.mw_version >= '1.27':
login_request["lgtoken"] = self.get_login_token()

self.site._loginstatus = -2 # IN_PROGRESS
@@ -3262,7 +3260,7 @@
@return: login token
@rtype: str
"""
- if MediaWikiVersion(self.site.version()) < MediaWikiVersion('1.27'):
+ if self.site.mw_version < '1.27':
raise NotImplementedError('The method get_login_token() requires '
'at least MediaWiki version 1.27.')
login_token_request = self.site._request(
diff --git a/pywikibot/page.py b/pywikibot/page.py
index 58c9596..611320c 100644
--- a/pywikibot/page.py
+++ b/pywikibot/page.py
@@ -43,7 +43,7 @@
from pywikibot import textlib
from pywikibot.tools import (
compute_file_hash,
- MediaWikiVersion, UnicodeMixin, ComparableMixin, DotReadableDict,
+ UnicodeMixin, ComparableMixin, DotReadableDict,
deprecated, deprecate_arg, deprecated_args, issue_deprecation_warning,
add_full_name, manage_wrapping,
ModuleDeprecationWrapper as _ModuleDeprecationWrapper, PY2,
@@ -1110,7 +1110,7 @@
@rtype: set
"""
# New API since commit 32083235eb332c419df2063cf966b3400be7ee8a
- if MediaWikiVersion(self.site.version()) >= MediaWikiVersion('1.25wmf14'):
+ if self.site.mw_version >= '1.25wmf14':
self.site.loadpageinfo(self)
return self._applicable_protections

diff --git a/pywikibot/pagegenerators.py b/pywikibot/pagegenerators.py
index 7378a96..7be9948 100644
--- a/pywikibot/pagegenerators.py
+++ b/pywikibot/pagegenerators.py
@@ -55,7 +55,6 @@
UnknownExtension,
)
from pywikibot.proofreadpage import ProofreadPage
-from pywikibot.tools import MediaWikiVersion

if sys.version_info[0] > 2:
basestring = (str, )
@@ -1479,7 +1478,7 @@
'content': content, 'namespaces': namespaces,
}
if start:
- if category.site.version() < MediaWikiVersion('1.18'):
+ if category.site.mw_version < '1.18':
kwargs.pop('total', None)
count = 0
for article in category.articles(**kwargs):
diff --git a/pywikibot/site.py b/pywikibot/site.py
index 0177c0e..b8ec8b4 100644
--- a/pywikibot/site.py
+++ b/pywikibot/site.py
@@ -2488,7 +2488,7 @@
raise NotImplementedError(
'MediaWiki messages missing: {0}'.format(needed_mw_messages))

- if MediaWikiVersion(self.version()) < MediaWikiVersion('1.16'):
+ if self.mw_version < '1.16':
for key, value in msgs.items():
if key == 'and' and value == ',&#32;and':
# v1.14 defined and as ',&#32;and'; fixed in v1.15
@@ -2527,7 +2527,7 @@
req['title'] = title
if includecomments is True:
req['includecomments'] = u''
- if MediaWikiVersion(self.version()) > MediaWikiVersion("1.24wmf7"):
+ if self.mw_version > '1.24wmf7':
key = 'wikitext'
req['prop'] = key
else:
@@ -2563,7 +2563,7 @@
@return: the current server time
@rtype: L{Timestamp}
"""
- if MediaWikiVersion(self.version()) >= MediaWikiVersion("1.16"):
+ if self.mw_version >= '1.16':
return pywikibot.Timestamp.fromISOformat(
self.siteinfo.get('time', expiry=0))
else:
@@ -2634,7 +2634,7 @@
# and Image became File with Image as an alias.
# For versions lower than 1.14, APISite needs to override
# the defaults defined in Namespace.
- is_mw114 = MediaWikiVersion(self.version()) >= MediaWikiVersion('1.14')
+ is_mw114 = self.mw_version >= '1.14'

for nsdata in self.siteinfo.get('namespaces', cache=False).values():
ns = nsdata.pop('id')
@@ -2757,6 +2757,19 @@
return version

@property
+ def mw_version(self):
+ """Return self.version() as a MediaWikiVersion object.
+
+ Cache the result for 24 hours.
+ @rtype: MediaWikiVersion
+ """
+ mw_ver, cache_time = getattr(self, '_mw_version_time', (None, None))
+ if mw_ver is None or time.time() - cache_time > 60 * 60 * 24:
+ mw_ver = MediaWikiVersion(self.version())
+ setattr(self, '_mw_version_time', (mw_ver, time.time()))
+ return mw_ver
+
+ @property
def has_image_repository(self):
"""Return True if site has a shared image repository like Commons."""
code, fam = self.shared_image_repository()
@@ -3374,7 +3387,7 @@
else:
rvgen.request['titles'] = list(cache.keys())
rvgen.request['rvprop'] = rvprop
- if self.version() >= MediaWikiVersion('1.32'):
+ if self.mw_version >= '1.32':
rvgen.request['rvslots'] = '*'
pywikibot.output(u"Retrieving %s pages from %s."
% (len(cache), self))
@@ -3426,19 +3439,19 @@

Valid tokens depend on mw version.
"""
- _version = MediaWikiVersion(self.version())
- if _version < MediaWikiVersion('1.20'):
+ mw_ver = self.mw_version
+ if mw_ver < '1.20':
types_wiki = self._paraminfo.parameter('query+info',
'token')['type']
types_wiki.append('patrol')
valid_types = [token for token in types if token in types_wiki]

# Pre 1.17, preload token was the same as the edit token.
- if _version < MediaWikiVersion('1.17'):
+ if mw_ver < '1.17':
if 'patrol' in types and 'edit' not in valid_types:
valid_types.append('edit')

- elif _version < MediaWikiVersion('1.24wmf19'):
+ elif mw_ver < '1.24wmf19':
types_wiki = self._paraminfo.parameter('tokens',
'type')['type']
valid_types = [token for token in types if token in types_wiki]
@@ -3496,8 +3509,8 @@
r'Action \'\w+\' is not allowed for the current user', text)

user_tokens = {}
- _version = MediaWikiVersion(self.version())
- if _version < MediaWikiVersion('1.20'):
+ mw_ver = self.mw_version
+ if mw_ver < '1.20':
if all:
types_wiki = self._paraminfo.parameter('query+info',
'token')['type']
@@ -3521,8 +3534,7 @@
# patrol token require special handling.
# TODO: try to catch exceptions?
if 'patrol' in valid_tokens:
- if MediaWikiVersion(
- '1.14') <= _version < MediaWikiVersion('1.17'):
+ if '1.14' <= mw_ver < '1.17':
if 'edit' in user_tokens:
user_tokens['patrol'] = user_tokens['edit']
else:
@@ -3541,7 +3553,7 @@
if 'patroltoken' in item:
user_tokens['patrol'] = item['patroltoken']
else:
- if _version < MediaWikiVersion('1.24wmf19'):
+ if mw_ver < '1.24wmf19':
if all is not False:
types_wiki = self._paraminfo.parameter('tokens',
'type')['type']
@@ -3903,9 +3915,7 @@
if isinstance(member_type, basestring):
member_type = {member_type}

- if (member_type and
- (sortby == 'timestamp' or
- MediaWikiVersion(self.version()) < MediaWikiVersion("1.12"))):
+ if member_type and (sortby == 'timestamp' or self.mw_version < '1.12'):
# Retrofit cmtype/member_type, available on MW API 1.12+,
# to use namespaces available on earlier versions.

@@ -3963,7 +3973,7 @@
raise ValueError("categorymembers: "
"invalid combination of 'sortby' and 'endtime'")
if startprefix and sortby != 'timestamp':
- if self.version() < MediaWikiVersion('1.18'):
+ if self.mw_version < '1.18':
raise NotImplementedError(
'categorymembers: "startprefix" requires MW 1.18+')
cmargs['gcmstartsortkeyprefix'] = startprefix
@@ -3976,7 +3986,7 @@
raise ValueError("categorymembers: "
"invalid combination of 'sortby' and 'startsort'")
if endprefix and sortby != 'timestamp':
- if self.version() < MediaWikiVersion('1.18'):
+ if self.mw_version < '1.18':
raise NotImplementedError(
'categorymembers: "endprefix" requires MW 1.18+')
cmargs['cmendsortkeyprefix'] = endprefix
@@ -4069,13 +4079,13 @@
rvargs = {'type_arg': 'info|revisions'}

rvargs['rvprop'] = ['ids', 'timestamp', 'flags', 'comment', 'user']
- if self.version() >= MediaWikiVersion('1.32'):
+ if self.mw_version >= '1.32':
rvargs['rvslots'] = '*'
# 'roles' is not implemented in Revision class yet.
# rvargs['rvprop'].append('roles')
- if MediaWikiVersion(self.version()) >= MediaWikiVersion('1.21'):
+ if self.mw_version >= '1.21':
rvargs['rvprop'].append('contentmodel')
- if MediaWikiVersion(self.version()) >= MediaWikiVersion('1.19'):
+ if self.mw_version >= '1.19':
rvargs['rvprop'].append('sha1')
if content:
rvargs['rvprop'].append('content')
@@ -4489,7 +4499,7 @@
total=total)
bkgen.request['bkprop'] = ['id', 'user', 'by', 'timestamp', 'expiry',
'reason', 'range', 'flags']
- if MediaWikiVersion(self.version()) >= MediaWikiVersion('1.18'):
+ if self.mw_version >= '1.18':
bkgen.request['bkprop'] += ['userid']
if starttime:
bkgen.request["bkstart"] = starttime
@@ -4729,7 +4739,7 @@
if reverse:
rcgen.request["rcdir"] = "newer"
if pagelist:
- if MediaWikiVersion(self.version()) > MediaWikiVersion("1.14"):
+ if self.mw_version > '1.14':
pywikibot.warning(
u"recentchanges: pagelist option is disabled; ignoring.")
else:
@@ -4783,7 +4793,7 @@
type such as NoneType or bool
"""
where_types = ['text', 'title', 'titles']
- if MediaWikiVersion(self.version()) >= MediaWikiVersion('1.17'):
+ if self.mw_version >= '1.17':
where_types.append('nearmatch')
if not searchstring:
raise Error("search: searchstring cannot be empty")
@@ -4803,7 +4813,7 @@
issue_deprecation_warning("where='titles'",
"where='title'", 2,
since='20160224')
- if MediaWikiVersion(self.version()) < MediaWikiVersion('1.11'):
+ if self.mw_version < '1.11':
where = 'titles'
else:
where = 'title'
@@ -4813,7 +4823,7 @@
gsrsearch=searchstring, gsrwhat=where,
namespaces=namespaces,
total=total, g_content=content)
- if MediaWikiVersion(self.version()) < MediaWikiVersion('1.23'):
+ if self.mw_version < '1.23':
srgen.request['gsrredirects'] = get_redirects
return srgen

@@ -4987,9 +4997,9 @@
"""
usprop = ['blockinfo', 'groups', 'editcount', 'registration',
'emailable']
- if MediaWikiVersion(self.version()) >= MediaWikiVersion('1.16'):
+ if self.mw_version >= '1.16':
usprop.append('gender')
- if MediaWikiVersion(self.version()) >= MediaWikiVersion('1.17'):
+ if self.mw_version >= '1.17':
usprop.append('rights')
usgen = api.ListGenerator(
'users', site=self, parameters={
@@ -5044,11 +5054,11 @@
redirects = mapping[redirects]
params = {}
if redirects is not None:
- if MediaWikiVersion(self.version()) < MediaWikiVersion('1.26'):
+ if self.mw_version < '1.26':
if redirects == 'all':
warn("parameter redirects=None to retrieve 'all' random"
'page types is not supported by mw version {0}. '
- 'Using default.'.format(self.version()),
+ 'Using default.'.format(self.mw_version),
UserWarning)
params['grnredirect'] = redirects == 'redirects'
else:
@@ -5182,7 +5192,7 @@

watch_items = {'watch', 'unwatch', 'preferences', 'nochange'}
if watch in watch_items:
- if MediaWikiVersion(self.version()) < MediaWikiVersion("1.16"):
+ if self.mw_version < '1.16':
if watch in ['preferences', 'nochange']:
pywikibot.warning(u'The watch value {0} is not supported '
'by {1}'.format(watch, self))
@@ -5329,8 +5339,7 @@
@type reason: str
"""
# Check wiki version to see if action=mergehistory is supported
- min_version = MediaWikiVersion('1.27.0-wmf.13')
- if MediaWikiVersion(self.version()) < min_version:
+ if self.mw_version < '1.27.0-wmf.13':
raise FatalServerError(str(self) + ' version must be '
'1.27.0-wmf.13 or newer to support the '
'history merge API.')
@@ -5811,8 +5820,7 @@
revision = revision or set()

# TODO: remove exeception for mw < 1.22
- if (revid or revision) and MediaWikiVersion(
- self.version()) < MediaWikiVersion("1.22"):
+ if (revid or revision) and self.mw_version < '1.22':
raise NotImplementedError(
u'Support of "revid" parameter\n'
u'is not implemented in MediaWiki version < "1.22"')
@@ -5940,7 +5948,7 @@
'token': self.tokens['watch'],
'unwatch': unwatch}
unwatch = 'unwatched' if unwatch else 'watched'
- if MediaWikiVersion(self.version()) >= MediaWikiVersion('1.23'):
+ if self.mw_version >= '1.23':
parameters['titles'] = pages
req = self._simple_request(**parameters)
results = req.submit()
@@ -6058,7 +6066,7 @@
upload action.

"""
- if MediaWikiVersion(self.version()) >= MediaWikiVersion('1.27wmf9'):
+ if self.mw_version >= '1.27wmf9':
return not self._siteinfo.get('general')['uploadsenabled']
if hasattr(self, '_uploaddisabled'):
return self._uploaddisabled
@@ -6298,9 +6306,8 @@
# upload local file
throttle = True
filesize = os.path.getsize(source_filename)
- chunked_upload = (chunk_size > 0 and chunk_size < filesize and
- MediaWikiVersion(
- self.version()) >= MediaWikiVersion('1.20'))
+ chunked_upload = (
+ 0 < chunk_size < filesize and self.mw_version >= '1.20')
with open(source_filename, 'rb') as f:
final_request = self._request(
throttle=throttle, parameters={
@@ -6824,7 +6831,7 @@
assert 'create' in self.protection_types(), \
"'create' should be a valid protection type."
if type == 'create':
- if MediaWikiVersion(self.version()) < MediaWikiVersion('1.15'):
+ if self.mw_version < '1.15':
raise NotImplementedError(
'protectedpages(type=create) requires MW 1.15+')

diff --git a/tests/api_tests.py b/tests/api_tests.py
index 7e0d9b6..c31d5fd 100644
--- a/tests/api_tests.py
+++ b/tests/api_tests.py
@@ -20,7 +20,6 @@
from pywikibot.throttle import Throttle
from pywikibot.tools import (
suppress_warnings,
- MediaWikiVersion,
PY2,
UnicodeType,
)
@@ -195,7 +194,7 @@

self.assertIn('main', pi._paraminfo)
self.assertIn('paraminfo', pi._paraminfo)
- if MediaWikiVersion(self.site.version()) >= MediaWikiVersion("1.12"):
+ if self.site.mw_version >= '1.12':
self.assertEqual(len(pi),
len(pi.preloaded_modules))

@@ -235,7 +234,7 @@
self.assertIn('paraminfo', pi._paraminfo)
self.assertIn('pageset', pi._paraminfo)

- if MediaWikiVersion(self.site.version()) < MediaWikiVersion("1.12"):
+ if self.site.mw_version < '1.12':
return

if 'query' in pi.preloaded_modules:
@@ -248,7 +247,7 @@
self.assertEqual(len(pi),
len(pi.preloaded_modules))

- if MediaWikiVersion(site.version()) >= MediaWikiVersion("1.21"):
+ if site.mw_version >= '1.21':
# 'generator' was added to 'pageset' in 1.21
generators_param = pi.parameter('pageset', 'generator')
self.assertGreater(len(generators_param['type']), 1)
@@ -265,7 +264,7 @@
self.assertIn('pageset', pi._paraminfo)
self.assertIn('query', pi._paraminfo)

- if MediaWikiVersion(site.version()) >= MediaWikiVersion("1.21"):
+ if site.mw_version >= '1.21':
# 'generator' was added to 'pageset' in 1.21
pageset_generators_param = pi.parameter('pageset', 'generator')
query_generators_param = pi.parameter('query', 'generator')
@@ -282,7 +281,7 @@

self.assertIn('main', pi._paraminfo)
self.assertIn('paraminfo', pi._paraminfo)
- if MediaWikiVersion(self.site.version()) >= MediaWikiVersion("1.12"):
+ if self.site.mw_version >= '1.12':
self.assertEqual(len(pi),
1 + len(pi.preloaded_modules))

@@ -296,7 +295,7 @@

self.assertIsInstance(param['type'], list)

- if MediaWikiVersion(self.site.version()) < MediaWikiVersion("1.12"):
+ if self.site.mw_version < '1.12':
return

self.assertIn('protection', param['type'])
@@ -311,7 +310,7 @@

self.assertIn('main', pi._paraminfo)
self.assertIn('paraminfo', pi._paraminfo)
- if MediaWikiVersion(self.site.version()) >= MediaWikiVersion("1.12"):
+ if self.site.mw_version >= '1.12':
self.assertEqual(len(pi),
1 + len(pi.preloaded_modules))

@@ -325,7 +324,7 @@

self.assertIsInstance(param['type'], list)

- if MediaWikiVersion(self.site.version()) < MediaWikiVersion("1.12"):
+ if self.site.mw_version < '1.12':
return

self.assertIn('user', param['type'])
@@ -342,7 +341,7 @@
self.assertIn('main', pi._paraminfo)
self.assertIn('paraminfo', pi._paraminfo)

- if MediaWikiVersion(self.site.version()) < MediaWikiVersion("1.12"):
+ if self.site.mw_version < '1.12':
return

self.assertEqual(len(pi),
@@ -368,7 +367,7 @@
self.assertIn('main', pi._paraminfo)
self.assertIn('paraminfo', pi._paraminfo)

- if MediaWikiVersion(self.site.version()) < MediaWikiVersion("1.12"):
+ if self.site.mw_version < '1.12':
return

self.assertEqual(len(pi),
@@ -473,7 +472,7 @@
self.assertIn('main', pi._paraminfo)
self.assertIn('paraminfo', pi._paraminfo)

- if MediaWikiVersion(self.site.version()) >= MediaWikiVersion("1.12"):
+ if self.site.mw_version >= '1.12':
self.assertEqual(len(pi),
1 + len(pi.preloaded_modules))

@@ -482,10 +481,10 @@
def test_new_mode(self):
"""Test the new modules-only mode explicitly."""
site = self.get_site()
- if MediaWikiVersion(site.version()) < MediaWikiVersion('1.25wmf4'):
+ if site.mw_version < '1.25wmf4':
raise unittest.SkipTest(
"version %s doesn't support the new paraminfo api"
- % site.version())
+ % site.mw_version)
pi = api.ParamInfo(site, modules_only_mode=True)
pi.fetch(['info'])
self.assertIn('query+info', pi._paraminfo)
@@ -786,7 +785,7 @@
params = {
'rvprop': 'ids|flags|timestamp|user|comment|content',
'titles': '|'.join(titles)}
- if self.site.version() >= MediaWikiVersion('1.32'):
+ if self.site.mw_version >= '1.32':
params['rvslots'] = 'main'
gen = api.PropertyGenerator(
site=self.site,
diff --git a/tests/edit_tests.py b/tests/edit_tests.py
index 62f8750..0c7206f 100644
--- a/tests/edit_tests.py
+++ b/tests/edit_tests.py
@@ -13,7 +13,6 @@

from pywikibot import config
from pywikibot import page_put_queue
-from pywikibot.tools import MediaWikiVersion

from tests.aspects import unittest, TestCase
from tests.oauth_tests import OAuthSiteTestCase
@@ -88,7 +87,7 @@
dest = pywikibot.Page(site, 'User:Sn1per/MergeTest2')

# Make sure the wiki supports action=mergehistory
- if MediaWikiVersion(site.version()) < MediaWikiVersion('1.27.0-wmf.13'):
+ if site.mw_version < '1.27.0-wmf.13':
raise unittest.SkipTest('Wiki version must be 1.27.0-wmf.13 or '
'newer to support the history merge API.')

diff --git a/tests/logentry_tests.py b/tests/logentry_tests.py
index deb98f7..559cb2f 100644
--- a/tests/logentry_tests.py
+++ b/tests/logentry_tests.py
@@ -15,7 +15,6 @@
from pywikibot.logentries import (
LogEntryFactory, OtherLogEntry, UserTargetLogEntry)
from pywikibot.tools import (
- MediaWikiVersion,
UnicodeType as unicode,
)

@@ -61,8 +60,7 @@
# This is an assertion as the tests don't make sense with newer
# MW versions and otherwise it might not be visible that the test
# isn't run on an older wiki.
- self.assertLess(MediaWikiVersion(self.site.version()),
- MediaWikiVersion('1.20'))
+ self.assertLess(self.site.mw_version, '1.20')
return next(iter(self.site.logevents(logtype=logtype, total=1)))

def _test_logevent(self, logtype):
diff --git a/tests/page_tests.py b/tests/page_tests.py
index f9d6601..bed1cc8 100644
--- a/tests/page_tests.py
+++ b/tests/page_tests.py
@@ -18,7 +18,6 @@
from pywikibot import InvalidTitle

from pywikibot.tools import (
- MediaWikiVersion,
PY2,
StringTypes as basestring,
suppress_warnings,
@@ -579,7 +578,7 @@
mainpage = self.get_mainpage()
image = pywikibot.FilePage(site, 'File:Jean-Léon Gérôme 003.jpg')

- if MediaWikiVersion(site.version()) < MediaWikiVersion('1.20'):
+ if site.mw_version < '1.20':
self.assertRaises(NotImplementedError, mainpage.page_image)
elif site.has_extension('PageImages'):
mainpage_image = mainpage.page_image()
@@ -611,7 +610,7 @@
self.assertDeprecation()

self._reset_messages()
- if MediaWikiVersion(self.site.version()) >= MediaWikiVersion('1.16'):
+ if self.site.mw_version >= '1.16':
self.assertIsInstance(mainpage.previous_revision_id, int)
self.assertEqual(mainpage.previous_revision_id,
mainpage.latest_revision.parent_id)
diff --git a/tests/paraminfo_tests.py b/tests/paraminfo_tests.py
index aebc64e..4c6f757 100644
--- a/tests/paraminfo_tests.py
+++ b/tests/paraminfo_tests.py
@@ -11,7 +11,6 @@
from pywikibot.family import WikimediaFamily
from pywikibot.page import Claim, Property
from pywikibot.site import DataSite
-from pywikibot.tools import MediaWikiVersion

from tests.aspects import (
unittest,
@@ -82,7 +81,7 @@
def test_watchlist_show_flags(self):
"""Test watchlist show flags."""
types = ['minor', 'bot', 'anon', 'patrolled']
- if MediaWikiVersion(self.site.version()) >= MediaWikiVersion('1.24'):
+ if self.site.mw_version >= '1.24':
types.append('unread')

known = types + ['!%s' % item for item in types]
@@ -93,12 +92,12 @@
"""Test watchlist type."""
known = ['edit', 'new', 'log']

- _version = MediaWikiVersion(self.site.version())
+ mw_ver = self.site.mw_version

- if _version >= MediaWikiVersion('1.20'):
+ if mw_ver >= '1.20':
known.append('external')
- if _version.version >= (1, 27):
- if _version >= MediaWikiVersion('1.27.0-wmf.4') or _version.suffix == 'alpha':
+ if mw_ver.version >= (1, 27):
+ if mw_ver >= '1.27.0-wmf.4' or mw_ver.suffix == 'alpha':
known.append('categorize')

self._check_param_values(self.site, 'query+watchlist', 'type', known)
@@ -125,7 +124,7 @@
'text/css',
'text/plain',
]
- if MediaWikiVersion(self.site.version()) >= MediaWikiVersion('1.24'):
+ if self.site.mw_version >= '1.24':
base.append('application/json')
if isinstance(self.site, DataSite):
# It is not clear when this format has been added, see T129281.
@@ -151,7 +150,7 @@
'Scribunto',
'JsonSchema',
]
- if MediaWikiVersion(self.site.version()) >= MediaWikiVersion('1.24'):
+ if self.site.mw_version >= '1.24':
base.append('json')

self._check_param_subset(self.site, 'edit', 'contentmodel', base)
diff --git a/tests/site_tests.py b/tests/site_tests.py
index cf7a9b4..ee7b90e 100644
--- a/tests/site_tests.py
+++ b/tests/site_tests.py
@@ -114,7 +114,7 @@

def test_siteinfo_normal_call(self):
"""Test calling the Siteinfo without setting dump."""
- if MediaWikiVersion(self.site.version()) < MediaWikiVersion('1.16'):
+ if self.site.mw_version < '1.16':
raise unittest.SkipTest('requires v1.16+')

old = self.site.siteinfo('general')
@@ -317,7 +317,7 @@
# first-letter (== only first non-namespace letter is case insensitive)
# See also: https://www.mediawiki.org/wiki/Manual:$wgCapitalLinks
self.assertTrue(mysite.sametitle("Special:Always", "Special:always"))
- if MediaWikiVersion(mysite.version()) >= MediaWikiVersion('1.16'):
+ if mysite.mw_version >= '1.16':
self.assertTrue(mysite.sametitle('User:Always', 'User:always'))
self.assertTrue(mysite.sametitle('MediaWiki:Always',
'MediaWiki:always'))
@@ -1031,7 +1031,7 @@

def test_protectedpages_create(self):
"""Test that protectedpages returns protected page titles."""
- if MediaWikiVersion(self.site.version()) < MediaWikiVersion('1.15'):
+ if self.site.mw_version < '1.15':
raise unittest.SkipTest('requires v1.15+')

pages = list(self.get_site().protectedpages(type='create', total=10))
@@ -1075,7 +1075,7 @@

def test_pages_with_property(self):
"""Test pages_with_property method."""
- if MediaWikiVersion(self.site.version()) < MediaWikiVersion('1.21'):
+ if self.site.mw_version < '1.21':
raise unittest.SkipTest('requires v1.21+')
mysite = self.get_site()
pnames = mysite.get_property_names()
@@ -1440,7 +1440,7 @@
mysite = self.site
mainpage = self.get_mainpage()
imagepage = self.imagepage
- if MediaWikiVersion(mysite.version()) <= MediaWikiVersion("1.14"):
+ if mysite.mw_version <= '1.14':
pagelist = [mainpage]
if imagepage:
pagelist += [imagepage]
@@ -2067,7 +2067,7 @@
self.assertIsInstance(result, dict)

params = {'rcid': 0}
- if mysite.version() >= MediaWikiVersion('1.22'):
+ if mysite.mw_version >= '1.22':
params['revid'] = [0, 1]

try:
@@ -2149,7 +2149,7 @@
"""Store version."""
super(TestSiteTokens, self).setUp()
self.mysite = self.get_site()
- self._version = MediaWikiVersion(self.mysite.version())
+ self._version = self.mysite.mw_version
self.orig_version = self.mysite.version

def tearDown(self):
@@ -2360,7 +2360,7 @@

def test_siteinfo_v1_16(self):
"""Test v.16+ siteinfo values."""
- if MediaWikiVersion(self.site.version()) < MediaWikiVersion('1.16'):
+ if self.site.mw_version < '1.16':
raise unittest.SkipTest('requires v1.16+')

mysite = self.get_site()
diff --git a/tests/wikibase_edit_tests.py b/tests/wikibase_edit_tests.py
index d5d8a02..63dee40 100644
--- a/tests/wikibase_edit_tests.py
+++ b/tests/wikibase_edit_tests.py
@@ -15,7 +15,6 @@
import time

import pywikibot
-from pywikibot.tools import MediaWikiVersion

from tests.aspects import unittest, WikibaseTestCase

@@ -242,8 +241,7 @@
item = self._clean_item(testsite, 'P20480')

# Make sure the wiki supports wikibase-conceptbaseuri
- version = testsite.version()
- if MediaWikiVersion(version) < MediaWikiVersion('1.29.0-wmf.2'):
+ if testsite.mw_version < '1.29.0-wmf.2':
raise unittest.SkipTest('Wiki version must be 1.29.0-wmf.2 or '
'newer to support unbound uncertainties.')

@@ -267,8 +265,7 @@
item = self._clean_item(testsite, 'P69')

# Make sure the wiki supports unbound uncertainties
- version = testsite.version()
- if MediaWikiVersion(version) < MediaWikiVersion('1.29.0-wmf.2'):
+ if testsite.mw_version < '1.29.0-wmf.2':
raise unittest.SkipTest('Wiki version must be 1.29.0-wmf.2 or '
'newer to support unbound uncertainties.')

@@ -290,8 +287,7 @@
item = self._clean_item(testsite, 'P69')

# Make sure the wiki supports wikibase-conceptbaseuri
- version = testsite.version()
- if MediaWikiVersion(version) < MediaWikiVersion('1.28-wmf.23'):
+ if testsite.mw_version < '1.28-wmf.23':
raise unittest.SkipTest('Wiki version must be 1.28-wmf.23 or '
'newer to expose wikibase-conceptbaseuri.')

diff --git a/tests/wikibase_tests.py b/tests/wikibase_tests.py
index 7407847..81164d1 100644
--- a/tests/wikibase_tests.py
+++ b/tests/wikibase_tests.py
@@ -511,7 +511,7 @@
"""Override setup to store repo and it's version."""
super(WikidataTestCase, self).setUp()
self.repo = self.get_repo()
- self.version = MediaWikiVersion(self.repo.version())
+ self.version = self.repo.mw_version

def test_WbQuantity_unbound(self):
"""Test WbQuantity for value without bounds."""

To view, visit change 455505. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-MessageType: merged
Gerrit-Change-Id: I75de443b24d2eb478724c416db8f2d734b6bb806
Gerrit-Change-Number: 455505
Gerrit-PatchSet: 5
Gerrit-Owner: Dalba <dalba.wiki@gmail.com>
Gerrit-Reviewer: Dalba <dalba.wiki@gmail.com>
Gerrit-Reviewer: John Vandenberg <jayvdb@gmail.com>
Gerrit-Reviewer: Xqt <info@gno.de>
Gerrit-Reviewer: Zoranzoki21 <zorandori4444@gmail.com>
Gerrit-Reviewer: jenkins-bot (75)
Gerrit-CC: Zhuyifei1999 <zhuyifei1999@gmail.com>