|
|
@ -4,8 +4,9 @@ import mimetypes
|
|
|
|
import logging
|
|
|
|
import logging
|
|
|
|
from logging.handlers import RotatingFileHandler
|
|
|
|
from logging.handlers import RotatingFileHandler
|
|
|
|
import textwrap
|
|
|
|
import textwrap
|
|
|
|
from flask import Flask, render_template, session, request, Response, redirect, url_for, send_from_directory, \
|
|
|
|
from flask import Flask, render_template, request, Response, redirect, url_for, send_from_directory, \
|
|
|
|
make_response, g, flash, abort
|
|
|
|
make_response, g, flash, abort
|
|
|
|
|
|
|
|
from flask import __version__ as flaskVersion
|
|
|
|
import ub
|
|
|
|
import ub
|
|
|
|
from ub import config
|
|
|
|
from ub import config
|
|
|
|
import helper
|
|
|
|
import helper
|
|
|
@ -14,9 +15,12 @@ import errno
|
|
|
|
from sqlalchemy.sql.expression import func
|
|
|
|
from sqlalchemy.sql.expression import func
|
|
|
|
from sqlalchemy.sql.expression import false
|
|
|
|
from sqlalchemy.sql.expression import false
|
|
|
|
from sqlalchemy.exc import IntegrityError
|
|
|
|
from sqlalchemy.exc import IntegrityError
|
|
|
|
|
|
|
|
from sqlalchemy import __version__ as sqlalchemyVersion
|
|
|
|
from math import ceil
|
|
|
|
from math import ceil
|
|
|
|
from flask_login import LoginManager, login_user, logout_user, login_required, current_user
|
|
|
|
from flask_login import LoginManager, login_user, logout_user, login_required, current_user
|
|
|
|
|
|
|
|
from flask_login import __version__ as flask_loginVersion
|
|
|
|
from flask_principal import Principal, Identity, AnonymousIdentity, identity_changed
|
|
|
|
from flask_principal import Principal, Identity, AnonymousIdentity, identity_changed
|
|
|
|
|
|
|
|
from flask_login import __version__ as flask_principalVersion
|
|
|
|
from flask_babel import Babel
|
|
|
|
from flask_babel import Babel
|
|
|
|
from flask_babel import gettext as _
|
|
|
|
from flask_babel import gettext as _
|
|
|
|
import requests
|
|
|
|
import requests
|
|
|
@ -24,6 +28,7 @@ import zipfile
|
|
|
|
from werkzeug.security import generate_password_hash, check_password_hash
|
|
|
|
from werkzeug.security import generate_password_hash, check_password_hash
|
|
|
|
from babel import Locale as LC
|
|
|
|
from babel import Locale as LC
|
|
|
|
from babel import negotiate_locale
|
|
|
|
from babel import negotiate_locale
|
|
|
|
|
|
|
|
from babel import __version__ as babelVersion
|
|
|
|
from babel.dates import format_date
|
|
|
|
from babel.dates import format_date
|
|
|
|
from functools import wraps
|
|
|
|
from functools import wraps
|
|
|
|
import base64
|
|
|
|
import base64
|
|
|
@ -32,16 +37,16 @@ import json
|
|
|
|
import urllib
|
|
|
|
import urllib
|
|
|
|
import datetime
|
|
|
|
import datetime
|
|
|
|
from iso639 import languages as isoLanguages
|
|
|
|
from iso639 import languages as isoLanguages
|
|
|
|
|
|
|
|
from iso639 import __version__ as iso639Version
|
|
|
|
from uuid import uuid4
|
|
|
|
from uuid import uuid4
|
|
|
|
import os.path
|
|
|
|
import os.path
|
|
|
|
import sys
|
|
|
|
import sys
|
|
|
|
import subprocess
|
|
|
|
import subprocess
|
|
|
|
import re
|
|
|
|
import re
|
|
|
|
import db
|
|
|
|
import db
|
|
|
|
import thread
|
|
|
|
|
|
|
|
from shutil import move, copyfile
|
|
|
|
from shutil import move, copyfile
|
|
|
|
from tornado.ioloop import IOLoop
|
|
|
|
from tornado.ioloop import IOLoop
|
|
|
|
|
|
|
|
from tornado import version as tornadoVersion
|
|
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
try:
|
|
|
|
from wand.image import Image
|
|
|
|
from wand.image import Image
|
|
|
@ -1042,6 +1047,15 @@ def stats():
|
|
|
|
if re.search('Amazon kindlegen\(', lines):
|
|
|
|
if re.search('Amazon kindlegen\(', lines):
|
|
|
|
versions['KindlegenVersion'] = lines
|
|
|
|
versions['KindlegenVersion'] = lines
|
|
|
|
versions['PythonVersion'] = sys.version
|
|
|
|
versions['PythonVersion'] = sys.version
|
|
|
|
|
|
|
|
versions['babel'] = babelVersion
|
|
|
|
|
|
|
|
versions['sqlalchemy'] = sqlalchemyVersion
|
|
|
|
|
|
|
|
versions['flask'] = flaskVersion
|
|
|
|
|
|
|
|
versions['flasklogin'] = flask_loginVersion
|
|
|
|
|
|
|
|
versions['flask_principal'] = flask_principalVersion
|
|
|
|
|
|
|
|
versions['tornado'] = tornadoVersion
|
|
|
|
|
|
|
|
versions['iso639'] = iso639Version
|
|
|
|
|
|
|
|
versions['requests'] = requests.__version__
|
|
|
|
|
|
|
|
|
|
|
|
return render_title_template('stats.html', bookcounter=counter, authorcounter=authors, versions=versions,
|
|
|
|
return render_title_template('stats.html', bookcounter=counter, authorcounter=authors, versions=versions,
|
|
|
|
categorycounter=categorys, seriecounter=series, title=_(u"Statistics"))
|
|
|
|
categorycounter=categorys, seriecounter=series, title=_(u"Statistics"))
|
|
|
|
|
|
|
|
|
|
|
@ -1796,6 +1810,8 @@ def edit_mailsettings():
|
|
|
|
category="success")
|
|
|
|
category="success")
|
|
|
|
else:
|
|
|
|
else:
|
|
|
|
flash(_(u"There was an error sending the Test E-Mail: %(res)s", res=result), category="error")
|
|
|
|
flash(_(u"There was an error sending the Test E-Mail: %(res)s", res=result), category="error")
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
|
|
|
flash(_(u"E-Mail settings updated"), category="success")
|
|
|
|
return render_title_template("email_edit.html", content=content, title=_(u"Edit mail settings"))
|
|
|
|
return render_title_template("email_edit.html", content=content, title=_(u"Edit mail settings"))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|