subliminal 2.6.0__tar.gz → 2.7.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {subliminal-2.6.0 → subliminal-2.7.1}/.github/actions/prepare-tests/action.yaml +4 -4
- {subliminal-2.6.0 → subliminal-2.7.1}/.github/workflows/CI.yaml +66 -24
- {subliminal-2.6.0 → subliminal-2.7.1}/.github/workflows/docker-build.yaml +8 -8
- {subliminal-2.6.0 → subliminal-2.7.1}/.github/workflows/prepare-release-pr.yaml +2 -2
- {subliminal-2.6.0 → subliminal-2.7.1}/.github/workflows/publish-release.yaml +5 -5
- {subliminal-2.6.0 → subliminal-2.7.1}/.github/workflows/publish.yaml +2 -2
- {subliminal-2.6.0 → subliminal-2.7.1}/.github/workflows/scheduled-tests.yaml +2 -2
- {subliminal-2.6.0 → subliminal-2.7.1}/.github/workflows/tag-release.yaml +2 -2
- subliminal-2.7.1/.github/zizmor.yml +11 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/.pre-commit-config.yaml +4 -4
- subliminal-2.7.1/.python-version-default +1 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/.readthedocs.yaml +2 -2
- {subliminal-2.6.0 → subliminal-2.7.1}/HISTORY.rst +44 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/PKG-INFO +3 -4
- {subliminal-2.6.0 → subliminal-2.7.1}/docs/assets/config.toml +1 -1
- {subliminal-2.6.0 → subliminal-2.7.1}/docs/user/configuration_file.rst +11 -4
- {subliminal-2.6.0 → subliminal-2.7.1}/docs/user/usage.rst +25 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/hatch.toml +2 -2
- {subliminal-2.6.0 → subliminal-2.7.1}/pyproject.toml +2 -3
- {subliminal-2.6.0 → subliminal-2.7.1}/src/subliminal/archives.py +2 -2
- {subliminal-2.6.0 → subliminal-2.7.1}/src/subliminal/cli/cli.py +10 -3
- {subliminal-2.6.0 → subliminal-2.7.1}/src/subliminal/cli/commands/download_best.py +87 -15
- {subliminal-2.6.0 → subliminal-2.7.1}/src/subliminal/cli/generate_config.py +9 -2
- {subliminal-2.6.0 → subliminal-2.7.1}/src/subliminal/cli/helpers.py +124 -4
- {subliminal-2.6.0 → subliminal-2.7.1}/src/subliminal/core.py +16 -25
- {subliminal-2.6.0 → subliminal-2.7.1}/src/subliminal/providers/addic7ed.py +2 -3
- {subliminal-2.6.0 → subliminal-2.7.1}/src/subliminal/providers/gestdown.py +11 -51
- {subliminal-2.6.0 → subliminal-2.7.1}/src/subliminal/providers/mock.py +2 -2
- {subliminal-2.6.0 → subliminal-2.7.1}/src/subliminal/providers/opensubtitles.py +3 -4
- {subliminal-2.6.0 → subliminal-2.7.1}/src/subliminal/providers/opensubtitlescom.py +17 -77
- {subliminal-2.6.0 → subliminal-2.7.1}/src/subliminal/providers/podnapisi.py +2 -2
- {subliminal-2.6.0 → subliminal-2.7.1}/src/subliminal/providers/subtis.py +3 -3
- {subliminal-2.6.0 → subliminal-2.7.1}/src/subliminal/providers/subtitulamos.py +2 -2
- {subliminal-2.6.0 → subliminal-2.7.1}/src/subliminal/providers/tvsubtitles.py +16 -32
- {subliminal-2.6.0 → subliminal-2.7.1}/src/subliminal/refiners/hash.py +2 -2
- {subliminal-2.6.0 → subliminal-2.7.1}/src/subliminal/refiners/metadata.py +6 -4
- {subliminal-2.6.0 → subliminal-2.7.1}/src/subliminal/refiners/tvdb.py +6 -2
- {subliminal-2.6.0 → subliminal-2.7.1}/src/subliminal/subtitle.py +142 -66
- {subliminal-2.6.0 → subliminal-2.7.1}/src/subliminal/utils.py +271 -4
- {subliminal-2.6.0 → subliminal-2.7.1}/src/subliminal/video.py +4 -6
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/gestdown/test_list_subtitles_episode_alternative_series.yaml +66 -51
- subliminal-2.7.1/tests/cassettes/providers/test_download_best_subtitles.yaml +1097 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cli/test_download.py +264 -4
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cli/test_helpers.py +26 -1
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/conftest.py +2 -1
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/providers/test_gestdown.py +1 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/providers/test_providers.py +1 -1
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/refiners/test_metadata.py +3 -3
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/test_extensions.py +1 -7
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/test_provider_pool.py +3 -3
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/test_subtitle.py +115 -26
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/test_utils.py +224 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/test_video.py +10 -2
- {subliminal-2.6.0 → subliminal-2.7.1}/tox.ini +4 -4
- subliminal-2.6.0/.github/zizmor.yml +0 -13
- subliminal-2.6.0/.python-version-default +0 -1
- subliminal-2.6.0/tests/cassettes/providers/test_download_best_subtitles.yaml +0 -966
- {subliminal-2.6.0 → subliminal-2.7.1}/.dockerignore +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/.github/workflows/coverage.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/.gitignore +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/CONTRIBUTING.md +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/Dockerfile +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/LICENSE +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/MANIFEST.in +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/README.rst +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/RELEASING.md +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/changelog.d/.gitignore +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/docs/Makefile +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/docs/_intersphinx/README.md +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/docs/_intersphinx/importlib_metadata_objects.inv +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/docs/_intersphinx/importlib_metadata_objects.txt +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/docs/_static/.gitignore +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/docs/api/cache.rst +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/docs/api/cli.rst +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/docs/api/core.rst +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/docs/api/exceptions.rst +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/docs/api/extensions.rst +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/docs/api/providers.rst +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/docs/api/refiners.rst +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/docs/api/score.rst +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/docs/api/subtitle.rst +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/docs/api/utils.rst +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/docs/api/video.rst +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/docs/assets/demo.gif +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/docs/cassettes/test_usage.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/docs/conf.py +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/docs/conftest.py +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/docs/index.rst +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/docs/make.bat +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/docs/user/changelog.rst +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/docs/user/cli.rst +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/docs/user/how_it_works.rst +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/docs/user/installation.rst +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/docs/user/provider_guide.rst +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/scripts/.gitignore +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/scripts/prepare-release-pr.py +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/scripts/prepare_tests.py +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/scripts/release.py +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/src/subliminal/__init__.py +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/src/subliminal/__main__.py +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/src/subliminal/cache.py +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/src/subliminal/cli/__init__.py +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/src/subliminal/cli/commands/__init__.py +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/src/subliminal/cli/commands/_format.py +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/src/subliminal/converters/__init__.py +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/src/subliminal/converters/addic7ed.py +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/src/subliminal/converters/opensubtitles.py +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/src/subliminal/converters/opensubtitlescom.py +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/src/subliminal/converters/subtitulamos.py +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/src/subliminal/converters/tvsubtitles.py +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/src/subliminal/exceptions.py +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/src/subliminal/extensions.py +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/src/subliminal/matches.py +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/src/subliminal/providers/__init__.py +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/src/subliminal/providers/bsplayer.py +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/src/subliminal/providers/napiprojekt.py +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/src/subliminal/py.typed +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/src/subliminal/refiners/__init__.py +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/src/subliminal/refiners/omdb.py +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/src/subliminal/refiners/tmdb.py +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/src/subliminal/score.py +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/__init__.py +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/addic7ed/test_download_subtitle.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/addic7ed/test_get_show_id.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/addic7ed/test_get_show_id_country.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/addic7ed/test_get_show_id_quote_dots_mixed_case.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/addic7ed/test_get_show_id_with_comma.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/addic7ed/test_get_show_id_year.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/addic7ed/test_get_show_ids.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/addic7ed/test_list_subtitles.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/addic7ed/test_list_subtitles_episode_alternative_series.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/addic7ed/test_list_subtitles_show_with_asterisk.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/addic7ed/test_query.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/addic7ed/test_query_no_year.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/addic7ed/test_query_parsing.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/addic7ed/test_query_parsing_colon.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/addic7ed/test_query_parsing_dash.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/addic7ed/test_query_parsing_quote_dots_mixed_case.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/addic7ed/test_query_wrong_series.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/addic7ed/test_query_year.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/bsplayer/test_download_subtitle.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/bsplayer/test_list_subtitles_hash.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/bsplayer/test_login.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/bsplayer/test_logout.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/bsplayer/test_query_hash_size.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/cli/test_cli_download.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/gestdown/test_download_subtitle.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/gestdown/test_download_with_bom.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/gestdown/test_get_title_and_show_id_alternative_name.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/gestdown/test_get_title_and_show_id_no_year.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/gestdown/test_get_title_and_show_id_only_title.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/gestdown/test_get_title_and_show_id_with_tvdb_id.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/gestdown/test_list_subtitles.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/gestdown/test_query.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/gestdown/test_query_all_series.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/gestdown/test_query_no_language.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/gestdown/test_query_parsing.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/gestdown/test_query_parsing_colon.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/gestdown/test_query_parsing_dash.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/gestdown/test_query_parsing_quote_dots_mixed_case.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/gestdown/test_query_wrong_series.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/gestdown/test_search_show_id.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/gestdown/test_search_show_id_error.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/gestdown/test_search_show_id_incomplete.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/gestdown/test_search_show_id_no_year.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/gestdown/test_search_show_id_quote.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/gestdown/test_search_show_series_tvdb_id.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/gestdown/test_show_with_asterisk.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/napiprojekt/test_download_subtitles.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/napiprojekt/test_list_subtitles.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/napiprojekt/test_query_microdvd.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/napiprojekt/test_query_srt.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/napiprojekt/test_query_srt_reencode.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/napiprojekt/test_query_wrong_hash.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/omdb/test_get_id.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/omdb/test_get_title.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/omdb/test_get_wrong_id.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/omdb/test_get_wrong_title.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/omdb/test_refine_episode.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/omdb/test_refine_episode_original_series.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/omdb/test_refine_episode_with_country.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/omdb/test_refine_episode_with_country_hoc_us.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/omdb/test_refine_episode_year.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/omdb/test_refine_movie.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/omdb/test_refine_movie_guess_alternative_title.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/omdb/test_search.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/omdb/test_search_page.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/omdb/test_search_type.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/omdb/test_search_wrong_title.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/omdb/test_search_year.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/opensubtitles/test_download_subtitle.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/opensubtitles/test_list_subtitles_episode.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/opensubtitles/test_list_subtitles_movie.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/opensubtitles/test_list_subtitles_movie_no_hash.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/opensubtitles/test_login_bad_password.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/opensubtitles/test_login_vip_bad_password.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/opensubtitles/test_login_vip_login.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/opensubtitles/test_no_operation.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/opensubtitles/test_query_hash_size.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/opensubtitles/test_query_imdb_id.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/opensubtitles/test_query_not_enough_information.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/opensubtitles/test_query_query_episode.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/opensubtitles/test_query_query_movie.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/opensubtitles/test_query_query_season_episode.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/opensubtitles/test_query_wrong_hash_wrong_size.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/opensubtitlescom/test_download_subtitle.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/opensubtitlescom/test_list_subtitles_episode.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/opensubtitlescom/test_list_subtitles_movie.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/opensubtitlescom/test_list_subtitles_movie_no_hash.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/opensubtitlescom/test_login.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/opensubtitlescom/test_login_bad_password.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/opensubtitlescom/test_logout.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/opensubtitlescom/test_query_hash_size.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/opensubtitlescom/test_query_imdb_id.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/opensubtitlescom/test_query_max_result_pages.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/opensubtitlescom/test_query_query_episode.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/opensubtitlescom/test_query_query_movie.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/opensubtitlescom/test_query_query_season_episode.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/opensubtitlescom/test_query_tag_movie.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/opensubtitlescom/test_query_wrong_hash_wrong_size.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/opensubtitlescom/test_tag_match.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/opensubtitlescom/test_user_infos.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/podnapisi/test_download_subtitle.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/podnapisi/test_download_subtitles_with_title_unicode.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/podnapisi/test_list_subtitles_episode.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/podnapisi/test_list_subtitles_episode_alternative_series.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/podnapisi/test_list_subtitles_movie.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/podnapisi/test_query_episode.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/podnapisi/test_query_movie.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/providers/test_download_best_subtitles_min_score.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/providers/test_download_best_subtitles_only_one.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/providers/test_list_subtitles_providers_download.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/subtis/test_download_subtitle.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/subtis/test_list_subtitles_hash.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/subtis/test_list_subtitles_movie.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/subtis/test_list_subtitles_movie_alternative.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/subtis/test_list_subtitles_movie_with_size.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/subtis/test_list_subtitles_no_match.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/subtitulamos/test_download_subtitle.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/subtitulamos/test_download_subtitle_first_episode.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/subtitulamos/test_download_subtitle_foo.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/subtitulamos/test_download_subtitle_last_season.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/subtitulamos/test_download_subtitle_year.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/subtitulamos/test_list_subtitles_not_exist_episode.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/subtitulamos/test_list_subtitles_not_exist_language.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/subtitulamos/test_list_subtitles_not_exist_season.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/subtitulamos/test_list_subtitles_not_exist_series.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/subtitulamos/test_list_subtitles_with_spanish_non_mx_search.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/tmdb/test_get_movie_id.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/tmdb/test_get_movie_id_failed.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/tmdb/test_get_series_id.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/tmdb/test_get_series_wrong_id.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/tmdb/test_refine_episode.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/tmdb/test_refine_episode_original_series.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/tmdb/test_refine_episode_with_country.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/tmdb/test_refine_episode_with_country_hoc_us.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/tmdb/test_refine_episode_year.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/tmdb/test_refine_movie.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/tmdb/test_refine_movie_guess_alternative_title.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/tmdb/test_search_movie.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/tmdb/test_search_movie_page.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/tmdb/test_search_movie_wrong_title.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/tmdb/test_search_movie_year.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/tmdb/test_search_series.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/tmdb/test_search_series_wrong_name.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/tvdb/test_get_series.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/tvdb/test_get_series_actors.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/tvdb/test_get_series_actors_wrong_id.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/tvdb/test_get_series_wrong_id.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/tvdb/test_login.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/tvdb/test_login_error.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/tvdb/test_query_series_episodes.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/tvdb/test_query_series_episodes_wrong_season.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/tvdb/test_refine.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/tvdb/test_refine_ambiguous.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/tvdb/test_refine_ambiguous_2.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/tvdb/test_refine_episode_alternative_series.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/tvdb/test_refine_episode_no_year.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/tvdb/test_refine_episode_partial.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/tvdb/test_refine_episode_with_comma.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/tvdb/test_refine_episode_with_country.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/tvdb/test_refine_episode_with_country_hoc_us.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/tvdb/test_refine_episode_year.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/tvdb/test_search_series.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/tvdb/test_search_series_wrong_name.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/tvsubtitles/test_download_subtitle.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/tvsubtitles/test_download_subtitle_with_quote.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/tvsubtitles/test_get_episode_ids.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/tvsubtitles/test_get_episode_ids_wrong_season.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/tvsubtitles/test_list_subtitles.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/tvsubtitles/test_list_subtitles_episode_alternative_series.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/tvsubtitles/test_query.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/tvsubtitles/test_query_no_year.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/tvsubtitles/test_query_with_quote.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/tvsubtitles/test_query_wrong_episode.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/tvsubtitles/test_query_wrong_series.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/tvsubtitles/test_search_show_id.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/tvsubtitles/test_search_show_id_ambiguous.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/tvsubtitles/test_search_show_id_error.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/tvsubtitles/test_search_show_id_incomplete.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/tvsubtitles/test_search_show_id_no_year.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/tvsubtitles/test_search_show_id_uk.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/tvsubtitles/test_search_show_id_us.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cassettes/tvsubtitles/test_search_show_id_year_in_title.yaml +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cli/test_cli.py +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/cli/test_generate_config.py +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/providers/test_addic7ed.py +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/providers/test_bsplayer.py +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/providers/test_napiprojekt.py +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/providers/test_opensubtitles.py +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/providers/test_opensubtitlescom.py +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/providers/test_podnapisi.py +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/providers/test_subtis.py +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/providers/test_subtitulamos.py +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/providers/test_tvsubtitles.py +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/refiners/test_hash.py +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/refiners/test_omdb.py +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/refiners/test_tmdb.py +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/refiners/test_tvdb.py +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/test_archives.py +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/test_cache.py +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/test_core.py +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/test_matches.py +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/test_provider.py +0 -0
- {subliminal-2.6.0 → subliminal-2.7.1}/tests/test_score.py +0 -0
|
@@ -10,13 +10,13 @@ runs:
|
|
|
10
10
|
run: |
|
|
11
11
|
echo "::error title=⛔ error hint::Support Linux, Windows, and macOS Only"
|
|
12
12
|
exit 1
|
|
13
|
-
- uses: actions/checkout@
|
|
13
|
+
- uses: actions/checkout@v7
|
|
14
14
|
with:
|
|
15
15
|
persist-credentials: false
|
|
16
16
|
fetch-depth: 0
|
|
17
17
|
- name: Cache test data
|
|
18
18
|
id: cache-test-data
|
|
19
|
-
uses: actions/cache@
|
|
19
|
+
uses: actions/cache@v5
|
|
20
20
|
with:
|
|
21
21
|
path: tests/data/
|
|
22
22
|
enableCrossOsArchive: true
|
|
@@ -34,7 +34,7 @@ runs:
|
|
|
34
34
|
with:
|
|
35
35
|
packages: rar
|
|
36
36
|
version: 1.0
|
|
37
|
-
- uses: actions/setup-python@
|
|
37
|
+
- uses: actions/setup-python@v6
|
|
38
38
|
if: steps.cache-test-data.outputs.cache-hit != 'true'
|
|
39
39
|
with:
|
|
40
40
|
python-version-file: .python-version-default
|
|
@@ -52,7 +52,7 @@ runs:
|
|
|
52
52
|
tox -e prepare-tests
|
|
53
53
|
|
|
54
54
|
# - name: Upload files for test
|
|
55
|
-
# uses: actions/upload-artifact@
|
|
55
|
+
# uses: actions/upload-artifact@v7
|
|
56
56
|
# with:
|
|
57
57
|
# name: tests-data
|
|
58
58
|
# path: tests/data/
|
|
@@ -20,7 +20,7 @@ jobs:
|
|
|
20
20
|
check-manifest:
|
|
21
21
|
runs-on: ubuntu-latest
|
|
22
22
|
steps:
|
|
23
|
-
- uses: actions/checkout@
|
|
23
|
+
- uses: actions/checkout@v7
|
|
24
24
|
with:
|
|
25
25
|
persist-credentials: false
|
|
26
26
|
- run: pipx run check-manifest --ignore "_version.py"
|
|
@@ -28,10 +28,10 @@ jobs:
|
|
|
28
28
|
pre-commit:
|
|
29
29
|
runs-on: ubuntu-latest
|
|
30
30
|
steps:
|
|
31
|
-
- uses: actions/checkout@
|
|
31
|
+
- uses: actions/checkout@v7
|
|
32
32
|
with:
|
|
33
33
|
persist-credentials: false
|
|
34
|
-
- uses: actions/setup-python@
|
|
34
|
+
- uses: actions/setup-python@v6
|
|
35
35
|
with:
|
|
36
36
|
python-version-file: .python-version-default
|
|
37
37
|
- uses: pre-commit/action@v3.0.1
|
|
@@ -41,10 +41,10 @@ jobs:
|
|
|
41
41
|
permissions:
|
|
42
42
|
contents: read
|
|
43
43
|
steps:
|
|
44
|
-
- uses: actions/checkout@
|
|
44
|
+
- uses: actions/checkout@v7
|
|
45
45
|
with:
|
|
46
46
|
persist-credentials: false
|
|
47
|
-
- uses: actions/setup-python@
|
|
47
|
+
- uses: actions/setup-python@v6
|
|
48
48
|
with:
|
|
49
49
|
python-version-file: .python-version-default
|
|
50
50
|
- name: Install hatch
|
|
@@ -58,10 +58,10 @@ jobs:
|
|
|
58
58
|
name: Build docs and run doctests
|
|
59
59
|
runs-on: ubuntu-latest
|
|
60
60
|
steps:
|
|
61
|
-
- uses: actions/checkout@
|
|
61
|
+
- uses: actions/checkout@v7
|
|
62
62
|
with:
|
|
63
63
|
persist-credentials: false
|
|
64
|
-
- uses: actions/setup-python@
|
|
64
|
+
- uses: actions/setup-python@v6
|
|
65
65
|
with:
|
|
66
66
|
# Keep in sync with tox/docs, hatch.toml and .readthedocs.yaml.
|
|
67
67
|
python-version-file: .python-version-default
|
|
@@ -76,7 +76,7 @@ jobs:
|
|
|
76
76
|
- name: Check changelog
|
|
77
77
|
run: hatch run changelog:run
|
|
78
78
|
|
|
79
|
-
- uses: actions/upload-artifact@
|
|
79
|
+
- uses: actions/upload-artifact@v7
|
|
80
80
|
with:
|
|
81
81
|
name: docs
|
|
82
82
|
path: docs/_build/
|
|
@@ -86,10 +86,10 @@ jobs:
|
|
|
86
86
|
runs-on: ubuntu-latest
|
|
87
87
|
|
|
88
88
|
steps:
|
|
89
|
-
- uses: actions/checkout@
|
|
89
|
+
- uses: actions/checkout@v7
|
|
90
90
|
with:
|
|
91
91
|
persist-credentials: false
|
|
92
|
-
- uses: actions/setup-python@
|
|
92
|
+
- uses: actions/setup-python@v6
|
|
93
93
|
with:
|
|
94
94
|
python-version-file: .python-version-default
|
|
95
95
|
cache: pip
|
|
@@ -104,7 +104,7 @@ jobs:
|
|
|
104
104
|
runs-on: ubuntu-latest
|
|
105
105
|
|
|
106
106
|
steps:
|
|
107
|
-
- uses: actions/checkout@
|
|
107
|
+
- uses: actions/checkout@v7
|
|
108
108
|
with:
|
|
109
109
|
persist-credentials: false
|
|
110
110
|
fetch-depth: 0
|
|
@@ -122,7 +122,7 @@ jobs:
|
|
|
122
122
|
runs-on: ubuntu-latest
|
|
123
123
|
|
|
124
124
|
steps:
|
|
125
|
-
- uses: actions/checkout@
|
|
125
|
+
- uses: actions/checkout@v7
|
|
126
126
|
with:
|
|
127
127
|
persist-credentials: false
|
|
128
128
|
fetch-depth: 0
|
|
@@ -142,10 +142,10 @@ jobs:
|
|
|
142
142
|
# Created by the build-and-inspect-python-package action above.
|
|
143
143
|
py: ${{ fromJson(needs.build-package.outputs.supported-python-versions) }}
|
|
144
144
|
steps:
|
|
145
|
-
- uses: actions/checkout@
|
|
145
|
+
- uses: actions/checkout@v7
|
|
146
146
|
with:
|
|
147
147
|
persist-credentials: false
|
|
148
|
-
- uses: actions/setup-python@
|
|
148
|
+
- uses: actions/setup-python@v6
|
|
149
149
|
with:
|
|
150
150
|
python-version: ${{ matrix.py }}
|
|
151
151
|
allow-prereleases: true
|
|
@@ -181,32 +181,74 @@ jobs:
|
|
|
181
181
|
shell: bash
|
|
182
182
|
|
|
183
183
|
- name: Store coverage file
|
|
184
|
-
uses: actions/upload-artifact@
|
|
184
|
+
uses: actions/upload-artifact@v7
|
|
185
185
|
with:
|
|
186
186
|
name: coverage-${{ matrix.os }}-${{ matrix.py }}
|
|
187
187
|
path: .coverage*
|
|
188
188
|
include-hidden-files: true
|
|
189
189
|
if-no-files-found: error
|
|
190
190
|
|
|
191
|
+
test-freebsd:
|
|
192
|
+
name: Test on FreeBSD
|
|
193
|
+
runs-on: ubuntu-latest
|
|
194
|
+
needs: prepare-test
|
|
195
|
+
timeout-minutes: 10
|
|
196
|
+
if: github.event_name == 'push'
|
|
197
|
+
steps:
|
|
198
|
+
- uses: actions/checkout@v7
|
|
199
|
+
with:
|
|
200
|
+
persist-credentials: false
|
|
201
|
+
fetch-depth: 0
|
|
202
|
+
- name: Prepare tests
|
|
203
|
+
uses: ./.github/actions/prepare-tests
|
|
204
|
+
- name: Display downloaded files
|
|
205
|
+
run: ls -R tests/data
|
|
206
|
+
- name: Test in FreeBSD
|
|
207
|
+
uses: vmactions/freebsd-vm@v1
|
|
208
|
+
with:
|
|
209
|
+
release: "15.0"
|
|
210
|
+
usesh: true
|
|
211
|
+
prepare: |
|
|
212
|
+
pkg install -y python3 databases/py-sqlite3 devel/py-hatch git-lite
|
|
213
|
+
run: |
|
|
214
|
+
set -e
|
|
215
|
+
PY_VERSION=$(python3 -c 'import platform; print(".".join(platform.python_version_tuple()[:2]))')
|
|
216
|
+
echo "Picked Python ${PY_VERSION}"
|
|
217
|
+
export ENV="tests.py${PY_VERSION}"
|
|
218
|
+
export FORCE_COLOR="1"
|
|
219
|
+
export CI_RUN="yes"
|
|
220
|
+
export COVERAGE_FILE=".coverage.freebsd.${PY_VERSION}"
|
|
221
|
+
hatch -v env create "${ENV}"
|
|
222
|
+
hatch -v run "${ENV}:test-cov"
|
|
223
|
+
|
|
224
|
+
- name: Store coverage file
|
|
225
|
+
uses: actions/upload-artifact@v7
|
|
226
|
+
with:
|
|
227
|
+
name: coverage-freebsd
|
|
228
|
+
path: .coverage*
|
|
229
|
+
include-hidden-files: true
|
|
230
|
+
if-no-files-found: error
|
|
231
|
+
|
|
191
232
|
coverage:
|
|
192
233
|
name: Coverage
|
|
193
234
|
runs-on: ubuntu-latest
|
|
194
|
-
needs: test
|
|
235
|
+
needs: [test, test-freebsd]
|
|
236
|
+
if: ${{ !cancelled() && needs.test.result == 'success' && (needs.test-freebsd.result == 'success' || needs.test-freebsd.result == 'skipped') }}
|
|
195
237
|
permissions:
|
|
196
238
|
pull-requests: write
|
|
197
239
|
contents: write
|
|
198
240
|
steps:
|
|
199
|
-
- uses: actions/checkout@
|
|
241
|
+
- uses: actions/checkout@v7
|
|
200
242
|
with:
|
|
201
243
|
# py-cov-action/python-coverage-comment-action needs git credentials
|
|
202
244
|
persist-credentials: true
|
|
203
|
-
- uses: actions/setup-python@
|
|
245
|
+
- uses: actions/setup-python@v6
|
|
204
246
|
with:
|
|
205
247
|
python-version-file: .python-version-default
|
|
206
248
|
- uses: hynek/setup-cached-uv@v2
|
|
207
249
|
|
|
208
250
|
- name: Download coverage data
|
|
209
|
-
uses: actions/download-artifact@
|
|
251
|
+
uses: actions/download-artifact@v8
|
|
210
252
|
with:
|
|
211
253
|
pattern: coverage-*
|
|
212
254
|
merge-multiple: true
|
|
@@ -222,7 +264,7 @@ jobs:
|
|
|
222
264
|
coverage report --skip-covered --skip-empty --show-missing --format=markdown >> $GITHUB_STEP_SUMMARY
|
|
223
265
|
|
|
224
266
|
- name: Upload HTML report if check failed.
|
|
225
|
-
uses: actions/upload-artifact@
|
|
267
|
+
uses: actions/upload-artifact@v7
|
|
226
268
|
with:
|
|
227
269
|
name: html-report
|
|
228
270
|
path: htmlcov
|
|
@@ -234,7 +276,7 @@ jobs:
|
|
|
234
276
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
235
277
|
|
|
236
278
|
- name: Store Pull Request comment to be posted
|
|
237
|
-
uses: actions/upload-artifact@
|
|
279
|
+
uses: actions/upload-artifact@v7
|
|
238
280
|
if: steps.coverage_comment.outputs.COMMENT_FILE_WRITTEN == 'true'
|
|
239
281
|
with:
|
|
240
282
|
# If you use a different name, update COMMENT_ARTIFACT_NAME accordingly
|
|
@@ -247,10 +289,10 @@ jobs:
|
|
|
247
289
|
runs-on: ubuntu-latest
|
|
248
290
|
needs: [build-package, prepare-test]
|
|
249
291
|
steps:
|
|
250
|
-
- uses: actions/checkout@
|
|
292
|
+
- uses: actions/checkout@v7
|
|
251
293
|
with:
|
|
252
294
|
persist-credentials: false
|
|
253
|
-
- uses: actions/setup-python@
|
|
295
|
+
- uses: actions/setup-python@v6
|
|
254
296
|
id: setup
|
|
255
297
|
with:
|
|
256
298
|
python-version-file: .python-version-default
|
|
@@ -287,7 +329,7 @@ jobs:
|
|
|
287
329
|
shell: bash
|
|
288
330
|
|
|
289
331
|
- name: Store coverage file
|
|
290
|
-
uses: actions/upload-artifact@
|
|
332
|
+
uses: actions/upload-artifact@v7
|
|
291
333
|
if: ${{ failure() }}
|
|
292
334
|
with:
|
|
293
335
|
name: core-coverage
|
|
@@ -35,12 +35,12 @@ jobs:
|
|
|
35
35
|
steps:
|
|
36
36
|
- name: Checkout repository
|
|
37
37
|
if: github.event_name == 'push' || github.event_name == 'pull_request'
|
|
38
|
-
uses: actions/checkout@
|
|
38
|
+
uses: actions/checkout@v7
|
|
39
39
|
with:
|
|
40
40
|
persist-credentials: false
|
|
41
41
|
- name: Checkout repository
|
|
42
42
|
if: github.event_name == 'workflow_call' || github.event_name == 'workflow_dispatch'
|
|
43
|
-
uses: actions/checkout@
|
|
43
|
+
uses: actions/checkout@v7
|
|
44
44
|
with:
|
|
45
45
|
ref: ${{ inputs.tag-name }}
|
|
46
46
|
persist-credentials: false
|
|
@@ -50,15 +50,15 @@ jobs:
|
|
|
50
50
|
github.event_name == 'push'
|
|
51
51
|
|| github.event_name == 'workflow_call'
|
|
52
52
|
|| github.event_name == 'workflow_dispatch'
|
|
53
|
-
uses: docker/setup-qemu-action@
|
|
53
|
+
uses: docker/setup-qemu-action@v4
|
|
54
54
|
|
|
55
55
|
- name: Set up Docker Buildx
|
|
56
|
-
uses: docker/setup-buildx-action@
|
|
56
|
+
uses: docker/setup-buildx-action@v4
|
|
57
57
|
with:
|
|
58
58
|
cache-binary: false
|
|
59
59
|
|
|
60
60
|
- name: Log in to the Container registry
|
|
61
|
-
uses: docker/login-action@
|
|
61
|
+
uses: docker/login-action@v4
|
|
62
62
|
with:
|
|
63
63
|
registry: ${{ env.REGISTRY }}
|
|
64
64
|
username: ${{ github.actor }}
|
|
@@ -66,7 +66,7 @@ jobs:
|
|
|
66
66
|
|
|
67
67
|
- name: Extract metadata (tags, labels) for Docker
|
|
68
68
|
id: meta
|
|
69
|
-
uses: docker/metadata-action@
|
|
69
|
+
uses: docker/metadata-action@v6
|
|
70
70
|
with:
|
|
71
71
|
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
|
72
72
|
tags: |
|
|
@@ -76,7 +76,7 @@ jobs:
|
|
|
76
76
|
type=semver,pattern={{major}},enable=${{ !startsWith(github.ref, 'refs/tags/0.') }}
|
|
77
77
|
|
|
78
78
|
- name: Test building Docker image
|
|
79
|
-
uses: docker/build-push-action@
|
|
79
|
+
uses: docker/build-push-action@v7
|
|
80
80
|
if: github.event_name == 'pull_request'
|
|
81
81
|
with:
|
|
82
82
|
context: .
|
|
@@ -86,7 +86,7 @@ jobs:
|
|
|
86
86
|
cache-to: type=gha,mode=max
|
|
87
87
|
|
|
88
88
|
- name: Build and push Docker image
|
|
89
|
-
uses: docker/build-push-action@
|
|
89
|
+
uses: docker/build-push-action@v7
|
|
90
90
|
if: |
|
|
91
91
|
github.event_name == 'push'
|
|
92
92
|
|| github.event_name == 'workflow_call'
|
|
@@ -29,14 +29,14 @@ jobs:
|
|
|
29
29
|
pull-requests: write
|
|
30
30
|
|
|
31
31
|
steps:
|
|
32
|
-
- uses: actions/checkout@
|
|
32
|
+
- uses: actions/checkout@v7
|
|
33
33
|
with:
|
|
34
34
|
fetch-depth: 0
|
|
35
35
|
# persist-credentials is needed in order for us to push the release branch.
|
|
36
36
|
persist-credentials: true
|
|
37
37
|
|
|
38
38
|
- name: Set up Python
|
|
39
|
-
uses: actions/setup-python@
|
|
39
|
+
uses: actions/setup-python@v6
|
|
40
40
|
with:
|
|
41
41
|
python-version-file: .python-version-default
|
|
42
42
|
cache: pip
|
|
@@ -31,12 +31,12 @@ jobs:
|
|
|
31
31
|
runs-on: ubuntu-latest
|
|
32
32
|
steps:
|
|
33
33
|
- name: Checkout
|
|
34
|
-
uses: actions/checkout@
|
|
34
|
+
uses: actions/checkout@v7
|
|
35
35
|
if: github.event_name == 'push'
|
|
36
36
|
with:
|
|
37
37
|
persist-credentials: false
|
|
38
38
|
- name: Checkout
|
|
39
|
-
uses: actions/checkout@
|
|
39
|
+
uses: actions/checkout@v7
|
|
40
40
|
if: |
|
|
41
41
|
github.event_name == 'workflow_dispatch'
|
|
42
42
|
|| github.event_name == 'workflow_call'
|
|
@@ -63,19 +63,19 @@ jobs:
|
|
|
63
63
|
# Publish a Github release when a tag was pushed, or it's called with a tag.
|
|
64
64
|
steps:
|
|
65
65
|
- name: Checkout
|
|
66
|
-
uses: actions/checkout@
|
|
66
|
+
uses: actions/checkout@v7
|
|
67
67
|
with:
|
|
68
68
|
fetch-tags: true
|
|
69
69
|
ref: ${{ needs.build-package.outputs.tag }}
|
|
70
70
|
persist-credentials: false
|
|
71
71
|
|
|
72
72
|
- name: Download packages built by build-and-inspect-python-package
|
|
73
|
-
uses: actions/download-artifact@
|
|
73
|
+
uses: actions/download-artifact@v8
|
|
74
74
|
with:
|
|
75
75
|
name: Packages
|
|
76
76
|
path: dist
|
|
77
77
|
- name: Publish GitHub Release
|
|
78
|
-
uses: softprops/action-gh-release@
|
|
78
|
+
uses: softprops/action-gh-release@v3
|
|
79
79
|
with:
|
|
80
80
|
files: dist/*
|
|
81
81
|
generate_release_notes: true
|
|
@@ -20,7 +20,7 @@ jobs:
|
|
|
20
20
|
name: Build & verify package
|
|
21
21
|
runs-on: ubuntu-latest
|
|
22
22
|
steps:
|
|
23
|
-
- uses: actions/checkout@
|
|
23
|
+
- uses: actions/checkout@v7
|
|
24
24
|
with:
|
|
25
25
|
fetch-depth: 0
|
|
26
26
|
persist-credentials: false
|
|
@@ -45,7 +45,7 @@ jobs:
|
|
|
45
45
|
&& github.event.action == 'published'
|
|
46
46
|
steps:
|
|
47
47
|
- name: Download packages built by build-and-inspect-python-package
|
|
48
|
-
uses: actions/download-artifact@
|
|
48
|
+
uses: actions/download-artifact@v8
|
|
49
49
|
with:
|
|
50
50
|
name: Packages
|
|
51
51
|
path: dist
|
|
@@ -24,10 +24,10 @@ jobs:
|
|
|
24
24
|
|| github.event_name == 'workflow_dispatch'
|
|
25
25
|
runs-on: ubuntu-latest
|
|
26
26
|
steps:
|
|
27
|
-
- uses: actions/checkout@
|
|
27
|
+
- uses: actions/checkout@v7
|
|
28
28
|
with:
|
|
29
29
|
persist-credentials: false
|
|
30
|
-
- uses: actions/setup-python@
|
|
30
|
+
- uses: actions/setup-python@v6
|
|
31
31
|
with:
|
|
32
32
|
python-version: "3.x"
|
|
33
33
|
- name: Prepare tests
|
|
@@ -24,7 +24,7 @@ jobs:
|
|
|
24
24
|
name: Build & verify package
|
|
25
25
|
runs-on: ubuntu-latest
|
|
26
26
|
steps:
|
|
27
|
-
- uses: actions/checkout@
|
|
27
|
+
- uses: actions/checkout@v7
|
|
28
28
|
with:
|
|
29
29
|
fetch-depth: 0
|
|
30
30
|
persist-credentials: false
|
|
@@ -72,7 +72,7 @@ jobs:
|
|
|
72
72
|
env:
|
|
73
73
|
RELEASE_VERSION: ${{ needs.define-tag.outputs.tag }}
|
|
74
74
|
steps:
|
|
75
|
-
- uses: actions/checkout@
|
|
75
|
+
- uses: actions/checkout@v7
|
|
76
76
|
with:
|
|
77
77
|
fetch-depth: 0
|
|
78
78
|
# keep credentials to create a tag
|
|
@@ -8,19 +8,19 @@ repos:
|
|
|
8
8
|
- id: end-of-file-fixer
|
|
9
9
|
|
|
10
10
|
- repo: https://github.com/crate-ci/typos
|
|
11
|
-
rev: v1.
|
|
11
|
+
rev: v1.45.0
|
|
12
12
|
hooks:
|
|
13
13
|
- id: typos
|
|
14
14
|
|
|
15
15
|
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
16
|
-
rev: v0.
|
|
16
|
+
rev: v0.15.10
|
|
17
17
|
hooks:
|
|
18
18
|
- id: ruff
|
|
19
19
|
args: [--fix, --unsafe-fixes]
|
|
20
20
|
- id: ruff-format
|
|
21
21
|
|
|
22
22
|
- repo: https://github.com/abravalheri/validate-pyproject
|
|
23
|
-
rev: v0.
|
|
23
|
+
rev: v0.25
|
|
24
24
|
hooks:
|
|
25
25
|
- id: validate-pyproject
|
|
26
26
|
name: validate-pyproject
|
|
@@ -33,7 +33,7 @@ repos:
|
|
|
33
33
|
require_serial: true
|
|
34
34
|
|
|
35
35
|
- repo: https://github.com/woodruffw/zizmor-pre-commit
|
|
36
|
-
rev: v1.
|
|
36
|
+
rev: v1.23.1
|
|
37
37
|
hooks:
|
|
38
38
|
- id: zizmor
|
|
39
39
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.13
|
|
@@ -2,6 +2,50 @@
|
|
|
2
2
|
|
|
3
3
|
.. towncrier release notes start
|
|
4
4
|
|
|
5
|
+
2.7.1 (2026-07-22)
|
|
6
|
+
^^^^^^^^^^^^^^^^^^
|
|
7
|
+
|
|
8
|
+
Misc
|
|
9
|
+
----
|
|
10
|
+
|
|
11
|
+
- fix test for compatibility with guessit>=4 (`#1368 <https://github.com/Diaoul/subliminal/issues/1368>`__)
|
|
12
|
+
- add CI tests for FreeBSD (`#1370 <https://github.com/Diaoul/subliminal/issues/1370>`__)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
2.7.0 (2026-07-21)
|
|
16
|
+
^^^^^^^^^^^^^^^^^^
|
|
17
|
+
|
|
18
|
+
Changes
|
|
19
|
+
-------
|
|
20
|
+
|
|
21
|
+
- Rename language_type to category. Deprecate ``--language-type-suffix`` for ``--category-suffix`` (`#1344 <https://github.com/Diaoul/subliminal/issues/1344>`__)
|
|
22
|
+
- make EmbeddedSubtitle subtitle_id unique (`#1347 <https://github.com/Diaoul/subliminal/issues/1347>`__)
|
|
23
|
+
- Safely call Guessit and format output (`#1351 <https://github.com/Diaoul/subliminal/issues/1351>`__)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
CLI Changes
|
|
27
|
+
-----------
|
|
28
|
+
|
|
29
|
+
- add a ``--subtitle-categories`` option to replace ``-hi/-HI`` and ``-fo/-FO`` (`#1357 <https://github.com/Diaoul/subliminal/issues/1357>`__)
|
|
30
|
+
- check for undefined or deprecated entries in the config file (`#1358 <https://github.com/Diaoul/subliminal/issues/1358>`__)
|
|
31
|
+
- Allow ``--name`` to be a sed-like ``s/pattern/replacement/flags`` substitution, applied to the path of each
|
|
32
|
+
file individually, to parameterize the guessed name per file (`#1362 <https://github.com/Diaoul/subliminal/issues/1362>`__)
|
|
33
|
+
- allow multiple use of sed-like ``--name`` options (`#1364 <https://github.com/Diaoul/subliminal/issues/1364>`__)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
Documentation
|
|
37
|
+
-------------
|
|
38
|
+
|
|
39
|
+
- fix docs for config file with the subtitle_categories option (`#1360 <https://github.com/Diaoul/subliminal/issues/1360>`__)
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
Misc
|
|
43
|
+
----
|
|
44
|
+
|
|
45
|
+
- Drop Python 3.9 (`#1345 <https://github.com/Diaoul/subliminal/issues/1345>`__)
|
|
46
|
+
- fix gestdown tests (`#1354 <https://github.com/Diaoul/subliminal/issues/1354>`__)
|
|
47
|
+
|
|
48
|
+
|
|
5
49
|
2.6.0 (2026-02-20)
|
|
6
50
|
^^^^^^^^^^^^^^^^^^
|
|
7
51
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: subliminal
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.7.1
|
|
4
4
|
Summary: Subtitles, faster than your thoughts
|
|
5
5
|
Project-URL: homepage, https://github.com/Diaoul/subliminal
|
|
6
6
|
Project-URL: repository, https://github.com/Diaoul/subliminal
|
|
@@ -16,7 +16,6 @@ Classifier: License :: OSI Approved :: MIT License
|
|
|
16
16
|
Classifier: Operating System :: OS Independent
|
|
17
17
|
Classifier: Programming Language :: Python
|
|
18
18
|
Classifier: Programming Language :: Python :: 3
|
|
19
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
20
19
|
Classifier: Programming Language :: Python :: 3.10
|
|
21
20
|
Classifier: Programming Language :: Python :: 3.11
|
|
22
21
|
Classifier: Programming Language :: Python :: 3.12
|
|
@@ -24,7 +23,7 @@ Classifier: Programming Language :: Python :: 3.13
|
|
|
24
23
|
Classifier: Programming Language :: Python :: 3.14
|
|
25
24
|
Classifier: Topic :: Multimedia :: Video
|
|
26
25
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
27
|
-
Requires-Python: >=3.
|
|
26
|
+
Requires-Python: >=3.10
|
|
28
27
|
Requires-Dist: babelfish>=0.6.1
|
|
29
28
|
Requires-Dist: beautifulsoup4>=4.4.0
|
|
30
29
|
Requires-Dist: chardet>=5.0
|
|
@@ -56,7 +55,7 @@ Requires-Dist: rarfile>=2.7; extra == 'rar'
|
|
|
56
55
|
Provides-Extra: tests
|
|
57
56
|
Requires-Dist: colorama; extra == 'tests'
|
|
58
57
|
Requires-Dist: coverage[toml]>=7; extra == 'tests'
|
|
59
|
-
Requires-Dist:
|
|
58
|
+
Requires-Dist: packaging; extra == 'tests'
|
|
60
59
|
Requires-Dist: pytest-cov; extra == 'tests'
|
|
61
60
|
Requires-Dist: pytest-xdist; extra == 'tests'
|
|
62
61
|
Requires-Dist: pytest>=6.0; extra == 'tests'
|
|
@@ -22,7 +22,7 @@ provider = ["addic7ed", "opensubtitlescom", "opensubtitles"]
|
|
|
22
22
|
refiner = ["metadata", "hash", "omdb"]
|
|
23
23
|
ignore_refiner = ["tmdb"]
|
|
24
24
|
language = ["fr", "en", "pt-br"]
|
|
25
|
-
|
|
25
|
+
subtitle_categories = "n,hi"
|
|
26
26
|
encoding = "utf-8"
|
|
27
27
|
min_score = 50
|
|
28
28
|
archives = true
|
|
@@ -12,7 +12,7 @@ Sections
|
|
|
12
12
|
|
|
13
13
|
The configuration file supports different sections or tables:
|
|
14
14
|
|
|
15
|
-
- a ``[default]`` table, corresponding to the options of the :ref:`cli-subliminal
|
|
15
|
+
- a ``[default]`` table, corresponding to the options of the :ref:`cli-subliminal` command.
|
|
16
16
|
|
|
17
17
|
- ``[refiner.<refiner_name>]`` and ``[provider.<provider_name>]`` tables to specify refiner and provider options.
|
|
18
18
|
|
|
@@ -24,9 +24,16 @@ CLI arguments (like ``path``) cannot be specified in the configuration file.
|
|
|
24
24
|
|
|
25
25
|
Options that can be used multiple times (like ``--language``) need to be defined as arrays.
|
|
26
26
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
27
|
+
Hyphens in parameter names need to be substituted by underscores in the config file:
|
|
28
|
+
``--cache-dir=/tmp`` → ``cache_dir = "/tmp"``.
|
|
29
|
+
|
|
30
|
+
.. note::
|
|
31
|
+
``hearing_impaired`` and ``foreign_only`` can take three values: "true", "false" or "[]".
|
|
32
|
+
They mean that hearing impaired (or foreign-only) subtitles will be, respectively,
|
|
33
|
+
ranked first, ranked last or not given any particular rank, for subtitles with identical scores.
|
|
34
|
+
|
|
35
|
+
.. deprecated:: 2.7.04
|
|
36
|
+
Use ``--subtitle-categories`` instead.
|
|
30
37
|
|
|
31
38
|
|
|
32
39
|
Example
|
|
@@ -52,6 +52,31 @@ See :ref:`cli` for more details on the available commands and options.
|
|
|
52
52
|
$ python -m subliminal download -h
|
|
53
53
|
|
|
54
54
|
|
|
55
|
+
Parameterized name
|
|
56
|
+
^^^^^^^^^^^^^^^^^^^
|
|
57
|
+
|
|
58
|
+
The ``--name/-n`` option lets you override the file name that is used to guess information about a video.
|
|
59
|
+
In addition to a static alternative name, you can use a
|
|
60
|
+
`sed <https://www.man7.org/linux/man-pages/man1/sed.1.html>`_-like substitution pattern
|
|
61
|
+
``s/pattern/replacement/flags`` to override the names of all the files in a folder.
|
|
62
|
+
The pattern needs to be a valid Python regex. Back-references (``\1``, ``\2``, …) are available in the
|
|
63
|
+
replacement, and the ``g`` (replace all occurrences) and ``i`` (case-insensitive) flags are supported::
|
|
64
|
+
|
|
65
|
+
$ subliminal download -l pl \
|
|
66
|
+
--name 's/.*YP-1R-([0-9]+)x([0-9]+).*/My Little Pony Friendship Is Magic S\1E\2.mkv/' \
|
|
67
|
+
*/YP-1R-*.mkv
|
|
68
|
+
|
|
69
|
+
Unlike sed, ``&`` is a literal character (not the whole match), so titles containing an ampersand need
|
|
70
|
+
no escaping::
|
|
71
|
+
|
|
72
|
+
$ subliminal download -l pl \
|
|
73
|
+
--name 's/.*_-_([0-9]+)_.*/Panty & Stocking with Garterbelt S01E\1.mkv/' \
|
|
74
|
+
*Garterbelt_-_*.mkv
|
|
75
|
+
|
|
76
|
+
The substitution is applied to the path of each file (after the optional conversion to an absolute path
|
|
77
|
+
with ``--use-absolute-path``), so the pattern can also match parent directories. Any file whose path does
|
|
78
|
+
not match is left untouched and scanned as-is.
|
|
79
|
+
|
|
55
80
|
Nautilus/Nemo integration
|
|
56
81
|
-------------------------
|
|
57
82
|
See the dedicated `project page <https://github.com/Diaoul/nautilus-subliminal>`_ for more information.
|
|
@@ -53,7 +53,7 @@ description = "build and check documentation"
|
|
|
53
53
|
dev-mode = false
|
|
54
54
|
features = ["docs"]
|
|
55
55
|
# Keep in sync with CI.yaml/docs, tox/docs and .readthedocs.yaml.
|
|
56
|
-
python = "3.
|
|
56
|
+
python = "3.13"
|
|
57
57
|
|
|
58
58
|
[envs.docs.scripts]
|
|
59
59
|
build = "sphinx-build -n -T -W --keep-going --color -b html docs docs/_build/html"
|
|
@@ -80,7 +80,7 @@ description = "Run the tests suite"
|
|
|
80
80
|
features = ["tests"]
|
|
81
81
|
|
|
82
82
|
[[envs.tests.matrix]]
|
|
83
|
-
python = ["3.
|
|
83
|
+
python = ["3.10", "3.11", "3.12", "3.13", "3.14"]
|
|
84
84
|
|
|
85
85
|
[envs.tests.env-vars]
|
|
86
86
|
COVERAGE_PROCESS_START = "pyproject.toml"
|