self-conscious-design
clone your own copy | download snapshot

Snapshots | iceberg

No images in this repository’s iceberg at this time

Inside this repository

app.py
text/x-python

Download raw (2.5 KB)

# -*- coding: utf-8 -*-

import os
import fnmatch
import socket
import commands

from flask import Flask, send_from_directory, render_template, jsonify

# A bit hacky but in this way we seem to be getting the IP address on both Ubuntu and OS X:
try:
    HOST_IP = [ip for ip in socket.gethostbyname_ex(socket.gethostname())[2] if not ip.startswith("127.")][0]
except:
    HOST_IP = commands.getoutput("/sbin/ifconfig").split("\n")[1].split()[1][5:]

PROJECT_PATH = os.path.abspath(os.path.dirname(__file__))
EPUB_DIR = os.path.join(PROJECT_PATH, 'public', 'epub_content')

app = Flask(__name__, static_folder='public', static_url_path='')

@app.route("/")
def list_generated_epubs():
    def find_generated_epubs():
        for i in os.listdir(EPUB_DIR):
            if os.path.isdir(os.path.join(EPUB_DIR, i)):
                if os.path.exists(os.path.join(EPUB_DIR, i, "%s.epub" % i)):
                    yield {  'name': i, 'link' : "http://%s:5000/epub_content/%s/%s.epub" % (HOST_IP, i, i) }
                    
    generated_epubs = list(find_generated_epubs())
    address = "http://%s:5000/" % HOST_IP
    return render_template('generated_epubs.html', generated_epubs=generated_epubs, address=address)

@app.route("/index.html")
def static_home():
    return send_from_directory(app.static_folder, 'index.html')

@app.route("/epub_content/epub_library.json")
def epub_titles():
    """
    This is a list of available eBooks.
    
    We look in the library folder to determine which folders look like eBooks,
    so we do not have to update this by hand.
    """
    obj = { "library_epubs" : [] }

    def find_package(path):
        """
        Inside an epub folder, find the location of the package.opf
        If not found, return False
        """
        for root, dirnames, filenames in os.walk(path):
            for filename in filenames:
                if filename.endswith('.opf'):
                    return os.path.join(root, filename).replace(PROJECT_PATH + '/public/', '')
        return False
    
    for i in os.listdir(EPUB_DIR):
        if os.path.isdir(os.path.join(EPUB_DIR, i)):
            this_epub_path = os.path.join(EPUB_DIR, i)
            if os.path.exists(os.path.join(EPUB_DIR, i, 'mimetype')):
                package = find_package(this_epub_path)
                if package:
                    obj['library_epubs'].append( { 
                            'title' : i.replace('_',' ').title(),
                            'url_to_package_doc' : package } )
    return jsonify(obj)
    
if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0')