subliminal 2.5.0__tar.gz → 2.7.0__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.
Files changed (328) hide show
  1. {subliminal-2.5.0 → subliminal-2.7.0}/.github/actions/prepare-tests/action.yaml +4 -4
  2. {subliminal-2.5.0 → subliminal-2.7.0}/.github/workflows/CI.yaml +23 -23
  3. {subliminal-2.5.0 → subliminal-2.7.0}/.github/workflows/docker-build.yaml +8 -8
  4. {subliminal-2.5.0 → subliminal-2.7.0}/.github/workflows/prepare-release-pr.yaml +2 -2
  5. {subliminal-2.5.0 → subliminal-2.7.0}/.github/workflows/publish-release.yaml +5 -5
  6. {subliminal-2.5.0 → subliminal-2.7.0}/.github/workflows/publish.yaml +2 -2
  7. {subliminal-2.5.0 → subliminal-2.7.0}/.github/workflows/scheduled-tests.yaml +2 -2
  8. {subliminal-2.5.0 → subliminal-2.7.0}/.github/workflows/tag-release.yaml +2 -2
  9. subliminal-2.7.0/.github/zizmor.yml +11 -0
  10. {subliminal-2.5.0 → subliminal-2.7.0}/.pre-commit-config.yaml +4 -4
  11. subliminal-2.7.0/.python-version-default +1 -0
  12. {subliminal-2.5.0 → subliminal-2.7.0}/.readthedocs.yaml +2 -2
  13. {subliminal-2.5.0 → subliminal-2.7.0}/HISTORY.rst +57 -0
  14. {subliminal-2.5.0 → subliminal-2.7.0}/PKG-INFO +7 -5
  15. {subliminal-2.5.0 → subliminal-2.7.0}/README.rst +5 -1
  16. {subliminal-2.5.0 → subliminal-2.7.0}/docs/api/providers.rst +5 -0
  17. {subliminal-2.5.0/docs → subliminal-2.7.0/docs/assets}/config.toml +1 -1
  18. subliminal-2.7.0/docs/assets/demo.gif +0 -0
  19. {subliminal-2.5.0 → subliminal-2.7.0}/docs/user/configuration_file.rst +12 -5
  20. {subliminal-2.5.0 → subliminal-2.7.0}/docs/user/how_it_works.rst +1 -0
  21. {subliminal-2.5.0 → subliminal-2.7.0}/docs/user/usage.rst +25 -0
  22. {subliminal-2.5.0 → subliminal-2.7.0}/hatch.toml +2 -2
  23. {subliminal-2.5.0 → subliminal-2.7.0}/pyproject.toml +2 -3
  24. {subliminal-2.5.0 → subliminal-2.7.0}/src/subliminal/archives.py +2 -2
  25. {subliminal-2.5.0 → subliminal-2.7.0}/src/subliminal/cli/cli.py +10 -3
  26. {subliminal-2.5.0 → subliminal-2.7.0}/src/subliminal/cli/commands/download_best.py +87 -15
  27. {subliminal-2.5.0 → subliminal-2.7.0}/src/subliminal/cli/generate_config.py +9 -2
  28. {subliminal-2.5.0 → subliminal-2.7.0}/src/subliminal/cli/helpers.py +124 -4
  29. {subliminal-2.5.0 → subliminal-2.7.0}/src/subliminal/core.py +16 -25
  30. {subliminal-2.5.0 → subliminal-2.7.0}/src/subliminal/extensions.py +1 -0
  31. {subliminal-2.5.0 → subliminal-2.7.0}/src/subliminal/providers/__init__.py +1 -2
  32. {subliminal-2.5.0 → subliminal-2.7.0}/src/subliminal/providers/addic7ed.py +2 -3
  33. {subliminal-2.5.0 → subliminal-2.7.0}/src/subliminal/providers/bsplayer.py +1 -1
  34. {subliminal-2.5.0 → subliminal-2.7.0}/src/subliminal/providers/gestdown.py +11 -51
  35. {subliminal-2.5.0 → subliminal-2.7.0}/src/subliminal/providers/mock.py +2 -2
  36. {subliminal-2.5.0 → subliminal-2.7.0}/src/subliminal/providers/napiprojekt.py +1 -2
  37. {subliminal-2.5.0 → subliminal-2.7.0}/src/subliminal/providers/opensubtitles.py +3 -5
  38. {subliminal-2.5.0 → subliminal-2.7.0}/src/subliminal/providers/opensubtitlescom.py +36 -101
  39. {subliminal-2.5.0 → subliminal-2.7.0}/src/subliminal/providers/podnapisi.py +2 -2
  40. subliminal-2.7.0/src/subliminal/providers/subtis.py +336 -0
  41. {subliminal-2.5.0 → subliminal-2.7.0}/src/subliminal/providers/subtitulamos.py +9 -5
  42. {subliminal-2.5.0 → subliminal-2.7.0}/src/subliminal/providers/tvsubtitles.py +16 -32
  43. {subliminal-2.5.0 → subliminal-2.7.0}/src/subliminal/refiners/hash.py +14 -10
  44. {subliminal-2.5.0 → subliminal-2.7.0}/src/subliminal/refiners/metadata.py +6 -4
  45. {subliminal-2.5.0 → subliminal-2.7.0}/src/subliminal/refiners/tvdb.py +7 -25
  46. {subliminal-2.5.0 → subliminal-2.7.0}/src/subliminal/subtitle.py +142 -66
  47. {subliminal-2.5.0 → subliminal-2.7.0}/src/subliminal/utils.py +275 -4
  48. {subliminal-2.5.0 → subliminal-2.7.0}/src/subliminal/video.py +4 -6
  49. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/gestdown/test_list_subtitles_episode_alternative_series.yaml +66 -51
  50. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/omdb/test_get_id.yaml +15 -17
  51. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/omdb/test_get_title.yaml +15 -17
  52. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/omdb/test_get_wrong_id.yaml +11 -13
  53. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/omdb/test_get_wrong_title.yaml +15 -17
  54. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/omdb/test_refine_episode.yaml +11 -13
  55. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/omdb/test_refine_episode_original_series.yaml +68 -80
  56. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/omdb/test_refine_episode_with_country.yaml +17 -19
  57. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/omdb/test_refine_episode_with_country_hoc_us.yaml +15 -18
  58. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/omdb/test_refine_episode_year.yaml +11 -13
  59. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/omdb/test_refine_movie.yaml +49 -54
  60. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/omdb/test_refine_movie_guess_alternative_title.yaml +15 -16
  61. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/omdb/test_search.yaml +11 -13
  62. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/omdb/test_search_page.yaml +11 -13
  63. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/omdb/test_search_type.yaml +11 -13
  64. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/omdb/test_search_wrong_title.yaml +15 -17
  65. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/omdb/test_search_year.yaml +11 -13
  66. subliminal-2.7.0/tests/cassettes/providers/test_download_best_subtitles.yaml +1097 -0
  67. subliminal-2.7.0/tests/cassettes/subtis/test_download_subtitle.yaml +7982 -0
  68. subliminal-2.7.0/tests/cassettes/subtis/test_list_subtitles_hash.yaml +258 -0
  69. subliminal-2.7.0/tests/cassettes/subtis/test_list_subtitles_movie.yaml +997 -0
  70. subliminal-2.7.0/tests/cassettes/subtis/test_list_subtitles_movie_alternative.yaml +682 -0
  71. subliminal-2.7.0/tests/cassettes/subtis/test_list_subtitles_movie_with_size.yaml +367 -0
  72. subliminal-2.7.0/tests/cassettes/subtis/test_list_subtitles_no_match.yaml +632 -0
  73. subliminal-2.7.0/tests/cassettes/subtitulamos/test_list_subtitles_not_exist_series.yaml +110 -0
  74. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cli/test_download.py +264 -4
  75. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cli/test_helpers.py +26 -1
  76. {subliminal-2.5.0 → subliminal-2.7.0}/tests/conftest.py +2 -2
  77. {subliminal-2.5.0 → subliminal-2.7.0}/tests/providers/test_gestdown.py +1 -0
  78. {subliminal-2.5.0 → subliminal-2.7.0}/tests/providers/test_providers.py +3 -3
  79. subliminal-2.7.0/tests/providers/test_subtis.py +390 -0
  80. {subliminal-2.5.0 → subliminal-2.7.0}/tests/refiners/test_hash.py +1 -0
  81. {subliminal-2.5.0 → subliminal-2.7.0}/tests/refiners/test_metadata.py +3 -3
  82. {subliminal-2.5.0 → subliminal-2.7.0}/tests/refiners/test_omdb.py +13 -10
  83. {subliminal-2.5.0 → subliminal-2.7.0}/tests/refiners/test_tvdb.py +0 -22
  84. {subliminal-2.5.0 → subliminal-2.7.0}/tests/test_extensions.py +1 -7
  85. {subliminal-2.5.0 → subliminal-2.7.0}/tests/test_provider_pool.py +3 -3
  86. {subliminal-2.5.0 → subliminal-2.7.0}/tests/test_subtitle.py +115 -26
  87. {subliminal-2.5.0 → subliminal-2.7.0}/tests/test_utils.py +225 -0
  88. {subliminal-2.5.0 → subliminal-2.7.0}/tox.ini +4 -4
  89. subliminal-2.5.0/.github/zizmor.yml +0 -13
  90. subliminal-2.5.0/.python-version-default +0 -1
  91. subliminal-2.5.0/tests/cassettes/providers/test_download_best_subtitles.yaml +0 -966
  92. subliminal-2.5.0/tests/cassettes/subtitulamos/test_list_subtitles_not_exist_series.yaml +0 -114
  93. subliminal-2.5.0/tests/cassettes/tvdb/test_refresh_token.yaml +0 -100
  94. subliminal-2.5.0/tests/cassettes/tvdb/test_token_needs_refresh.yaml +0 -50
  95. {subliminal-2.5.0 → subliminal-2.7.0}/.dockerignore +0 -0
  96. {subliminal-2.5.0 → subliminal-2.7.0}/.github/workflows/coverage.yaml +0 -0
  97. {subliminal-2.5.0 → subliminal-2.7.0}/.gitignore +0 -0
  98. {subliminal-2.5.0 → subliminal-2.7.0}/CONTRIBUTING.md +0 -0
  99. {subliminal-2.5.0 → subliminal-2.7.0}/Dockerfile +0 -0
  100. {subliminal-2.5.0 → subliminal-2.7.0}/LICENSE +0 -0
  101. {subliminal-2.5.0 → subliminal-2.7.0}/MANIFEST.in +0 -0
  102. {subliminal-2.5.0 → subliminal-2.7.0}/RELEASING.md +0 -0
  103. {subliminal-2.5.0 → subliminal-2.7.0}/changelog.d/.gitignore +0 -0
  104. {subliminal-2.5.0 → subliminal-2.7.0}/docs/Makefile +0 -0
  105. {subliminal-2.5.0 → subliminal-2.7.0}/docs/_intersphinx/README.md +0 -0
  106. {subliminal-2.5.0 → subliminal-2.7.0}/docs/_intersphinx/importlib_metadata_objects.inv +0 -0
  107. {subliminal-2.5.0 → subliminal-2.7.0}/docs/_intersphinx/importlib_metadata_objects.txt +0 -0
  108. {subliminal-2.5.0 → subliminal-2.7.0}/docs/_static/.gitignore +0 -0
  109. {subliminal-2.5.0 → subliminal-2.7.0}/docs/api/cache.rst +0 -0
  110. {subliminal-2.5.0 → subliminal-2.7.0}/docs/api/cli.rst +0 -0
  111. {subliminal-2.5.0 → subliminal-2.7.0}/docs/api/core.rst +0 -0
  112. {subliminal-2.5.0 → subliminal-2.7.0}/docs/api/exceptions.rst +0 -0
  113. {subliminal-2.5.0 → subliminal-2.7.0}/docs/api/extensions.rst +0 -0
  114. {subliminal-2.5.0 → subliminal-2.7.0}/docs/api/refiners.rst +0 -0
  115. {subliminal-2.5.0 → subliminal-2.7.0}/docs/api/score.rst +0 -0
  116. {subliminal-2.5.0 → subliminal-2.7.0}/docs/api/subtitle.rst +0 -0
  117. {subliminal-2.5.0 → subliminal-2.7.0}/docs/api/utils.rst +0 -0
  118. {subliminal-2.5.0 → subliminal-2.7.0}/docs/api/video.rst +0 -0
  119. {subliminal-2.5.0 → subliminal-2.7.0}/docs/cassettes/test_usage.yaml +0 -0
  120. {subliminal-2.5.0 → subliminal-2.7.0}/docs/conf.py +0 -0
  121. {subliminal-2.5.0 → subliminal-2.7.0}/docs/conftest.py +0 -0
  122. {subliminal-2.5.0 → subliminal-2.7.0}/docs/index.rst +0 -0
  123. {subliminal-2.5.0 → subliminal-2.7.0}/docs/make.bat +0 -0
  124. {subliminal-2.5.0 → subliminal-2.7.0}/docs/user/changelog.rst +0 -0
  125. {subliminal-2.5.0 → subliminal-2.7.0}/docs/user/cli.rst +0 -0
  126. {subliminal-2.5.0 → subliminal-2.7.0}/docs/user/installation.rst +0 -0
  127. {subliminal-2.5.0 → subliminal-2.7.0}/docs/user/provider_guide.rst +0 -0
  128. {subliminal-2.5.0 → subliminal-2.7.0}/scripts/.gitignore +0 -0
  129. {subliminal-2.5.0 → subliminal-2.7.0}/scripts/prepare-release-pr.py +0 -0
  130. {subliminal-2.5.0 → subliminal-2.7.0}/scripts/prepare_tests.py +0 -0
  131. {subliminal-2.5.0 → subliminal-2.7.0}/scripts/release.py +0 -0
  132. {subliminal-2.5.0 → subliminal-2.7.0}/src/subliminal/__init__.py +0 -0
  133. {subliminal-2.5.0 → subliminal-2.7.0}/src/subliminal/__main__.py +0 -0
  134. {subliminal-2.5.0 → subliminal-2.7.0}/src/subliminal/cache.py +0 -0
  135. {subliminal-2.5.0 → subliminal-2.7.0}/src/subliminal/cli/__init__.py +0 -0
  136. {subliminal-2.5.0 → subliminal-2.7.0}/src/subliminal/cli/commands/__init__.py +0 -0
  137. {subliminal-2.5.0 → subliminal-2.7.0}/src/subliminal/cli/commands/_format.py +0 -0
  138. {subliminal-2.5.0 → subliminal-2.7.0}/src/subliminal/converters/__init__.py +0 -0
  139. {subliminal-2.5.0 → subliminal-2.7.0}/src/subliminal/converters/addic7ed.py +0 -0
  140. {subliminal-2.5.0 → subliminal-2.7.0}/src/subliminal/converters/opensubtitles.py +0 -0
  141. {subliminal-2.5.0 → subliminal-2.7.0}/src/subliminal/converters/opensubtitlescom.py +0 -0
  142. {subliminal-2.5.0 → subliminal-2.7.0}/src/subliminal/converters/subtitulamos.py +0 -0
  143. {subliminal-2.5.0 → subliminal-2.7.0}/src/subliminal/converters/tvsubtitles.py +0 -0
  144. {subliminal-2.5.0 → subliminal-2.7.0}/src/subliminal/exceptions.py +0 -0
  145. {subliminal-2.5.0 → subliminal-2.7.0}/src/subliminal/matches.py +0 -0
  146. {subliminal-2.5.0 → subliminal-2.7.0}/src/subliminal/py.typed +0 -0
  147. {subliminal-2.5.0 → subliminal-2.7.0}/src/subliminal/refiners/__init__.py +0 -0
  148. {subliminal-2.5.0 → subliminal-2.7.0}/src/subliminal/refiners/omdb.py +0 -0
  149. {subliminal-2.5.0 → subliminal-2.7.0}/src/subliminal/refiners/tmdb.py +0 -0
  150. {subliminal-2.5.0 → subliminal-2.7.0}/src/subliminal/score.py +0 -0
  151. {subliminal-2.5.0 → subliminal-2.7.0}/tests/__init__.py +0 -0
  152. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/addic7ed/test_download_subtitle.yaml +0 -0
  153. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/addic7ed/test_get_show_id.yaml +0 -0
  154. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/addic7ed/test_get_show_id_country.yaml +0 -0
  155. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/addic7ed/test_get_show_id_quote_dots_mixed_case.yaml +0 -0
  156. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/addic7ed/test_get_show_id_with_comma.yaml +0 -0
  157. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/addic7ed/test_get_show_id_year.yaml +0 -0
  158. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/addic7ed/test_get_show_ids.yaml +0 -0
  159. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/addic7ed/test_list_subtitles.yaml +0 -0
  160. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/addic7ed/test_list_subtitles_episode_alternative_series.yaml +0 -0
  161. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/addic7ed/test_list_subtitles_show_with_asterisk.yaml +0 -0
  162. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/addic7ed/test_query.yaml +0 -0
  163. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/addic7ed/test_query_no_year.yaml +0 -0
  164. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/addic7ed/test_query_parsing.yaml +0 -0
  165. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/addic7ed/test_query_parsing_colon.yaml +0 -0
  166. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/addic7ed/test_query_parsing_dash.yaml +0 -0
  167. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/addic7ed/test_query_parsing_quote_dots_mixed_case.yaml +0 -0
  168. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/addic7ed/test_query_wrong_series.yaml +0 -0
  169. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/addic7ed/test_query_year.yaml +0 -0
  170. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/bsplayer/test_download_subtitle.yaml +0 -0
  171. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/bsplayer/test_list_subtitles_hash.yaml +0 -0
  172. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/bsplayer/test_login.yaml +0 -0
  173. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/bsplayer/test_logout.yaml +0 -0
  174. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/bsplayer/test_query_hash_size.yaml +0 -0
  175. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/cli/test_cli_download.yaml +0 -0
  176. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/gestdown/test_download_subtitle.yaml +0 -0
  177. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/gestdown/test_download_with_bom.yaml +0 -0
  178. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/gestdown/test_get_title_and_show_id_alternative_name.yaml +0 -0
  179. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/gestdown/test_get_title_and_show_id_no_year.yaml +0 -0
  180. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/gestdown/test_get_title_and_show_id_only_title.yaml +0 -0
  181. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/gestdown/test_get_title_and_show_id_with_tvdb_id.yaml +0 -0
  182. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/gestdown/test_list_subtitles.yaml +0 -0
  183. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/gestdown/test_query.yaml +0 -0
  184. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/gestdown/test_query_all_series.yaml +0 -0
  185. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/gestdown/test_query_no_language.yaml +0 -0
  186. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/gestdown/test_query_parsing.yaml +0 -0
  187. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/gestdown/test_query_parsing_colon.yaml +0 -0
  188. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/gestdown/test_query_parsing_dash.yaml +0 -0
  189. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/gestdown/test_query_parsing_quote_dots_mixed_case.yaml +0 -0
  190. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/gestdown/test_query_wrong_series.yaml +0 -0
  191. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/gestdown/test_search_show_id.yaml +0 -0
  192. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/gestdown/test_search_show_id_error.yaml +0 -0
  193. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/gestdown/test_search_show_id_incomplete.yaml +0 -0
  194. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/gestdown/test_search_show_id_no_year.yaml +0 -0
  195. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/gestdown/test_search_show_id_quote.yaml +0 -0
  196. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/gestdown/test_search_show_series_tvdb_id.yaml +0 -0
  197. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/gestdown/test_show_with_asterisk.yaml +0 -0
  198. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/napiprojekt/test_download_subtitles.yaml +0 -0
  199. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/napiprojekt/test_list_subtitles.yaml +0 -0
  200. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/napiprojekt/test_query_microdvd.yaml +0 -0
  201. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/napiprojekt/test_query_srt.yaml +0 -0
  202. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/napiprojekt/test_query_srt_reencode.yaml +0 -0
  203. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/napiprojekt/test_query_wrong_hash.yaml +0 -0
  204. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/opensubtitles/test_download_subtitle.yaml +0 -0
  205. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/opensubtitles/test_list_subtitles_episode.yaml +0 -0
  206. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/opensubtitles/test_list_subtitles_movie.yaml +0 -0
  207. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/opensubtitles/test_list_subtitles_movie_no_hash.yaml +0 -0
  208. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/opensubtitles/test_login_bad_password.yaml +0 -0
  209. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/opensubtitles/test_login_vip_bad_password.yaml +0 -0
  210. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/opensubtitles/test_login_vip_login.yaml +0 -0
  211. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/opensubtitles/test_no_operation.yaml +0 -0
  212. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/opensubtitles/test_query_hash_size.yaml +0 -0
  213. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/opensubtitles/test_query_imdb_id.yaml +0 -0
  214. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/opensubtitles/test_query_not_enough_information.yaml +0 -0
  215. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/opensubtitles/test_query_query_episode.yaml +0 -0
  216. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/opensubtitles/test_query_query_movie.yaml +0 -0
  217. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/opensubtitles/test_query_query_season_episode.yaml +0 -0
  218. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/opensubtitles/test_query_wrong_hash_wrong_size.yaml +0 -0
  219. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/opensubtitlescom/test_download_subtitle.yaml +0 -0
  220. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/opensubtitlescom/test_list_subtitles_episode.yaml +0 -0
  221. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/opensubtitlescom/test_list_subtitles_movie.yaml +0 -0
  222. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/opensubtitlescom/test_list_subtitles_movie_no_hash.yaml +0 -0
  223. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/opensubtitlescom/test_login.yaml +0 -0
  224. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/opensubtitlescom/test_login_bad_password.yaml +0 -0
  225. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/opensubtitlescom/test_logout.yaml +0 -0
  226. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/opensubtitlescom/test_query_hash_size.yaml +0 -0
  227. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/opensubtitlescom/test_query_imdb_id.yaml +0 -0
  228. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/opensubtitlescom/test_query_max_result_pages.yaml +0 -0
  229. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/opensubtitlescom/test_query_query_episode.yaml +0 -0
  230. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/opensubtitlescom/test_query_query_movie.yaml +0 -0
  231. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/opensubtitlescom/test_query_query_season_episode.yaml +0 -0
  232. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/opensubtitlescom/test_query_tag_movie.yaml +0 -0
  233. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/opensubtitlescom/test_query_wrong_hash_wrong_size.yaml +0 -0
  234. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/opensubtitlescom/test_tag_match.yaml +0 -0
  235. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/opensubtitlescom/test_user_infos.yaml +0 -0
  236. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/podnapisi/test_download_subtitle.yaml +0 -0
  237. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/podnapisi/test_download_subtitles_with_title_unicode.yaml +0 -0
  238. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/podnapisi/test_list_subtitles_episode.yaml +0 -0
  239. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/podnapisi/test_list_subtitles_episode_alternative_series.yaml +0 -0
  240. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/podnapisi/test_list_subtitles_movie.yaml +0 -0
  241. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/podnapisi/test_query_episode.yaml +0 -0
  242. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/podnapisi/test_query_movie.yaml +0 -0
  243. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/providers/test_download_best_subtitles_min_score.yaml +0 -0
  244. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/providers/test_download_best_subtitles_only_one.yaml +0 -0
  245. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/providers/test_list_subtitles_providers_download.yaml +0 -0
  246. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/subtitulamos/test_download_subtitle.yaml +0 -0
  247. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/subtitulamos/test_download_subtitle_first_episode.yaml +0 -0
  248. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/subtitulamos/test_download_subtitle_foo.yaml +0 -0
  249. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/subtitulamos/test_download_subtitle_last_season.yaml +0 -0
  250. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/subtitulamos/test_download_subtitle_year.yaml +0 -0
  251. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/subtitulamos/test_list_subtitles_not_exist_episode.yaml +0 -0
  252. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/subtitulamos/test_list_subtitles_not_exist_language.yaml +0 -0
  253. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/subtitulamos/test_list_subtitles_not_exist_season.yaml +0 -0
  254. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/subtitulamos/test_list_subtitles_with_spanish_non_mx_search.yaml +0 -0
  255. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/tmdb/test_get_movie_id.yaml +0 -0
  256. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/tmdb/test_get_movie_id_failed.yaml +0 -0
  257. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/tmdb/test_get_series_id.yaml +0 -0
  258. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/tmdb/test_get_series_wrong_id.yaml +0 -0
  259. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/tmdb/test_refine_episode.yaml +0 -0
  260. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/tmdb/test_refine_episode_original_series.yaml +0 -0
  261. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/tmdb/test_refine_episode_with_country.yaml +0 -0
  262. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/tmdb/test_refine_episode_with_country_hoc_us.yaml +0 -0
  263. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/tmdb/test_refine_episode_year.yaml +0 -0
  264. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/tmdb/test_refine_movie.yaml +0 -0
  265. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/tmdb/test_refine_movie_guess_alternative_title.yaml +0 -0
  266. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/tmdb/test_search_movie.yaml +0 -0
  267. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/tmdb/test_search_movie_page.yaml +0 -0
  268. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/tmdb/test_search_movie_wrong_title.yaml +0 -0
  269. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/tmdb/test_search_movie_year.yaml +0 -0
  270. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/tmdb/test_search_series.yaml +0 -0
  271. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/tmdb/test_search_series_wrong_name.yaml +0 -0
  272. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/tvdb/test_get_series.yaml +0 -0
  273. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/tvdb/test_get_series_actors.yaml +0 -0
  274. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/tvdb/test_get_series_actors_wrong_id.yaml +0 -0
  275. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/tvdb/test_get_series_wrong_id.yaml +0 -0
  276. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/tvdb/test_login.yaml +0 -0
  277. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/tvdb/test_login_error.yaml +0 -0
  278. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/tvdb/test_query_series_episodes.yaml +0 -0
  279. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/tvdb/test_query_series_episodes_wrong_season.yaml +0 -0
  280. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/tvdb/test_refine.yaml +0 -0
  281. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/tvdb/test_refine_ambiguous.yaml +0 -0
  282. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/tvdb/test_refine_ambiguous_2.yaml +0 -0
  283. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/tvdb/test_refine_episode_alternative_series.yaml +0 -0
  284. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/tvdb/test_refine_episode_no_year.yaml +0 -0
  285. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/tvdb/test_refine_episode_partial.yaml +0 -0
  286. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/tvdb/test_refine_episode_with_comma.yaml +0 -0
  287. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/tvdb/test_refine_episode_with_country.yaml +0 -0
  288. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/tvdb/test_refine_episode_with_country_hoc_us.yaml +0 -0
  289. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/tvdb/test_refine_episode_year.yaml +0 -0
  290. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/tvdb/test_search_series.yaml +0 -0
  291. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/tvdb/test_search_series_wrong_name.yaml +0 -0
  292. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/tvsubtitles/test_download_subtitle.yaml +0 -0
  293. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/tvsubtitles/test_download_subtitle_with_quote.yaml +0 -0
  294. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/tvsubtitles/test_get_episode_ids.yaml +0 -0
  295. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/tvsubtitles/test_get_episode_ids_wrong_season.yaml +0 -0
  296. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/tvsubtitles/test_list_subtitles.yaml +0 -0
  297. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/tvsubtitles/test_list_subtitles_episode_alternative_series.yaml +0 -0
  298. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/tvsubtitles/test_query.yaml +0 -0
  299. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/tvsubtitles/test_query_no_year.yaml +0 -0
  300. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/tvsubtitles/test_query_with_quote.yaml +0 -0
  301. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/tvsubtitles/test_query_wrong_episode.yaml +0 -0
  302. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/tvsubtitles/test_query_wrong_series.yaml +0 -0
  303. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/tvsubtitles/test_search_show_id.yaml +0 -0
  304. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/tvsubtitles/test_search_show_id_ambiguous.yaml +0 -0
  305. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/tvsubtitles/test_search_show_id_error.yaml +0 -0
  306. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/tvsubtitles/test_search_show_id_incomplete.yaml +0 -0
  307. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/tvsubtitles/test_search_show_id_no_year.yaml +0 -0
  308. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/tvsubtitles/test_search_show_id_uk.yaml +0 -0
  309. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/tvsubtitles/test_search_show_id_us.yaml +0 -0
  310. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cassettes/tvsubtitles/test_search_show_id_year_in_title.yaml +0 -0
  311. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cli/test_cli.py +0 -0
  312. {subliminal-2.5.0 → subliminal-2.7.0}/tests/cli/test_generate_config.py +0 -0
  313. {subliminal-2.5.0 → subliminal-2.7.0}/tests/providers/test_addic7ed.py +0 -0
  314. {subliminal-2.5.0 → subliminal-2.7.0}/tests/providers/test_bsplayer.py +0 -0
  315. {subliminal-2.5.0 → subliminal-2.7.0}/tests/providers/test_napiprojekt.py +0 -0
  316. {subliminal-2.5.0 → subliminal-2.7.0}/tests/providers/test_opensubtitles.py +0 -0
  317. {subliminal-2.5.0 → subliminal-2.7.0}/tests/providers/test_opensubtitlescom.py +0 -0
  318. {subliminal-2.5.0 → subliminal-2.7.0}/tests/providers/test_podnapisi.py +0 -0
  319. {subliminal-2.5.0 → subliminal-2.7.0}/tests/providers/test_subtitulamos.py +0 -0
  320. {subliminal-2.5.0 → subliminal-2.7.0}/tests/providers/test_tvsubtitles.py +0 -0
  321. {subliminal-2.5.0 → subliminal-2.7.0}/tests/refiners/test_tmdb.py +0 -0
  322. {subliminal-2.5.0 → subliminal-2.7.0}/tests/test_archives.py +0 -0
  323. {subliminal-2.5.0 → subliminal-2.7.0}/tests/test_cache.py +0 -0
  324. {subliminal-2.5.0 → subliminal-2.7.0}/tests/test_core.py +0 -0
  325. {subliminal-2.5.0 → subliminal-2.7.0}/tests/test_matches.py +0 -0
  326. {subliminal-2.5.0 → subliminal-2.7.0}/tests/test_provider.py +0 -0
  327. {subliminal-2.5.0 → subliminal-2.7.0}/tests/test_score.py +0 -0
  328. {subliminal-2.5.0 → subliminal-2.7.0}/tests/test_video.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@v4
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@v4
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@v5
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@v4
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@v4
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@v4
31
+ - uses: actions/checkout@v7
32
32
  with:
