Skip to content

fix(deps): update dependency translate-toolkit to >=3.19.6,<3.20#19195

Merged
nijel merged 1 commit into
mainfrom
renovate/translate-toolkit-3.x
Apr 23, 2026
Merged

fix(deps): update dependency translate-toolkit to >=3.19.6,<3.20#19195
nijel merged 1 commit into
mainfrom
renovate/translate-toolkit-3.x

Conversation

@renovate

@renovate renovate Bot commented Apr 23, 2026

Copy link
Copy Markdown
Contributor

This PR contains the following updates:

Package Change Age Confidence
translate-toolkit >=3.19.5,<3.20>=3.19.6,<3.20 age confidence

Release Notes

translate/translate (translate-toolkit)

v3.19.6

Compare Source

What's Changed

Changes and improvements
Dependency updates

Full Changelog: translate/translate@3.19.5...3.19.6


Configuration

📅 Schedule: (UTC)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Enabled.

Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate renovate Bot added the dependencies PR: Third-party library dependencies. label Apr 23, 2026
@renovate renovate Bot enabled auto-merge (squash) April 23, 2026 11:51
@codecov

codecov Bot commented Apr 23, 2026

Copy link
Copy Markdown

❌ 2 Tests Failed:

Tests completed Failed Passed Skipped
7052 2 7050 756
View the top 2 failed test(s) by shortest run time
weblate.trans.tests.test_selenium.SeleniumTests::test_dark_theme
Stack Traces | 5.18s run time
self = <weblate.trans.tests.test_selenium.SeleniumTests testMethod=test_dark_theme>

    def test_dark_theme(self) -> None:
>       project = self.create_component()
                  ^^^^^^^^^^^^^^^^^^^^^^^

