#!/usr/bin/env python3 from flask import Flask, jsonify, render_template, Response from mimetypes import types_map as mimetypes from zipfile import ZipFile import logging import os import sys import webbrowser import werkzeug.exceptions as exceptions # disable access log log = logging.getLogger('werkzeug') log.setLevel(logging.ERROR) # disable flask startup message os.environ['WERKZEUG_RUN_MAIN'] = 'true' mimetypes['.webp'] = 'image/webp' archive = ZipFile(sys.argv[1], 'r') app = Flask(__name__, static_folder='frontend/dist/static', template_folder='frontend/dist') # kind of redundant, but avoids returning 200 if page does not exist @app.route('/') @app.route('/series/0') @app.route('/volume/0') def serve_app(**kwargs): return render_template('index.html') @app.route('/api/volume/0') def get_volume_info(): return jsonify({ 'pages': len(archive.filelist), 'series': 0, 'title': sys.argv[1] }) @app.route('/api/volume/0/page/') def get_volume_page(page_number): try: page = archive.filelist[page_number - 1] except IndexError: raise exceptions.NotFound() from None mimetype = mimetypes[os.path.splitext(page.filename)[1]] return Response(archive.read(page.filename), mimetype=mimetype) if __name__ == '__main__': webbrowser.open('http://localhost:5051/volume/0') app.run(host='127.0.0.1', port=5051)