33
33
  persist-credentials: false
34
- - uses: actions/setup-python@v5
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@v4
44
+ - uses: actions/checkout@v7
45
45
  with:
46
46
  persist-credentials: false
47
- - uses: actions/setup-python@v5
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@v4
61
+ - uses: actions/checkout@v7
62
62
  with:
63
63
  persist-credentials: false
64
- - uses: actions/setup-python@v5
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@v4
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@v4
89
+ - uses: actions/checkout@v7
90
90
  with:
91
91
  persist-credentials: false
92
- - uses: actions/setup-python@v5
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@v4
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@v4
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@v4
145
+ - uses: actions/checkout@v7
146
146
  with:
147
147
  persist-credentials: false
148
- - uses: actions/setup-python@v5
148
+ - uses: actions/setup-python@v6
149
149
  with:
150
150
  python-version: ${{ matrix.py }}
151
151
  allow-prereleases: true
@@ -181,7 +181,7 @@ jobs:
181
181
  shell: bash
182
182
 
183
183
  - name: Store coverage file
184
- uses: actions/upload-artifact@v4
184
+ uses: actions/upload-artifact@v7
185
185
  with:
186
186
  name: coverage-${{ matrix.os }}-${{ matrix.py }}
187
187
  path: .coverage*
@@ -196,17 +196,17 @@ jobs:
196
196
  pull-requests: write