.../trans/tests/test_selenium.py:1328: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../trans/tests/test_selenium.py:475: in create_component
    Component.objects.create(
.venv/lib/python3.14.../db/models/manager.py:87: in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.14.../db/models/query.py:669: in create
    obj.save(force_insert=True, using=self.db)
.../trans/models/component.py:1130: in save
    self.after_save(
.../trans/models/component.py:4249: in after_save
    self.sync_git_repo(skip_push=skip_push, skip_commit=create)
.../trans/models/component.py:3672: in sync_git_repo
    self.configure_branch()
.../trans/models/component.py:2106: in configure_branch
    self.repository.configure_branch(self.branch)
weblate/vcs/git.py:681: in configure_branch
    self.execute(
weblate/vcs/base.py:529: in execute
    self.last_output = self._popen(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

cls = <class 'weblate.vcs.git.GitRepository'>
args = ['git', 'checkout', '-b', 'master', 'origin/master']

    @classmethod
    def _popen(
        cls,
        args: list[str],
        *,
        cwd: str | None = None,
        merge_err: bool = True,
        fullcmd: bool = False,
        raw: bool = False,
        local: bool = False,
        stdin: str | None = None,
        environment: dict[str, str] | None = None,
        retry: bool = True,
    ):
        """Execute the command using popen."""
        if args is None:
            raise RepositoryError(0, "Not supported functionality")
        if not fullcmd:
            args = [cls._cmd, *list(args)]
        text_cmd = " ".join(args)
        try:
            # These are mutually exclusive, gevent actually checks
            # for their presence, not a avalue
            kwargs: SubprocessArgs = {}
            if stdin is None:
                kwargs["stdin"] = subprocess.PIPE
            else:
                kwargs["input"] = stdin
    
            process = subprocess.run(
                args=args,
                cwd=cwd,
                env=environment or {} if local else cls._getenv(environment, cwd=cwd),
                stdout=subprocess.PIPE,
                stderr=subprocess.STDOUT if merge_err else subprocess.PIPE,
                text=not raw,
                check=False,
                # Excessively long timeout to catch misbehaving processes
                timeout=3600,
                **kwargs,
            )
        except subprocess.TimeoutExpired as error:
            stdout = (
                error.stdout.decode()
                if isinstance(error.stdout, bytes)
                else error.stdout
            )
            stderr = (
                error.stderr.decode()
                if isinstance(error.stderr, bytes)
                else error.stderr
            )
            raise RepositoryCommandError(
                0,
                f"Subprocess didn't complete before {error.timeout} seconds\n{stdout}{stderr or ''}",
            ) from error
        cls.add_breadcrumb(
            text_cmd,
            retcode=process.returncode,
            output=process.stdout,
            stderr=process.stderr,
            cwd=cwd,
        )
        if process.returncode:
            errormessage: str = cls.sanitize_error_message(
                process.stdout + (process.stderr or "")
            )
            if retry and cls.should_retry_popen(errormessage):
                return cls._popen(
                    args,
                    cwd=cwd,
                    merge_err=merge_err,
                    fullcmd=fullcmd,
                    raw=raw,
                    local=local,
                    stdin=stdin,
                    environment=environment,
                    retry=False,
                )
    
>           raise RepositoryCommandError(process.returncode, errormessage)
E           weblate.vcs.base.RepositoryCommandError: fatal: 'origin/master' is not a commit and a branch 'master' cannot be created from it
E            (128)

weblate/vcs/base.py:480: RepositoryCommandError
weblate.trans.tests.test_selenium.SeleniumTests::test_add_component
Stack Traces | 40.2s run time
self = <weblate.trans.tests.test_selenium.SeleniumTests testMethod=test_add_component>

    @modify_settings(INSTALLED_APPS={"append": "weblate.billing"})
    def test_add_component(self) -> None:
        """Test user adding project and component."""
        user = self.do_login()
        create_test_billing(user)
    
        # Open billing page
        self.click(htmlid="user-dropdown")
        with self.wait_for_page_load():
            self.click(htmlid="billing-button")
        self.screenshot("user-billing.png")
    
        # Click on add project
        with self.wait_for_page_load():
            self.click(self.driver.find_element(By.CLASS_NAME, "billing-add-project"))
    
        # Add project
        self.driver.find_element(By.ID, "id_name").send_keys("WeblateOrg")
        self.driver.find_element(By.ID, "id_web").send_keys("https://weblate.org/")
        self.driver.find_element(By.ID, "id_instructions").send_keys(
            "https://weblate.org/contribute/"
        )
        self.screenshot("user-add-project.png")
        with self.wait_for_page_load():
            self.driver.find_element(By.ID, "id_name").submit()
        self.screenshot("user-add-project-done.png")
        self.assertIn("WeblateOrg", self.driver.title)
    
        # Click on add component
        with self.wait_for_page_load():
            self.click(self.driver.find_element(By.ID, "list-add-button"))
    
        # Add component
        self.driver.find_element(By.ID, "id_name").send_keys("Language names")
        self.driver.find_element(By.ID, "id_repo").send_keys(
            "https://github.com/WeblateOrg/demo.git"
        )
        self.screenshot("user-add-component-init.png")
        with self.wait_for_page_load(timeout=1200):
            self.driver.find_element(By.ID, "id_name").submit()
    
        self.screenshot("user-add-component-discovery.png")
        self.driver.find_element(By.ID, "id_discovery_1").click()
        with self.wait_for_page_load(timeout=1200):
            self.driver.find_element(By.ID, "id_name").submit()
    
>       self.driver.find_element(By.ID, "id_repoweb").send_keys(
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
            "https://github..../WeblateOrg/demo/blob/{{branch}}/{{filename}}#L{{line}}"
        )

.../trans/tests/test_selenium.py:1096: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.venv/lib/python3.14.../webdriver/remote/webdriver.py:823: in find_element
    return self.execute(Command.FIND_ELEMENT, {"using": by, "value": value})["value"]
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.14.../webdriver/remote/webdriver.py:450: in execute
    self.error_handler.check_response(response)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <selenium.webdriver.remote.errorhandler.ErrorHandler object at 0x14e06fcb0>
response = {'status': 404, 'value': '{"value":{"error":"no such element","message":"no such element: Unable to locate element: {\...00018c4b3bc8 _pthread_start + 136\\n15  libsystem_pthread.dylib             0x000000018c4aeb80 thread_start + 8\\n"}}'}

    def check_response(self, response: dict[str, Any]) -> None:
        """Check that a JSON response from the WebDriver does not have an error.
    
        Args:
            response: The JSON response from the WebDriver server as a dictionary
                object.
    
        Raises:
            WebDriverException: If the response contains an error message.
        """
        status = response.get("status", None)
        if not status or status == ErrorCode.SUCCESS:
            return
        value = None
        message = response.get("message", "")
        screen: str = response.get("screen", "")
        stacktrace = None
        if isinstance(status, int):
            value_json = response.get("value", None)
            if value_json and isinstance(value_json, str):
                try:
                    value = json.loads(value_json)
                    if isinstance(value, dict):
                        if len(value) == 1:
                            value = value["value"]
                        status = value.get("error", None)
                        if not status:
                            status = value.get("status", ErrorCode.UNKNOWN_ERROR)
                            message = value.get("value") or value.get("message")
                            if not isinstance(message, str):
                                value = message
                                message = message.get("message") if isinstance(message, dict) else None
                        else:
                            message = value.get("message", None)
                except ValueError:
                    pass
    
        exception_class: type[WebDriverException]
        e = ErrorCode()
        error_codes = [item for item in dir(e) if not item.startswith("__")]
        for error_code in error_codes:
            error_info = getattr(ErrorCode, error_code)
            if isinstance(error_info, list) and status in error_info:
                exception_class = getattr(ExceptionMapping, error_code, WebDriverException)
                break
        else:
            exception_class = WebDriverException
    
        if not value:
            value = response["value"]
        if isinstance(value, str):
            raise exception_class(value)
        if message == "" and "message" in value:
            message = value["message"]
    
        screen = None  # type: ignore[assignment]
        if "screen" in value:
            screen = value["screen"]
    
        stacktrace = None
        st_value = value.get("stackTrace") or value.get("stacktrace")
        if st_value:
            if isinstance(st_value, str):
                stacktrace = st_value.split("\n")
            else:
                stacktrace = []
                try:
                    for frame in st_value:
                        line = frame.get("lineNumber", "")
                        file = frame.get("fileName", "<anonymous>")
                        if line:
                            file = f"{file}:{line}"
                        meth = frame.get("methodName", "<anonymous>")
                        if "className" in frame:
                            meth = f"{frame['className']}.{meth}"
                        msg = "    at %s (%s)"
                        msg = msg % (meth, file)
                        stacktrace.append(msg)
                except TypeError:
                    pass
        if exception_class == UnexpectedAlertPresentException:
            alert_text = None
            if "data" in value:
                alert_text = value["data"].get("text")
            elif "alert" in value:
                alert_text = value["alert"].get("text")
            raise exception_class(message, screen, stacktrace, alert_text)
>       raise exception_class(message, screen, stacktrace)
E       selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[id="id_repoweb"]"}
E         (Session info: chrome=147.0.7727.102); For documentation on this error, please visit: https://www.selenium..../webdriver/troubleshooting/errors#nosuchelementexception
E       Stacktrace:
E       0   chromedriver                        0x0000000102843abc cxxbridge1$str$ptr + 3192864
E       1   chromedriver                        0x000000010283ba8c cxxbridge1$str$ptr + 3160048
E       2   chromedriver                        0x00000001023077c0 _RNvCs10ygTOo3JCa_7___rustc35___rust_no_alloc_shim_is_unstable_v2 + 75348
E       3   chromedriver                        0x000000010234f464 _RNvCs10ygTOo3JCa_7___rustc35___rust_no_alloc_shim_is_unstable_v2 + 369400
E       4   chromedriver                        0x000000010238f448 _RNvCs10ygTOo3JCa_7___rustc35___rust_no_alloc_shim_is_unstable_v2 + 631516
E       5   chromedriver                        0x0000000102344e50 _RNvCs10ygTOo3JCa_7___rustc35___rust_no_alloc_shim_is_unstable_v2 + 326884
E       6   chromedriver                        0x0000000102801248 cxxbridge1$str$ptr + 2920364
E       7   chromedriver                        0x0000000102804a28 cxxbridge1$str$ptr + 2934668
E       8   chromedriver                        0x00000001027e71fc cxxbridge1$str$ptr + 2813792
E       9   chromedriver                        0x00000001028052a8 cxxbridge1$str$ptr + 2936844
E       10  chromedriver                        0x00000001027d8024 cxxbridge1$str$ptr + 2751880
E       11  chromedriver                        0x000000010282a988 cxxbridge1$str$ptr + 3090156
E       12  chromedriver                        0x000000010282ab04 cxxbridge1$str$ptr + 3090536
E       13  chromedriver                        0x000000010283b6e4 cxxbridge1$str$ptr + 3159112
E       14  libsystem_pthread.dylib             0x000000018c4b3bc8 _pthread_start + 136
E       15  libsystem_pthread.dylib             0x000000018c4aeb80 thread_start + 8

.venv/lib/python3.14.../webdriver/remote/errorhandler.py:232: NoSuchElementException

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

@renovate renovate Bot force-pushed the renovate/translate-toolkit-3.x branch 4 times, most recently from 0069456 to d8e011c Compare April 23, 2026 14:11
@renovate renovate Bot force-pushed the renovate/translate-toolkit-3.x branch from 46b69a1 to fb647a7 Compare April 23, 2026 15:37
@nijel nijel disabled auto-merge April 23, 2026 15:41
@nijel nijel merged commit ff318bd into main Apr 23, 2026
24 of 31 checks passed
@nijel nijel deleted the renovate/translate-toolkit-3.x branch April 23, 2026 15:42
@nijel nijel added this to the 5.17.1 milestone Apr 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies PR: Third-party library dependencies.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant