Add tests and travis

master
Vishnunarayan K I 2018-05-28 00:29:51 +05:30
parent de38367140
commit e8eca19920
5 changed files with 72 additions and 23 deletions

15
.travis.yml Normal file
View File

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

View File

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

View File

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

View File

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

22
tests/test_nineanime.py Normal file
View File

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