From 38d2332c3989d0ec29326d4f9b13588c46ee08c7 Mon Sep 17 00:00:00 2001 From: vitiko98 Date: Fri, 25 Jun 2021 18:40:02 -0400 Subject: [PATCH 1/2] Fix argenteam TypeError and JSONDecodeError --- libs/subliminal_patch/providers/argenteam.py | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/libs/subliminal_patch/providers/argenteam.py b/libs/subliminal_patch/providers/argenteam.py index 4c6ab8b28..66e2d30d3 100644 --- a/libs/subliminal_patch/providers/argenteam.py +++ b/libs/subliminal_patch/providers/argenteam.py @@ -1,11 +1,14 @@ # coding=utf-8 from __future__ import absolute_import + import logging import os import io import time import urllib.parse +from json.decoder import JSONDecodeError + from zipfile import ZipFile from guessit import guessit from requests import Session @@ -91,7 +94,14 @@ class ArgenteamProvider(Provider, ProviderSubtitleArchiveMixin): r = self.session.get(API_URL + "search", params={"q": query}, timeout=10) r.raise_for_status() - results = r.json() + try: + results = r.json() + except JSONDecodeError: + return [] + + if not results.get("results"): + return [] + match_ids = [] for result in results["results"]: if result["type"] == "movie" and is_episode: @@ -194,11 +204,13 @@ class ArgenteamProvider(Provider, ProviderSubtitleArchiveMixin): for aid in argenteam_ids: response = self.session.get(url, params={"id": aid}, timeout=10) response.raise_for_status() - content = response.json() - if not content: + + try: + content = response.json() + except JSONDecodeError: continue - if not content.get("releases"): + if not content or not content.get("releases"): continue imdb_id = year = None From 1c7584d33a5f928abba7805e74fcd5163ab90454 Mon Sep 17 00:00:00 2001 From: vitiko98 Date: Fri, 25 Jun 2021 19:10:41 -0400 Subject: [PATCH 2/2] Solve SSL error with Podnapisi on Ubuntu and Debian machines (Fix #1251) --- libs/subliminal_patch/providers/podnapisi.py | 24 +++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/libs/subliminal_patch/providers/podnapisi.py b/libs/subliminal_patch/providers/podnapisi.py index 6f384bf62..2044228c5 100644 --- a/libs/subliminal_patch/providers/podnapisi.py +++ b/libs/subliminal_patch/providers/podnapisi.py @@ -2,12 +2,19 @@ from __future__ import absolute_import import logging -import re import io +import re +import ssl + +from urllib3 import poolmanager from zipfile import ZipFile from guessit import guessit + +from requests import Session +from requests.adapters import HTTPAdapter + from subliminal.utils import sanitize from subliminal_patch.subtitle import guess_matches from subliminal_patch.providers.mixins import ProviderSubtitleArchiveMixin @@ -102,6 +109,17 @@ class PodnapisiSubtitle(_PodnapisiSubtitle): return matches +class PodnapisiAdapter(HTTPAdapter): + def init_poolmanager(self, connections, maxsize, block=False): + ctx = ssl.create_default_context() + ctx.set_ciphers('DEFAULT@SECLEVEL=1') + self.poolmanager = poolmanager.PoolManager( + num_pools=connections, + maxsize=maxsize, + block=block, + ssl_version=ssl.PROTOCOL_TLS, + ssl_context=ctx + ) class PodnapisiProvider(_PodnapisiProvider, ProviderSubtitleArchiveMixin): languages = ({Language('por', 'BR'), Language('srp', script='Latn'), Language('srp', script='Cyrl')} | @@ -124,6 +142,10 @@ class PodnapisiProvider(_PodnapisiProvider, ProviderSubtitleArchiveMixin): super(PodnapisiProvider, self).__init__() + def initialize(self): + super().initialize() + self.session.mount('https://', PodnapisiAdapter()) + def list_subtitles(self, video, languages): if video.is_special: logger.info("%s can't search for specials right now, skipping", self)