Commit e897109e authored by Dmitry Shelepnev's avatar Dmitry Shelepnev
Browse files

Fix tests error after django-condtance integration

parent eab189e3
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -9,7 +9,6 @@ install:
    - travis_retry pip install -r requirements.txt

script:
    - python manage.py migrate database
    - python manage.py test

#branches:
+15 −14
Original line number Diff line number Diff line
@@ -11,15 +11,16 @@ from django.http import HttpResponse, Http404
from opds_catalog.models import Book, bookshelf
from opds_catalog import settings, utils, opdsdb, fb2parse
import opds_catalog.zipf as zipfile
from constance import config

def Download(request, book_id, zip_flag):
    """ Загрузка файла книги """
    book = Book.objects.get(id=book_id)

    if settings.AUTH and request.user.is_authenticated():
    if config.SOPDS_AUTH and request.user.is_authenticated():
        bookshelf.objects.get_or_create(user=request.user, book=book)

    full_path=os.path.join(settings.ROOT_LIB,book.path)
    full_path=os.path.join(config.SOPDS_ROOT_LIB,book.path)
    
    if book.cat_type==opdsdb.CAT_INP:
        # Убираем из пути INPX файл
@@ -27,7 +28,7 @@ def Download(request, book_id, zip_flag):
        path, inpx_file = os.path.split(inpx_path)
        full_path = os.path.join(path,zip_name)
        
    if settings.TITLE_AS_FILENAME:
    if config.SOPDS_TITLE_AS_FILENAME:
        transname=utils.translit(book.title+'.'+book.format)
    else:
        transname=utils.translit(book.filename)
@@ -98,7 +99,7 @@ def Cover(request, book_id):
    book = Book.objects.get(id=book_id)
    response = HttpResponse()
    c0=0
    full_path=os.path.join(settings.ROOT_LIB,book.path)
    full_path=os.path.join(config.SOPDS_ROOT_LIB,book.path)
    if book.cat_type==opdsdb.CAT_INP:
        # Убираем из пути INPX файл
        inpx_path, zip_name = os.path.split(full_path)
@@ -132,9 +133,9 @@ def Cover(request, book_id):
                c0=0

    if c0==0:
        if os.path.exists(settings.NOCOVER_PATH):
        if os.path.exists(config.SOPDS_NOCOVER_PATH):
            response["Content-Type"]='image/jpeg'
            f=open(settings.NOCOVER_PATH,"rb")
            f=open(config.SOPDS_NOCOVER_PATH,"rb")
            response.write(f.read())
            f.close()
        else:
@@ -149,17 +150,17 @@ def ConvertFB2(request, book_id, convert_type):
    if book.format!='fb2':
        raise Http404

    if settings.AUTH and request.user.is_authenticated():
    if config.SOPDS_AUTH and request.user.is_authenticated():
        bookshelf.objects.get_or_create(user=request.user, book=book)

    full_path=os.path.join(settings.ROOT_LIB,book.path)
    full_path=os.path.join(config.SOPDS_ROOT_LIB,book.path)
    if book.cat_type==opdsdb.CAT_INP:
        # Убираем из пути INPX файл
        inpx_path, zip_name = os.path.split(full_path)
        path, inpx_file = os.path.split(inpx_path)
        full_path = os.path.join(path,zip_name)  
            
    if settings.TITLE_AS_FILENAME:
    if config.SOPDS_TITLE_AS_FILENAME:
        transname=utils.translit(book.title+'.'+book.format)
    else:
        transname=utils.translit(book.filename)      
@@ -170,10 +171,10 @@ def ConvertFB2(request, book_id, convert_type):
    dlfilename="%s.%s"%(n,convert_type)
    
    if convert_type=='epub':
        converter_path=settings.FB2TOEPUB
        converter_path=config.SOPDS_FB2TOEPUB
        content_type='application/epub+zip'
    elif convert_type=='mobi':
        converter_path=settings.FB2TOMOBI
        converter_path=config.SOPDS_FB2TOMOBI
        content_type='application/x-mobipocket-ebook'
    else:
        content_type='application/octet-stream'