197
197
  contents: write
198
198
  steps:
199
- - uses: actions/checkout@v4
199
+ - uses: actions/checkout@v7
200
200
  with:
201
201
  # py-cov-action/python-coverage-comment-action needs git credentials
202
202
  persist-credentials: true
203
- - uses: actions/setup-python@v5
203
+ - uses: actions/setup-python@v6
204
204
  with:
205
205
  python-version-file: .python-version-default
206
206
  - uses: hynek/setup-cached-uv@v2
207
207
 
208
208
  - name: Download coverage data
209
- uses: actions/download-artifact@v4
209
+ uses: actions/download-artifact@v8
210
210
  with:
211
211
  pattern: coverage-*
212
212
  merge-multiple: true
@@ -222,7 +222,7 @@ jobs:
222
222
  coverage report --skip-covered --skip-empty --show-missing --format=markdown >> $GITHUB_STEP_SUMMARY
223
223
 
224
224
  - name: Upload HTML report if check failed.
225
- uses: actions/upload-artifact@v4
225
+ uses: actions/upload-artifact@v7
226
226
  with:
227
227
  name: html-report
228
228
  path: htmlcov
@@ -234,7 +234,7 @@ jobs:
234
234
  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
235
235
 
236
236
  - name: Store Pull Request comment to be posted
