jenkins-bot has submitted this change. ( https://gerrit.wikimedia.org/r/c/pywikibot/core/+/759890 )
Change subject: [IMPR] Add to_latin_digits() function to textlib
......................................................................
[IMPR] Add to_latin_digits() function to textlib
- to_latin_digits() is the counterpart to textlib.to_local_digits()
- use the new function with TimeStripper. The new function is 70 % faster
than the old method.
- deprecate TimeStripper.fix_digits() and make it a staticmethod
- add tests for to_latin_digits() function
- use str.translate() within to_local_digits() function which makes this
function 16-70% faster
Change-Id: Ief32146f53eb3d295aef1807352639f3d3c638d7
---
M pywikibot/textlib.py
M tests/textlib_tests.py
2 files changed, 55 insertions(+), 10 deletions(-)
Approvals:
Matěj Suchánek: Looks good to me, but someone else must approve
Xqt: Looks good to me, approved
jenkins-bot: Verified
diff --git a/pywikibot/textlib.py b/pywikibot/textlib.py
index d8d1384..fedb60e 100644
--- a/pywikibot/textlib.py
+++ b/pywikibot/textlib.py
@@ -21,8 +21,10 @@
import pywikibot
from pywikibot.backports import Container, Iterable, List, Tuple
from pywikibot.backports import OrderedDict as OrderedDictType
+from pywikibot.backports import Sequence as SequenceType
from pywikibot.exceptions import InvalidTitleError, SiteDefinitionError
from pywikibot.family import Family
+from pywikibot.tools import deprecated
try:
@@ -143,8 +145,32 @@
digits = NON_LATIN_DIGITS.get(lang)
if digits:
phrase = str(phrase)
- for i, digit in enumerate(digits):
- phrase = phrase.replace(str(i), digit)
+ trans = str.maketrans('0123456789', digits)
+ phrase = phrase.translate(trans)
+ return phrase
+
+
+def to_latin_digits(phrase: str,
+ langs: Union[SequenceType[str], str, None] = None) -> str:
+ """Change non-latin digits to latin digits.
+
+ .. versionadded:: 7.0
+
+ :param phrase: The phrase to convert to latin numerical.
+ :param langs: Language codes. If langs parameter is None, use all
+ known languages to convert.
+ :return: The string with latin digits
+ """
+ if langs is None:
+ langs = NON_LATIN_DIGITS.keys()
+ elif isinstance(langs, str):
+ langs = [langs]
+
+ digits = [NON_LATIN_DIGITS[key] for key in langs
+ if key in NON_LATIN_DIGITS]
+ if digits:
+ trans = str.maketrans(''.join(digits), '0123456789' * len(digits))
+ phrase = phrase.translate(trans)
return phrase
@@ -1902,12 +1928,15 @@
self.tzinfo = tzoneFixedOffset(self.site.siteinfo['timeoffset'],
self.site.siteinfo['timezone'])
- def fix_digits(self, line):
- """Make non-latin digits like Persian to latin to parse."""
- for system in NON_LATIN_DIGITS.values():
- for i in range(10):
- line = line.replace(system[i], str(i))
- return line
+ @staticmethod
+ @deprecated('to_latin_digits() function', since='7.0.0')
+ def fix_digits(line):
+ """Make non-latin digits like Persian to latin to parse.
+
+ .. deprecated:: 7.0.0
+ Use :func:`to_latin_digits` instead.
+ """
+ return to_latin_digits(line)
def _last_match_and_replace(self, txt: str, pat):
"""
@@ -2019,7 +2048,7 @@
# to reduce false positives.
line = removeDisabledParts(line)
- line = self.fix_digits(line)
+ line = to_latin_digits(line)
for pat in self.patterns:
line, match_obj = self._last_match_and_replace(line, pat)
if match_obj:
diff --git a/tests/textlib_tests.py b/tests/textlib_tests.py
index 1a5241b..e56ff46 100644
--- a/tests/textlib_tests.py
+++ b/tests/textlib_tests.py
@@ -993,7 +993,7 @@
link)
-class TestLocalDigits(TestCase):
+class TestDigitsConversion(TestCase):
"""Test to verify that local digits are correctly being handled."""
@@ -1011,6 +1011,22 @@
textlib.to_local_digits(
'299792458', 'km'), '២៩៩៧៩២៤៥៨')
+ def test_to_latin(self):
+ """Test converting local digits to Latin digits."""
+ self.assertEqual(textlib.to_latin_digits('299792458'), '299792458')
+ self.assertEqual(
+ textlib.to_latin_digits('۲۹۹۷۹۲۴۵۸', 'fa'), '299792458')
+ self.assertEqual(
+ textlib.to_latin_digits('۲۹۹۷۹۲۴۵۸ flash'), '299792458 flash')
+ self.assertEqual(
+ textlib.to_latin_digits('២៩៩៧៩២៤៥៨', 'km'), '299792458')
+ self.assertEqual(
+ textlib.to_latin_digits('២៩៩៧៩២៤៥៨'), '299792458')
+ self.assertEqual(
+ textlib.to_latin_digits('២៩៩៧៩២៤៥៨', ['km', 'en']), '299792458')
+ self.assertEqual(
+ textlib.to_latin_digits('២៩៩៧៩២៤៥៨', ['en']), '២៩៩៧៩២៤៥៨')
+
class TestReplaceExcept(DefaultDrySiteTestCase):
--
To view, visit https://gerrit.wikimedia.org/r/c/pywikibot/core/+/759890
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: Ief32146f53eb3d295aef1807352639f3d3c638d7
Gerrit-Change-Number: 759890
Gerrit-PatchSet: 6
Gerrit-Owner: Xqt <info(a)gno.de>
Gerrit-Reviewer: Ladsgroup <Ladsgroup(a)gmail.com>
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/+/759887 )
Change subject: [doc] Fix spelling mistake
......................................................................
[doc] Fix spelling mistake
Change-Id: I8efb85e26ff91622c9d11ebc7bfe36c7233c3917
---
M HISTORY.rst
M pywikibot/page/__init__.py
2 files changed, 6 insertions(+), 4 deletions(-)
Approvals:
Xqt: Looks good to me, approved
jenkins-bot: Verified
diff --git a/HISTORY.rst b/HISTORY.rst
index f12a0fb..953d749 100644
--- a/HISTORY.rst
+++ b/HISTORY.rst
@@ -458,7 +458,7 @@
* Only run cosmetic changes on wikitext pages (T260489)
* Leave a script gracefully for wrong -lang and -family option (T259756)
* Change meaning of BasePage.text (T260472)
-* site/family methods code2encodings() and code2encoding() has been removed in favour of encoding()/endcodings() methods
+* site/family methods code2encodings() and code2encoding() has been removed in favour of encoding()/encodings() methods
* Site.getExpandedString() method was removed in favour of expand_text
* Site.Family() function was removed in favour of Family.load() method
* Add wikispore family (T260049)
diff --git a/pywikibot/page/__init__.py b/pywikibot/page/__init__.py
index e5f3366..3c5aca7 100644
--- a/pywikibot/page/__init__.py
+++ b/pywikibot/page/__init__.py
@@ -5871,11 +5871,13 @@
@deprecated('pywikibot.tools.chars.url2string', since='6.2.0')
def url2unicode(title: str, encodings='utf-8') -> str:
- """
- DEPRECATED. Convert URL-encoded text to unicode using several encoding.
+ """Convert URL-encoded text to unicode using several encoding.
Uses the first encoding that doesn't cause an error.
+ .. deprecated:: 6.2.0
+ Use :func:`pywikibot.tools.chars.url2string` instead.
+
:param title: URL-encoded character data to convert
:param encodings: Encodings to attempt to use during conversion.
:type encodings: str, list or Site
@@ -5887,7 +5889,7 @@
encodings = encodings.encodings()
issue_deprecation_warning(
'Passing BaseSite object to encodings parameter',
- 'BaseSite.endcodings()',
+ 'BaseSite.encodings()',
depth=1,
since='6.2.0'
)
--
To view, visit https://gerrit.wikimedia.org/r/c/pywikibot/core/+/759887
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: I8efb85e26ff91622c9d11ebc7bfe36c7233c3917
Gerrit-Change-Number: 759887
Gerrit-PatchSet: 2
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/+/759885 )
Change subject: [IMPR] simplify range call
......................................................................
[IMPR] simplify range call
Start parameter can be omitted if it is 0 and no step parameter is given.
Change-Id: I18899a2fc8994ba4d4be71208af1b01b98cba88b
---
M pywikibot/date.py
M pywikibot/textlib.py
M tests/namespace_tests.py
3 files changed, 4 insertions(+), 4 deletions(-)
Approvals:
Mpaa: Looks good to me, approved
jenkins-bot: Verified
diff --git a/pywikibot/date.py b/pywikibot/date.py
index 4b7763f..b6f4a42 100644
--- a/pywikibot/date.py
+++ b/pywikibot/date.py
@@ -1,6 +1,6 @@
"""Date data and manipulation module."""
#
-# (C) Pywikibot team, 2003-2021
+# (C) Pywikibot team, 2003-2022
#
# Distributed under the terms of the MIT license.
#
@@ -1860,7 +1860,7 @@
# Brazil uses '1añ' for the 1st of every month, and number without suffix for
# all other days
brMonthNames = makeMonthNamedList('br', '%s', True)
-for i in range(0, 12):
+for i in range(12):
formats[dayMnthFmts[i]]['br'] = eval(
'lambda m: multi(m, ['
'(lambda v: dh_dayOfMnth(v, "%dañ {mname}"), lambda p: p == 1), '
diff --git a/pywikibot/textlib.py b/pywikibot/textlib.py
index da69210..d8d1384 100644
--- a/pywikibot/textlib.py
+++ b/pywikibot/textlib.py
@@ -1905,7 +1905,7 @@
def fix_digits(self, line):
"""Make non-latin digits like Persian to latin to parse."""
for system in NON_LATIN_DIGITS.values():
- for i in range(0, 10):
+ for i in range(10):
line = line.replace(system[i], str(i))
return line
diff --git a/tests/namespace_tests.py b/tests/namespace_tests.py
index 401e502..8a511c0 100644
--- a/tests/namespace_tests.py
+++ b/tests/namespace_tests.py
@@ -68,7 +68,7 @@
ns = Namespace.builtin_namespaces()
self.assertIsInstance(ns, dict)
- self.assertTrue(all(x in ns for x in range(0, 16)))
+ self.assertTrue(all(x in ns for x in range(16)))
self.assertTrue(all(isinstance(key, int)
for key in ns))
--
To view, visit https://gerrit.wikimedia.org/r/c/pywikibot/core/+/759885
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: I18899a2fc8994ba4d4be71208af1b01b98cba88b
Gerrit-Change-Number: 759885
Gerrit-PatchSet: 2
Gerrit-Owner: Xqt <info(a)gno.de>
Gerrit-Reviewer: Mpaa <mpaa.wiki(a)gmail.com>
Gerrit-Reviewer: jenkins-bot
Gerrit-MessageType: merged
jenkins-bot has submitted this change. ( https://gerrit.wikimedia.org/r/c/pywikibot/core/+/759882 )
Change subject: [IMPR] run _generate_submodules multiple times instead for a generator
......................................................................
[IMPR] run _generate_submodules multiple times instead for a generator
- call _generate_submodules for each module instead passing the
generator to it and iterate through it again
- decrease nested flow statements
- update tests
Change-Id: I710216411adfa843f60c96ddca102ccae5ce9e47
---
M pywikibot/data/api.py
M tests/api_tests.py
2 files changed, 53 insertions(+), 67 deletions(-)
Approvals:
Xqt: Looks good to me, approved
jenkins-bot: Verified
diff --git a/pywikibot/data/api.py b/pywikibot/data/api.py
index 47c1a6e..ca9f047 100644
--- a/pywikibot/data/api.py
+++ b/pywikibot/data/api.py
@@ -373,67 +373,65 @@
del normalized_result[path]
self._paraminfo.update(normalized_result)
- self._generate_submodules(mod['path']
- for mod in normalized_result.values())
+ for mod in normalized_result.values():
+ self._generate_submodules(mod['path'])
if 'pageset' in modules and 'pageset' not in self._paraminfo:
self._emulate_pageset()
- def _generate_submodules(self, modules):
- """Check and generate submodules for the given modules."""
- for module in modules:
- parameters = self._paraminfo[module].get('parameters', [])
- submodules = set()
- # Advanced submodule into added to MW API in df80f1ea
- 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:
- if ((module == 'main' and param['name'] == 'format')
- or 'submodules' not in param):
- continue
- for submodule in param['submodules'].values():
- if '+' in submodule:
- parent, child = submodule.rsplit('+', 1)
- else:
- parent = 'main'
- child = submodule
- if parent == module:
- submodules.add(child)
- else:
- # Boolean submodule info added to MW API in afa153ae
- if self.site.mw_version < '1.24wmf18':
- if module == 'main':
- params = {'action'}
- elif module == 'query':
- params = {'prop', 'list', 'meta'}
+ def _generate_submodules(self, module):
+ """Check and generate submodules for the given module."""
+ parameters = self._paraminfo[module].get('parameters', [])
+ submodules = set()
+ # Advanced submodule into added to MW API in df80f1ea
+ 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:
+ if module == 'main' and param['name'] == 'format' \
+ or 'submodules' not in param:
+ continue
+
+ for submodule in param['submodules'].values():
+ if '+' in submodule:
+ parent, child = submodule.rsplit('+', 1)
else:
- params = set()
- for param in parameters:
- if param['name'] in params:
- param['submodules'] = ''
-
- for param in parameters:
- # Do not add format modules
- if ('submodules' in param
- and (module != 'main'
- or param['name'] != 'format')):
- submodules |= set(param['type'])
-
- if submodules:
- self._add_submodules(module, submodules)
- if module == 'query':
- # Previously also modules from generator were used as query
- # modules, but verify that those are just a subset of the
- # prop/list/meta modules. There is no sanity check as this
- # needs to be revisited if query has no generator parameter
- for param in parameters:
- if param['name'] == 'generator':
- break
+ parent, child = 'main', submodule
+ if parent == module:
+ submodules.add(child)
+ else:
+ # Boolean submodule info added to MW API in afa153ae
+ if self.site.mw_version < '1.24wmf18':
+ if module == 'main':
+ params = {'action'}
+ elif module == 'query':
+ params = {'prop', 'list', 'meta'}
else:
- param = {}
- assert param['name'] == 'generator' \
- and submodules >= set(param['type'])
+ params = set()
+ for param in parameters:
+ if param['name'] in params:
+ param['submodules'] = ''
+
+ for param in parameters:
+ # Do not add format modules
+ if 'submodules' in param \
+ and (module != 'main' or param['name'] != 'format'):
+ submodules |= set(param['type'])
+
+ if submodules:
+ self._add_submodules(module, submodules)
+ if module == 'query':
+ # Previously also modules from generator were used as query
+ # modules, but verify that those are just a subset of the
+ # prop/list/meta modules. There is no sanity check as this
+ # needs to be revisited if query has no generator parameter
+ for param in parameters:
+ if param['name'] == 'generator':
+ break
+ else:
+ param = {}
+ assert param['name'] == 'generator' \
+ and submodules >= set(param['type'])
def _normalize_modules(self, modules) -> set:
"""Add query+ to any query module name not also in action modules."""
diff --git a/tests/api_tests.py b/tests/api_tests.py
index ae1d958..75e3d3b 100644
--- a/tests/api_tests.py
+++ b/tests/api_tests.py
@@ -98,20 +98,8 @@
def test_init_query_first(self):
"""Test init where it first adds query and then main."""
- def patched_generate_submodules(modules):
- # Change the query such that query is handled before main
- modules = set(modules)
- if 'main' in modules:
- assert 'query' in modules
- modules.discard('main')
- modules = list(modules) + ['main']
- else:
- assert 'query' not in modules
- original_generate_submodules(modules)
pi = api.ParamInfo(self.site, {'query', 'main'})
self.assertIsEmpty(pi)
- original_generate_submodules = pi._generate_submodules
- pi._generate_submodules = patched_generate_submodules
pi._init()
self.assertIn('main', pi._paraminfo)
self.assertIn('query', pi._paraminfo)
--
To view, visit https://gerrit.wikimedia.org/r/c/pywikibot/core/+/759882
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: I710216411adfa843f60c96ddca102ccae5ce9e47
Gerrit-Change-Number: 759882
Gerrit-PatchSet: 2
Gerrit-Owner: Xqt <info(a)gno.de>
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/+/758082 )
Change subject: [IMPR] Remove deprecation warning in APISite.search()
......................................................................
[IMPR] Remove deprecation warning in APISite.search()
APISite.search():
- remove search parameter checks in APISite.search() and delegate it
to the API request.
- change default of where parameter to None which is 'text' for
search engines where title search is deactivated
- update documentation
Request.submit():
- print a warning if 'title' or 'text' value of 'where' search
parameter is disabled and fall back to the search engine's default.
if CirrusSearch is installed and 'title' is used, modify the search
string and use intitle: directive
- update tests
Change-Id: Ie36d141752d42f669d4bb0f3e3522026a9f91c83
---
M pywikibot/data/api.py
M pywikibot/site/_generators.py
M tests/site_tests.py
3 files changed, 33 insertions(+), 42 deletions(-)
Approvals:
jenkins-bot: Verified
Xqt: Looks good to me, approved
diff --git a/pywikibot/data/api.py b/pywikibot/data/api.py
index 48f4888..47c1a6e 100644
--- a/pywikibot/data/api.py
+++ b/pywikibot/data/api.py
@@ -1849,6 +1849,17 @@
self.wait()
continue
+ if code in ('search-title-disabled', 'search-text-disabled'):
+ prefix = 'gsr' if 'gsrsearch' in self._params else 'sr'
+ del self._params[prefix + 'what']
+ # use intitle: search instead
+ if code == 'search-title-disabled' \
+ and self.site.has_extension('CirrusSearch'):
+ key = prefix + 'search'
+ self._params[key] = ['intitle:' + search
+ for search in self._params[key]]
+ continue
+
if code == 'urlshortener-blocked': # T244062
# add additional informations to result['error']
result['error']['current site'] = self.site
diff --git a/pywikibot/site/_generators.py b/pywikibot/site/_generators.py
index 679a276..f3aaa0f 100644
--- a/pywikibot/site/_generators.py
+++ b/pywikibot/site/_generators.py
@@ -1311,7 +1311,7 @@
def search(self, searchstring: str, *,
namespaces=None,
- where: str = 'text',
+ where: Optional[str] = None,
total: Optional[int] = None,
content: bool = False):
"""Iterate Pages that contain the searchstring.
@@ -1319,11 +1319,18 @@
Note that this may include non-existing Pages if the wiki's database
table contains outdated entries.
- :see: https://www.mediawiki.org/wiki/API:Search
+ .. versionchanged:: 7.0
+ Default of `where` parameter has been changed from 'text' to
+ None. The behaviour depends on the installed search engine
+ which is 'text' on CirrusSearch'.
+ raises APIError instead of Error if searchstring is not set
+ or what parameter is wrong.
+
+ .. seealso:: https://www.mediawiki.org/wiki/API:Search
:param searchstring: the text to search for
- :param where: Where to search; value must be "text", "title" or
- "nearmatch" (many wikis do not support title or nearmatch search)
+ :param where: Where to search; value must be "text", "title",
+ "nearmatch" or None (many wikis do not support all search types)
:param namespaces: search only in these namespaces (defaults to all)
:type namespaces: iterable of str or Namespace key,
or a single instance of those types. May be a '|' separated
@@ -1333,25 +1340,11 @@
:raises KeyError: a namespace identifier was not resolved
:raises TypeError: a namespace identifier has an inappropriate
type such as NoneType or bool
+ :raises APIError: The "gsrsearch" parameter must be set:
+ searchstring parameter is not set
+ :raises APIError: Unrecognized value for parameter "gsrwhat":
+ wrong where parameter is given
"""
- where_types = ['nearmatch', 'text', 'title']
- if not searchstring:
- raise Error('search: searchstring cannot be empty')
- if where not in where_types:
- raise Error("search: unrecognized 'where' value: {}".format(where))
-
- if where == 'title' \
- and self.has_extension('CirrusSearch') \
- and isinstance(self.family, pywikibot.family.WikimediaFamily):
- # 'title' search was disabled, use intitle instead
- searchstring = 'intitle:' + searchstring
- issue_deprecation_warning(
- "where='{}'".format(where),
- "searchstring='{}'".format(searchstring),
- since='20160224')
-
- where = None # default
-
if not namespaces and namespaces != 0:
namespaces = [ns_id for ns_id in self.namespaces if ns_id >= 0]
srgen = self._generator(api.PageGenerator, type_arg='search',
diff --git a/tests/site_tests.py b/tests/site_tests.py
index 13ed4ed..faf457c 100644
--- a/tests/site_tests.py
+++ b/tests/site_tests.py
@@ -1460,7 +1460,6 @@
self.skipTest('gsrsearch is diabled on site {}:\n{!r}'
.format(mysite, e))
- @suppress_warnings("where='title' is deprecated", FutureWarning)
def test_search_where_title(self):
"""Test site.search() method with 'where' parameter set to title."""
search_gen = self.site.search(
@@ -1468,27 +1467,15 @@
expected_params = {
'prop': ['info', 'imageinfo', 'categoryinfo'],
'inprop': ['protection'],
- 'iiprop': [
- 'timestamp', 'user', 'comment', 'url', 'size', 'sha1',
- 'metadata'],
+ 'iiprop': ['timestamp', 'user', 'comment', 'url', 'size', 'sha1',
+ 'metadata'],
'iilimit': ['max'], 'generator': ['search'], 'action': ['query'],
- 'indexpageids': [True], 'continue': [True], 'gsrnamespace': [0]}
- if self.site.has_extension('CirrusSearch'):
- expected_params.update({
- 'gsrsearch': ['intitle:wiki'], 'gsrwhat': [None]})
- else:
- expected_params.update({
- 'gsrsearch': ['wiki'], 'gsrwhat': ['title']})
+ 'indexpageids': [True], 'continue': [True],
+ 'gsrnamespace': [0], 'gsrsearch': ['wiki'], 'gsrwhat': ['title']}
self.assertEqual(search_gen.request._params, expected_params)
- try:
- for hit in search_gen:
- self.assertIsInstance(hit, pywikibot.Page)
- self.assertEqual(hit.namespace(), 0)
- except APIError as e:
- if e.code in ('search-title-disabled', 'gsrsearch-title-disabled'):
- self.skipTest(
- 'Title search disabled on site: {}'.format(self.site))
- raise
+ for hit in search_gen:
+ self.assertIsInstance(hit, pywikibot.Page)
+ self.assertEqual(hit.namespace(), 0)
class TestUserContribsAsUser(DefaultSiteTestCase):
--
To view, visit https://gerrit.wikimedia.org/r/c/pywikibot/core/+/758082
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: Ie36d141752d42f669d4bb0f3e3522026a9f91c83
Gerrit-Change-Number: 758082
Gerrit-PatchSet: 3
Gerrit-Owner: Xqt <info(a)gno.de>
Gerrit-Reviewer: Xqt <info(a)gno.de>
Gerrit-Reviewer: jenkins-bot
Gerrit-MessageType: merged