@@ -187,11 +188,11 @@ def ConvertFB2(request, book_id, convert_type):
        except FileNotFoundError:
            raise Http404        
        z = zipfile.ZipFile(fz, 'r', allowZip64=True)
        z.extract(book.filename,settings.TEMP_DIR)
        tmp_fb2_path=os.path.join(settings.TEMP_DIR,book.filename)
        z.extract(book.filename,config.SOPDS_TEMP_DIR)
        tmp_fb2_path=os.path.join(config.SOPDS_TEMP_DIR,book.filename)
        file_path=tmp_fb2_path        
        
    tmp_conv_path=os.path.join(settings.TEMP_DIR,dlfilename)
    tmp_conv_path=os.path.join(config.SOPDS_TEMP_DIR,dlfilename)
    popen_args = ("\"%s\" \"%s\" \"%s\""%(converter_path,file_path,tmp_conv_path))
    proc = subprocess.Popen(popen_args, shell=True, stdout=subprocess.PIPE)
    #proc = subprocess.Popen((converter_path.encode('utf8'),file_path.encode('utf8'),tmp_conv_path.encode('utf8')), shell=True, stdout=subprocess.PIPE)
+19 −17
Original line number Diff line number Diff line
@@ -15,11 +15,13 @@ from opds_catalog import settings
from opds_catalog.opds_middleware import BasicAuthMiddleware
from opds_catalog.opds_paginator import Paginator as OPDS_Paginator

from constance import config

class AuthFeed(Feed):
    request = None
    def __call__(self,request,*args,**kwargs):
        self.request = request
        if settings.AUTH:
        if config.SOPDS_AUTH:
            if request.user.is_authenticated():
                return super().__call__(request,*args,**kwargs)
        
