mirror of
https://github.com/RicterZ/nhentai.git
synced 2025-04-19 18:31:24 +02:00
Merge pull request #5 from navrudh/master
Python3 compatablility and new Singleton implementation
This commit is contained in:
commit
8442f00c6c
@ -6,10 +6,13 @@ language: python
|
||||
python:
|
||||
- 2.7
|
||||
- 2.6
|
||||
- 3.3
|
||||
- 3.4
|
||||
- 3.5
|
||||
|
||||
install:
|
||||
- python setup.py install
|
||||
|
||||
script:
|
||||
- nhentai --search umaru
|
||||
- nhentai --ids=152503,146134 -t 10 --download --path=/tmp/
|
||||
- nhentai --ids=152503,146134 -t 10 --download --path=/tmp/
|
||||
|
@ -1,3 +1,3 @@
|
||||
__version__ = '0.1.5'
|
||||
__version__ = '0.2.0'
|
||||
__author__ = 'Ricter'
|
||||
__email__ = 'ricterzheng@gmail.com'
|
||||
|
@ -1,14 +1,13 @@
|
||||
# coding: utf-8
|
||||
from __future__ import print_function
|
||||
from optparse import OptionParser
|
||||
from logger import logger
|
||||
try:
|
||||
from itertools import ifilter as filter
|
||||
except ImportError:
|
||||
pass
|
||||
|
||||
|
||||
import constant
|
||||
import nhentai.constant as constant
|
||||
from nhentai.logger import logger
|
||||
|
||||
|
||||
def banner():
|
||||
|
@ -1,11 +1,12 @@
|
||||
#!/usr/bin/env python2.7
|
||||
# coding: utf-8
|
||||
import signal
|
||||
from cmdline import cmd_parser, banner
|
||||
from parser import doujinshi_parser, search_parser, print_doujinshi
|
||||
from doujinshi import Doujinshi
|
||||
from downloader import Downloader
|
||||
from logger import logger
|
||||
|
||||
from nhentai.cmdline import cmd_parser, banner
|
||||
from nhentai.parser import doujinshi_parser, search_parser, print_doujinshi
|
||||
from nhentai.doujinshi import Doujinshi
|
||||
from nhentai.downloader import Downloader
|
||||
from nhentai.logger import logger
|
||||
|
||||
|
||||
def main():
|
||||
|
@ -1,8 +1,10 @@
|
||||
# coding: utf-8
|
||||
from __future__ import print_function
|
||||
from tabulate import tabulate
|
||||
from constant import DETAIL_URL, IMAGE_URL
|
||||
from logger import logger
|
||||
from builtins import range
|
||||
|
||||
from nhentai.constant import DETAIL_URL, IMAGE_URL
|
||||
from nhentai.logger import logger
|
||||
|
||||
|
||||
class DoujinshiInfo(dict):
|
||||
@ -47,7 +49,7 @@ class Doujinshi(object):
|
||||
logger.info('Start download doujinshi: %s' % self.name)
|
||||
if self.downloader:
|
||||
download_queue = []
|
||||
for i in xrange(1, self.pages + 1):
|
||||
for i in range(1, self.pages + 1):
|
||||
download_queue.append('%s/%d/%d.%s' % (IMAGE_URL, int(self.img_id), i, self.ext))
|
||||
self.downloader.download(download_queue, self.id)
|
||||
else:
|
||||
|
@ -1,19 +1,19 @@
|
||||
# coding: utf-8
|
||||
from builtins import str as text
|
||||
import os
|
||||
import requests
|
||||
import threadpool
|
||||
from urlparse import urlparse
|
||||
from logger import logger
|
||||
from parser import request
|
||||
try:
|
||||
from urllib.parse import urlparse
|
||||
except ImportError:
|
||||
from urlparse import urlparse
|
||||
|
||||
from nhentai.logger import logger
|
||||
from nhentai.parser import request
|
||||
from nhentai.utils import Singleton
|
||||
|
||||
|
||||
class Downloader(object):
|
||||
_instance = None
|
||||
|
||||
def __new__(cls, *args, **kwargs):
|
||||
if not cls._instance:
|
||||
cls._instance = super(Downloader, cls).__new__(cls, *args, **kwargs)
|
||||
return cls._instance
|
||||
class Downloader(Singleton):
|
||||
|
||||
def __init__(self, path='', thread=1, timeout=30):
|
||||
if not isinstance(thread, (int, )) or thread < 1 or thread > 10:
|
||||
@ -54,7 +54,7 @@ class Downloader(object):
|
||||
logger.log(15, '{0} download successfully'.format(result))
|
||||
|
||||
def download(self, queue, folder=''):
|
||||
if not isinstance(folder, (str, unicode)):
|
||||
if not isinstance(folder, (text)):
|
||||
folder = str(folder)
|
||||
|
||||
if self.path:
|
||||
|
@ -1,4 +1,3 @@
|
||||
import logging
|
||||
#
|
||||
# Copyright (C) 2010-2012 Vinay Sajip. All rights reserved. Licensed under the new BSD license.
|
||||
#
|
||||
|
@ -1,12 +1,14 @@
|
||||
# coding: utf-8
|
||||
from __future__ import print_function
|
||||
|
||||
from bs4 import BeautifulSoup
|
||||
import re
|
||||
import requests
|
||||
from bs4 import BeautifulSoup
|
||||
import constant
|
||||
from logger import logger
|
||||
from tabulate import tabulate
|
||||
|
||||
import nhentai.constant as constant
|
||||
from nhentai.logger import logger
|
||||
|
||||
|
||||
def request(method, url, **kwargs):
|
||||
if not hasattr(requests, method):
|
||||
|
10
nhentai/utils.py
Normal file
10
nhentai/utils.py
Normal file
@ -0,0 +1,10 @@
|
||||
# coding: utf-8
|
||||
class _Singleton(type):
|
||||
""" A metaclass that creates a Singleton base class when called. """
|
||||
_instances = {}
|
||||
def __call__(cls, *args, **kwargs):
|
||||
if cls not in cls._instances:
|
||||
cls._instances[cls] = super(_Singleton, cls).__call__(*args, **kwargs)
|
||||
return cls._instances[cls]
|
||||
|
||||
class Singleton(_Singleton('SingletonMeta', (object,), {})): pass
|
@ -2,3 +2,4 @@ requests>=2.5.0
|
||||
BeautifulSoup4>=4.0.0
|
||||
threadpool>=1.2.7
|
||||
tabulate>=0.7.5
|
||||
future>=0.15.2
|
Loading…
x
Reference in New Issue
Block a user