You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
113 lines
3.7 KiB
113 lines
3.7 KiB
6 years ago
|
#!/usr/bin/env python3
|
||
|
|
||
|
import os, sys
|
||
|
from sys import stdout
|
||
|
import flask
|
||
|
from flask import request, redirect
|
||
|
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('/<lang>/', methods=['GET', 'POST'])
|
||
|
def index_lang(lang):
|
||
|
"""
|
||
|
Displays the index page accessible at '/<lang>/'
|
||
|
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 = readings.request_mappings_all()
|
||
|
mappings_top = [[tfidf, word] for manifesto, words in mappings.items() for tfidf, word in words]
|
||
|
mappings_top.sort(reverse=True)
|
||
|
return flask.render_template(lang+'/index.html', filenames=filenames, suggestions=suggestions, mappings=mappings_top[:100], lang=lang)
|
||
|
|
||
|
@APP.route('/<lang>/manifesto/<name>', methods=['GET', 'POST'])
|
||
|
def manifesto(lang, name):
|
||
|
"""
|
||
|
Displays the page accessible at '/<lang>/manifesto/<name>'.
|
||
|
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('/<lang>/mappings', methods=['GET', 'POST'])
|
||
|
def contrast_mappings(lang):
|
||
|
"""
|
||
|
Displays the page accessible at '/<lang>/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('/<lang>/mappings/<name>', methods=['GET', 'POST'])
|
||
|
def contrast_mappings_name(lang, name):
|
||
|
"""
|
||
|
Displays the page accessible at '/<lang>/mappings/<name>'.
|
||
|
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('/<lang>/colophon', methods=['GET', 'POST'])
|
||
|
def colophon(lang):
|
||
|
"""
|
||
|
Displays colophon page.
|
||
|
"""
|
||
|
index = readings.load_index()
|
||
|
filenames = sorted([manifesto for manifesto, _ in index.items()])
|
||
|
return flask.render_template(lang+'/colophon.html', filenames=filenames, lang=lang)
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
if not 'index.json' in os.listdir('.'):
|
||
|
tfidf.create_index()
|
||
|
# APP.debug=True
|
||
|
APP.run()
|