237
- uses: actions/upload-artifact@v4
237
+ uses: actions/upload-artifact@v7
238
238
  if: steps.coverage_comment.outputs.COMMENT_FILE_WRITTEN == 'true'
239
239
  with:
240
240
  # If you use a different name, update COMMENT_ARTIFACT_NAME accordingly
@@ -247,10 +247,10 @@ jobs:
247
247
  runs-on: ubuntu-latest
248
248
  needs: [build-package, prepare-test]
249
249
  steps:
250
- - uses: actions/checkout@v4
250
+ - uses: actions/checkout@v7
251
251
  with:
252
252
  persist-credentials: false
253
- - uses: actions/setup-python@v5
253
+ - uses: actions/setup-python@v6
254
254
  id: setup
255
255
  with:
256
256
  python-version-file: .python-version-default
@@ -287,7 +287,7 @@ jobs:
287
287
  shell: bash
288
288
 
289
289
  - name: Store coverage file
290
- uses: actions/upload-artifact@v4
290
+ uses: actions/upload-artifact@v7
291
291
  if: ${{ failure() }}
292
292
  with:
293
293
  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@v4
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@v4
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@v3
53
+ uses: docker/setup-qemu-action@v4
54
54
 
55
55
  - name: Set up Docker Buildx
56
- uses: docker/setup-buildx-action@v3
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@v3
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@v5
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@v6
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@v6
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@v4
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@v5
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@v4
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@v4
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@v4
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@v4
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@v2
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@v4
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@v4
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@v4
27
+ - uses: actions/checkout@v7
28
28
  with:
