jenkins-bot has submitted this change. ( https://gerrit.wikimedia.org/r/c/pywikibot/core/+/1024858?usp=email )
Change subject: [IMPR] provide -nouser option with version.py
......................................................................
[IMPR] provide -nouser option with version.py
Change-Id: Iea41605c5833de99a8f7441ff5ea750a8fa344cf
---
M pywikibot/scripts/version.py
1 file changed, 17 insertions(+), 2 deletions(-)
Approvals:
jenkins-bot: Verified
Xqt: Looks good to me, approved
diff --git a/pywikibot/scripts/version.py b/pywikibot/scripts/version.py
index 1178caf..0bc0af8 100755
--- a/pywikibot/scripts/version.py
+++ b/pywikibot/scripts/version.py
@@ -1,8 +1,14 @@
#!/usr/bin/env python3
"""Script to determine the Pywikibot version (tag, revision and date).
+The following option is supported:
+
+-usernames print usernames for each registered family
+
.. versionchanged:: 7.0
version script was moved to the framework scripts folder
+.. versionadded:: 9.2
+ the *-nouser* option.
"""
#
# (C) Pywikibot team, 2007-2024
@@ -51,7 +57,11 @@
def main(*args: str) -> None:
- """Print pywikibot version and important settings."""
+ """Print pywikibot version and important settings.
+
+ .. versionchanged:: 9.2
+ usernames are not printed with ``-nouser`` option.
+ """
pywikibot.info('Pywikibot: ' + getversion())
pywikibot.info('Release version: ' + pywikibot.__version__)
pywikibot.info('packaging version: ' + packaging.__version__)
@@ -90,7 +100,12 @@
os.environ.get(environ_name, 'Not set') or "''"))
pywikibot.info('Config base dir: ' + pywikibot.config.base_dir)
- for family, usernames in pywikibot.config.usernames.items():
+
+ if '-nouser' in sys.argv:
+ usernames_items = {}
+ else:
+ usernames_items = pywikibot.config.usernames.items()
+ for family, usernames in usernames_items:
if not usernames:
continue
pywikibot.info(f"Usernames for family '{family}':")
--
To view, visit https://gerrit.wikimedia.org/r/c/pywikibot/core/+/1024858?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.wikimedia.org/r/settings
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Change-Id: Iea41605c5833de99a8f7441ff5ea750a8fa344cf
Gerrit-Change-Number: 1024858
Gerrit-PatchSet: 1
Gerrit-Owner: Xqt <info(a)gno.de>
Gerrit-Reviewer: Xqt <info(a)gno.de>
Gerrit-Reviewer: jenkins-bot
Gerrit-MessageType: merged
jenkins-bot has submitted this change. ( https://gerrit.wikimedia.org/r/c/pywikibot/i18n/+/1024380?usp=email )
Change subject: Localisation updates from https://translatewiki.net.
......................................................................
Localisation updates from https://translatewiki.net.
Change-Id: Ic0117459816a81546dc2eaf32ff75c0673b1d14b
---
M checkimages/be-tarask.json
1 file changed, 3 insertions(+), 0 deletions(-)
Approvals:
L10n-bot: Looks good to me, approved
jenkins-bot: Verified
diff --git a/checkimages/be-tarask.json b/checkimages/be-tarask.json
index 48ad854..1379a9a 100644
--- a/checkimages/be-tarask.json
+++ b/checkimages/be-tarask.json
@@ -9,6 +9,9 @@
"checkimages-doubles-file-comment": "Робат: файл ужо ў Вікісховішчы, можа быць выдалены",
"checkimages-doubles-head": "Файл-дублікат",
"checkimages-doubles-talk-comment": "Робат: паведамленьне, што файл ужо існуе ў Вікісховішчы",
+ "checkimages-doubles-talk-text": "Дзякуем за загрузку %(upload)s. Аднак гэты файл ёсьць копіяй:%(image)sРобат пазначыў дублікатам файл, які менш выкарыстоўваецца ці найпазьнейшы. Калі ві лічыце, што слушней пакінуць файл, які пазначаны да хуткага выдаленьня, сьмела выдаляйце дублікаты файлаў і выдаляйце шаблёны выдаленьня з файлаў, якія варта пакінуць. Гэта аўтаматычнае паведамленьне ад %(bot)s.",
+ "checkimages-forced-mode": "('''прымусовы рэжым''')",
+ "checkimages-has-duplicates": "мае гэткія дублікаты%(force)s:",
"checkimages-log-comment": "Робат: абнаўленьне журналу",
"checkimages-no-license-head": "Выява безь ліцэнзіі",
"checkimages-source-tag-comment": "Робат: пазначаю новазагружаны неадзначаны файл",
--
To view, visit https://gerrit.wikimedia.org/r/c/pywikibot/i18n/+/1024380?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.wikimedia.org/r/settings
Gerrit-Project: pywikibot/i18n
Gerrit-Branch: master
Gerrit-Change-Id: Ic0117459816a81546dc2eaf32ff75c0673b1d14b
Gerrit-Change-Number: 1024380
Gerrit-PatchSet: 1
Gerrit-Owner: L10n-bot <l10n-bot(a)translatewiki.net>
Gerrit-Reviewer: L10n-bot <l10n-bot(a)translatewiki.net>
Gerrit-Reviewer: jenkins-bot
Gerrit-MessageType: merged
jenkins-bot has submitted this change. ( https://gerrit.wikimedia.org/r/c/pywikibot/core/+/1023474?usp=email )
Change subject: [tests] Show user rights if UserRightsError is raised during tests
......................................................................
[tests] Show user rights if UserRightsError is raised during tests
Bug: T363190
Change-Id: Ic46e899e0fdc07ee34e1b2cd855e2fdd51835ead
---
M pywikibot/site/_decorators.py
M tests/site_decorators_tests.py
2 files changed, 48 insertions(+), 46 deletions(-)
Approvals:
Xqt: Looks good to me, approved
jenkins-bot: Verified
diff --git a/pywikibot/site/_decorators.py b/pywikibot/site/_decorators.py
index 3656e4e..6539355 100644
--- a/pywikibot/site/_decorators.py
+++ b/pywikibot/site/_decorators.py
@@ -1,15 +1,23 @@
"""Decorators used by site models."""
#
-# (C) Pywikibot team, 2008-2023
+# (C) Pywikibot team, 2008-2024
#
# Distributed under the terms of the MIT license.
#
from __future__ import annotations
+import os
+from textwrap import fill
+
from pywikibot.exceptions import UnknownExtensionError, UserRightsError
from pywikibot.tools import MediaWikiVersion, manage_wrapping
+CLOSED_WIKI_MSG = (
+ 'Site {site} has been closed. Only steward can perform requested action.'
+)
+
+
def must_be(group: str | None = None):
"""Decorator to require a certain user status when method is called.
@@ -24,15 +32,11 @@
grp = kwargs.pop('as_group', group)
if self.obsolete:
if not self.has_group('steward'):
- raise UserRightsError(
- 'Site {} has been closed. Only steward '
- 'can perform requested action.'
- .format(self.sitename))
+ raise UserRightsError(CLOSED_WIKI_MSG.format(site=self))
elif not self.has_group(grp):
- raise UserRightsError('User "{}" is not part of the required '
- 'user group "{}"'
- .format(self.user(), grp))
+ raise UserRightsError(f'User "{self.user()}" is not part of '
+ f'the required user group "{grp}"')
return fn(self, *args, **kwargs)
@@ -53,8 +57,8 @@
def callee(self, *args, **kwargs):
if not self.has_extension(extension):
raise UnknownExtensionError(
- 'Method "{}" is not implemented without the extension {}'
- .format(fn.__name__, extension))
+ f'Method "{fn.__name__}" is not implemented without the '
+ f'extension {extension}')
return fn(self, *args, **kwargs)
manage_wrapping(callee, fn)
@@ -74,15 +78,18 @@
def callee(self, *args, **kwargs):
if self.obsolete:
if not self.has_group('steward'):
- raise UserRightsError(
- 'Site {} has been closed. Only stewards '
- 'can perform the requested action.'
- .format(self.sitename))
+ raise UserRightsError(CLOSED_WIKI_MSG.format(site=self))
elif right is not None and not self.has_right(right):
- raise UserRightsError('User "{}" does not have required '
- 'user right "{}"'
- .format(self.user(), right))
+ if os.environ.get('PYWIKIBOT_TEST_RUNNING', '0') == '1':
+ rights = ' but:\n' + fill(
+ str(sorted(self.userinfo['rights'])),
+ width=76, break_on_hyphens=False)
+ else:
+ rights = '.'
+ raise UserRightsError(
+ f'User "{self.user()}" does not have required user right '
+ f'"{right}"{rights}')
return fn(self, *args, **kwargs)
manage_wrapping(callee, fn)
@@ -102,9 +109,8 @@
def callee(self, *args, **kwargs):
if MediaWikiVersion(self.version()) < MediaWikiVersion(version):
raise NotImplementedError(
- 'Method or function "{}"\n'
- "isn't implemented in MediaWiki version < {}"
- .format(fn.__name__, version))
+ f'Method or function "{fn.__name__}"\n'
+ f"isn't implemented in MediaWiki version < {version}")
return fn(self, *args, **kwargs)
manage_wrapping(callee, fn)
diff --git a/tests/site_decorators_tests.py b/tests/site_decorators_tests.py
index a1e3c71..8256132 100755
--- a/tests/site_decorators_tests.py
+++ b/tests/site_decorators_tests.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python3
"""Tests against a fake Site object."""
#
-# (C) Pywikibot team, 2012-2023
+# (C) Pywikibot team, 2012-2024
#
# Distributed under the terms of the MIT license.
#
@@ -15,9 +15,9 @@
from tests.aspects import DeprecationTestCase, TestCase
-class TestMustBe(TestCase):
+class DecoratorTestsBase(TestCase):
- """Test cases for the must_be decorator."""
+ """Base class for decorator tests."""
net = False
@@ -30,20 +30,29 @@
self.family.name = 'test'
self.sitename = self.family.name + ':' + self.code
self._logged_in_as = None
- self._userinfo = []
self.obsolete = False
super().setUp()
- self.version = lambda: '1.23' # lowest supported release
+ self.version = lambda: '1.27' # lowest supported release
+
+ def user(self):
+ """Fake the logged in user."""
+ return self._logged_in_as
+
+
+class TestMustBe(DecoratorTestsBase):
+
+ """Test cases for the must_be decorator."""
+
+ def setUp(self):
+ """Creating fake variables to appear as a site."""
+ self._userinfo = []
+ super().setUp()
def login(self, group):
"""Fake the log in as required user group."""
self._logged_in_as = group
self._userinfo = [group]
- def user(self):
- """Fake the logged in user."""
- return self._logged_in_as
-
def has_group(self, group):
"""Fake the groups user belongs to."""
return group in self._userinfo
@@ -127,38 +136,25 @@
self.call_this_user_req_function(args, kwargs)
-class TestNeedRight(TestCase):
+class TestNeedRight(DecoratorTestsBase):
"""Test cases for the must_be decorator."""
- net = False
-
# Implemented without setUpClass(cls) and global variables as objects
# were not completely disposed and recreated but retained 'memory'
def setUp(self):
"""Creating fake variables to appear as a site."""
- self.code = 'test'
- self.family = lambda: None
- self.family.name = 'test'
- self.sitename = self.family.name + ':' + self.code
- self._logged_in_as = None
- self._userinfo = []
- self.obsolete = False
+ self.userinfo = {'rights': []}
super().setUp()
- self.version = lambda: '1.23' # lowest supported release
def login(self, group, right):
"""Fake the log in as required user group."""
self._logged_in_as = group
- self._userinfo = [right]
-
- def user(self):
- """Fake the logged in user."""
- return self._logged_in_as
+ self.userinfo['rights'] = [right]
def has_right(self, right):
"""Fake the groups user belongs to."""
- return right in self._userinfo
+ return right in self.userinfo['rights']
@need_right('edit')
def call_this_edit_req_function(self, *args, **kwargs):
--
To view, visit https://gerrit.wikimedia.org/r/c/pywikibot/core/+/1023474?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.wikimedia.org/r/settings
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Change-Id: Ic46e899e0fdc07ee34e1b2cd855e2fdd51835ead
Gerrit-Change-Number: 1023474
Gerrit-PatchSet: 5
Gerrit-Owner: Xqt <info(a)gno.de>
Gerrit-Reviewer: Xqt <info(a)gno.de>
Gerrit-Reviewer: jenkins-bot
Gerrit-MessageType: merged