#!/usr/bin/env python3 import os, sys from sys import stdout import flask from flask import request, redirect, send_from_directory import tfidf import readings import printer from manifestos import manifestos # Create the application. APP = flask.Flask(__name__) # Jinja filters def prettyfilename(filename): return filename.replace('_', ' ').replace('-', ' ').replace('.txt', '') APP.jinja_env.filters['prettyfilename'] = prettyfilename # Jinja globals def get_random(x, y): from random import randint return randint(x, y) APP.jinja_env.globals.update(get_random=get_random) @APP.route('/', methods=['GET', 'POST']) def index(): return redirect('/fr/') @APP.route('//', methods=['GET', 'POST']) def index_lang(lang): """ Displays the index page accessible at '//' Which is either the start page (index.html) or a results page (results.html). """ query = None results = None query = request.args.get('q', '') suggestions = open('words.txt', 'r').readlines() # Check printer argument if printer.connected == True: connection = 'connected' else: connection = 'disconnected' if request.args.get('q', ''): results, filenames, analytics = readings.request_results(query) # print commands if request.args.get('print', '') == 'now': if connection == 'connected': print('*print!*', file=stdout) printer.printNow(query, results) return flask.render_template(lang+'/results.html', query=query, results=results, filenames=filenames, connection=connection, suggestions=suggestions, analytics=analytics, lang=lang) else: index = readings.load_index() filenames = [manifesto for manifesto, _ in index.items()] suggestions = open('words.txt', 'r').readlines() mappings_top = open('tfidf.top50.txt', 'r').readlines() return flask.render_template(lang+'/index.html', filenames=filenames, suggestions=suggestions, mappings=mappings_top, lang=lang) @APP.route('//about', methods=['GET', 'POST']) def about(lang): """ Displays the about page accessible at '//about'. """ index = readings.load_index() filenames = sorted([manifesto for manifesto, _ in index.items()]) return flask.render_template(lang+'/about.html', filenames=filenames, lang=lang) @APP.route('//manifesto/', methods=['GET', 'POST']) def manifesto(lang, name): """ Displays the page accessible at '//manifesto/'. Here, an iframe is shown with the manifesto in its own context. """ index = readings.load_index() filenames = sorted([manifesto for manifesto, _ in index.items()]) link = manifestos[name] return flask.render_template(lang+'/manifesto.html', filenames=filenames, name=name, link=link, lang=lang) @APP.route('//mappings', methods=['GET', 'POST']) def contrast_mappings(lang): """ Displays the page accessible at '//mappings'. A TF-IDF visualisation is displayed, using the TF-IDF values as font-size. """ mappings, filenames = readings.request_mappings_all() return flask.render_template(lang+'/mappings.html', filenames=filenames, mappings=mappings, lang=lang) @APP.route('//mappings/', methods=['GET', 'POST']) def contrast_mappings_name(lang, name): """ Displays the page accessible at '//mappings/'. A TF-IDF visualisation is displayed from the specific manifesto, using the TF-IDF values as font-size. """ mappings, filenames = readings.request_mappings(name) return flask.render_template(lang+'/mappings-name.html', filenames=filenames, mappings=mappings[name], manifesto=name, lang=lang) @APP.route('/favicon.ico') def favicon(): return send_from_directory(os.path.join(APP.root_path, 'static'), 'favicon.ico') if __name__ == '__main__': if not 'index.json' in os.listdir('.'): tfidf.create_index() APP.debug=True APP.run()