29
29
  persist-credentials: false
30
- - uses: actions/setup-python@v5
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@v4
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@v4
75
+ - uses: actions/checkout@v7
76
76
  with:
77
77
  fetch-depth: 0
78
78
  # keep credentials to create a tag
@@ -0,0 +1,11 @@
1
+ rules:
2
+ dangerous-triggers:
3
+ ignore:
4
+ - coverage.yaml:3:1
5
+ unpinned-uses:
6
+ config:
7
+ policies:
8
+ "*": ref-pin
9
+ superfluous-actions:
10
+ ignore:
11
+ - publish-release.yaml:78:15
@@ -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.40.0
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.14.9
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.24.1
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.18.0
36
+ rev: v1.23.1
37
37
  hooks:
38
38
  - id: zizmor
39
39
 
@@ -0,0 +1 @@
1
+ 3.13
@@ -4,10 +4,10 @@
4
4
  version: 2
5
5
 
6
6
  build:
7
- os: ubuntu-22.04
7
+ os: ubuntu-lts-latest
8
8
  tools:
9
9
  # Keep in sync with CI.yaml/docs, hatch.toml and tox/docs.
10
- python: "3.12"
10
+ python: "3.13"
11
11
 
12
12
  python:
13
13
  install:
@@ -2,6 +2,63 @@
2
2
 
