diff --git a/anime_downloader/.#util.py b/anime_downloader/.#util.py deleted file mode 120000 index ba58f0c..0000000 --- a/anime_downloader/.#util.py +++ /dev/null @@ -1 +0,0 @@ -vn-ki@this.1316:1557033979 \ No newline at end of file diff --git a/anime_downloader/downloader/base_downloader.py b/anime_downloader/downloader/base_downloader.py index ba858c3..b652652 100644 --- a/anime_downloader/downloader/base_downloader.py +++ b/anime_downloader/downloader/base_downloader.py @@ -10,35 +10,40 @@ logger = logging.getLogger(__name__) class BaseDownloader: - def __init__(self, source, path, force, options=None): - logger.info(path) - - self.url = source.stream_url - self.referer = source.referer - self.path = path - + def __init__(self, options=None): if options is None: options = {} self.options = options - util.make_dir(path.rsplit('/', 1)[0]) - self.chunksize = 16384 + def check_if_exists(self): # Added Referer Header as kwik needd it. r = session.get_session().get( self.url, headers={'referer': self.referer}, stream=True) self.total_size = int(r.headers['Content-length']) - if os.path.exists(path): - if abs(os.stat(path).st_size - self.total_size) < 10 and not force: + if os.path.exists(self.path): + if abs(os.stat(self.path).st_size - self.total_size) < 10 \ + and not self.option['force']: logger.warning('File already downloaded. Skipping download.') return else: - os.remove(path) + os.remove(self.path) - def download(self): + def download(self, url, path, options=None): self.pre_process() + self.url = url + logger.info(path) + + # TODO: Use pathlib. Break into functions + self.path = path + util.make_dir(path.rsplit('/', 1)[0]) + + if options is not None: + self.options = {**options, **self.options} + + self.check_if_exists() self.start_time = time.time() self.downloaded = 0 diff --git a/anime_downloader/session.py b/anime_downloader/session.py index 63679f1..b59a1e4 100644 --- a/anime_downloader/session.py +++ b/anime_downloader/session.py @@ -7,12 +7,11 @@ from requests.adapters import HTTPAdapter from requests.packages.urllib3.util.retry import Retry import tempfile -from anime_downloader import downloader logger = logging.getLogger(__name__) file = tempfile.mktemp() -requests_cache.install_cache('anime_downloader', expires_after=300, location=file) +requests_cache.install_cache('anime_downloader', expires_after=300) _session = requests_cache.CachedSession() @@ -51,7 +50,7 @@ def get_session(custom_session=None): return _session -class DownloaderSession: +class _DownloaderSession: external_downloaders = { "aria2": { "executable": "aria2c", @@ -65,8 +64,9 @@ class DownloaderSession: "_disable_ssl_additional": ["--check-certificate", "false"], }, } + _cache = {} - def __init__(self, disable_ssl=False): + def __init__(self): # TODO: Figure out a way to do disable_ssl elgantly # Disablining ssl check should be in session and not in # donwloader because it's a session wise option @@ -75,6 +75,23 @@ class DownloaderSession: pass def __getitem__(self, key): - if key == 'http': - return downloader.get_downloader('http')() - return self.down + # HACK: Because of circular dependency + from anime_downloader import downloader + # HACK: This has to obtained like this because this variable is + # set inside dl. There should be a persistant data store throughout + # the app instead. + disable_ssl = get_session().verify + if key not in self._cache: + if key == 'http': + self._cache[key] = downloader.get_downloader('http')() + if disable_ssl: + if '_disable_ssl_additional' in self.external_downloaders[key]: + self.external_downloaders[key]['cmd_opts'] = { + **self.external_downloaders[key]['cmd_opts'], + **self.external_downloaders[key]['_disable_ssl_additional'] + } + self._cache[key] = downloader.get_downloader('ext')( + options=self.external_downloaders[key]) + return self._cache[key] + +DownloaderSession = _DownloaderSession() diff --git a/anime_downloader/sites/gogoanime.py b/anime_downloader/sites/gogoanime.py index 2e0fd8c..c020f75 100644 --- a/anime_downloader/sites/gogoanime.py +++ b/anime_downloader/sites/gogoanime.py @@ -7,7 +7,6 @@ logger = logging.getLogger(__name__) class GogoanimeEpisode(AnimeEpisode, sitename='gogoanime'): - QUALITIES = ['360p', '480p', '720p'] _base_url = 'https://www2.gogoanime.se' def _get_sources(self): diff --git a/anime_downloader/sites/kissanime.py b/anime_downloader/sites/kissanime.py index 6bb10d4..00f829c 100644 --- a/anime_downloader/sites/kissanime.py +++ b/anime_downloader/sites/kissanime.py @@ -10,7 +10,6 @@ logger = logging.getLogger(__name__) class KissanimeEpisode(AnimeEpisode, sitename='kissanime'): """KissanimeEpisode""" - QUALITIES = ['360p', '480p', '720p', '1080p'] _base_url = 'http://kissanime.ru' VERIFY_HUMAN = True diff --git a/anime_downloader/sites/nineanime.py b/anime_downloader/sites/nineanime.py index dd58adc..208a069 100644 --- a/anime_downloader/sites/nineanime.py +++ b/anime_downloader/sites/nineanime.py @@ -14,7 +14,6 @@ logger = logging.getLogger(__name__) class NineAnimeEpisode(AnimeEpisode, sitename='9anime'): - QUALITIES = ['360p', '480p', '720p', '1080p'] _base_url = r'https://9anime.to/ajax/episode/info' ts = 0 diff --git a/anime_downloader/sites/twistmoe.py b/anime_downloader/sites/twistmoe.py index c939f22..7d7d2be 100644 --- a/anime_downloader/sites/twistmoe.py +++ b/anime_downloader/sites/twistmoe.py @@ -19,8 +19,6 @@ session = session.get_session() class TwistMoeEpisode(AnimeEpisode, sitename='twist.moe'): - QUALITIES = ['360p', '480p', '720p', '1080p'] - def _get_sources(self): return [('no_extractor', self.url)]