From 7e956a6f0c40e5f0a9b256fde95e10bb77a698d0 Mon Sep 17 00:00:00 2001 From: Gomile <39145128+ngomile@users.noreply.github.com> Date: Tue, 25 Dec 2018 17:07:03 +0200 Subject: [PATCH] Made sessions retriable and some minor changes (#102) --- anime_downloader/session.py | 22 ++++++++++++++++++++-- anime_downloader/sites/animepahe.py | 3 ++- anime_downloader/sites/baseanimecf.py | 3 ++- anime_downloader/sites/kissanime.py | 3 ++- anime_downloader/sites/kisscartoon.py | 2 +- anime_downloader/sites/masterani.py | 3 ++- anime_downloader/util.py | 4 ++-- 7 files changed, 31 insertions(+), 9 deletions(-) diff --git a/anime_downloader/session.py b/anime_downloader/session.py index c366e94..ef9e39d 100644 --- a/anime_downloader/session.py +++ b/anime_downloader/session.py @@ -1,12 +1,30 @@ import requests import urllib3 +from requests.adapters import HTTPAdapter +from requests.packages.urllib3.util.retry import Retry _session = requests.Session() urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) -def get_session(): +def get_session(custom_session=None): global _session - _session = _session or requests.Session() + + if custom_session: + custom_session.verify = _session.verify + _session = custom_session + else: + _session = _session or requests.Session() + + retry = Retry( + total=10, + read=10, + connect=10, + backoff_factor=0.3, + status_forcelist=(500, 502, 504,) + ) + adapter = HTTPAdapter(max_retries=retry) + _session.mount('http://', adapter) + _session.mount('https://', adapter) return _session diff --git a/anime_downloader/sites/animepahe.py b/anime_downloader/sites/animepahe.py index bb6f78e..b2ec371 100644 --- a/anime_downloader/sites/animepahe.py +++ b/anime_downloader/sites/animepahe.py @@ -5,8 +5,9 @@ from anime_downloader.sites.anime import BaseEpisode, SearchResult from anime_downloader.sites.baseanimecf import BaseAnimeCF from anime_downloader.sites.exceptions import NotFoundError from anime_downloader import util +from anime_downloader.session import get_session -scraper = cfscrape.create_scraper() +scraper = get_session(cfscrape.create_scraper()) class AnimePaheEpisode(BaseEpisode): diff --git a/anime_downloader/sites/baseanimecf.py b/anime_downloader/sites/baseanimecf.py index fcafc05..ae8254b 100644 --- a/anime_downloader/sites/baseanimecf.py +++ b/anime_downloader/sites/baseanimecf.py @@ -4,8 +4,9 @@ import logging from anime_downloader.sites.anime import BaseAnime from anime_downloader.const import get_random_header +from anime_downloader.session import get_session -scraper = cfscrape.create_scraper() +scraper = get_session(cfscrape.create_scraper()) class BaseAnimeCF(BaseAnime): diff --git a/anime_downloader/sites/kissanime.py b/anime_downloader/sites/kissanime.py index ee46d58..fe61eec 100644 --- a/anime_downloader/sites/kissanime.py +++ b/anime_downloader/sites/kissanime.py @@ -7,9 +7,10 @@ from anime_downloader.sites.anime import BaseEpisode, SearchResult from anime_downloader.sites.baseanimecf import BaseAnimeCF from anime_downloader.sites.exceptions import NotFoundError from anime_downloader.const import get_random_header +from anime_downloader.session import get_session -scraper = cfscrape.create_scraper(delay=10) +scraper = get_session(cfscrape.create_scraper(delay=10)) class KissanimeEpisode(BaseEpisode): diff --git a/anime_downloader/sites/kisscartoon.py b/anime_downloader/sites/kisscartoon.py index b10bd6c..b841533 100644 --- a/anime_downloader/sites/kisscartoon.py +++ b/anime_downloader/sites/kisscartoon.py @@ -8,7 +8,7 @@ from bs4 import BeautifulSoup import cfscrape import logging -scraper = cfscrape.create_scraper() +scraper = session.get_session(cfscrape.create_scraper()) session = session.get_session() diff --git a/anime_downloader/sites/masterani.py b/anime_downloader/sites/masterani.py index 8eba149..3e62b06 100644 --- a/anime_downloader/sites/masterani.py +++ b/anime_downloader/sites/masterani.py @@ -8,8 +8,9 @@ from bs4 import BeautifulSoup from anime_downloader import util from anime_downloader.sites.anime import BaseAnime, BaseEpisode, SearchResult from anime_downloader.const import desktop_headers +from anime_downloader.session import get_session -scraper = cfscrape.create_scraper() +scraper = get_session(cfscrape.create_scraper()) class MasteraniEpisode(BaseEpisode): diff --git a/anime_downloader/util.py b/anime_downloader/util.py index 51275dc..a7eb812 100644 --- a/anime_downloader/util.py +++ b/anime_downloader/util.py @@ -96,7 +96,7 @@ def split_anime(anime, episode_range): def parse_episode_range(anime, episode_range): - if episode_range is None: + if not episode_range: episode_range = '1:' if episode_range.endswith(':'): episode_range += str(len(anime) + 1) @@ -107,7 +107,7 @@ def parse_episode_range(anime, episode_range): def parse_ep_str(anime, grammar): episodes = [] - if grammar is None: + if not grammar: return split_anime(anime, parse_episode_range(anime, grammar)) for episode_grammar in grammar.split(','):