jenkins-bot has submitted this change. ( https://gerrit.wikimedia.org/r/c/pywikibot/core/+/1224020?usp=email )
Change subject: tests: update precommit-hooks
......................................................................
tests: update precommit-hooks
also solve some SIG305 issues
Change-Id: Id2410ed5a38470f36360c3a76e6b2e6111e46c64
---
M .pre-commit-config.yaml
M pyproject.toml
M pywikibot/comms/http.py
M pywikibot/site/_datasite.py
M pywikibot/tools/_deprecate.py
5 files changed, 43 insertions(+), 38 deletions(-)
Approvals:
jenkins-bot: Verified
Xqt: Looks good to me, approved
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 74a65c6..9e105bd 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -92,7 +92,7 @@
- id: isort
exclude: ^pwb\.py$
- repo: https://github.com/jshwi/docsig
- rev: v0.72.2
+ rev: v0.74.1
hooks:
- id: docsig
exclude: ^(tests|scripts)
diff --git a/pyproject.toml b/pyproject.toml
index 6992c45..559b73b 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -164,6 +164,7 @@
"SIG202",
"SIG203",
"SIG301",
+ "SIG305",
"SIG402",
"SIG404",
"SIG501",
diff --git a/pywikibot/comms/http.py b/pywikibot/comms/http.py
index 281cf16..6dd8923 100644
--- a/pywikibot/comms/http.py
+++ b/pywikibot/comms/http.py
@@ -25,7 +25,7 @@
Cookies are lazy loaded when logging to site.
"""
#
-# (C) Pywikibot team, 2007-2025
+# (C) Pywikibot team, 2007-2026
#
# Distributed under the terms of the MIT license.
#
@@ -269,11 +269,11 @@
:meth:`family.Family.base_url` method.
:param site: The Site to connect to
- :param uri: the URI to retrieve
+ :param uri: The URI to retrieve
:keyword CodecInfo or str or None charset: Either a valid charset
(usable for `str.decode()`) or None to automatically chose the
charset from the returned header (defaults to latin-1).
- :keyword str | None protocol: a url scheme
+ :keyword str | None protocol: A url scheme
:return: The received data Response
"""
kwargs.setdefault('verify', site.verify_SSL_certificate())
@@ -293,8 +293,8 @@
def get_authentication(uri: str) -> tuple[str, str] | None:
"""Retrieve authentication token.
- :param uri: the URI to access
- :return: authentication token
+ :param uri: The URI to access
+ :return: Authentication token
"""
parsed_uri = urlparse(uri)
netloc_parts = parsed_uri.netloc.split('.')
@@ -375,7 +375,7 @@
:param uri: URL to send
:param method: HTTP method of the request (default: GET)
- :param headers: dictionary of headers of the request
+ :param headers: Dictionary of headers of the request
:param default_error_handling: Use default error handling
:param use_fake_user_agent: Set to True to use fake UA, False to use
pywikibot's UA, str to specify own UA. This behaviour might be
@@ -385,7 +385,7 @@
to automatically chose the charset from the returned header (defaults
to latin-1)
:type charset: CodecInfo, str, None
- :keyword verify: verify the SSL certificate (default is True)
+ :keyword verify: Verify the SSL certificate (default is True)
:type verify: bool or path to certificates
:keyword callbacks: Methods to call once data is fetched
:type callbacks: list of callable
diff --git a/pywikibot/site/_datasite.py b/pywikibot/site/_datasite.py
index 6cb87db..7b66e93 100644
--- a/pywikibot/site/_datasite.py
+++ b/pywikibot/site/_datasite.py
@@ -1,6 +1,6 @@
"""Objects representing API interface to Wikibase site."""
#
-# (C) Pywikibot team, 2012-2025
+# (C) Pywikibot team, 2012-2026
#
# Distributed under the terms of the MIT license.
#
@@ -170,7 +170,7 @@
return None
- def loadcontent(self, identification, *props):
+ def loadcontent(self, identification: dict[str, Any], *props):
"""Fetch the current content of a Wikibase item.
This is called loadcontent since wbgetentities does not support
@@ -178,8 +178,7 @@
actual loadrevisions.
:param identification: Parameters used to identify the page(s)
- :type identification: dict
- :param props: the optional properties to fetch.
+ :param props: The optional properties to fetch.
"""
params = merge_unique_dicts(identification, action='wbgetentities',
# TODO: When props is empty it results in
@@ -203,9 +202,9 @@
.. note:: Pages will be iterated in a different order than in
the underlying pagelist.
- :param pagelist: an iterable that yields either WikibaseEntity
+ :param pagelist: An iterable that yields either WikibaseEntity
objects, or Page objects linked to an ItemPage.
- :param groupsize: how many pages to query at a time
+ :param groupsize: How many pages to query at a time
"""
if not hasattr(self, '_entity_namespaces'):
self._cache_entity_namespaces()
@@ -299,7 +298,7 @@
:param entity: Page to edit, or dict with API parameters
to use for entity identification.
- :param data: data updates
+ :param data: Data updates
:param bot: Whether to mark the edit as a bot edit.
:keyword int baserevid: The numeric identifier for the revision
@@ -783,7 +782,7 @@
def set_redirect_target(self, from_item, to_item, bot: bool = True):
"""Make a redirect to another item.
- :param to_item: title of target item.
+ :param to_item: Title of target item.
:type to_item: pywikibot.ItemPage
:param from_item: Title of the item to be redirected.
:type from_item: pywikibot.ItemPage
@@ -840,16 +839,16 @@
.. seealso:: `wbparsevalue API
<https://www.wikidata.org/w/api.php?action=help&modules=wbparsevalue>`_
- :param datatype: datatype of the values being parsed. Refer the
+ :param datatype: Data type of the values being parsed. Refer the
API for a valid datatype.
- :param values: list of values to be parsed
- :param options: any additional options for wikibase parser
+ :param values: List of values to be parsed
+ :param options: Any additional options for wikibase parser
(for time, 'precision' should be specified)
- :param language: code of the language to parse the value in
- :param validate: whether parser should provide data validation as well
- as parsing
+ :param language: The code of the language to parse the value in
+ :param validate: Whether parser should provide data validation
+ as well as parsing
:return: list of parsed values
- :raises ValueError: parsing failed due to some invalid input values
+ :raises ValueError: Parsing failed due to some invalid input values
"""
params = {
'action': 'wbparsevalue',
@@ -1082,18 +1081,21 @@
@need_right('edit')
@need_extension('WikibaseLexeme')
- def edit_form_elements(self, form, data, *, bot: bool = True,
- baserevid=None) -> dict:
+ def edit_form_elements(
+ self,
+ form: pywikibot.LexemeForm,
+ data: dict[str, Any],
+ *,
+ bot: bool = True,
+ baserevid: int | None = None
+ ) -> dict:
"""Edit lexeme form elements.
:param form: Form
- :type form: pywikibot.LexemeForm
- :param data: data updates
- :type data: dict
- :keyword bot: Whether to mark the edit as a bot edit
- :keyword baserevid: Base revision id override, used to detect
+ :param data: Data updates
+ :param bot: Whether to mark the edit as a bot edit
+ :param baserevid: Base revision id override, used to detect
conflicts.
- :type baserevid: long
:return: New form data
"""
params = {
diff --git a/pywikibot/tools/_deprecate.py b/pywikibot/tools/_deprecate.py
index f67f91d..16b0e1d 100644
--- a/pywikibot/tools/_deprecate.py
+++ b/pywikibot/tools/_deprecate.py
@@ -19,7 +19,7 @@
deprecation decorators moved to _deprecate submodule
"""
#
-# (C) Pywikibot team, 2008-2025
+# (C) Pywikibot team, 2008-2026
#
# Distributed under the terms of the MIT license.
#
@@ -65,7 +65,7 @@
:param obj: An object being decorated
:type obj: object
- :param stacklevel: level to use
+ :param stacklevel: Stack level to use
"""
if hasattr(obj, '__full_name__'):
return
@@ -209,12 +209,14 @@
.. versionchanged:: 8.2
*warning_class* and *since* are keyword-only parameters.
- :param name: the name of the deprecated object
- :param instead: suggested replacement for the deprecated object
- :param depth: depth + 1 will be used as stacklevel for the warnings
- :param warning_class: a warning class (category) to be used,
+ :param name: The name of the deprecated object
+ :param instead: Suggested replacement for the deprecated object
+ :param depth: *depth* + 1 will be used as stacklevel for the
+ warnings
+ :param warning_class: A warning class (category) to be used,
defaults to FutureWarning
- :param since: a version string when the method or function was deprecated
+ :param since: A version string when the method or function was
+ deprecated
"""
msg = _build_msg_string(instead, since)
if warning_class is None:
--
To view, visit https://gerrit.wikimedia.org/r/c/pywikibot/core/+/1224020?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.wikimedia.org/r/settings?usp=email
Gerrit-MessageType: merged
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Change-Id: Id2410ed5a38470f36360c3a76e6b2e6111e46c64
Gerrit-Change-Number: 1224020
Gerrit-PatchSet: 1
Gerrit-Owner: Xqt <info(a)gno.de>
Gerrit-Reviewer: Xqt <info(a)gno.de>
Gerrit-Reviewer: jenkins-bot
Xqt has submitted this change. ( https://gerrit.wikimedia.org/r/c/pywikibot/core/+/1223149?usp=email )
Change subject: doc: Update tests documentation
......................................................................
doc: Update tests documentation
Also
- shorten TEST_RUNNING usage in login.py
- remove unused ci_test_run variable in script_tests.py
Change-Id: I6455a42f0bd0b30b31d55d19a0dd20785ba65e4f
---
M pywikibot/login.py
M tests/README.rst
M tests/script_tests.py
3 files changed, 7 insertions(+), 10 deletions(-)
Approvals:
Xqt: Verified; Looks good to me, approved
diff --git a/pywikibot/login.py b/pywikibot/login.py
index 4565fec..d4008ba 100644
--- a/pywikibot/login.py
+++ b/pywikibot/login.py
@@ -1,6 +1,6 @@
"""Library to log the bot in to a wiki account."""
#
-# (C) Pywikibot team, 2003-2025
+# (C) Pywikibot team, 2003-2026
#
# Distributed under the terms of the MIT license.
#
@@ -243,9 +243,8 @@
password_path = Path(config.password_file)
# ignore this check when running tests
- if os.environ.get('PYWIKIBOT_TEST_RUNNING', '0') == '0' \
- and (not password_path.is_file(**params)
- or password_path.is_symlink()):
+ if not TEST_RUNNING and (not password_path.is_file(**params)
+ or password_path.is_symlink()):
raise FileNotFoundError(
f'Password file {password_path.name} does not exist in '
f'{password_path.parent}'
diff --git a/tests/README.rst b/tests/README.rst
index 503b397..b8a61fc 100644
--- a/tests/README.rst
+++ b/tests/README.rst
@@ -124,10 +124,10 @@
PYWIKIBOT_TEST_QUIET=1
**PYWIKIBOT_TEST_RUNNING**
- This environment variable skips tests instead of raising
+ This environment variable ignores some passwordfile checks in
+ :meth:`login.LoginManager.readPassword` and skips some tests instead of raising
:exc:`exceptions.MaxlagTimeoutError` when maximum retries attempted due to
- maxlag without success. It is also used by :source:`tests/script_tests` for code
- coverage. GitHub actions and AppVeyor tests activate this variable::
+ maxlag without success. GitHub actions and Jenkins tests activate this variable::
PYWIKIBOT_TEST_RUNNING=1
diff --git a/tests/script_tests.py b/tests/script_tests.py
index 91fb74a..95803b0 100755
--- a/tests/script_tests.py
+++ b/tests/script_tests.py
@@ -1,13 +1,12 @@
#!/usr/bin/env python3
"""Test that each script can be compiled and executed."""
#
-# (C) Pywikibot team, 2014-2025
+# (C) Pywikibot team, 2014-2026
#
# Distributed under the terms of the MIT license.
#
from __future__ import annotations
-import os
import sys
import unittest
from collections.abc import Iterator
@@ -21,7 +20,6 @@
from tests.utils import execute_pwb
-ci_test_run = os.environ.get('PYWIKIBOT_TEST_RUNNING', '0') == '1'
scripts_path = join_root_path('scripts')
# login script should be the first to test
--
To view, visit https://gerrit.wikimedia.org/r/c/pywikibot/core/+/1223149?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.wikimedia.org/r/settings?usp=email
Gerrit-MessageType: merged
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Change-Id: I6455a42f0bd0b30b31d55d19a0dd20785ba65e4f
Gerrit-Change-Number: 1223149
Gerrit-PatchSet: 2
Gerrit-Owner: Xqt <info(a)gno.de>
Gerrit-Reviewer: Xqt <info(a)gno.de>
Gerrit-Reviewer: jenkins-bot
jenkins-bot has submitted this change. ( https://gerrit.wikimedia.org/r/c/pywikibot/core/+/1221585?usp=email )
Change subject: IMPR: support Queue.shutdown() in Python 3.13+ with fallback for 3.9–3.12
......................................................................
IMPR: support Queue.shutdown() in Python 3.13+ with fallback for 3.9–3.12
- Use queue.shutdown() when available (Python 3.13+) in _flush()
to stop the async_manager queue cleanly.
- Provide a dummy ShutDown exception for Python 3.9–3.12 so that
async_manager can use the same exception handling path.
- Make the 'block' parameter of async_manager keyword-only.
Change-Id: I12a6dad12889b90d9330137ea2ae529aee8ec2b2
---
M pywikibot/__init__.py
1 file changed, 31 insertions(+), 9 deletions(-)
Approvals:
jenkins-bot: Verified
Xqt: Looks good to me, approved
diff --git a/pywikibot/__init__.py b/pywikibot/__init__.py
index abdd4a1..cfcf215 100644
--- a/pywikibot/__init__.py
+++ b/pywikibot/__init__.py
@@ -1,6 +1,6 @@
"""The initialization file for the Pywikibot framework."""
#
-# (C) Pywikibot team, 2008-2025
+# (C) Pywikibot team, 2008-2026
#
# Distributed under the terms of the MIT license.
#
@@ -61,12 +61,23 @@
)
from pywikibot.site import BaseSite as _BaseSite
from pywikibot.time import Timestamp
-from pywikibot.tools import normalize_username
+from pywikibot.tools import (
+ PYTHON_VERSION,
+ deprecated_signature,
+ normalize_username,
+)
if TYPE_CHECKING:
from pywikibot.site import APISite
+if PYTHON_VERSION >= (3, 13):
+ from queue import ShutDown
+else:
+ class ShutDown(Exception):
+
+ """Dummy exception for Python 3.9-3.12."""
+
__all__ = (
'__copyright__', '__url__', '__version__',
@@ -334,18 +345,22 @@
debug('_flush() called')
def remaining() -> tuple[int, datetime.timedelta]:
+ """Calculate remaining pages and seconds."""
remaining_pages = page_put_queue.qsize()
- if stop:
+ if stop and PYTHON_VERSION < (3, 13):
# -1 because we added a None element to stop the queue
remaining_pages -= 1
remaining_seconds = datetime.timedelta(
- seconds=round(remaining_pages * _config.put_throttle))
+ seconds=round(remaining_pages * max(_config.put_throttle, 1)))
return (remaining_pages, remaining_seconds)
if stop:
- # None task element leaves async_manager
- page_put_queue.put((None, [], {}))
+ if PYTHON_VERSION >= (3, 13):
+ page_put_queue.shutdown()
+ else:
+ # None task element leaves async_manager
+ page_put_queue.put((None, [], {}))
num, sec = remaining()
if num > 0 and sec.total_seconds() > _config.noisysleep:
@@ -384,9 +399,13 @@
# Create a separate thread for asynchronous page saves (and other requests)
-def async_manager(block=True) -> None:
+@deprecated_signature(since='11.0.0')
+def async_manager(*, block=True) -> None:
"""Daemon to take requests from the queue and execute them in background.
+ .. versionchanged:: 11.0
+ *block* must be given as keyword argument.
+
:param block: If true, block :attr:`page_put_queue` if necessary
until a request is available to process. Otherwise process a
request if one is immediately available, else leave the function.
@@ -395,10 +414,13 @@
if not block and page_put_queue.empty():
break
- (request, args, kwargs) = page_put_queue.get(block)
+ try:
+ request, args, kwargs = page_put_queue.get(block)
+ except ShutDown:
+ break
with _page_put_queue_busy:
- if request is None:
+ if request is None: # Python < 3.13 not handled by ShutDown
break
request(*args, **kwargs)
page_put_queue.task_done()
--
To view, visit https://gerrit.wikimedia.org/r/c/pywikibot/core/+/1221585?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.wikimedia.org/r/settings?usp=email
Gerrit-MessageType: merged
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Change-Id: I12a6dad12889b90d9330137ea2ae529aee8ec2b2
Gerrit-Change-Number: 1221585
Gerrit-PatchSet: 7
Gerrit-Owner: Xqt <info(a)gno.de>
Gerrit-Reviewer: Xqt <info(a)gno.de>
Gerrit-Reviewer: jenkins-bot
jenkins-bot has submitted this change. ( https://gerrit.wikimedia.org/r/c/pywikibot/core/+/1221451?usp=email )
Change subject: IMPR: use RLock instead of Queue to signal async_manager activity
......................................................................
IMPR: use RLock instead of Queue to signal async_manager activity
Use an RLock instead of an auxiliary Queue to signal whether
async_manager is currently processing a request.
With Python 3.14, threading.RLock gained a public locked() method.
This method is backported for older Python versions and available in
Pywikibot since 10.2 via the backports module (and since 6.2 via the
tools module).
The lock is held while a request is being executed and released
afterwards. _flush() can reliably determine whether the worker thread
is still busy by checking _page_put_queue_busy.locked() in addition to
page_put_queue.empty().
Changes:
- Replace page_put_queue_busy with an internal RLock
(_page_put_queue_busy)
- Use the lock to signal active request processing
- Remove the undocumented page_put_queue_busy Queue
This preserves the original synchronization semantics while reducing
overhead and avoiding the need for a second Queue.
Bug: T147178
Change-Id: I7f25e34cc807ccf61987431db691858d910dfd21
---
M ROADMAP.rst
M pywikibot/__init__.py
2 files changed, 16 insertions(+), 10 deletions(-)
Approvals:
jenkins-bot: Verified
Xqt: Looks good to me, approved
diff --git a/ROADMAP.rst b/ROADMAP.rst
index 0905cf3..4ed43d8 100644
--- a/ROADMAP.rst
+++ b/ROADMAP.rst
@@ -3,6 +3,7 @@
**Improvements**
+* Use :class:`backports.RLock` instead of Queue to signal async_manager activity (:phab:`T147178`)
* Add :meth:`User.is_partial_blocked()<pywikibot.User.is_partial_blocked>` and methods
:meth:`APISite.is_partial_blocked()<pywikibot.site._apisite.APISite.is_partial_blocked>` to detect
partial blocks (:phab:`T412613`)
@@ -28,6 +29,7 @@
**Code cleanups**
+* The undocumented ``page_put_queue_busy`` was removed without deprecation period.
* Dysfunctional :meth:`APISite.alllinks()
<pywikibot.site._generators.GeneratorsMixin.alllinks>` was removed.
(:phab:`T359427`, :phab:`T407708`)
diff --git a/pywikibot/__init__.py b/pywikibot/__init__.py
index 7dc246a..abdd4a1 100644
--- a/pywikibot/__init__.py
+++ b/pywikibot/__init__.py
@@ -32,6 +32,7 @@
WbTime,
WbUnknown,
)
+from pywikibot.backports import RLock
from pywikibot.bot import (
Bot,
CurrentPageBot,
@@ -353,8 +354,8 @@
exit_queue = None
if _putthread is not threading.current_thread():
- while _putthread.is_alive() and not (page_put_queue.empty()
- and page_put_queue_busy.empty()):
+ while _putthread.is_alive() and (not page_put_queue.empty()
+ or _page_put_queue_busy.locked()):
try:
_putthread.join(1)
except KeyboardInterrupt:
@@ -393,13 +394,14 @@
while True:
if not block and page_put_queue.empty():
break
+
(request, args, kwargs) = page_put_queue.get(block)
- page_put_queue_busy.put(None)
- if request is None:
- break
- request(*args, **kwargs)
- page_put_queue.task_done()
- page_put_queue_busy.get()
+
+ with _page_put_queue_busy:
+ if request is None:
+ break
+ request(*args, **kwargs)
+ page_put_queue.task_done()
def async_request(request: Callable, *args: Any, **kwargs: Any) -> None:
@@ -408,14 +410,16 @@
# ignore RuntimeError if start() is called more than once
with page_put_queue.mutex, suppress(RuntimeError):
_putthread.start()
+
page_put_queue.put((request, args, kwargs))
#: Queue to hold pending requests
page_put_queue: Queue = Queue(_config.max_queue_size)
-# queue to signal that async_manager is working on a request. See T147178.
-page_put_queue_busy: Queue = Queue(_config.max_queue_size)
+# RLock to signal that async_manager is working on a request. See T147178.
+_page_put_queue_busy: RLock = RLock()
+
# set up the background thread
_putthread = threading.Thread(target=async_manager,
name='Put-Thread', # for debugging purposes
--
To view, visit https://gerrit.wikimedia.org/r/c/pywikibot/core/+/1221451?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.wikimedia.org/r/settings?usp=email
Gerrit-MessageType: merged
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Change-Id: I7f25e34cc807ccf61987431db691858d910dfd21
Gerrit-Change-Number: 1221451
Gerrit-PatchSet: 5
Gerrit-Owner: Xqt <info(a)gno.de>
Gerrit-Reviewer: Mpaa <mpaa.wiki(a)gmail.com>
Gerrit-Reviewer: Xqt <info(a)gno.de>
Gerrit-Reviewer: jenkins-bot
jenkins-bot has submitted this change. ( https://gerrit.wikimedia.org/r/c/pywikibot/core/+/1222793?usp=email )
Change subject: Tests: Make TestFamily.test_obsolete_readonly more robust
......................................................................
Tests: Make TestFamily.test_obsolete_readonly more robust
GraalPy 25 has a different AttributeError message.
Bug: T413721
Change-Id: I696ccf61fb1f95d5bba4c89435dc6563a8235dfd
---
M tests/family_tests.py
1 file changed, 3 insertions(+), 3 deletions(-)
Approvals:
Xqt: Looks good to me, approved
jenkins-bot: Verified
diff --git a/tests/family_tests.py b/tests/family_tests.py
index 69b3171..6d530d6 100755
--- a/tests/family_tests.py
+++ b/tests/family_tests.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python3
"""Tests for the family module."""
#
-# (C) Pywikibot team, 2014-2025
+# (C) Pywikibot team, 2014-2026
#
# Distributed under the terms of the MIT license.
#
@@ -137,12 +137,12 @@
family = Family.load('wikipedia')
with self.assertRaisesRegex(
AttributeError,
- "'mappingproxy' object has no attribute 'update'"):
+ "'<?mappingproxy.*' object has no attribute 'update'"):
family.obsolete.update({})
with self.assertRaisesRegex(
TypeError,
- "'mappingproxy' object does not support item assignment"):
+ "'<?mappingproxy.*' object does not support item assignment"):
family.obsolete['a'] = 'b'
with self.assertRaisesRegex(
--
To view, visit https://gerrit.wikimedia.org/r/c/pywikibot/core/+/1222793?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.wikimedia.org/r/settings?usp=email
Gerrit-MessageType: merged
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Change-Id: I696ccf61fb1f95d5bba4c89435dc6563a8235dfd
Gerrit-Change-Number: 1222793
Gerrit-PatchSet: 1
Gerrit-Owner: Xqt <info(a)gno.de>
Gerrit-Reviewer: Xqt <info(a)gno.de>
Gerrit-Reviewer: jenkins-bot
jenkins-bot has submitted this change. ( https://gerrit.wikimedia.org/r/c/pywikibot/i18n/+/1222471?usp=email )
Change subject: Localisation updates from https://translatewiki.net.
......................................................................
Localisation updates from https://translatewiki.net.
Change-Id: Id9d52d53e954f2dadb04009b9f83698d9f635e64
---
M category/sv.json
M checkimages/sv.json
M protect/sv.json
M pywikibot/fa.json
M redirect/sv.json
A replicate_wiki/sv.json
A tracking_param_remover/sv.json
M unprotect/sv.json
8 files changed, 36 insertions(+), 7 deletions(-)
Approvals:
jenkins-bot: Verified
L10n-bot: Looks good to me, approved
diff --git a/category/sv.json b/category/sv.json
index 4820648..b51105b 100644
--- a/category/sv.json
+++ b/category/sv.json
@@ -7,12 +7,13 @@
"Lokal Profil",
"Sabelöga",
"Skalman",
+ "Stefan2255",
"WikiPhoenix"
]
},
"category-adding": "Bot: Lägger till kategori [[:Category:%(newcat)s|%(newcat)s]]",
"category-also-in": "(också i %(alsocat)s)",
- "category-clean": "Bot: Tar bort kategori %(category)s som redan finns i %(child)s",
+ "category-clean": "Bot: Tar bort kategori %(category)s eftersom den redan är under %(child)s",
"category-listifying": "Bot: Skapar en lista från %(fromcat)s (%(num)d st)",
"category-removing": "Bot: Tar bort från %(oldcat)s",
"category-renamed": "Bot: Flyttad från %(oldcat)s. Författare: %(authors)s",
diff --git a/checkimages/sv.json b/checkimages/sv.json
index 558edbb..9f5b15a 100644
--- a/checkimages/sv.json
+++ b/checkimages/sv.json
@@ -2,6 +2,7 @@
"@metadata": {
"authors": [
"Mjälten",
+ "Stefan2255",
"WikiPhoenix"
]
},
@@ -9,6 +10,9 @@
"checkimages-doubles-file-comment": "Bot: Filen finns redan hos Commons, kan tas bort",
"checkimages-doubles-head": "Duplikat",
"checkimages-doubles-talk-comment": "Bot: Meddela att filen redan finns hos Commons",
+ "checkimages-doubles-talk-text": "Tack för att du laddade upp %(upload)s. Den här filen är dock en kopia av:%(image)sBotten har markerat den fil som visade sig vara minst använd eller den senaste som en dubblett. Om du anser det lämpligare att lämna filen markerad som att den ska raderas omedelbart, kan du gärna radera dubblettfilerna och ta bort borttagningsmallen från den som ska lämnas kvar. Detta är ett automatiskt meddelande från %(bot)s.",
+ "checkimages-forced-mode": "('''tvångsläge''')",
+ "checkimages-has-duplicates": "har följande dubbletter%(force)s:",
"checkimages-log-comment": "Bot: Uppdaterar loggen",
"checkimages-no-license-head": "Bild utan licens",
"checkimages-source-notice-comment": "Bot: Begär källinformation.",
diff --git a/protect/sv.json b/protect/sv.json
index 4bc32cb..c1136f3 100644
--- a/protect/sv.json
+++ b/protect/sv.json
@@ -3,12 +3,13 @@
"authors": [
"Jopparn",
"Lokal Profil",
+ "Stefan2255",
"WikiPhoenix"
]
},
"protect-category": "Bot: Skydda alla sidor i kategori %(cat)s",
"protect-images": "Bot: Skyddar alla bilder på sida %(page)s",
"protect-links": "Bot: Skyddar alla sidor länkade från %(page)s",
- "protect-ref": "Bot: Skydda alla sidor som hänvisar från %(page)s",
+ "protect-ref": "Bot: Skyddar alla sidor som hänvisar till %(page)s",
"protect-simple": "Bot: Skyddar en lista över filer."
}
diff --git a/pywikibot/fa.json b/pywikibot/fa.json
index 8aa1f76..3b769dd 100644
--- a/pywikibot/fa.json
+++ b/pywikibot/fa.json
@@ -5,12 +5,13 @@
"Dalba",
"Huji",
"Ladsgroup",
+ "Mahdiz",
"Mjbmr",
"Reza1615",
"ZxxZxxZ"
]
},
- "pywikibot-bot-prefix": "ربات::",
+ "pywikibot-bot-prefix": "ربات:",
"pywikibot-cosmetic-changes": "؛ زیباسازی",
"pywikibot-enter-category-name": "لطفاً نام رده را وارد کنید:",
"pywikibot-enter-file-links-processing": "پیوند به کدام پرونده باید پردازش شود؟",
diff --git a/redirect/sv.json b/redirect/sv.json
index 331e253..2eac0bd 100644
--- a/redirect/sv.json
+++ b/redirect/sv.json
@@ -4,13 +4,14 @@
"Boivie",
"Jopparn",
"Lokal Profil",
+ "Stefan2255",
"Tobulos1",
"WikiPhoenix"
]
},
- "redirect-fix-broken-moved": "Reparerade trasig omdirigering till den flyttade målsidan %(to)s",
- "redirect-fix-double": "Rättar dubbel omdirigering till %(to)s",
- "redirect-fix-loop": "Fixar omdirigeringsloop till %(to)s",
+ "redirect-fix-broken-moved": "Rättar trasig omdirigering från %(from)s till flyttad målsida %(to)s",
+ "redirect-fix-double": "Rättar dubbel omdirigering från %(from)s till %(to)s",
+ "redirect-fix-loop": "Fixar omdirigeringsloop från %(from)s till %(to)s",
"redirect-remove-broken": "Omdirigerar till en raderad eller en icke-existerande sida",
"redirect-remove-loop": "Målet för omdirigeringen bildar en omdirigeringsloop"
}
diff --git a/replicate_wiki/sv.json b/replicate_wiki/sv.json
new file mode 100644
index 0000000..6534e2b
--- /dev/null
+++ b/replicate_wiki/sv.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Stefan2255"
+ ]
+ },
+ "replicate_wiki-headline": "Sidor som skiljer sig från originalet",
+ "replicate_wiki-missing-users": "Administratörer från originalet som saknas här",
+ "replicate_wiki-same-pages": "Alla viktiga sidor är likadana",
+ "replicate_wiki-same-users": "Alla användare från originalet finns också på denna wiki",
+ "replicate_wiki-summary": "Bot: Wiki-synkronisering från %(source)s"
+}
diff --git a/tracking_param_remover/sv.json b/tracking_param_remover/sv.json
new file mode 100644
index 0000000..a1e707a
--- /dev/null
+++ b/tracking_param_remover/sv.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Stefan2255"
+ ]
+ },
+ "tracking_param_remover-removing": "Bot: Ta bort spårningsparametrar från webbadresser"
+}
diff --git a/unprotect/sv.json b/unprotect/sv.json
index 2017153..757e74d 100644
--- a/unprotect/sv.json
+++ b/unprotect/sv.json
@@ -2,12 +2,13 @@
"@metadata": {
"authors": [
"Marfuas",
+ "Stefan2255",
"WikiPhoenix"
]
},
"unprotect-category": "Bot: Tar bort skydd från alla sidor i kategorin %(cat)s",
"unprotect-images": "Bot: Tar bort skydd från alla bilder på sidan %(page)s",
"unprotect-links": "Bot: Tar bort skydd från sidor som länkats från %(page)s",
- "unprotect-ref": "Bot: Tar bort skydd från alla sidor som %(page)s refererar till",
+ "unprotect-ref": "Bot: Avskyddar alla sidor som refererar till %(page)s",
"unprotect-simple": "Bot: Tar bort skydd från en lista över filer"
}
--
To view, visit https://gerrit.wikimedia.org/r/c/pywikibot/i18n/+/1222471?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.wikimedia.org/r/settings?usp=email
Gerrit-MessageType: merged
Gerrit-Project: pywikibot/i18n
Gerrit-Branch: master
Gerrit-Change-Id: Id9d52d53e954f2dadb04009b9f83698d9f635e64
Gerrit-Change-Number: 1222471
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