diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e6d4340..80a4eae 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,7 +14,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: [ "3.10", "3.11", "3.12", "3.13" ] + python-version: [ "3.10", "3.11", "3.12", "3.13", "3.14" ] steps: - name: Checkout code diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 38b8a8e..4b9e2ac 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -19,7 +19,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v5 with: - python-version: "3.13" + python-version: "3.14" - name: Replace relative links in README run: | diff --git a/.github/workflows/version.yml b/.github/workflows/version.yml index 3c85c25..ed86a2e 100644 --- a/.github/workflows/version.yml +++ b/.github/workflows/version.yml @@ -15,7 +15,7 @@ jobs: - name: Setup Python uses: actions/setup-python@v5 with: - python-version: "3.13" + python-version: "3.14" - name: Upgrade pip run: python -m pip install --upgrade pip diff --git a/.readthedocs.yaml b/.readthedocs.yaml index aabb671..db298c8 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -8,7 +8,7 @@ version: 2 build: os: ubuntu-24.04 tools: - python: "3.13" + python: "3.14" # Build documentation in the "docs/" directory with Sphinx sphinx: diff --git a/pyproject.toml b/pyproject.toml index 0d0c918..2a85eb2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -29,19 +29,21 @@ classifiers = [ 'Programming Language :: Python :: 3.11', 'Programming Language :: Python :: 3.12', 'Programming Language :: Python :: 3.13', + 'Programming Language :: Python :: 3.14', "Operating System :: OS Independent", ] requires-python = ">=3.10" dependencies = [ "charset_normalizer>=3.3.2,<4.0", "fastdtw>=0.3.4,<1.0", - "lingua-language-detector>=2.1.1,<3.0", + "lingua-language-detector>=2.1.1,<2.2.0; python_version < '3.12'", + "lingua-language-detector>=2.2.0,<3.0; python_version >= '3.12'", "pysubs2>=1.8.0,<2.0", "scipy>=1.15.3,<2.0", "sentence_transformers>=4.1.0,<6.0", "tqdm>=4.67.1,<5.0", "typer>=0.16.0,<1.0", - "gradio>=5.41.1,<6.0", + "gradio>=5.41.1,<7.0", "nvidia_ml_py>=12.575.51,<14.0", "pandas>=2.3.1,<3.0", "psutil>=7.0.0,<8.0", diff --git a/tests/webui/ui/test_layout_and_events.py b/tests/webui/ui/test_layout_and_events.py index f7c1c9d..b14cbc4 100644 --- a/tests/webui/ui/test_layout_and_events.py +++ b/tests/webui/ui/test_layout_and_events.py @@ -141,13 +141,13 @@ def test_start_merge(page: Page, tmp_path: Path) -> None: merge_button = page.get_by_role("button", name="Merge") cancel_button = page.get_by_role("button", name="Cancel") - expect(merge_button).to_be_disabled() - expect(cancel_button).to_be_enabled() + expect(merge_button).to_be_disabled(timeout=60000) + expect(cancel_button).to_be_enabled(timeout=60000) perform_download(page, tmp_path / "output.zip") - expect(merge_button).to_be_enabled() - expect(cancel_button).to_be_disabled() + expect(merge_button).to_be_enabled(timeout=60000) + expect(cancel_button).to_be_disabled(timeout=60000) ending_naming_and_format = [ "_combined.ass", @@ -178,7 +178,7 @@ def test_cancel_merge(page: Page) -> None: expect(page.get_by_text( "The merging process is stopped.", exact=True) - ).to_be_visible(timeout=20000) + ).to_be_visible(timeout=60000) download_section = page.get_by_text( "Processed Subtitles (in zip)", @@ -358,7 +358,7 @@ def test_omit_all_subs_files(page: Page) -> None: expect( page.locator("div.toast-body.warning").filter(has_text="Nothing to merge") - ).to_be_visible(timeout=10000) + ).to_be_visible(timeout=60000) time.sleep(10) @@ -366,7 +366,7 @@ def test_omit_all_subs_files(page: Page) -> None: expect( page.locator("div.toast-body.warning").filter(has_text="Nothing to merge") - ).to_be_visible(timeout=10000) + ).to_be_visible(timeout=60000) section = page.get_by_text( "Processed Subtitles (in zip)", @@ -427,7 +427,8 @@ def perform_download(page: Page, output_zip_path: Path) -> None: "Processed Subtitles (in zip)", exact=True ).locator("..") - download_link = section.locator("a[download]") + download_link = section.locator("a[download]").first + download_link.wait_for(timeout=60000) with page.expect_download() as download_info: download_link.click()