Xqt has submitted this change. ( https://gerrit.wikimedia.org/r/c/pywikibot/core/+/834650 )
Change subject: [IMPR] move threading parts to tools.threading.py (part 1)
......................................................................
[IMPR] move threading parts to tools.threading.py (part 1)
Change-Id: I67da0e24271886fb4ce8e6570a4edb78f41c7237
---
R pywikibot/tools/__init.py
C pywikibot/tools/threading.py
2 files changed, 0 insertions(+), 0 deletions(-)
Approvals:
Xqt: Verified; Looks good to me, approved
diff --git a/pywikibot/tools/__init__.py b/pywikibot/tools/__init.py
similarity index 100%
rename from pywikibot/tools/__init__.py
rename to pywikibot/tools/__init.py
diff --git a/pywikibot/tools/__init__.py b/pywikibot/tools/threading.py
similarity index 100%
copy from pywikibot/tools/__init__.py
copy to pywikibot/tools/threading.py
--
To view, visit https://gerrit.wikimedia.org/r/c/pywikibot/core/+/834650
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: I67da0e24271886fb4ce8e6570a4edb78f41c7237
Gerrit-Change-Number: 834650
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/core/+/832730 )
Change subject: [bugfix] No longer raise NotimplementedError in Site.page_from_repository()
......................................................................
[bugfix] No longer raise NotimplementedError in Site.page_from_repository()
Also update documentation
Bug: T318033
Change-Id: I9fa8d34f2d89f561f9f01ec8ae6afe6472fae4d3
---
M pywikibot/page/_wikibase.py
M pywikibot/site/_apisite.py
M tests/wikibase_tests.py
3 files changed, 53 insertions(+), 12 deletions(-)
Approvals:
Xqt: Looks good to me, approved
jenkins-bot: Verified
diff --git a/pywikibot/page/_wikibase.py b/pywikibot/page/_wikibase.py
index 4193764..1d68362 100644
--- a/pywikibot/page/_wikibase.py
+++ b/pywikibot/page/_wikibase.py
@@ -942,6 +942,8 @@
:param get_redirect: return the item content, do not follow the
redirect, do not raise an exception.
:raise NotImplementedError: a value in args or kwargs
+ :raise IsRedirectPageError: instance is a redirect page and
+ get_redirect is not True
:return: actual data which entity holds
.. note:: dicts returned by this method are
@@ -995,6 +997,10 @@
:param site: Site to find the linked page of.
:type site: pywikibot.Site or database name
:param force: override caching
+ :param get_redirect: return the item content, do not follow the
+ redirect, do not raise an exception.
+ :raise IsRedirectPageError: instance is a redirect page
+ :raise NoPageError: site is not in :attr:`sitelinks`
"""
if force or not hasattr(self, '_content'):
self.get(force=force)
diff --git a/pywikibot/site/_apisite.py b/pywikibot/site/_apisite.py
index ef174a5..a290875 100644
--- a/pywikibot/site/_apisite.py
+++ b/pywikibot/site/_apisite.py
@@ -1177,21 +1177,51 @@
"""
Return a Page for this site object specified by Wikibase item.
+ Usage:
+
+ >>> site = pywikibot.Site('wikipedia:zh')
+ >>> page = site.page_from_repository('Q131303')
+ >>> page.title()
+ 'Hello World'
+
+ This method is able to upcast categories:
+
+ >>> site = pywikibot.Site('commons')
+ >>> page = site.page_from_repository('Q131303')
+ >>> page.title()
+ 'Category:Hello World'
+ >>> page
+ Category('Category:Hello World')
+
+ It also works for wikibase repositories:
+
+ >>> site = pywikibot.Site('wikidata')
+ >>> page = site.page_from_repository('Q5296')
+ >>> page.title()
+ 'Wikidata:Main Page'
+
+ If no page exists for a given site, None is returned:
+
+ >>> site = pywikibot.Site('wikidata')
+ >>> page = site.page_from_repository('Q131303')
+ >>> page is None
+ True
+
+ .. versionchanged:: 7.7
+ No longer raise NotimplementedError if used with a Wikibase
+ site.
+
:param item: id number of item, "Q###",
:return: Page, or Category object given by Wikibase item number
for this site object.
:raises pywikibot.exceptions.UnknownExtensionError: site has no
Wikibase extension
- :raises NotimplementedError: method not implemented for a Wikibase site
"""
if not self.has_data_repository:
raise UnknownExtensionError(
'Wikibase is not implemented for {}.'.format(self))
- if self.is_data_repository():
- raise NotImplementedError(
- 'page_from_repository method is not implemented for '
- 'Wikibase {}.'.format(self))
+
repo = self.data_repository()
dp = pywikibot.ItemPage(repo, item)
try:
diff --git a/tests/wikibase_tests.py b/tests/wikibase_tests.py
index d0617a8..3e48fdb 100755
--- a/tests/wikibase_tests.py
+++ b/tests/wikibase_tests.py
@@ -2056,11 +2056,13 @@
'wikidata': {
'family': 'wikidata',
'code': 'wikidata',
+ 'title': 'Wikidata:Main Page',
},
# test.wikidata is also
'wikidatatest': {
'family': 'wikidata',
'code': 'test',
+ 'title': r'Page \[\[wikidata:test:Q5296\]\] is a redirect page'
},
}
@@ -2072,14 +2074,17 @@
item = ItemPage.fromPage(page)
self.assertEqual(item.site, site)
- def test_page_from_repository_fails(self, key):
- """Test that page_from_repository method fails."""
+ def test_page_from_repository(self, key):
+ """Test that page_from_repository method works for wikibase too."""
site = self.get_site(key)
- dummy_item = 'Q1'
- regex = (r'^page_from_repository method is not implemented '
- r'for Wikibase .+\.$')
- with self.assertRaisesRegex(NotImplementedError, regex):
- site.page_from_repository(dummy_item)
+ try:
+ page = site.page_from_repository('Q5296')
+ except IsRedirectPageError:
+ with self.assertRaisesRegex(IsRedirectPageError,
+ self.sites[key]['title']):
+ raise
+ else:
+ self.assertEqual(page.title(), self.sites[key]['title'])
class TestUnconnectedClient(TestCase):
--
To view, visit https://gerrit.wikimedia.org/r/c/pywikibot/core/+/832730
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: I9fa8d34f2d89f561f9f01ec8ae6afe6472fae4d3
Gerrit-Change-Number: 832730
Gerrit-PatchSet: 4
Gerrit-Owner: Xqt <info(a)gno.de>
Gerrit-Reviewer: Matěj Suchánek <matejsuchanek97(a)gmail.com>
Gerrit-Reviewer: Xqt <info(a)gno.de>
Gerrit-Reviewer: jenkins-bot
Gerrit-MessageType: merged
Xqt has submitted this change. ( https://gerrit.wikimedia.org/r/c/pywikibot/core/+/832451 )
Change subject: [IMPR] Ability to set PYWIKIBOT_TEST_... environment variables with pwb wrapper
......................................................................
[IMPR] Ability to set PYWIKIBOT_TEST_... environment variables with pwb wrapper
- modify pwb.handle_args to extract PYWIKIBOT_TEST_... environment variables
- Set and restore PYWIKIBOT_TEST_... environment variables within
pwb.run_python_file
- update tests/README.rst documentation
Bug: T139847
Change-Id: Ibb7e3a78c32cfbb3eb22887ff67e3e43f87d4b41
---
M pwb.py
M tests/README.rst
2 files changed, 45 insertions(+), 9 deletions(-)
Approvals:
Xqt: Verified; Looks good to me, approved
diff --git a/pwb.py b/pwb.py
index bb8e0c5..dbbaf90 100755
--- a/pwb.py
+++ b/pwb.py
@@ -33,6 +33,8 @@
.. versionchanged:: 7.0
pwb wrapper was added to the Python site package lib
+.. versionchanged:: 7.7
+ pwb wrapper is able to set ``PYWIKIBOT_TEST_...`` environment variables
"""
# (C) Pywikibot team, 2012-2022
#
@@ -109,6 +111,9 @@
def run_python_file(filename, args, package=None):
"""Run a python file as if it were the main program on the command line.
+ .. versionchanged:: 7.7
+ Set and restore ``PYWIKIBOT_TEST_...`` environment variables.
+
:param filename: The path to the file to execute, it need not be a
.py file.
:type filename: str
@@ -131,6 +136,11 @@
old_argv = sys.argv
old_argvu = pwb.argvu
+ # set environment values
+ old_env = os.environ.copy()
+ for key, value in environ:
+ os.environ[key] = value
+
sys.argv = [filename] + args
pwb.argvu = [Path(filename).stem] + args
sys.path.insert(0, os.path.dirname(filename))
@@ -151,27 +161,44 @@
# end of snippet from coverage
+ # Restore environment values
+ for key, value in environ:
+ if key in old_env:
+ os.environ[key] = old_env[key]
+ else:
+ del os.environ[key]
+
def handle_args(pwb_py, *args):
"""Handle args and get filename.
- :return: filename, script args, local args for pwb.py
- :rtype: tuple
+ .. versionchanged:: 7.7
+ Catch ``PYWIKIBOT_TEST_...`` environment variables.
+
+ :return: filename, script args, local pwb args, environment variables
+ :rtype: Tuple[str, List[str], List[str], [List[str]]
"""
fname = None
- index = 0
- for arg in args:
+ local = []
+ env = []
+ for index, arg in enumerate(args, start=1):
if arg in ('-version', '--version'):
fname = 'version.py'
elif arg.startswith('-'):
- index += 1
- continue
+ local.append(arg)
+ elif arg.startswith('PYWIKIBOT_TEST_'):
+ var, _, val = arg.partition('=')
+ env.append((var, val or '1'))
else:
fname = arg
if not fname.endswith('.py'):
fname += '.py'
- break
- return fname, list(args[index + int(bool(fname)):]), args[:index]
+ if fname:
+ break
+ else:
+ index = 0
+
+ return fname, list(args[index:]), local, env
def _print_requirements(requirements, script, variant): # pragma: no cover
@@ -258,7 +285,7 @@
return not missing_requirements
-filename, script_args, global_args = handle_args(*sys.argv)
+filename, script_args, global_args, environ = handle_args(*sys.argv)
# Search for user config file (user-config.py) before creating one.
# If successful, user config file already exists in one of the candidate
diff --git a/tests/README.rst b/tests/README.rst
index e2d17e8..c68f20b 100644
--- a/tests/README.rst
+++ b/tests/README.rst
@@ -159,6 +159,15 @@
.. note:: Enabling only 'edit failure' tests or 'write' tests won't enable the other tests
automatically.
+Instead of setting the environment by the os (or `os.environ` as well) you can use the :mod:`pwb`
+wrapper script to set it::
+
+ pwb PYWIKIBOT_TEST_AUTORUN=1 script_tests -v TestScriptSimulate.test_archivebot
+
+The assignment can be omitted and defaults to 1. The following is equal to the line above::
+
+ pwb PYWIKIBOT_TEST_AUTORUN script_tests -v TestScriptSimulate.test_archivebot
+
Decorators
==========
--
To view, visit https://gerrit.wikimedia.org/r/c/pywikibot/core/+/832451
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: Ibb7e3a78c32cfbb3eb22887ff67e3e43f87d4b41
Gerrit-Change-Number: 832451
Gerrit-PatchSet: 8
Gerrit-Owner: Xqt <info(a)gno.de>
Gerrit-Reviewer: Dvorapa <dvorapa(a)seznam.cz>
Gerrit-Reviewer: Tobias1984 <tobias47n9e(a)gmail.com>
Gerrit-Reviewer: Xqt <info(a)gno.de>
Gerrit-Reviewer: jenkins-bot
Gerrit-MessageType: merged