@@ -159,16 +161,16 @@ class MainFeed(AuthFeed):
        mainitems = [
                    {"id":1, "title":_("By catalogs"), "link":"opds_catalog:catalogs",
                     "descr": _("Catalogs: %(catalogs)s, books: %(books)s."),"counters":{"catalogs":Counter.objects.get_counter(models.counter_allcatalogs),"books":Counter.objects.get_counter(models.counter_allbooks)}},
                    {"id":2, "title":_("By authors"), "link":("opds_catalog:lang_authors" if settings.ALPHABET_MENU else "opds_catalog:nolang_authors"),
                    {"id":2, "title":_("By authors"), "link":("opds_catalog:lang_authors" if config.SOPDS_ALPHABET_MENU else "opds_catalog:nolang_authors"),
                     "descr": _("Authors: %(authors)s."),"counters":{"authors":Counter.objects.get_counter(models.counter_allauthors)}},
                    {"id":3, "title":_("By titles"), "link":("opds_catalog:lang_books" if settings.ALPHABET_MENU else "opds_catalog:nolang_books"),
                    {"id":3, "title":_("By titles"), "link":("opds_catalog:lang_books" if config.SOPDS_ALPHABET_MENU else "opds_catalog:nolang_books"),
                     "descr": _("Books: %(books)s."),"counters":{"books":Counter.objects.get_counter(models.counter_allbooks)}},
                    {"id":4, "title":_("By genres"), "link":"opds_catalog:genres",
                     "descr": _("Genres: %(genres)s."),"counters":{"genres":Counter.objects.get_counter(models.counter_allgenres)}},
                    {"id":5, "title":_("By series"), "link":("opds_catalog:lang_series" if settings.ALPHABET_MENU else "opds_catalog:nolang_series"),
                    {"id":5, "title":_("By series"), "link":("opds_catalog:lang_series" if config.SOPDS_ALPHABET_MENU else "opds_catalog:nolang_series"),
                     "descr": _("Series: %(series)s."),"counters":{"series":Counter.objects.get_counter(models.counter_allseries)}},
        ]
        if settings.AUTH and self.request.user.is_authenticated():
        if config.SOPDS_AUTH and self.request.user.is_authenticated():
            mainitems += [
                        {"id":6, "title":_("%(username)s Book shelf")%({"username":self.request.user.username}), "link":"opds_catalog:bookshelf",
                         "descr":_("%(username)s books readed: %(bookshelf)s."),"counters":{"bookshelf":bookshelf.objects.filter(user=self.request.user).count(),"username":self.request.user.username}},
@@ -223,7 +225,7 @@ class CatalogsFeed(AuthFeed):
        books_count = books_list.count()
        
        # Получаем результирующий список
        op = OPDS_Paginator(catalogs_count, books_count, page_num, settings.MAXITEMS)
        op = OPDS_Paginator(catalogs_count, books_count, page_num, config.SOPDS_MAXITEMS)
        items = []
        
        for row in catalogs_list[op.d1_first_pos:op.d1_last_pos+1]:
@@ -372,7 +374,7 @@ class SearchBooksFeed(AuthFeed):
    subtitle = settings.SUBTITLE
    
    def title(self, obj):
        return "%s | %s (%s)"%(settings.TITLE,_("Books found"),_("doubles hide") if settings.DOUBLES_HIDE else _("doubles show"))    
        return "%s | %s (%s)"%(settings.TITLE,_("Books found"),_("doubles hide") if config.SOPDS_DOUBLES_HIDE else _("doubles show"))    

    def get_object(self, request, searchtype="m", searchterms=None, searchterms0=None, page=1):   
        if not isinstance(page, int):
@@ -423,7 +425,7 @@ class SearchBooksFeed(AuthFeed):
            books = Book.objects.filter(genres=genre_id).order_by('search_title','-docdate')    
        # Поиск книг на книжной полке            
        elif searchtype == 'u':
            if settings.AUTH:
            if config.SOPDS_AUTH:
                books = Book.objects.filter(bookshelf__user=request.user).order_by('-bookshelf__readtime')
            else:
                books=Book.objects.filter(id=0)  
@@ -439,7 +441,7 @@ class SearchBooksFeed(AuthFeed):
                 
        # Фильтруем дубликаты
        books_count = books.count()
        op = OPDS_Paginator(books_count, 0, page_num,settings.MAXITEMS)
        op = OPDS_Paginator(books_count, 0, page_num,config.SOPDS_MAXITEMS)
        items = []
        
        prev_title = ''
@@ -447,7 +449,7 @@ class SearchBooksFeed(AuthFeed):
        
        # Начаинам анализ с последнего элемента на предидущей странице, чторбы он "вытянул" с этой страницы
        # свои дубликаты если они есть
        summary_DOUBLES_HIDE =  settings.DOUBLES_HIDE and (searchtype != 'd')
        summary_DOUBLES_HIDE =  config.SOPDS_DOUBLES_HIDE and (searchtype != 'd')
        start = op.d1_first_pos if ((op.d1_first_pos==0) or (not summary_DOUBLES_HIDE)) else op.d1_first_pos-1
        finish = op.d1_last_pos
        
@@ -534,9 +536,9 @@ class SearchBooksFeed(AuthFeed):
            opdsEnclosure(reverse("opds_catalog:download", kwargs={"book_id":item['id'],"zip_flag":1}),"application/%s+zip"%item['format'], "http://opds-spec.org/acquisition/open-access"),
            opdsEnclosure(reverse("opds_catalog:cover", kwargs={"book_id":item['id']}),"image/jpeg", "http://opds-spec.org/image"),
        ]
        if (settings.FB2TOEPUB!="") and (item['format']=='fb2'):
        if (config.SOPDS_FB2TOEPUB!="") and (item['format']=='fb2'):
            enclosure += [opdsEnclosure(reverse("opds_catalog:convert", kwargs={"book_id":item['id'],"convert_type":"epub"}),"application/epub+zip","http://opds-spec.org/acquisition/open-access")] 
        if (settings.FB2TOMOBI!="") and (item['format']=='fb2'):
        if (config.SOPDS_FB2TOMOBI!="") and (item['format']=='fb2'):
            enclosure += [opdsEnclosure(reverse("opds_catalog:convert", kwargs={"book_id":item['id'],"convert_type":"mobi"}),"application/mobi","http://opds-spec.org/acquisition/open-access")] 

        return enclosure
@@ -634,7 +636,7 @@ class SearchAuthorsFeed(AuthFeed):
            
        # Создаем результирующее множество
        authors_count = authors.count()
        op = OPDS_Paginator(authors_count, 0, page_num, settings.MAXITEMS)        
        op = OPDS_Paginator(authors_count, 0, page_num, config.SOPDS_MAXITEMS)        
        items = []
        
        for row in authors[op.d1_first_pos:op.d1_last_pos+1]:
@@ -712,7 +714,7 @@ class SearchSeriesFeed(AuthFeed):
        
        # Создаем результирующее множество
        series_count = series.count()
        op = OPDS_Paginator(series_count, 0, page_num, settings.MAXITEMS)        
        op = OPDS_Paginator(series_count, 0, page_num, config.SOPDS_MAXITEMS)        
        items = []
        
        for row in series[op.d1_first_pos:op.d1_last_pos+1]:
@@ -860,7 +862,7 @@ class BooksFeed(AuthFeed):

    def item_link(self, item):
        title_full = len(item.id)<item.l
        if item.cnt>=settings.SPLITITEMS and not title_full:
        if item.cnt>=config.SOPDS_SPLITITEMS and not title_full:
            return reverse("opds_catalog:chars_books", kwargs={"lang_code":self.lang_code,"chars":item.id})
        else:
            return reverse("opds_catalog:searchbooks", \
@@ -918,7 +920,7 @@ class AuthorsFeed(AuthFeed):

    def item_link(self, item):
        last_name_full = len(item.id)<item.l
        if (item.cnt>=settings.SPLITITEMS) and not last_name_full:
        if (item.cnt>=config.SOPDS_SPLITITEMS) and not last_name_full:
            return reverse("opds_catalog:chars_authors", kwargs={"lang_code":self.lang_code,"chars":item.id})
        else:
            return reverse("opds_catalog:searchauthors", \
@@ -976,7 +978,7 @@ class SeriesFeed(AuthFeed):

    def item_link(self, item):
        series_full = len(item.id)<item.l
        if item.cnt>=settings.SPLITITEMS and not series_full:
        if item.cnt>=config.SOPDS_SPLITITEMS and not series_full:
            return reverse("opds_catalog:chars_series", kwargs={"lang_code":self.lang_code,"chars":item.id})
        else:
            return reverse("opds_catalog:searchseries", \
+4 −3
Original line number Diff line number Diff line
@@ -7,7 +7,8 @@ Created on 14 нояб. 2016 г.
# -*- coding: utf-8 -*-
import os
import zipfile
from opds_catalog import settings
#from opds_catalog import settings
from constance import config

sAuthor = 'AUTHOR'
sGenre  = 'GENRE'
@@ -32,8 +33,8 @@ class Inpx:
        self.inpx_itemseparator = ':'
        self.append_callback = append_callback
        self.inpskip_callback = inpskip_callback
        self.TEST_ZIP = settings.INPX_TEST_ZIP
        self.TEST_FILES = settings.INPX_TEST_FILES
        self.TEST_ZIP = config.SOPDS_INPX_TEST_ZIP
        self.TEST_FILES = config.SOPDS_INPX_TEST_FILES
        self.error = 0       
        
    def parse(self):
+17 −16
Original line number Diff line number Diff line
@@ -14,8 +14,7 @@ from opds_catalog.models import Counter
from opds_catalog.sopdscan import opdsScanner
#from opds_catalog.settings import SCANNER_LOG, SCAN_SHED_DAY, SCAN_SHED_DOW, SCAN_SHED_HOUR, SCAN_SHED_MIN, LOGLEVEL, SCANNER_PID
from opds_catalog import settings 


from constance import config

class Command(BaseCommand):
    help = 'Scan Books Collection.'
@@ -26,7 +25,7 @@ class Command(BaseCommand):
        parser.add_argument('--daemon',action='store_true', dest='daemonize', default=False, help='Daemonize server')
        
    def handle(self, *args, **options): 
        self.pidfile = os.path.join(main_settings.BASE_DIR, settings.SCANNER_PID)
        self.pidfile = os.path.join(main_settings.BASE_DIR, config.SOPDS_SCANNER_PID)
        action = options['command']            
        self.logger = logging.getLogger('')
        self.logger.setLevel(logging.DEBUG)
@@ -34,7 +33,7 @@ class Command(BaseCommand):

        if settings.LOGLEVEL!=logging.NOTSET:
            # Создаем обработчик для записи логов в файл
            fh = logging.FileHandler(settings.SCANNER_LOG)
            fh = logging.FileHandler(config.SOPDS_SCANNER_LOG)
            fh.setLevel(settings.LOGLEVEL)
            fh.setFormatter(formatter)
            self.logger.addHandler(fh)
@@ -78,26 +77,28 @@ class Command(BaseCommand):
        Counter.objects.update_known_counters()  
        
    def update_shedule(self):
        self.SCAN_SHED_DAY = settings.SCAN_SHED_DAY
        self.SCAN_SHED_DOW = settings.SCAN_SHED_DOW
        self.SCAN_SHED_HOUR = settings.SCAN_SHED_HOUR
        self.SCAN_SHED_MIN = settings.SCAN_SHED_MIN
        self.SCAN_SHED_DAY = config.SOPDS_SCAN_SHED_DAY
        self.SCAN_SHED_DOW = config.SOPDS_SCAN_SHED_DOW
        self.SCAN_SHED_HOUR = config.SOPDS_SCAN_SHED_HOUR
        self.SCAN_SHED_MIN = config.SOPDS_SCAN_SHED_MIN
        self.stdout.write('Reconfigure scheduled book-scan (min=%s, hour=%s, day_of_week=%s, day=%s).'%(self.SCAN_SHED_MIN,self.SCAN_SHED_HOUR,self.SCAN_SHED_DOW,self.SCAN_SHED_DAY))
        self.sched.reschedule_job('scan', trigger='cron', day=self.SCAN_SHED_DAY, day_of_week=self.SCAN_SHED_DOW, hour=self.SCAN_SHED_HOUR, minute=self.SCAN_SHED_MIN)
    
    def check_settings(self):
        settings.constance_update_shedules()
        if self.SCAN_SHED_MIN==settings.SCAN_SHED_MIN and self.SCAN_SHED_HOUR==settings.SCAN_SHED_HOUR and self.SCAN_SHED_DOW==settings.SCAN_SHED_DOW and self.SCAN_SHED_DAY==settings.SCAN_SHED_DAY:
            return
        settings.constance_update_all()
        if self.SCAN_SHED_MIN==config.SOPDS_SCAN_SHED_MIN and \
           self.SCAN_SHED_HOUR==config.SOPDS_SCAN_SHED_HOUR and \
           self.SCAN_SHED_DOW==config.SOPDS_SCAN_SHED_DOW and \
           self.SCAN_SHED_DAY==config.SOPDS_SCAN_SHED_DAY:
            return
        self.update_shedule()
            
    def start(self):
        writepid(self.pidfile)
        self.SCAN_SHED_DAY = settings.SCAN_SHED_DAY
        self.SCAN_SHED_DOW = settings.SCAN_SHED_DOW
        self.SCAN_SHED_HOUR = settings.SCAN_SHED_HOUR
        self.SCAN_SHED_MIN = settings.SCAN_SHED_MIN
        self.SCAN_SHED_DAY = config.SOPDS_SCAN_SHED_DAY
        self.SCAN_SHED_DOW = config.SOPDS_SCAN_SHED_DOW
        self.SCAN_SHED_HOUR = config.SOPDS_SCAN_SHED_HOUR
        self.SCAN_SHED_MIN = config.SOPDS_SCAN_SHED_MIN
        self.stdout.write('Startup scheduled book-scan (min=%s, hour=%s, day_of_week=%s, day=%s).'%(self.SCAN_SHED_MIN,self.SCAN_SHED_HOUR,self.SCAN_SHED_DOW,self.SCAN_SHED_DAY))
        self.sched = BlockingScheduler()
        self.sched.add_job(self.scan, 'cron', day=self.SCAN_SHED_DAY, day_of_week=self.SCAN_SHED_DOW, hour=self.SCAN_SHED_HOUR, minute=self.SCAN_SHED_MIN, id='scan')
@@ -141,7 +142,7 @@ def daemonize():
    os.umask(0)

    std_in = open("/dev/null", 'r')
    std_out = open(settings.SCANNER_LOG, 'a+')
    std_out = open(config.SOPDS_SCANNER_LOG, 'a+')
    os.dup2(std_in.fileno(), sys.stdin.fileno())
    os.dup2(std_out.fileno(), sys.stdout.fileno())
    os.dup2(std_out.fileno(), sys.stderr.fileno())    
Loading