Add tests and travis
parent
de38367140
commit
e8eca19920
|
@ -0,0 +1,15 @@
|
||||||
|
language: python
|
||||||
|
python:
|
||||||
|
- "3.4"
|
||||||
|
- "3.5"
|
||||||
|
- "3.6"
|
||||||
|
- "3.7-dev"
|
||||||
|
before_install:
|
||||||
|
- pip install pytest-cov
|
||||||
|
install:
|
||||||
|
- pip install -e .
|
||||||
|
script:
|
||||||
|
- python -m pytest tests --cov=.
|
||||||
|
after_success:
|
||||||
|
- pip install codecov
|
||||||
|
- codecov
|
|
@ -4,17 +4,20 @@ import json
|
||||||
import re
|
import re
|
||||||
|
|
||||||
import time
|
import time
|
||||||
import sys
|
|
||||||
import os
|
import os
|
||||||
import click
|
import click
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
from .exceptions import AnimeDLError
|
from anime_downloader.sites.exceptions import AnimeDLError
|
||||||
|
from anime_downloader import util
|
||||||
|
|
||||||
|
|
||||||
class BaseAnime():
|
class BaseAnime():
|
||||||
|
sitename = ''
|
||||||
|
title = ''
|
||||||
|
|
||||||
QUALITIES = None
|
QUALITIES = None
|
||||||
_episodeClass = None
|
_episodeClass = object
|
||||||
|
|
||||||
def __init__(self, url, quality='720p'):
|
def __init__(self, url, quality='720p'):
|
||||||
|
|
||||||
|
@ -26,7 +29,7 @@ class BaseAnime():
|
||||||
if quality in self.QUALITIES:
|
if quality in self.QUALITIES:
|
||||||
self.quality = quality
|
self.quality = quality
|
||||||
else:
|
else:
|
||||||
raise AnimeDLError(f'Quality {quality} not found in {self.QUALITIES}')
|
raise AnimeDLError('Quality {0} not found in {1}'.format(quality, self.QUALITIES))
|
||||||
|
|
||||||
logging.info('Extracting episode info from page')
|
logging.info('Extracting episode info from page')
|
||||||
self.getEpisodes()
|
self.getEpisodes()
|
||||||
|
@ -88,9 +91,16 @@ class BaseEpisode:
|
||||||
def getData(self):
|
def getData(self):
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
def download(self, force=False):
|
def download(self, force=False, path=None):
|
||||||
logging.info('Downloading {}'.format(self.title))
|
logging.info('Downloading {}'.format(self.title))
|
||||||
path = './' + self.title
|
|
||||||
|
if path is None:
|
||||||
|
path = './' + self.title
|
||||||
|
elif path.endswith('.mp4'):
|
||||||
|
path = path
|
||||||
|
else:
|
||||||
|
path += self.title
|
||||||
|
|
||||||
r = requests.get(self.stream_url, stream=True)
|
r = requests.get(self.stream_url, stream=True)
|
||||||
|
|
||||||
total_size = int(r.headers['Content-length'])
|
total_size = int(r.headers['Content-length'])
|
||||||
|
@ -114,18 +124,5 @@ class BaseEpisode:
|
||||||
if chunk:
|
if chunk:
|
||||||
f.write(chunk)
|
f.write(chunk)
|
||||||
downloaded += chunksize
|
downloaded += chunksize
|
||||||
write_status((downloaded), (total_size),
|
util.write_status((downloaded), (total_size),
|
||||||
start_time)
|
start_time)
|
||||||
|
|
||||||
|
|
||||||
def write_status(downloaded, total_size, start_time):
|
|
||||||
elapsed_time = time.time()-start_time
|
|
||||||
rate = (downloaded/1024)/elapsed_time
|
|
||||||
downloaded = float(downloaded)/1048576
|
|
||||||
total_size = float(total_size)/1048576
|
|
||||||
|
|
||||||
status = 'Downloaded: {0:.2f}MB/{1:.2f}MB, Rate: {2:.2f}KB/s'.format(
|
|
||||||
downloaded, total_size, rate)
|
|
||||||
|
|
||||||
sys.stdout.write("\r" + status + " "*5 + "\r")
|
|
||||||
sys.stdout.flush()
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
from .anime import BaseAnime, BaseEpisode
|
from anime_downloader.sites.anime import BaseAnime, BaseEpisode
|
||||||
from .exceptions import AnimeDLError, URLError, NotFoundError
|
from anime_downloader.sites.exceptions import AnimeDLError, URLError, NotFoundError
|
||||||
|
|
||||||
|
|
||||||
import json
|
import json
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
import logging
|
import logging
|
||||||
|
import sys
|
||||||
|
import time
|
||||||
|
|
||||||
def setup_logger(log_level):
|
def setup_logger(log_level):
|
||||||
if log_level == 'DEBUG':
|
if log_level == 'DEBUG':
|
||||||
|
@ -10,3 +12,16 @@ def setup_logger(log_level):
|
||||||
level=logging.getLevelName(log_level),
|
level=logging.getLevelName(log_level),
|
||||||
format=format
|
format=format
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def write_status(downloaded, total_size, start_time):
|
||||||
|
elapsed_time = time.time()-start_time
|
||||||
|
rate = (downloaded/1024)/elapsed_time
|
||||||
|
downloaded = float(downloaded)/1048576
|
||||||
|
total_size = float(total_size)/1048576
|
||||||
|
|
||||||
|
status = 'Downloaded: {0:.2f}MB/{1:.2f}MB, Rate: {2:.2f}KB/s'.format(
|
||||||
|
downloaded, total_size, rate)
|
||||||
|
|
||||||
|
sys.stdout.write("\r" + status + " "*5 + "\r")
|
||||||
|
sys.stdout.flush()
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
from anime_downloader.sites.nineanime import NineAnime, NineAnimeEpisode
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def anime():
|
||||||
|
return NineAnime('https://www4.9anime.is/watch/erased.kkw/6n069p')
|
||||||
|
|
||||||
|
|
||||||
|
def test_length(anime):
|
||||||
|
assert len(anime) == 12
|
||||||
|
|
||||||
|
|
||||||
|
def test_title(anime):
|
||||||
|
assert anime.title.lower() == 'erased'
|
||||||
|
|
||||||
|
|
||||||
|
def test_episode(anime):
|
||||||
|
episode1 = anime[0]
|
||||||
|
|
||||||
|
assert episode1.title.lower() == 'kametsu erased 01 bd 1080p hi10 flac 26723cf5.mp4'
|
||||||
|
assert episode1.stream_url.endswith('.mp4')
|
Loading…
Reference in New Issue