3
3
  .. towncrier release notes start
4
4
 
5
+ 2.7.0 (2026-07-21)
6
+ ^^^^^^^^^^^^^^^^^^
7
+
8
+ Changes
9
+ -------
10
+
11
+ - Rename language_type to category. Deprecate ``--language-type-suffix`` for ``--category-suffix`` (`#1344 <https://github.com/Diaoul/subliminal/issues/1344>`__)
12
+ - make EmbeddedSubtitle subtitle_id unique (`#1347 <https://github.com/Diaoul/subliminal/issues/1347>`__)
13
+ - Safely call Guessit and format output (`#1351 <https://github.com/Diaoul/subliminal/issues/1351>`__)
14
+
15
+
16
+ CLI Changes
17
+ -----------
18
+
19
+ - add a ``--subtitle-categories`` option to replace ``-hi/-HI`` and ``-fo/-FO`` (`#1357 <https://github.com/Diaoul/subliminal/issues/1357>`__)
20
+ - check for undefined or deprecated entries in the config file (`#1358 <https://github.com/Diaoul/subliminal/issues/1358>`__)
21
+ - Allow ``--name`` to be a sed-like ``s/pattern/replacement/flags`` substitution, applied to the path of each
22
+ file individually, to parameterize the guessed name per file (`#1362 <https://github.com/Diaoul/subliminal/issues/1362>`__)
23
+ - allow multiple use of sed-like ``--name`` options (`#1364 <https://github.com/Diaoul/subliminal/issues/1364>`__)
24
+
25
+
26
+ Documentation
27
+ -------------
28
+
29
+ - fix docs for config file with the subtitle_categories option (`#1360 <https://github.com/Diaoul/subliminal/issues/1360>`__)
30
+
31
+
32
+ Misc
33
+ ----
34
+
35
+ - Drop Python 3.9 (`#1345 <https://github.com/Diaoul/subliminal/issues/1345>`__)
36
+ - fix gestdown tests (`#1354 <https://github.com/Diaoul/subliminal/issues/1354>`__)
37
+
38
+
39
+ 2.6.0 (2026-02-20)
40
+ ^^^^^^^^^^^^^^^^^^
41
+
42
+ Provider Changes
43
+ ----------------
44
+
45
+ - OpenSubtitlesCom: replace recursive ``_search()`` implementation to prevent a stack overflow in some edge case (`#1336 <https://github.com/Diaoul/subliminal/issues/1336>`__)
46
+ - Add Subtis provider for Spanish subtitles (`#1337 <https://github.com/Diaoul/subliminal/issues/1337>`__)
47
+
48
+
49
+ Refiner Changes
50
+ ---------------
51
+
52
+ - hash: cache the result of hash_opensubtitles so it can be reused costlessly (`#1340 <https://github.com/Diaoul/subliminal/issues/1340>`__)
53
+
54
+
55
+ Misc
56
+ ----
57
+
58
+ - Fixes for some scheduled tests failures (`#1339 <https://github.com/Diaoul/subliminal/issues/1339>`__)
59
+ - add a gif to show CLI usage (`#1341 <https://github.com/Diaoul/subliminal/issues/1341>`__)
60
+
61
+
5
62
  2.5.0 (2025-12-14)
