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 time
import sys
import os
import click
import logging
from .exceptions import AnimeDLError
from anime_downloader.sites.exceptions import AnimeDLError
from anime_downloader import util
class BaseAnime():
sitename = ''
title = ''
QUALITIES = None
_episodeClass = None
_episodeClass = object
def __init__(self, url, quality='720p'):
@ -26,7 +29,7 @@ class BaseAnime():
if quality in self.QUALITIES:
self.quality = quality
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')
self.getEpisodes()
@ -88,9 +91,16 @@ class BaseEpisode:
def getData(self):
raise NotImplementedError
def download(self, force=False):
def download(self, force=False, path=None):
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)
total_size = int(r.headers['Content-length'])
@ -114,18 +124,5 @@ class BaseEpisode:
if chunk:
f.write(chunk)
downloaded += chunksize
write_status((downloaded), (total_size),
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()
util.write_status((downloaded), (total_size),
start_time)

View File

@ -1,5 +1,5 @@
from .anime import BaseAnime, BaseEpisode
from .exceptions import AnimeDLError, URLError, NotFoundError
from anime_downloader.sites.anime import BaseAnime, BaseEpisode
from anime_downloader.sites.exceptions import AnimeDLError, URLError, NotFoundError
import json

View File

@ -1,4 +1,6 @@
import logging
import sys
import time
def setup_logger(log_level):
if log_level == 'DEBUG':
@ -10,3 +12,16 @@ def setup_logger(log_level):
level=logging.getLevelName(log_level),
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')