serve all files without flask
This commit is contained in:
parent
08fac3e131
commit
f2221188ea
5 changed files with 18 additions and 56 deletions
|
@ -19,7 +19,6 @@ import item.person
|
||||||
|
|
||||||
import api
|
import api
|
||||||
|
|
||||||
import item.views
|
|
||||||
import commands
|
import commands
|
||||||
|
|
||||||
#FORMAT = '%(asctime)-15s %(clientip)s %(user)-8s %(message)s'
|
#FORMAT = '%(asctime)-15s %(clientip)s %(user)-8s %(message)s'
|
||||||
|
@ -30,7 +29,6 @@ logging.basicConfig(level=logging.DEBUG)
|
||||||
|
|
||||||
app = Flask('openmedialibrary', static_folder=settings.static_path)
|
app = Flask('openmedialibrary', static_folder=settings.static_path)
|
||||||
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////%s' % settings.db_path
|
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////%s' % settings.db_path
|
||||||
app.register_blueprint(item.views.app)
|
|
||||||
db.init_app(app)
|
db.init_app(app)
|
||||||
|
|
||||||
migrate = Migrate(app, db)
|
migrate = Migrate(app, db)
|
||||||
|
|
|
@ -41,8 +41,9 @@ class EpubHandler(OMLHandler):
|
||||||
self.finish()
|
self.finish()
|
||||||
|
|
||||||
def serve_static(handler, path, mimetype):
|
def serve_static(handler, path, mimetype):
|
||||||
#fixme use static file handler
|
#fixme use static file handler / serve ranges
|
||||||
handler.set_header('Content-Type', mimetype)
|
handler.set_header('Content-Type', mimetype)
|
||||||
|
handler.set_header('Content-Length', str(os.stat(path).st_size))
|
||||||
with open(path) as fd:
|
with open(path) as fd:
|
||||||
handler.write(fd.read())
|
handler.write(fd.read())
|
||||||
handler.finish()
|
handler.finish()
|
||||||
|
@ -61,6 +62,7 @@ class FileHandler(OMLHandler):
|
||||||
mimetype={
|
mimetype={
|
||||||
'epub': 'application/epub+zip',
|
'epub': 'application/epub+zip',
|
||||||
'pdf': 'application/pdf',
|
'pdf': 'application/pdf',
|
||||||
|
'txt': 'text/plain',
|
||||||
}.get(path.split('.')[-1], None)
|
}.get(path.split('.')[-1], None)
|
||||||
return serve_static(self, path, mimetype)
|
return serve_static(self, path, mimetype)
|
||||||
|
|
||||||
|
|
|
@ -1,46 +0,0 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
# vi:si:et:sw=4:sts=4:ts=4
|
|
||||||
from __future__ import division
|
|
||||||
|
|
||||||
from datetime import datetime
|
|
||||||
|
|
||||||
from flask import Blueprint
|
|
||||||
from flask import abort, send_file
|
|
||||||
|
|
||||||
import settings
|
|
||||||
|
|
||||||
from models import Item
|
|
||||||
|
|
||||||
app = Blueprint('item', __name__, static_folder=settings.static_path)
|
|
||||||
|
|
||||||
|
|
||||||
@app.route('/<string:id>/get')
|
|
||||||
@app.route('/<string:id>/txt/')
|
|
||||||
@app.route('/<string:id>/pdf')
|
|
||||||
def get(id):
|
|
||||||
item = Item.get(id)
|
|
||||||
if not item:
|
|
||||||
abort(404)
|
|
||||||
path = item.get_path()
|
|
||||||
mimetype={
|
|
||||||
'epub': 'application/epub+zip',
|
|
||||||
'pdf': 'application/pdf',
|
|
||||||
}.get(path.split('.')[-1], None)
|
|
||||||
return send_file(path, mimetype=mimetype)
|
|
||||||
|
|
||||||
@app.route('/<string:id>/reader/')
|
|
||||||
def reader(id, filename=''):
|
|
||||||
item = Item.get(id)
|
|
||||||
if item.info['extension'] == 'epub':
|
|
||||||
html = 'html/epub.html'
|
|
||||||
elif item.info['extension'] == 'pdf':
|
|
||||||
html = 'html/pdf.html'
|
|
||||||
elif item.info['extension'] == 'txt':
|
|
||||||
html = 'html/txt.html'
|
|
||||||
else:
|
|
||||||
abort(404)
|
|
||||||
item.accessed = datetime.utcnow()
|
|
||||||
item.timesaccessed = (item.timesaccessed or 0) + 1
|
|
||||||
item.update_sort()
|
|
||||||
item.save()
|
|
||||||
return app.send_static_file(html)
|
|
|
@ -3,8 +3,8 @@
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
from tornado.web import StaticFileHandler, Application, FallbackHandler
|
|
||||||
from tornado.wsgi import WSGIContainer
|
from tornado.web import StaticFileHandler, Application
|
||||||
from tornado.httpserver import HTTPServer
|
from tornado.httpserver import HTTPServer
|
||||||
from tornado.ioloop import IOLoop
|
from tornado.ioloop import IOLoop
|
||||||
|
|
||||||
|
@ -17,7 +17,14 @@ import node.server
|
||||||
import oxtornado
|
import oxtornado
|
||||||
|
|
||||||
from item.icons import IconHandler
|
from item.icons import IconHandler
|
||||||
from item.handlers import EpubHandler
|
from item.handlers import EpubHandler, ReaderHandler, FileHandler
|
||||||
|
from item.handlers import OMLHandler, serve_static
|
||||||
|
|
||||||
|
class MainHandler(OMLHandler):
|
||||||
|
|
||||||
|
def get(self, path):
|
||||||
|
path = os.path.join(settings.static_path, 'html/oml.html')
|
||||||
|
serve_static(self, path, 'text/html')
|
||||||
|
|
||||||
def run():
|
def run():
|
||||||
root_dir = os.path.normpath(os.path.join(os.path.abspath(os.path.dirname(__file__)), '..'))
|
root_dir = os.path.normpath(os.path.join(os.path.abspath(os.path.dirname(__file__)), '..'))
|
||||||
|
@ -29,16 +36,17 @@ def run():
|
||||||
'debug': not PID
|
'debug': not PID
|
||||||
}
|
}
|
||||||
|
|
||||||
tr = WSGIContainer(app)
|
|
||||||
|
|
||||||
handlers = [
|
handlers = [
|
||||||
(r'/(favicon.ico)', StaticFileHandler, {'path': static_path}),
|
(r'/(favicon.ico)', StaticFileHandler, {'path': static_path}),
|
||||||
(r'/static/(.*)', StaticFileHandler, {'path': static_path}),
|
(r'/static/(.*)', StaticFileHandler, {'path': static_path}),
|
||||||
(r'/(.*)/epub/(.*)', EpubHandler, dict(app=app)),
|
(r'/(.*)/epub/(.*)', EpubHandler, dict(app=app)),
|
||||||
|
(r'/(.*?)/reader/', ReaderHandler, dict(app=app)),
|
||||||
|
(r'/(.*?)/pdf/', FileHandler, dict(app=app)),
|
||||||
|
(r'/(.*?)/txt/', FileHandler, dict(app=app)),
|
||||||
(r'/(.*)/(cover|preview)(\d*).jpg', IconHandler, dict(app=app)),
|
(r'/(.*)/(cover|preview)(\d*).jpg', IconHandler, dict(app=app)),
|
||||||
(r'/api/', oxtornado.ApiHandler, dict(app=app)),
|
(r'/api/', oxtornado.ApiHandler, dict(app=app)),
|
||||||
(r'/ws', websocket.Handler),
|
(r'/ws', websocket.Handler),
|
||||||
(r".*", FallbackHandler, dict(fallback=tr)),
|
(r"(.*)", MainHandler, dict(app=app)),
|
||||||
]
|
]
|
||||||
|
|
||||||
http_server = HTTPServer(Application(handlers, **options))
|
http_server = HTTPServer(Application(handlers, **options))
|
||||||
|
|
|
@ -4749,7 +4749,7 @@ document.addEventListener('DOMContentLoaded', function webViewerLoad(evt) {
|
||||||
PDFView.initialize();
|
PDFView.initialize();
|
||||||
|
|
||||||
var params = PDFView.parseQueryString(document.location.search.substring(1));
|
var params = PDFView.parseQueryString(document.location.search.substring(1));
|
||||||
var file = params.file || document.location.pathname.replace(/\/reader\//, '/pdf');
|
var file = params.file || document.location.pathname.replace(/\/reader\//, '/pdf/');
|
||||||
|
|
||||||
|
|
||||||
var fileInput = document.createElement('input');
|
var fileInput = document.createElement('input');
|
||||||
|
|
Loading…
Reference in a new issue