6
63
  ^^^^^^^^^^^^^^^^^^
7
64
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: subliminal
3
- Version: 2.5.0
3
+ Version: 2.7.0
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.9
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,6 @@ 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: importlib-metadata>=4.6; (python_version < '3.10') and extra == 'tests'
60
58
  Requires-Dist: pytest-cov; extra == 'tests'
61
59
  Requires-Dist: pytest-xdist; extra == 'tests'
62
60
  Requires-Dist: pytest>=6.0; extra == 'tests'
@@ -103,6 +101,10 @@ Subtitles, faster than your thoughts.
103
101
 
104
102
  Usage
105
103
  -----
104
+
105
+ .. image:: https://github.com/Diaoul/subliminal/blob/main/docs/assets/demo.gif
106
+ :alt: Demo of the app CLI usage
107
+
106
108
  CLI
107
109
  ^^^
108
110
  Download English subtitles::
@@ -120,7 +122,7 @@ By default it looks for a `subliminal.toml` file in the default configuration fo
120
122
  (see the CLI help for the exact platform-specific default path).
121
123
  Or use the `-c` option to specify the path to the configuration file.
122
124
 
123
- `Look for this example configuration file <https://github.com/Diaoul/subliminal/blob/main/docs/config.toml>`__
125
+ `Look for this example configuration file <https://github.com/Diaoul/subliminal/blob/main/docs/assets/config.toml>`__
124
126
  or use the `generate_default_config` function from the `subliminal.cli` module to generate a
