mirror of
				https://github.com/RicterZ/nhentai.git
				synced 2025-11-04 02:50:55 +01:00 
			
		
		
		
	Merge pull request #5 from navrudh/master
Python3 compatablility and new Singleton implementation
This commit is contained in:
		@@ -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
 | 
			
		||||
		Reference in New Issue
	
	Block a user