diff --git a/cps.py b/cps.py
index 373e9432..180be500 100755
--- a/cps.py
+++ b/cps.py
@@ -11,19 +11,23 @@ sys.path.append(os.path.join(base_path, 'cps'))
sys.path.append(os.path.join(base_path, 'vendor'))
from cps import web
-from tornado.wsgi import WSGIContainer
-from tornado.httpserver import HTTPServer
-from tornado.ioloop import IOLoop
-from gevent.wsgi import WSGIServer
+try:
+ from gevent.wsgi import WSGIServer
+ gevent_present = True
+except ImportError:
+ from tornado.wsgi import WSGIContainer
+ from tornado.httpserver import HTTPServer
+ from tornado.ioloop import IOLoop
+ gevent_present = False
if __name__ == '__main__':
if web.ub.DEVELOPMENT:
web.app.run(host="0.0.0.0", port=web.ub.config.config_port, debug=True)
else:
- try:
+ if gevent_present:
web.app.logger.info('Attempting to start gevent')
web.start_gevent()
- except ImportError:
+ else:
web.app.logger.info('Falling back to Tornado')
http_server = HTTPServer(WSGIContainer(web.app))
http_server.listen(web.ub.config.config_port)
diff --git a/cps/gdriveutils.py b/cps/gdriveutils.py
index 5cf52307..55341419 100644
--- a/cps/gdriveutils.py
+++ b/cps/gdriveutils.py
@@ -1,6 +1,7 @@
try:
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
+ from apiclient import errors
except ImportError:
pass
import os, time
@@ -12,7 +13,6 @@ from sqlalchemy import exc
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import *
-from apiclient import errors
import web
diff --git a/cps/templates/config_edit.html b/cps/templates/config_edit.html
index fc002801..62a27245 100644
--- a/cps/templates/config_edit.html
+++ b/cps/templates/config_edit.html
@@ -7,6 +7,7 @@
+ {% if gdrive %}
@@ -46,6 +47,7 @@
{% endif %}
+ {% endif %}
diff --git a/cps/ub.py b/cps/ub.py
index f7ba2fed..44a3808d 100644
--- a/cps/ub.py
+++ b/cps/ub.py
@@ -187,7 +187,6 @@ class Anonymous(AnonymousUserMixin, UserBase):
self.role = data.role
self.sidebar_view = data.sidebar_view
self.default_language = data.default_language
- self.default_language = data.default_language
self.locale = data.locale
self.anon_browse = settings.config_anonbrowse
diff --git a/cps/web.py b/cps/web.py
index 4188afdd..6855f84d 100755
--- a/cps/web.py
+++ b/cps/web.py
@@ -11,9 +11,8 @@ import mimetypes
import logging
from logging.handlers import RotatingFileHandler
import textwrap
-from flask import Flask, render_template, session, request, Response, redirect, url_for, send_from_directory, \
- make_response, g, flash, abort, send_file, Markup, \
- stream_with_context
+from flask import Flask, render_template, request, Response, redirect, url_for, send_from_directory, \
+ make_response, g, flash, abort, Markup, stream_with_context
from flask import __version__ as flaskVersion
import ub
from ub import config
@@ -26,7 +25,7 @@ from sqlalchemy.exc import IntegrityError
from sqlalchemy import __version__ as sqlalchemyVersion
from math import ceil
from flask_login import LoginManager, login_user, logout_user, login_required, current_user
-from flask_principal import Principal, Identity, AnonymousIdentity, identity_changed
+from flask_principal import Principal
from flask_principal import __version__ as flask_principalVersion
from flask_babel import Babel
from flask_babel import gettext as _
@@ -1266,16 +1265,6 @@ def stats():
return render_title_template('stats.html', bookcounter=counter, authorcounter=authors, versions=versions,
categorycounter=categorys, seriecounter=series, title=_(u"Statistics"))
-
-#@app.route("/load_gdrive")
-#@login_required
-#@admin_required
-#def load_all_gdrive_folder_ids():
-# books=db.session.query(db.Books).all()
-# for book in books:
-# gdriveutils.getFolderId(book.path, Gdrive.Instance().drive)
-# return
-
@app.route("/gdrive/authenticate")
@login_required
@admin_required
@@ -1320,7 +1309,7 @@ def revoke_watch_gdrive():
if last_watch_response:
try:
response=gdriveutils.stopChannel(Gdrive.Instance().drive, last_watch_response['id'], last_watch_response['resourceId'])
- except HttpError, e:
+ except HttpError:
pass
settings = ub.session.query(ub.Settings).first()
settings.config_google_drive_watch_changes_response=None
@@ -2116,13 +2105,13 @@ def configuration_helper(origin):
logging.getLogger("book_formats").setLevel(config.config_log_level)
except e:
flash(e, category="error")
- return render_title_template("config_edit.html", content=config, origin=origin,
+ return render_title_template("config_edit.html", content=config, origin=origin, gdrive=gdrive_support,
title=_(u"Basic Configuration"))
if db_change:
reload(db)
if not db.setup_db():
flash(_(u'DB location is not valid, please enter correct path'), category="error")
- return render_title_template("config_edit.html", content=config, origin=origin,
+ return render_title_template("config_edit.html", content=config, origin=origin, gdrive=gdrive_support,
title=_(u"Basic Configuration"))
if reboot_required:
# db.engine.dispose() # ToDo verify correct
@@ -2136,7 +2125,7 @@ def configuration_helper(origin):
if origin:
success = True
return render_title_template("config_edit.html", origin=origin, success=success, content=config,
- show_authenticate_google_drive=not is_gdrive_ready(),
+ show_authenticate_google_drive=not is_gdrive_ready(), gdrive=gdrive_support,
title=_(u"Basic Configuration"))
@@ -2328,10 +2317,10 @@ def edit_user(user_id):
elif "show_best_rated" not in to_save and content.show_best_rated_books():
content.sidebar_view -= ub.SIDEBAR_BEST_RATED
- if "show_read_and_unread" in to_save:
+ if "show_read_and_unread" in to_save and not content.show_read_and_unread():
content.sidebar_view += ub.SIDEBAR_READ_AND_UNREAD
elif "show_read_and_unread" not in to_save and content.show_read_and_unread():
- content.sidebar_view += ub.SIDEBAR_READ_AND_UNREAD
+ content.sidebar_view -= ub.SIDEBAR_READ_AND_UNREAD
if "show_author" in to_save and not content.show_author():
content.sidebar_view += ub.SIDEBAR_AUTHOR
diff --git a/optional-requirements.txt b/optional-requirements.txt
new file mode 100644
index 00000000..71c7b4ea
--- /dev/null
+++ b/optional-requirements.txt
@@ -0,0 +1,13 @@
+gevent==1.2.1
+google-api-python-client==1.6.1
+greenlet==0.4.12
+httplib2==0.9.2
+lxml==3.7.2
+oauth2client==4.0.0
+pyasn1-modules==0.0.8
+pyasn1==0.1.9
+PyDrive==1.3.1
+PyYAML==3.12
+rsa==3.4.2
+six==1.10.0
+uritemplate==3.0.0
diff --git a/requirements.txt b/requirements.txt
index 8670a2f9..5678ef5e 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -3,23 +3,10 @@ Flask-Babel==0.11.1
Flask-Login>=0.3.2
Flask-Principal>=0.3.2
Flask>=0.11
-gevent==1.2.1
-google-api-python-client==1.6.1
-greenlet==0.4.12
-httplib2==0.9.2
iso-639>=0.4.5
-lxml==3.7.2
-oauth2client==4.0.0
-pyasn1-modules==0.0.8
-pyasn1==0.1.9
-PyDrive==1.3.1
PyPDF2==1.26.0
pytz>=2016.10
-PyYAML==3.12
requests>=2.11.1
-rsa==3.4.2
-six==1.10.0
SQLAlchemy>=0.8.4
tornado>=4.1
-uritemplate==3.0.0
Wand>=0.4.4
\ No newline at end of file