fix: get everything to working state

master
Vishnunarayan K I 2019-05-08 23:47:30 +05:30
parent 8bdaaed839
commit 8d9c02f66f
7 changed files with 42 additions and 26 deletions

View File

@ -1 +0,0 @@
vn-ki@this.1316:1557033979

View File

@ -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

View File

@ -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()

View File

@ -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):

View File

@ -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

View File

@ -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

View File

@ -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)]