Xqt has submitted this change. ( https://gerrit.wikimedia.org/r/c/pywikibot/core/+/981376 )
Change subject: [cleanup] deprecate SequenceOutputter.output() method
......................................................................
[cleanup] deprecate SequenceOutputter.output() method
SequenceOutputter acts like a bot_choice Option and
output() methods were derecated in Pywikibot 6.2 in favour
of out property due to cache_output implementation
Change-Id: I0dd4fdc006d7adde16f1aa22ff3fa0eee4c66831
---
M scripts/solve_disambiguation.py
M ROADMAP.rst
M pywikibot/tools/formatter.py
3 files changed, 21 insertions(+), 2 deletions(-)
Approvals:
Xqt: Verified; Looks good to me, approved
diff --git a/ROADMAP.rst b/ROADMAP.rst
index c95ddc6..a0e7f09 100644
--- a/ROADMAP.rst
+++ b/ROADMAP.rst
@@ -29,6 +29,7 @@
Deprecations
------------
+* 9.0.0: ``SequenceOutputter.output()`` is deprecated in favour of :attr:`tools.formatter.SequenceOutputter.out` property
* 9.0.0: *nullcontext* context manager and *SimpleQueue* queue of :mod:`backports` are derecated
* 8.4.0: *modules_only_mode* parameter of :class:`data.api.ParamInfo`, its *paraminfo_keys* class attribute
and its preloaded_modules property will be removed
diff --git a/pywikibot/tools/formatter.py b/pywikibot/tools/formatter.py
index 7008347..6ad82f5 100644
--- a/pywikibot/tools/formatter.py
+++ b/pywikibot/tools/formatter.py
@@ -55,8 +55,13 @@
content = ''
return self.prefix + content + self.suffix
+ @deprecated('pywikibot.info(SequenceOutputter.out)', since='9.0.0')
def output(self) -> None:
- """Output the text of the current sequence."""
+ """Output the text of the current sequence.
+
+ .. deprecated:: 9.0
+ Use :func:`pywikibot.info` with *out* property
+ """
info(self.out)
diff --git a/scripts/solve_disambiguation.py b/scripts/solve_disambiguation.py
index 45e5956..ac7f4ad 100755
--- a/scripts/solve_disambiguation.py
+++ b/scripts/solve_disambiguation.py
@@ -1275,7 +1275,7 @@
self.opt.pos.sort(key=lambda x: x.lower())
else:
self.opt.pos.sort()
- SequenceOutputter(self.opt.pos).output()
+ pywikibot.info(SequenceOutputter(self.opt.pos).out)
gen = ReferringPageGeneratorWithIgnore(
page,
--
To view, visit https://gerrit.wikimedia.org/r/c/pywikibot/core/+/981376
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: I0dd4fdc006d7adde16f1aa22ff3fa0eee4c66831
Gerrit-Change-Number: 981376
Gerrit-PatchSet: 1
Gerrit-Owner: Xqt <info(a)gno.de>
Gerrit-Reviewer: D3r1ck01 <dalangi-ctr(a)wikimedia.org>
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/+/921582 )
Change subject: [bugfix] Suppress error in CosmeticChangesToolkit.cleanUpLinks()
......................................................................
[bugfix] Suppress error in CosmeticChangesToolkit.cleanUpLinks()
- no longer retry api request on ServerError which includes
FatalServerError. ServerError is raised when a requests.ReadTimeout
or requests.ConnectTimeout occurs.
- suppress ServerError in CosmeticChangesToolkit.cleanUpLinks()
when calling site.isInterwikiLink() because the corresponding
site may be down.
Bug: T337045
Change-Id: I499bc1d7cc2bbd98cac20548a5e40c9dbf314ec2
---
M pywikibot/cosmetic_changes.py
M pywikibot/data/api/_requests.py
2 files changed, 26 insertions(+), 9 deletions(-)
Approvals:
Xqt: Looks good to me, approved
jenkins-bot: Verified
diff --git a/pywikibot/cosmetic_changes.py b/pywikibot/cosmetic_changes.py
index 1e13373..845d6ce 100644
--- a/pywikibot/cosmetic_changes.py
+++ b/pywikibot/cosmetic_changes.py
@@ -64,9 +64,8 @@
from urllib.parse import urlparse, urlunparse
import pywikibot
-from pywikibot import textlib
+from pywikibot import exceptions, textlib
from pywikibot.backports import Callable, Match, Pattern
-from pywikibot.exceptions import InvalidTitleError
from pywikibot.textlib import (
FILE_LINK_REGEX,
MultiTemplateMatchBuilder,
@@ -532,8 +531,10 @@
oldlink = url2string(match.group(),
encodings=self.site.encodings())
- is_interwiki = self.site.isInterwikiLink(titleWithSection)
- if is_interwiki:
+ is_interwiki = None
+ with suppress(exceptions.ServerError):
+ is_interwiki = self.site.isInterwikiLink(titleWithSection)
+ if is_interwiki is not False:
return oldlink
# The link looks like this:
@@ -541,10 +542,9 @@
# We only work on namespace 0 because pipes and linktrails work
# differently for images and categories.
page = pywikibot.Page(pywikibot.Link(titleWithSection, self.site))
- try:
+ in_main_namespace = None
+ with suppress(exceptions.InvalidTitleError):
in_main_namespace = page.namespace() == 0
- except InvalidTitleError:
- in_main_namespace = False
if not in_main_namespace:
return oldlink
diff --git a/pywikibot/data/api/_requests.py b/pywikibot/data/api/_requests.py
index 3b63cb2..61dad40 100644
--- a/pywikibot/data/api/_requests.py
+++ b/pywikibot/data/api/_requests.py
@@ -30,10 +30,10 @@
from pywikibot.exceptions import (
Client414Error,
Error,
- FatalServerError,
MaxlagTimeoutError,
NoUsernameError,
Server504Error,
+ ServerError,
SiteDefinitionError,
)
from pywikibot.login import LoginStatus
@@ -694,7 +694,7 @@
pywikibot.warning(
'Caught HTTP 414 error, although not using GET.')
raise
- except (ConnectionError, FatalServerError):
+ except (ConnectionError, ServerError):
# This error is not going to be fixed by just waiting
pywikibot.error(traceback.format_exc())
raise
--
To view, visit https://gerrit.wikimedia.org/r/c/pywikibot/core/+/921582
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: I499bc1d7cc2bbd98cac20548a5e40c9dbf314ec2
Gerrit-Change-Number: 921582
Gerrit-PatchSet: 5
Gerrit-Owner: Xqt <info(a)gno.de>
Gerrit-Reviewer: Meno25 <meno25mail(a)gmail.com>
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/+/944869 )
Change subject: [doc] Add scripts.changelog to Pywikibot
......................................................................
[doc] Add scripts.changelog to Pywikibot
Change-Id: I85aa6d380d81ad1377e69330a96d72ea9766cc84
---
M scripts/CHANGELOG.rst
M scripts/README.rst
M docs/scripts/index.rst
3 files changed, 197 insertions(+), 179 deletions(-)
Approvals:
Xqt: Looks good to me, approved
jenkins-bot: Verified
diff --git a/docs/scripts/index.rst b/docs/scripts/index.rst
index ba9751a..5c60622 100644
--- a/docs/scripts/index.rst
+++ b/docs/scripts/index.rst
@@ -7,9 +7,10 @@
:noindex:
.. include:: ../../scripts/README.rst
- :start-after: included.
+ :start-line: 8
:end-before: More precise
+
*******************
Script descriptions
*******************
@@ -32,3 +33,9 @@
maintenance
archive
outdated
+
+***************
+Scripts changes
+***************
+
+.. include:: ../../scripts/CHANGELOG.rst
diff --git a/scripts/CHANGELOG.rst b/scripts/CHANGELOG.rst
index 23f8739..6dc7f76 100644
--- a/scripts/CHANGELOG.rst
+++ b/scripts/CHANGELOG.rst
@@ -5,7 +5,7 @@
-----
category_redirect
-~~~~~~~~~~~~~~~~~
+^^^^^^^^^^^^^^^^^
* provide category_redirect categories for all WM sites (:phab:`T348914`)
@@ -13,12 +13,12 @@
-----
category_graph
-~~~~~~~~~~~~~~
+^^^^^^^^^^^^^^
* Change category output string to format string (:phab:`T348709`)
commonscat
-~~~~~~~~~~
+^^^^^^^^^^
* Fix skip page template parameter check (:phab:`T106952`)
@@ -28,23 +28,23 @@
* L10N for several scripts
category_graph
-~~~~~~~~~~~~~~
+^^^^^^^^^^^^^^
* Wrap DOT-string in curly braces (:phab:`T346007`)
checkimages
-~~~~~~~~~~~
+^^^^^^^^^^^
* Use welcome messages from :class:`scripts.welcome.WelcomeBot`
* add more messages to :mod:`i18n` system
newitem
-~~~~~~~
+^^^^^^^
* Enable ``-touch`` in newitem script for confirmed user (:phab:`T343877`)
maintenance
-~~~~~~~~~~~
+^^^^^^^^^^^
* new script unidata to update ``_first_upper_exception_dict`` of
:mod:`pywikibot.tools._unidata`.
@@ -54,7 +54,7 @@
-----
patrol
-~~~~~~
+^^^^^^
* Only handle namespaces with :func:`pagegenerators.GeneratorFactory` (:phab:`T341768`)
@@ -63,27 +63,27 @@
-----
archivebot
-~~~~~~~~~~
+^^^^^^^^^^
* KeyboardInterrupt was enabled for -async option
listpages
-~~~~~~~~~
+^^^^^^^^^
* ``-tofile`` option was added to save list to a file
noreferences
-~~~~~~~~~~~~
+^^^^^^^^^^^^
* NoReferencesBot derives from :class:`bot.AutomaticTWSummaryBot`
replicate_wiki
-~~~~~~~~~~~~~~
+^^^^^^^^^^^^^^
* i18n support was added (:phab:`T333759`)
transwikiimport
-~~~~~~~~~~~~~~~
+^^^^^^^^^^^^^^^
* Script was added (:phab:`T335246`)
@@ -92,12 +92,12 @@
-----
archivebot
-~~~~~~~~~~
+^^^^^^^^^^
* Processing speed was improved and is up to 20 times faster, 2-3 times on average
redirect
-~~~~~~~~
+^^^^^^^^
* Use ``Bot:`` prefixed summary (:phab:`T161459`)
* Fix ``-namespace`` usage if RedirectGenerator is used (:phab:`T331243`)
@@ -107,7 +107,7 @@
-----
clean_sandbox
-~~~~~~~~~~~~~
+^^^^^^^^^^^^^
* L10N for es-wikis
@@ -115,12 +115,12 @@
-----
clean_sandbox
-~~~~~~~~~~~~~
+^^^^^^^^^^^^^
* L10N for several wikis
touch
-~~~~~
+^^^^^
* Login first when starting the script (:phab:`T328204`)
@@ -129,43 +129,43 @@
-----
blockpageschecker
-~~~~~~~~~~~~~~~~~
+^^^^^^^^^^^^^^^^^
* Fix neutral additive element
category
-~~~~~~~~
+^^^^^^^^
* Enable pagegenerators options with ``move`` and ``remove`` actions (:phab:`T318239`)
category_graph
-~~~~~~~~~~~~~~
+^^^^^^^^^^^^^^
* :mod:`category_graph` script was added which creates category graph in formats dot, svg and html5
clean_sandbox
-~~~~~~~~~~~~~
+^^^^^^^^^^^^^
* L10N updates
* A `-textfile` option was addet to fetch the text from a file
create_isbn_edition
-~~~~~~~~~~~~~~~~~~~
+^^^^^^^^^^^^^^^^^^^
* Fix argument parsing
fixing_redirects
-~~~~~~~~~~~~~~~~
+^^^^^^^^^^^^^^^^
* Skip invalid link titles (:phab:`T324434`)
interwiki
-~~~~~~~~~
+^^^^^^^^^
Fix string concatenation (:phab:`T322180`)
touch
-~~~~~
+^^^^^
Provide bulk purge to run upto 1000 times faster
@@ -174,24 +174,24 @@
-----
archivebot
-~~~~~~~~~~
+^^^^^^^^^^
* Process pages in parallel tasks with ``-async`` option (:phab:`T57899`)
* Add -sort option to sort archives by (latest) timestamp
* Archive unsigned threads using timestamp of the next thread (:phab:`T69663`, :phab:`T182685`)
category_redirect
-~~~~~~~~~~~~~~~~~
+^^^^^^^^^^^^^^^^^
* Use localized template prefix (:phab:`T318049`)
create_isbn_edition
-~~~~~~~~~~~~~~~~~~~
+^^^^^^^^^^^^^^^^^^^
* New script to load ISBN related data into Wikidata (:phab:`T314942`)
watchlist
-~~~~~~~~~
+^^^^^^^^^
* Watchlist is retrieved faster in parallel tasks (:phab:`T57899`)
* Enable watchlist.refresh_all for API generator access (:phab:`T316359`)
@@ -202,7 +202,7 @@
*21 August 2022*
archivebot
-~~~~~~~~~~
+^^^^^^^^^^
* Use ``User:MiszaBot/config`` as default template
* Raise MalformedConfigError if 'maxarchivesize' is 0 (:phab:`T313886`)
@@ -212,12 +212,12 @@
* Decrease memory usage and improve processing speed
interwiki
-~~~~~~~~~
+^^^^^^^^^
* Fix wrong Subject property
pagefromfile
-~~~~~~~~~~~~
+^^^^^^^^^^^^
* Derive PageFromFileReader from tools.collections.GeneratorWrapper
@@ -227,7 +227,7 @@
*26 July 2022*
archivebot
-~~~~~~~~~~
+^^^^^^^^^^
* Add localized "archive" variables (:phab:`T71551`, :phab:`T313682`, :phab:`T313692`)
@@ -237,7 +237,7 @@
*24 July 2022*
archivebot
-~~~~~~~~~~
+^^^^^^^^^^
* Replace archive pattern fields to string conversion (:phab:`T313692`)
@@ -247,7 +247,7 @@
*22 July 2022*
harvest_template
-~~~~~~~~~~~~~~~~
+^^^^^^^^^^^^^^^^
* Support harvesting time values (:phab:`T66503`)
* Do not rely on self.current_page.site
@@ -261,12 +261,12 @@
*26 June 2022*
addtext
-~~~~~~~
+^^^^^^^
* Fix for -createonly option (:phab:`T311173`)
harvest_template
-~~~~~~~~~~~~~~~~
+^^^^^^^^^^^^^^^^
* Add -confirm option which sets ‘always’ option to False
(:phab:`T310356`)
@@ -274,7 +274,7 @@
(:phab:`T310418`)
interwiki
-~~~~~~~~~
+^^^^^^^^^
* Fix regression where interwiki script removes all interwiki links
(:phab:`T310964`)
@@ -282,12 +282,12 @@
(:phab:`T310908`)
listpages
-~~~~~~~~~
+^^^^^^^^^
* Print the page list immediately except pages are preloaded
nowcommons
-~~~~~~~~~~
+^^^^^^^^^^
* Use treat_page method (:phab:`T309456`)
* Fix several bugs (:phab:`T309473`)
@@ -298,29 +298,29 @@
*21 May 2022*
general
-~~~~~~~
+^^^^^^^
* Call ExistingPageBot.skip_page() first (:phab:`T86491`)
delete
-~~~~~~
+^^^^^^
* Count deleted pages and other actions (:phab:`T212040`)
replace
-~~~~~~~
+^^^^^^^
* A -nopreload option was added
weblinkchecker
-~~~~~~~~~~~~~~
+^^^^^^^^^^^^^^
* Throttle connections to the same host (:phab:`T152350`)
* Do not kill threads after generator is exhausted (:phab:`T113139`)
* Use Page.extlinks() to get external links (:phab:`T60812`)
update_script
-~~~~~~~~~~~~~
+^^^^^^^^^^^^^
* update_script script was removed
@@ -330,7 +330,7 @@
*07 May 2022*
movepages
-~~~~~~~~~
+^^^^^^^^^
* Fix regression of option parsing (:phab:`T307826`)
@@ -340,47 +340,47 @@
*26 April 2022*
general
-~~~~~~~
+^^^^^^^
* Archived scripts were removed
archive
-~~~~~~~
+^^^^^^^
* Fix trailing newlines (:phab:`T306529`)
checkimages
-~~~~~~~~~~~
+^^^^^^^^^^^
* Use page_from_repository() method to read categoried from wikibase
* Use ``itertools.zip_longest`` to find the most important image
dataextend
-~~~~~~~~~~
+^^^^^^^^^^
* A -showonly option was added to only show claims of an ItemPage
* This new script was added. It is able to add properties, identifiers
and sources to WikiBase items
delinker
-~~~~~~~~
+^^^^^^^^
* New delinker script was added; it replaces compat’s CommonsDelinker
(:phab:`T299563`)
image
-~~~~~
+^^^^^
* Fix image regex (:phab:`T305226`, :phab:`T305227`)
reflinks
-~~~~~~~~
+^^^^^^^^
* Ignore Bloomberg captcha (:phab:`T306304`)
* Fix cp encodings (:phab:`T304830`)
replace
-~~~~~~~
+^^^^^^^
* A -quiet option was added to omit message when no change was made
@@ -390,7 +390,7 @@
*15 April 2022*
replace
-~~~~~~~
+^^^^^^^
* Fix regression of XmlDumpPageGenerator
@@ -400,12 +400,12 @@
*26 March 2022*
fixing_redirects
-~~~~~~~~~~~~~~~~
+^^^^^^^^^^^^^^^^
* -always option was enabled
reflinks
-~~~~~~~~
+^^^^^^^^
* Solve UnicodeDecodeError in ReferencesRobot.treat()
(:phab:`T304288`)
@@ -417,13 +417,13 @@
*26 February 2022*
general
-~~~~~~~
+^^^^^^^
* L10N updates
* Provide ConfigParserBot for several scripts (:phab:`T223778`)
add_text
-~~~~~~~~
+^^^^^^^^
* Provide -create and -createonly options (:phab:`T291354`)
* Deprecated function get_text() was removed in favour of Page.text and
@@ -434,7 +434,7 @@
textlib.add_text()
blockpageschecker
-~~~~~~~~~~~~~~~~~
+^^^^^^^^^^^^^^^^^
* Use different edit comments when adding, changeing or removing
templates (:phab:`T291345`)
@@ -443,7 +443,7 @@
:phab:`T171713`)
category
-~~~~~~~~
+^^^^^^^^
* CleanBot was added which can be invoked by clean action option
* Recurse CategoryListifyRobot with depth
@@ -452,30 +452,30 @@
* Deprecated code parts were removed
checkimages
-~~~~~~~~~~~
+^^^^^^^^^^^
* Skip PageSaveRelatedError and ServerError when putting talk page
(:phab:`T302174`)
commonscat
-~~~~~~~~~~
+^^^^^^^^^^
* Ignore InvalidTitleError in CommonscatBot.findCommonscatLink
(:phab:`T291783`)
cosmetic_changes
-~~~~~~~~~~~~~~~~
+^^^^^^^^^^^^^^^^
* Ignore InvalidTitleError in CosmeticChangesBot.treat_page
(:phab:`T293612`)
djvutext
-~~~~~~~~
+^^^^^^^^
* pass site arg only once (:phab:`T292367`)
fixing_redirects
-~~~~~~~~~~~~~~~~
+^^^^^^^^^^^^^^^^
* Let only put_current show the message “No changes were needed”
* Use concurrent.futures to retrieve redirect or moved targets
@@ -483,54 +483,54 @@
* Add an option to ignore solving moved targets (:phab:`T298789`)
imagetransfer
-~~~~~~~~~~~~~
+^^^^^^^^^^^^^
* Add support for chunked uploading (:phab:`T300531`)
newitem
-~~~~~~~
+^^^^^^^
* Do not pass OtherPageSaveRelatedError silently
pagefromfile
-~~~~~~~~~~~~
+^^^^^^^^^^^^
* Preload pages instead of reading them one by one before putting
changes
* Don’t ask for confirmation by default (:phab:`T291757`)
redirect
-~~~~~~~~
+^^^^^^^^
* Use site.maxlimit to determine the highest limit to load
(:phab:`T299859`)
replace
-~~~~~~~
+^^^^^^^
* Enable default behaviour with -mysqlquery (:phab:`T299306`)
* Deprecated “acceptall” and “addedCat” parameters were replaced by
“always” and “addcat”
revertbot
-~~~~~~~~~
+^^^^^^^^^
* Add support for translated dates/times (:phab:`T102174`)
* Deprecated “max” parameter was replaced by “total”
solve_disambiguation
-~~~~~~~~~~~~~~~~~~~~
+^^^^^^^^^^^^^^^^^^^^
* Remove deprecated properties in favour of DisambiguationRobot.opt
options
touch
-~~~~~
+^^^^^
\*Do not pass OtherPageSaveRelatedError silently
unusedfiles
-~~~~~~~~~~~
+^^^^^^^^^^^
* Use oldest_file_info.user as uploader (:phab:`T301768`)
@@ -540,7 +540,7 @@
*21 September 2021*
category
-~~~~~~~~
+^^^^^^^^
* Fix -match option
@@ -550,7 +550,7 @@
*15 September 2021*
add_text
-~~~~~~~~
+^^^^^^^^
* Add -major flag to disable minor edit flag when saving
@@ -560,7 +560,7 @@
*05 August 2021*
reflinks
-~~~~~~~~
+^^^^^^^^
* Don’t ignore identical references with newline in ref content
(:phab:`T286369`)
@@ -572,13 +572,13 @@
*01 July 2021*
general
-~~~~~~~
+^^^^^^^
* show a warning if pywikibot.__version_\_ is behind
scripts.__version_\_
addtext
-~~~~~~~
+^^^^^^^
* Deprecate get_text, put_text and add_text functions
(:phab:`T284388`)
@@ -586,46 +586,46 @@
functions (:phab:`T196851`)
blockpageschecker
-~~~~~~~~~~~~~~~~~
+^^^^^^^^^^^^^^^^^
* Script was unarchived
commonscat
-~~~~~~~~~~
+^^^^^^^^^^
* Enable multiple sites (:phab:`T57083`)
* Use new textlib.add_text function
cosmetic_changes
-~~~~~~~~~~~~~~~~
+^^^^^^^^^^^^^^^^
* set -ignore option to CANCEL.MATCH by default (:phab:`T108446`)
fixing_redirects
-~~~~~~~~~~~~~~~~
+^^^^^^^^^^^^^^^^
* Add -overwrite option (:phab:`T235219`)
imagetransfer
-~~~~~~~~~~~~~
+^^^^^^^^^^^^^
* Skip pages which does not exist on source site (:phab:`T284414`)
* Use roundrobin_generators to combine multiple template inclusions
* Allow images existing in the shared repo (:phab:`T267535`)
template
-~~~~~~~~
+^^^^^^^^
* Do not try to initialze generator twice in TemplateRobot
(:phab:`T284534`)
update_script
-~~~~~~~~~~~~~
+^^^^^^^^^^^^^
* compat2core script was restored and renamed to update_script
version
-~~~~~~~
+^^^^^^^
* Show all mandatory dependecies
@@ -635,12 +635,12 @@
*31 May 2021*
addtext
-~~~~~~~
+^^^^^^^
* -except option was removed in favour of commonly used -grepnot
archivebot
-~~~~~~~~~~
+^^^^^^^^^^
* Durations must to have a time unit
@@ -650,7 +650,7 @@
*28 May 2021*
general
-~~~~~~~
+^^^^^^^
* image.py was restored
* nowcommons.py was restored
@@ -658,36 +658,36 @@
* L10N updates
category
-~~~~~~~~
+^^^^^^^^
* dry parameter of CategoryAddBot will be removed
commonscat
-~~~~~~~~~~
+^^^^^^^^^^
* Ignore InvalidTitleError (:phab:`T267742`)
* exit checkCommonscatLink method if target name is empty
(:phab:`T282693`)
fixing_redirects
-~~~~~~~~~~~~~~~~
+^^^^^^^^^^^^^^^^
* ValueError will be ignored (:phab:`T283403`, :phab:`T111513`)
* InterwikiRedirectPageError will be ignored (:phab:`T137754`)
* InvalidPageError will be ignored (:phab:`T280043`)
reflinks
-~~~~~~~~
+^^^^^^^^
* Use consecutive reference numbers for autogenerated links
replace
-~~~~~~~
+^^^^^^^
* InvalidPageError will be ignored (:phab:`T280043`)
upload
-~~~~~~
+^^^^^^
* Support async chunked uploads (:phab:`T129216`)
@@ -697,7 +697,7 @@
*17 April 2021*
general
-~~~~~~~
+^^^^^^^
* commonscat.py was restored
* compat2core.py script was archived
@@ -707,37 +707,37 @@
* watchlist.py was restored
archivebot
-~~~~~~~~~~
+^^^^^^^^^^
* PageArchiver.maxsize must be defined before load_config()
(:phab:`T277547`)
* Time period must have a qualifier
imagetransfer
-~~~~~~~~~~~~~
+^^^^^^^^^^^^^
* Fix usage of -tofamily -tolang options (:phab:`T279232`)
misspelling
-~~~~~~~~~~~
+^^^^^^^^^^^
* Use the new DisambiguationRobot interface and options
reflinks
-~~~~~~~~
+^^^^^^^^
* Catch urllib3.LocationParseError and skip link (:phab:`T280356`)
* L10N updates
* Avoid dupliate reference names (:phab:`T278040`)
solve_disambiguation
-~~~~~~~~~~~~~~~~~~~~
+^^^^^^^^^^^^^^^^^^^^
* Keyword arguments are recommended if deriving the bot; opt option
handler is used.
welcome
-~~~~~~~
+^^^^^^^
* Fix reporting bad account names
@@ -747,7 +747,7 @@
*15 March 2021*
general
-~~~~~~~
+^^^^^^^
* interwikidumps.py, cfd.py and featured.py scripts were deleted
(:phab:`T223826`)
@@ -756,64 +756,64 @@
* pagegenerators.handle_args() is used in several scripts
archivebot
-~~~~~~~~~~
+^^^^^^^^^^
* Always take ‘maxarticlesize’ into account when saving
(:phab:`T276937`)
* Remove deprecated parts
category
-~~~~~~~~
+^^^^^^^^
* add ‘namespaces’ option to category ‘listify’
commons_information
-~~~~~~~~~~~~~~~~~~~
+^^^^^^^^^^^^^^^^^^^
* New script to wrap Commons file descriptions in language templates
generate_family_file
-~~~~~~~~~~~~~~~~~~~~
+^^^^^^^^^^^^^^^^^^^^
* Ignore ssl certificate validation (:phab:`T265210`)
login
-~~~~~
+^^^^^
* update help string
maintenance
-~~~~~~~~~~~
+^^^^^^^^^^^
* Add a preload_sites.py script to preload site informations
(:phab:`T226157`)
reflinks
-~~~~~~~~
+^^^^^^^^
* Force pdf file to be closed (:phab:`T276747`)
* Fix http.fetch response data attribute
* Fix treat process flow
replace
-~~~~~~~
+^^^^^^^
* Add replacement description to -summary message
replicate_wiki
-~~~~~~~~~~~~~~
+^^^^^^^^^^^^^^
* replace pages in all sites (:phab:`T275291`)
solve_disambiguation
-~~~~~~~~~~~~~~~~~~~~
+^^^^^^^^^^^^^^^^^^^^
* Deprecated methods were removed
* Positional arguments of DisambiguationRobot are deprecated, also some
keywords were replaced
unusedfiles
-~~~~~~~~~~~
+^^^^^^^^^^^
* Update unusedfiles.py to add custom templates
@@ -823,20 +823,20 @@
*24 January 2021*
general
-~~~~~~~
+^^^^^^^
* pagegenerators handleArg was renamed to handle_arg
(:phab:`T271437`)
* i18n updates
add_text
-~~~~~~~~
+^^^^^^^^
* bugfix: str.join() expects an iterable not multiple args
(:phab:`T272223`)
redirect
-~~~~~~~~
+^^^^^^^^
* pagegenerators -page option was implemented (:phab:`T100643`)
* pagegenerators namespace filter was implemented (:phab:`T234133`,
@@ -853,18 +853,18 @@
\*12 January 2021
general
-~~~~~~~
+^^^^^^^
* i18n updates
* L10N updates
add_text
-~~~~~~~~
+^^^^^^^^
* -except option was renamed to -grepnot from pagegenerators
solve_disambiguation
-~~~~~~~~~~~~~~~~~~~~
+^^^^^^^^^^^^^^^^^^^^
* ignore ValueError when parsing a Link object (:phab:`T111513`)
@@ -874,12 +874,12 @@
*2 January 2021*
general
-~~~~~~~
+^^^^^^^
* i18n updates
replace
-~~~~~~~
+^^^^^^^
* Desupported ReplaceRobot.doReplacements method was removed
@@ -889,17 +889,17 @@
*19 December 2020*
data_ingestion
-~~~~~~~~~~~~~~
+^^^^^^^^^^^^^^
* Remove deprecated Photo.reader property and Photo.doSingle() method
replicate_wiki
-~~~~~~~~~~~~~~
+^^^^^^^^^^^^^^
* Remove deprecated namespace function
template
-~~~~~~~~
+^^^^^^^^
* remove deprecated XmlDumpTemplatePageGenerator
@@ -909,7 +909,7 @@
*10 December 2020*
general
-~~~~~~~
+^^^^^^^
* Removed unsupported BadTitle Exception (:phab:`T267768`)
* Replaced PageNotSaved by PageSaveRelatedError (:phab:`T267821`)
@@ -918,57 +918,57 @@
* L10N updates
basic
-~~~~~
+^^^^^
* Make BasicBot example a ConfigParserBot to explain the usage
clean_sandbox
-~~~~~~~~~~~~~
+^^^^^^^^^^^^^
* Fix TypeError (:phab:`T267717`)
fixing_redirects
-~~~~~~~~~~~~~~~~
+^^^^^^^^^^^^^^^^
* Ignore RuntimeError for missing ‘redirects’ in api response
(:phab:`T267567`)
imagetransfer
-~~~~~~~~~~~~~
+^^^^^^^^^^^^^
* Implement -tosite command and other improvements
* Do not use UploadRobot.run() with imagetransfer (:phab:`T267579`)
interwiki
-~~~~~~~~~
+^^^^^^^^^
* Use textfile for interwiki dumps and enable -restore:all option
(:phab:`T74943`, :phab:`T213624`)
makecat
-~~~~~~~
+^^^^^^^
* Use input_choice for options
* New option handling
* Other improvements
revertbot
-~~~~~~~~~
+^^^^^^^^^
* Take rollbacktoken to revert (:phab:`T250509`)
solve_disambiguation
-~~~~~~~~~~~~~~~~~~~~
+^^^^^^^^^^^^^^^^^^^^
* Write ignoring pages as a whole
touch
-~~~~~
+^^^^^
* Fix available_options and purge options (:phab:`T268394`)
weblinkchecker
-~~~~~~~~~~~~~~
+^^^^^^^^^^^^^^
* Fix AttributeError of HttpRequest (:phab:`T269821`)
@@ -978,42 +978,42 @@
*1 November 2020*
general
-~~~~~~~
+^^^^^^^
* i18n updates
* switch to new OptionHandler interface (:phab:`T264721`)
change_pagelang
-~~~~~~~~~~~~~~~
+^^^^^^^^^^^^^^^
* New script was added
download_dump
-~~~~~~~~~~~~~
+^^^^^^^^^^^^^
* Make ``dumpdate`` param work when using the script in Toolforge
(:phab:`T266630`)
imagetransfer
-~~~~~~~~~~~~~
+^^^^^^^^^^^^^
* Remove outdated “followRedirects” parameter from imagelinks(); treat
instead of run method (:phab:`T266867`, :phab:`T196851`,
:phab:`T171713`)
interwiki
-~~~~~~~~~
+^^^^^^^^^
* Replace deprecated originPage by origin in Subjects
misspelling
-~~~~~~~~~~~
+^^^^^^^^^^^
* Enable misspelling.py for several sites using wikidata
(:phab:`T258859`, :phab:`T94681`)
noreferences
-~~~~~~~~~~~~
+^^^^^^^^^^^^
* Rename NoReferencesBot.run to treat (:phab:`T196851`,
:phab:`T171713`)
@@ -1021,7 +1021,7 @@
category (:phab:`T266413`)
reflinks
-~~~~~~~~
+^^^^^^^^
* Derive ReferencesRobot from ExistingPageBot and NoRedirectPageBot
* Use chardet to find a valid encoding (266862)
@@ -1034,7 +1034,7 @@
* Call ReferencesRobot.setup() (:phab:`T265928`)
welcome
-~~~~~~~
+^^^^^^^
* Replace \_COLORS and \_MSGS dicts by Enum
@@ -1044,7 +1044,7 @@
*19 October 2020*
general
-~~~~~~~
+^^^^^^^
* i18n updates
* L10N updates
@@ -1052,64 +1052,64 @@
* Remove ArgumentDeprecationWarning for several scripts
casechecker
-~~~~~~~~~~~
+^^^^^^^^^^^
* Split initializer and put getting whitelist to its own method
checkimages
-~~~~~~~~~~~
+^^^^^^^^^^^
* Re-enable -sleep parameter (:phab:`T264521`)
commonscat
-~~~~~~~~~~
+^^^^^^^^^^
* get commons category from wikibase (:phab:`T175207`)
* Adjust save counter (:phab:`T262772`)
flickrripper
-~~~~~~~~~~~~
+^^^^^^^^^^^^
* Improve option handling
imagecopy_self
-~~~~~~~~~~~~~~
+^^^^^^^^^^^^^^
* Improvements were made
imagetransfer
-~~~~~~~~~~~~~
+^^^^^^^^^^^^^
* Do not encode str to bytes (:phab:`T265257`)
match_images
-~~~~~~~~~~~~
+^^^^^^^^^^^^
* Improvements
parser_function_count
-~~~~~~~~~~~~~~~~~~~~~
+^^^^^^^^^^^^^^^^^^^^^
Porting parser_function_count.py from compat to core/scripts
(:phab:`T66878`)
reflinks
-~~~~~~~~
+^^^^^^^^
decode byte-like object meta_content.group() (:phab:`T264575`)
speedy_delete
-~~~~~~~~~~~~~
+^^^^^^^^^^^^^
* port speedy_delete.py to core (:phab:`T66880`)
weblinkchecker
-~~~~~~~~~~~~~~
+^^^^^^^^^^^^^^
* Use ThreadList with weblinkchecker
maintenance
-~~~~~~~~~~~
+^^^^^^^^^^^
* new maintenance script sorting_order was added
* new maintenance script update_linktrails was added
@@ -1120,7 +1120,7 @@
*2 September 2020*
general
-~~~~~~~
+^^^^^^^
* i18n updates
@@ -1130,12 +1130,12 @@
*28 August 2020*
general
-~~~~~~~
+^^^^^^^
* i18n updates
archivebot
-~~~~~~~~~~
+^^^^^^^^^^
* Determine whether counter matters only once
@@ -1145,7 +1145,7 @@
*18 August 2020*
general
-~~~~~~~
+^^^^^^^
* Add missing commas in string contants
@@ -1155,12 +1155,12 @@
*16 August 2020*
general
-~~~~~~~
+^^^^^^^
* i18n updates
download_dump
-~~~~~~~~~~~~~
+^^^^^^^^^^^^^
* Move this script to script folder (:phab:`T123885`,
:phab:`T184033`)
@@ -1187,14 +1187,14 @@
*4 August 2020*
general
-~~~~~~~
+^^^^^^^
* Remove Python 2 related code (:phab:`T257399`)
* i18n updates
* L10N updates
archivebot
-~~~~~~~~~~
+^^^^^^^^^^
* Only mention archives where something was really archived
* Reset counter when “era” changes (:phab:`T215247`)
@@ -1205,11 +1205,11 @@
* Fix str2size to allow space separators
cfd
-~~~
+^^^
* Script was archived and is no longer supported (:phab:`T223826`)
delete
-~~~~~~
+^^^^^^
* Use Dict in place of DefaultDict (:phab:`T257770`)
diff --git a/scripts/README.rst b/scripts/README.rst
index 68610ad..e50079b 100644
--- a/scripts/README.rst
+++ b/scripts/README.rst
@@ -1,20 +1,22 @@
-===========================================================================
+###########################################################################
**This is a package to include robots for MediaWiki wikis like Wikipedia.**
-===========================================================================
+###########################################################################
+*********************************
Some example robots are included.
-=================================
+*********************************
These programs can actually modify the live wiki on the net, and proper
wiki-etiquette should be followed before running it on any wiki.
To get started on proper usage of the bot framework, refer to `Manual:Pywikibot <https://www.mediawiki.org/wiki/Manual:Pywikibot>`_.
+***************************
The contents of the package
-===========================
+***************************
Bots and scripts
-----------------
+================
+------------------------------------------------------------------------------------+
| Bots and Scripts |
@@ -159,7 +161,7 @@
+--------------------------+---------------------------------------------------------+
Maintenance
------------
+===========
+------------------------+---------------------------------------------------------+
| maintenance | Framework helper scripts |
@@ -176,7 +178,7 @@
+------------------------+---------------------------------------------------------+
Others
-------
+======
+------------------------+---------------------------------------------------------+
| Others | |
--
To view, visit https://gerrit.wikimedia.org/r/c/pywikibot/core/+/944869
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: I85aa6d380d81ad1377e69330a96d72ea9766cc84
Gerrit-Change-Number: 944869
Gerrit-PatchSet: 3
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/+/981650 )
Change subject: [IMPR] Validate default parameter value in input_choice() function
......................................................................
[IMPR] Validate default parameter value in input_choice() function
Also update documentation.
Bug: T353097
Change-Id: I3817ce91a527b07d5f9191c77d6b7f991b9e6703
---
M pywikibot/userinterfaces/terminal_interface_base.py
M pywikibot/bot.py
2 files changed, 70 insertions(+), 27 deletions(-)
Approvals:
Xqt: Looks good to me, approved
jenkins-bot: Verified
diff --git a/pywikibot/bot.py b/pywikibot/bot.py
index 0fe8fdd..d1827d4 100644
--- a/pywikibot/bot.py
+++ b/pywikibot/bot.py
@@ -562,8 +562,12 @@
return_shortcut: bool = True,
automatic_quit: bool = True,
force: bool = False) -> Any:
- """
- Ask the user the question and return one of the valid answers.
+ """Ask the user the question and return one of the valid answers.
+
+ .. seealso::
+ * :meth:`userinterfaces._interface_base.ABUIC.input_choice`
+ * :meth:`userinterfaces.buffer_interface.UI.input_choice`
+ * :meth:`userinterfaces.terminal_interface_base.UI.input_choice`
:param question: The question asked without trailing spaces.
:param answers: The valid answers each containing a full length answer and
@@ -574,8 +578,8 @@
:param return_shortcut: Whether the shortcut or the index of the answer is
returned.
:param automatic_quit: Adds the option 'Quit' ('q') and throw a
- :py:obj:`QuitKeyboardInterrupt` if selected.
- :param force: Automatically use the default
+ :exc:`bot.QuitKeyboardInterrupt` if selected.
+ :param force: Automatically use the *default*.
:return: The selected answer shortcut or index. Is -1 if the default is
selected, it does not return the shortcut and the default is not a
valid shortcut.
@@ -589,28 +593,35 @@
default: bool | str | None = None,
automatic_quit: bool = True,
force: bool = False) -> bool:
- """
- Ask the user a yes/no question and return the answer as a bool.
+ """Ask the user a yes/no question and return the answer as a bool.
+
+ **Example:**
+
+ >>> input_yn('Do you like Pywikibot?', 'y', False, force=True)
+ ... # doctest: +SKIP
+ Do you like Pywikibot? ([Y]es, [n]o)
+ True
+ >>> input_yn('More examples?', False, automatic_quit=False, force=True)
+ ... # doctest: +SKIP
+ Some more examples? ([y]es, [N]o)
+ False
+
+ .. seealso:: :func:`input_choice`
:param question: The question asked without trailing spaces.
- :param default: The result if no answer was entered. It must be a bool or
- 'y' or 'n' and can be disabled by setting it to None.
+ :param default: The result if no answer was entered. It must be a
+ bool or ``'y'``, ``'n'``, ``0`` or ``1`` and can be disabled by
+ setting it to None.
:param automatic_quit: Adds the option 'Quit' ('q') and throw a
- :py:obj:`QuitKeyboardInterrupt` if selected.
- :param force: Automatically use the default
+ :exc:`bot.QuitKeyboardInterrupt` if selected.
+ :param force: Automatically use the *default*.
:return: Return True if the user selected yes and False if the user
selected no. If the default is not None it'll return True if default
is True or 'y' and False if default is False or 'n'.
"""
- if default not in ['y', 'Y', 'n', 'N']:
- if default:
- default = 'y'
- elif default is not None:
- default = 'n'
- assert default in ['y', 'Y', 'n', 'N', None], \
- 'Default choice must be one of YyNn or default'
+ if default in (True, False):
+ default = 'ny'[default]
- assert not isinstance(default, bool)
return input_choice(question, [('Yes', 'y'), ('No', 'n')],
default,
automatic_quit=automatic_quit, force=force) == 'y'
diff --git a/pywikibot/userinterfaces/terminal_interface_base.py b/pywikibot/userinterfaces/terminal_interface_base.py
index 019b8e8..8346abb 100644
--- a/pywikibot/userinterfaces/terminal_interface_base.py
+++ b/pywikibot/userinterfaces/terminal_interface_base.py
@@ -1,6 +1,6 @@
"""Base for terminal user interfaces."""
#
-# (C) Pywikibot team, 2003-2022
+# (C) Pywikibot team, 2003-2023
#
# Distributed under the terms of the MIT license.
#
@@ -15,7 +15,7 @@
import pywikibot
from pywikibot import config
-from pywikibot.backports import Iterable, Sequence
+from pywikibot.backports import Iterable, Sequence, removeprefix
from pywikibot.bot_choice import (
ChoiceException,
Option,
@@ -424,12 +424,17 @@
automatic_quit: bool = True,
force: bool = False,
) -> Any:
- """
- Ask the user and returns a value from the options.
+ """Ask the user and returns a value from the options.
- Depending on the options setting return_shortcut to False may not be
- sensible when the option supports multiple values as it'll return an
- ambiguous index.
+ Depending on the options setting *return_shortcut* to False may
+ not be sensible when the option supports multiple values as
+ it'll return an ambiguous index.
+
+ .. versionchanged:: 9.0
+ Raise ValueError if no *default* value is given with *force*;
+ raise ValueError if *force* is True and *default* value is
+ invalid; raise TypeError if *default* value is neither str
+ nor None.
:param question: The question, without trailing whitespace.
:param options: Iterable of all available options. Each entry contains
@@ -447,6 +452,9 @@
:return: If return_shortcut the shortcut of options or the value of
default (if it's not None). Otherwise the index of the answer in
options. If default is not a shortcut, it'll return -1.
+ :raises ValueError: invalid or no *default* value is given with
+ *force* or no or an invalid option is given.
+ :raises TypeError: *default* value is neither None nor str
"""
def output_option(option, before_question) -> None:
"""Print an OutputOption before or after question."""
@@ -454,18 +462,25 @@
and option.before_question is before_question:
self.stream_output(option.out + '\n')
- if force and default is None:
+ if force and not default:
raise ValueError('With no default option it cannot be forced')
+
if isinstance(options, Option):
options = [options]
else: # make a copy
options = list(options)
+
if not options:
raise ValueError('No options are given.')
if automatic_quit:
options.append(QuitKeyboardInterrupt())
- if default:
+
+ if isinstance(default, str):
default = default.lower()
+ elif default is not None:
+ raise TypeError(f'Invalid type {type(default).__name__!r} for '
+ f"parameter 'default' ({default}); str expected")
+
for i, option in enumerate(options):
if not isinstance(option, Option):
if len(option) != 2:
@@ -495,6 +510,11 @@
output_option(option, before_question=False)
handled = option.stop
break
+ else:
+ if force:
+ raise ValueError(
+ f'{default!r} is not a valid Option for '
+ f'{removeprefix(output, question).lstrip()}')
if isinstance(answer, ChoiceException):
raise answer
--
To view, visit https://gerrit.wikimedia.org/r/c/pywikibot/core/+/981650
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: I3817ce91a527b07d5f9191c77d6b7f991b9e6703
Gerrit-Change-Number: 981650
Gerrit-PatchSet: 6
Gerrit-Owner: Xqt <info(a)gno.de>
Gerrit-Reviewer: Ammarpad <ammarpad(a)yahoo.com>
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/+/981633 )
Change subject: [IMPR] Use enums for Namespaces instead of integers
......................................................................
[IMPR] Use enums for Namespaces instead of integers
Change-Id: If827b5e8e130d54fe6f3363a0fad8ba4aec2e177
---
M pywikibot/site/_namespace.py
1 file changed, 20 insertions(+), 10 deletions(-)
Approvals:
Xqt: Looks good to me, approved
jenkins-bot: Verified
diff --git a/pywikibot/site/_namespace.py b/pywikibot/site/_namespace.py
index 44114ec..275e9e5 100644
--- a/pywikibot/site/_namespace.py
+++ b/pywikibot/site/_namespace.py
@@ -95,9 +95,9 @@
if aliases:
self.aliases = aliases
- elif id in (6, 7):
+ elif id in (BuiltinNamespace.FILE, BuiltinNamespace.FILE_TALK):
alias = 'Image'
- if id == 7:
+ if id == BuiltinNamespace.FILE_TALK:
alias += ' talk'
self.aliases = [alias]
else:
@@ -135,7 +135,7 @@
:param item: name to check
"""
- if item == '' and self.id == 0:
+ if item == '' and self.id == BuiltinNamespace.MAIN:
return True
name = Namespace.normalize_name(item)
@@ -175,10 +175,10 @@
@staticmethod
def _colons(id, name):
"""Return the name with required colons, depending on the ID."""
- if id == 0:
+ if id == BuiltinNamespace.MAIN:
return ':'
- if id in (6, 14):
+ if id in (BuiltinNamespace.FILE, BuiltinNamespace.CATEGORY):
return ':' + name + ':'
return name + ':'
@@ -266,9 +266,10 @@
def default_case(id, default_case=None):
"""Return the default fixed case value for the namespace ID."""
# https://www.mediawiki.org/wiki/Manual:$wgCapitalLinkOverrides#Warning
- if id > 0 and id % 2 == 1: # the talk ns has the non-talk ns case
- id -= 1
- if id in (-1, 2, 8):
+ if id in (BuiltinNamespace.SPECIAL,
+ BuiltinNamespace.USER, BuiltinNamespace.USER_TALK,
+ BuiltinNamespace.MEDIAWIKI, BuiltinNamespace.MEDIAWIKI_TALK,
+ ):
return 'first-letter'
return default_case
@@ -276,8 +277,8 @@
@classmethod
def builtin_namespaces(cls, case: str = 'first-letter'):
"""Return a dict of the builtin namespaces."""
- return {i: cls(i, case=cls.default_case(i, case))
- for i in range(-2, 16)}
+ return {e.value: cls(e.value, case=cls.default_case(e.value, case))
+ for e in BuiltinNamespace}
@staticmethod
def normalize_name(name):
--
To view, visit https://gerrit.wikimedia.org/r/c/pywikibot/core/+/981633
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: If827b5e8e130d54fe6f3363a0fad8ba4aec2e177
Gerrit-Change-Number: 981633
Gerrit-PatchSet: 2
Gerrit-Owner: Mpaa <mpaa.wiki(a)gmail.com>
Gerrit-Reviewer: Xqt <info(a)gno.de>
Gerrit-Reviewer: jenkins-bot
Gerrit-MessageType: merged