Fixes for gevent/gdrive

pull/160/merge
OzzieIsaacs 7 years ago
parent 907a2eca68
commit 0e0e72fb71

@ -11,19 +11,23 @@ sys.path.append(os.path.join(base_path, 'cps'))
sys.path.append(os.path.join(base_path, 'vendor')) sys.path.append(os.path.join(base_path, 'vendor'))
from cps import web from cps import web
from tornado.wsgi import WSGIContainer try:
from tornado.httpserver import HTTPServer from gevent.wsgi import WSGIServer
from tornado.ioloop import IOLoop gevent_present = True
from gevent.wsgi import WSGIServer except ImportError:
from tornado.wsgi import WSGIContainer
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
gevent_present = False
if __name__ == '__main__': if __name__ == '__main__':
if web.ub.DEVELOPMENT: if web.ub.DEVELOPMENT:
web.app.run(host="0.0.0.0", port=web.ub.config.config_port, debug=True) web.app.run(host="0.0.0.0", port=web.ub.config.config_port, debug=True)
else: else:
try: if gevent_present:
web.app.logger.info('Attempting to start gevent') web.app.logger.info('Attempting to start gevent')
web.start_gevent() web.start_gevent()
except ImportError: else:
web.app.logger.info('Falling back to Tornado') web.app.logger.info('Falling back to Tornado')
http_server = HTTPServer(WSGIContainer(web.app)) http_server = HTTPServer(WSGIContainer(web.app))
http_server.listen(web.ub.config.config_port) http_server.listen(web.ub.config.config_port)

@ -1,6 +1,7 @@
try: try:
from pydrive.auth import GoogleAuth from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive from pydrive.drive import GoogleDrive
from apiclient import errors
except ImportError: except ImportError:
pass pass
import os, time import os, time
@ -12,7 +13,6 @@ from sqlalchemy import exc
from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import * from sqlalchemy.orm import *
from apiclient import errors
import web import web

@ -7,6 +7,7 @@
<label for="config_calibre_dir">{{_('Location of Calibre database')}}</label> <label for="config_calibre_dir">{{_('Location of Calibre database')}}</label>
<input type="text" class="form-control" name="config_calibre_dir" id="config_calibre_dir" value="{% if content.config_calibre_dir != None %}{{ content.config_calibre_dir }}{% endif %}" autocomplete="off"> <input type="text" class="form-control" name="config_calibre_dir" id="config_calibre_dir" value="{% if content.config_calibre_dir != None %}{{ content.config_calibre_dir }}{% endif %}" autocomplete="off">
</div> </div>
{% if gdrive %}
<div class="form-group required"> <div class="form-group required">
<input type="checkbox" id="config_use_google_drive" name="config_use_google_drive" {% if content.config_use_google_drive %}checked{% endif %} > <input type="checkbox" id="config_use_google_drive" name="config_use_google_drive" {% if content.config_use_google_drive %}checked{% endif %} >
<label for="config_use_google_drive">{{_('Use google drive?')}}</label> <label for="config_use_google_drive">{{_('Use google drive?')}}</label>
@ -46,6 +47,7 @@
</div> </div>
{% endif %} {% endif %}
</div> </div>
{% endif %}
<div class="form-group"> <div class="form-group">
<label for="config_port">{{_('Server Port')}}</label> <label for="config_port">{{_('Server Port')}}</label>
<input type="number" min="1" max="65535" class="form-control" name="config_port" id="config_port" value="{% if content.config_port != None %}{{ content.config_port }}{% endif %}" autocomplete="off" required> <input type="number" min="1" max="65535" class="form-control" name="config_port" id="config_port" value="{% if content.config_port != None %}{{ content.config_port }}{% endif %}" autocomplete="off" required>

@ -187,7 +187,6 @@ class Anonymous(AnonymousUserMixin, UserBase):
self.role = data.role self.role = data.role
self.sidebar_view = data.sidebar_view self.sidebar_view = data.sidebar_view
self.default_language = data.default_language self.default_language = data.default_language
self.default_language = data.default_language
self.locale = data.locale self.locale = data.locale
self.anon_browse = settings.config_anonbrowse self.anon_browse = settings.config_anonbrowse

@ -11,9 +11,8 @@ 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, send_file, Markup, \ make_response, g, flash, abort, Markup, stream_with_context
stream_with_context
from flask import __version__ as flaskVersion from flask import __version__ as flaskVersion
import ub import ub
from ub import config from ub import config
@ -26,7 +25,7 @@ from sqlalchemy.exc import IntegrityError
from sqlalchemy import __version__ as sqlalchemyVersion 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_principal import Principal, Identity, AnonymousIdentity, identity_changed from flask_principal import Principal
from flask_principal import __version__ as flask_principalVersion from flask_principal 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 _
@ -1266,16 +1265,6 @@ def stats():
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"))
#@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") @app.route("/gdrive/authenticate")
@login_required @login_required
@admin_required @admin_required
@ -1320,7 +1309,7 @@ def revoke_watch_gdrive():
if last_watch_response: if last_watch_response:
try: try:
response=gdriveutils.stopChannel(Gdrive.Instance().drive, last_watch_response['id'], last_watch_response['resourceId']) response=gdriveutils.stopChannel(Gdrive.Instance().drive, last_watch_response['id'], last_watch_response['resourceId'])
except HttpError, e: except HttpError:
pass pass
settings = ub.session.query(ub.Settings).first() settings = ub.session.query(ub.Settings).first()
settings.config_google_drive_watch_changes_response=None 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) logging.getLogger("book_formats").setLevel(config.config_log_level)
except e: except e:
flash(e, category="error") 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")) title=_(u"Basic Configuration"))
if db_change: if db_change:
reload(db) reload(db)
if not db.setup_db(): if not db.setup_db():
flash(_(u'DB location is not valid, please enter correct path'), category="error") 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")) title=_(u"Basic Configuration"))
if reboot_required: if reboot_required:
# db.engine.dispose() # ToDo verify correct # db.engine.dispose() # ToDo verify correct
@ -2136,7 +2125,7 @@ def configuration_helper(origin):
if origin: if origin:
success = True success = True
return render_title_template("config_edit.html", origin=origin, success=success, content=config, 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")) 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(): elif "show_best_rated" not in to_save and content.show_best_rated_books():
content.sidebar_view -= ub.SIDEBAR_BEST_RATED 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 content.sidebar_view += ub.SIDEBAR_READ_AND_UNREAD
elif "show_read_and_unread" not in to_save and content.show_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(): if "show_author" in to_save and not content.show_author():
content.sidebar_view += ub.SIDEBAR_AUTHOR content.sidebar_view += ub.SIDEBAR_AUTHOR

@ -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

@ -3,23 +3,10 @@ Flask-Babel==0.11.1
Flask-Login>=0.3.2 Flask-Login>=0.3.2
Flask-Principal>=0.3.2 Flask-Principal>=0.3.2
Flask>=0.11 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 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 PyPDF2==1.26.0
pytz>=2016.10 pytz>=2016.10
PyYAML==3.12
requests>=2.11.1 requests>=2.11.1
rsa==3.4.2
six==1.10.0
SQLAlchemy>=0.8.4 SQLAlchemy>=0.8.4
tornado>=4.1 tornado>=4.1
uritemplate==3.0.0
Wand>=0.4.4 Wand>=0.4.4
Loading…
Cancel
Save