125
127
  configuration file with all the options and their default values::
126
128
 
@@ -30,6 +30,10 @@ Subtitles, faster than your thoughts.
30
30
 
31
31
  Usage
32
32
  -----
33
+
34
+ .. image:: https://github.com/Diaoul/subliminal/blob/main/docs/assets/demo.gif
35
+ :alt: Demo of the app CLI usage
36
+
33
37
  CLI
34
38
  ^^^
35
39
  Download English subtitles::
@@ -47,7 +51,7 @@ By default it looks for a `subliminal.toml` file in the default configuration fo
47
51
  (see the CLI help for the exact platform-specific default path).
48
52
  Or use the `-c` option to specify the path to the configuration file.
49
53
 
50
- `Look for this example configuration file <https://github.com/Diaoul/subliminal/blob/main/docs/config.toml>`__
54
+ `Look for this example configuration file <https://github.com/Diaoul/subliminal/blob/main/docs/assets/config.toml>`__
51
55
  or use the `generate_default_config` function from the `subliminal.cli` module to generate a
52
56
  configuration file with all the options and their default values::
53
57
 
@@ -43,6 +43,11 @@ Subtitulamos
43
43
  .. automodule:: subliminal.providers.subtitulamos
44
44
  :members:
45
45
 
46
+ Subtis
47
+ ------
48
+ .. automodule:: subliminal.providers.subtis
49
+ :members:
50
+
46
51
  TVsubtitles
47
52
  -----------
48
53
  .. automodule:: subliminal.providers.tvsubtitles
@@ -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
- foreign_only = false
25
+ subtitle_categories = "n,hi"
26
26
  encoding = "utf-8"
27
27
  min_score = 50
28
28
  archives = true
Binary file
@@ -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-download` command.
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
- ``hearing_impaired`` and ``foreign_only`` can take three values: "true", "false" or "[]".
28
- They mean that hearing impaired (or foreign-only) subtitles will be, respectively,
29
- ranked first, ranked last or not given any particular rank, for subtitles with identical scores.
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
@@ -34,7 +41,7 @@ Example
34
41
 
35
42
  An example of configuration file:
36
43
 
37
- .. literalinclude:: ../config.toml
44
+ .. literalinclude:: ../assets/config.toml
38
45
  :language: toml
39
46
 
40
47
 
@@ -13,6 +13,7 @@ subtitles. Current supported providers are:
13
13
  * OpenSubtitles
14
14
  * OpenSubtitles.com
15
15
  * Podnapisi
16
+ * Subtis
16
17
  * Subtitulamos
17
18
  * TvSubtitles
18
19
 
@@ -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.