Compare commits

..

6 Commits

Author SHA1 Message Date
dependabot[bot] 00fb290a66
Merge 6f3ac6ad6e into 86b889d3b6 2024-04-26 16:18:58 +02:00
Anderson Shindy Oki 86b889d3b6
Improved cutoff options label. #2466 2024-04-24 22:34:42 -04:00
Anderson Shindy Oki 0bdfcd0eda
no log: Fix anidb enrichment return type (#2472) 2024-04-24 20:57:39 -04:00
Anderson Shindy Oki 5e0433834e
Fixed animetosho provider empty subtitle name. #2468 2024-04-24 20:27:04 -04:00
morpheus65535 fd190aad14 Fixed SyntaxWarning with Python 3.12. #2462 2024-04-24 06:49:38 -04:00
Vitiko 369b2c7343 Embedded Subtitles provider: handle FileNotFoundError 2024-04-23 17:20:36 -04:00
9 changed files with 24 additions and 15 deletions

View File

@ -53,7 +53,7 @@ class AniDBClient(object):
]
if not animes:
return None
return None, None
# Sort the anime by offset in ascending order
animes.sort(key=lambda a: a.episode_offset)

View File

@ -50,7 +50,7 @@ def default_xattr(fn):
XATTR_MAP = {
"default": (
default_xattr,
lambda result: re.search('(?um)(net\.filebot\.filename(?=="|: )[=:" ]+|Attribute.+:\s)([^"\n\r\0]+)',
lambda result: re.search(r'(?um)(net\.filebot\.filename(?=="|: )[=:" ]+|Attribute.+:\s)([^"\n\r\0]+)',
result).group(2)
),
# "darwin": (
@ -60,7 +60,7 @@ XATTR_MAP = {
# ),
"darwin": (
lambda fn: ["filebot", "-script", "fn:xattr", fn],
lambda result: re.search('(?um)(net\.filebot\.filename(?=="|: )[=:" ]+|Attribute.+:\s)([^"\n\r\0]+)',
lambda result: re.search(r'(?um)(net\.filebot\.filename(?=="|: )[=:" ]+|Attribute.+:\s)([^"\n\r\0]+)',
result).group(2)
),
"win32": (

View File

@ -6,7 +6,7 @@ from stevedore import ExtensionManager
class RegistrableExtensionManager(ExtensionManager):
""":class:~stevedore.extensions.ExtensionManager` with support for registration.
r""":class:~stevedore.extensions.ExtensionManager` with support for registration.
It allows loading of internal extensions without setup and registering/unregistering additional extensions.

View File

@ -1,4 +1,4 @@
"""
r"""
Refiners enrich a :class:`~subliminal.video.Video` object by adding information to it.
A refiner is a simple function:

View File

@ -115,7 +115,7 @@ class Video(object):
class Episode(Video):
"""Episode :class:`Video`.
r"""Episode :class:`Video`.
:param str series: series of the episode.
:param int season: season number of the episode.
@ -202,7 +202,7 @@ class Episode(Video):
class Movie(Video):
"""Movie :class:`Video`.
r"""Movie :class:`Video`.
:param str title: title of the movie.
:param int year: year of the movie.

View File

@ -1057,7 +1057,7 @@ def list_supported_video_types(pool_class, **kwargs):
def download_subtitles(subtitles, pool_class=ProviderPool, **kwargs):
"""Download :attr:`~subliminal.subtitle.Subtitle.content` of `subtitles`.
r"""Download :attr:`~subliminal.subtitle.Subtitle.content` of `subtitles`.
:param subtitles: subtitles to download.
:type subtitles: list of :class:`~subliminal.subtitle.Subtitle`
@ -1074,7 +1074,7 @@ def download_subtitles(subtitles, pool_class=ProviderPool, **kwargs):
def download_best_subtitles(videos, languages, min_score=0, hearing_impaired=False, only_one=False, compute_score=None,
pool_class=ProviderPool, throttle_time=0, **kwargs):
"""List and download the best matching subtitles.
r"""List and download the best matching subtitles.
The `videos` must pass the `languages` and `undefined` (`only_one`) checks of :func:`check_video`.
@ -1245,7 +1245,7 @@ def save_subtitles(file_path, subtitles, single=False, directory=None, chmod=Non
def refine(video, episode_refiners=None, movie_refiners=None, **kwargs):
"""Refine a video using :ref:`refiners`.
r"""Refine a video using :ref:`refiners`.
patch: add traceback logging

View File

@ -141,8 +141,9 @@ class AnimeToshoProvider(Provider, ProviderSubtitleArchiveMixin):
lang = Language.fromalpha3b(subtitle_file['info']['lang'])
# For Portuguese and Portuguese Brazilian they both share the same code, the name is the only
# identifier AnimeTosho provides.
if lang.alpha3 == 'por' and subtitle_file['info']['name'].lower().find('brazil'):
# identifier AnimeTosho provides. Also, some subtitles does not have name, in this case it could
# be a false negative but there is nothing we can use to guarantee it is PT-BR, we rather skip it.
if lang.alpha3 == 'por' and subtitle_file['info'].get('name', '').lower().find('brazil'):
lang = Language('por', 'BR')
subtitle = self.subtitle_class(

View File

@ -208,8 +208,11 @@ class EmbeddedSubtitlesProvider(Provider):
except Exception as error:
logger.debug("'%s' raised running modifier", error)
with open(path, "rb") as sub:
subtitle.content = sub.read()
if os.path.exists(path):
with open(path, "rb") as sub:
subtitle.content = sub.read()
else:
logger.error("%s not found in filesystem", path)
def _get_subtitle_path(self, subtitle: EmbeddedSubtitle):
container = subtitle.container

View File

@ -82,7 +82,12 @@ const ProfileEditForm: FunctionComponent<Props> = ({
const itemCutoffOptions = useSelectorOptions(
form.values.items,
(v) => v.language,
(v) => {
const suffix =
v.hi === "True" ? ":hi" : v.forced === "True" ? ":forced" : "";
return v.language + suffix;
},
(v) => String(v.id),
);