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.
138 lines
3.7 KiB
138 lines
3.7 KiB
import flask
|
|
from flask import request, redirect
|
|
from urllib.request import urlopen
|
|
from urllib.parse import urlencode
|
|
import json
|
|
import os
|
|
import pypandoc
|
|
from jinja2 import Template
|
|
|
|
APP = flask.Flask(__name__)
|
|
APP.config.from_object("config.Config")
|
|
|
|
# ---
|
|
|
|
def get_pad_content(pad):
|
|
arguments = {
|
|
'padID' : pad,
|
|
'apikey' : APP.config['PAD_API_KEY']
|
|
}
|
|
api_call = 'getText'
|
|
response = json.load(urlopen(f"{ APP.config['PAD_API_URL'] }{ api_call }", data=urlencode(arguments).encode()))
|
|
content = response['data']['text']
|
|
|
|
return content
|
|
|
|
def update_pad_contents():
|
|
# download the stylesheet + template pad
|
|
css = get_pad_content('feedmode.css')
|
|
template = get_pad_content('feedmode.template')
|
|
# !!! this breaks the whole idea that this application can be shared by multiple projects at the same time
|
|
# !!! but py_pandoc needs to run with files........ hmmm
|
|
with open('templates/pandoc-template.html', 'w') as f:
|
|
f.write(template)
|
|
|
|
return css, template
|
|
|
|
def get_multifeeder_feed(query):
|
|
feed_json = json.load(urlopen(query))
|
|
multifeeder_template = open('templates/multifeeder-template.html').read()
|
|
jinja_template = Template(multifeeder_template)
|
|
feed_html = jinja_template.render(response=feed_json)
|
|
|
|
return feed_html, feed_json
|
|
|
|
def load_query():
|
|
query = open('static/query.txt').read().strip() # !!! needs fixing
|
|
|
|
return query
|
|
|
|
# ---
|
|
|
|
@APP.route('/', methods=['GET'])
|
|
def index():
|
|
return redirect("/preview/", code=302)
|
|
|
|
@APP.route('/update/', methods=['POST'])
|
|
def update():
|
|
query = request.form['query']
|
|
with open('static/query.txt', 'w') as out:
|
|
out.write(query)
|
|
|
|
return redirect("/select/", code=302)
|
|
|
|
@APP.route('/select/', methods=['GET'])
|
|
def select():
|
|
# get feed contents
|
|
# render selection template with checkboxes
|
|
query = load_query()
|
|
x, feed_json = get_multifeeder_feed(query)
|
|
|
|
return flask.render_template('selection-template.html', feed=feed_json, query=query)
|
|
|
|
@APP.route('/preview/', methods=['GET'])
|
|
def preview():
|
|
# update pad contents
|
|
x, template_content = update_pad_contents()
|
|
# get feed contents
|
|
query = load_query()
|
|
feed_html, x = get_multifeeder_feed(query)
|
|
# render multifeeder feed in template
|
|
template = Template(template_content)
|
|
html = template.render(feed=feed_html, mode="screen")
|
|
|
|
return flask.render_template('html.html', html=html, query=query)
|
|
|
|
@APP.route('/stylesheet/', methods=['GET'])
|
|
def stylesheet():
|
|
ext = '.css'
|
|
query = load_query()
|
|
|
|
return flask.render_template('pad.html', name="feedmode", ext=ext, query=query)
|
|
|
|
@APP.route('/template/', methods=['GET'])
|
|
def template():
|
|
ext = '.template'
|
|
query = load_query()
|
|
|
|
return flask.render_template('pad.html', name="feedmode", ext=ext, query=query)
|
|
|
|
@APP.route('/pdf/')
|
|
def pdf():
|
|
query = load_query()
|
|
|
|
return flask.render_template('pdf.html', query=query)
|
|
|
|
# //////////////
|
|
# rendered resources (not saved as a file on the server)
|
|
|
|
@APP.route('/print.css')
|
|
def css():
|
|
css, x = update_pad_contents()
|
|
|
|
return css, 200, {'Content-Type': 'text/css; charset=utf-8'}
|
|
|
|
@APP.route('/pandoc-template.html')
|
|
def pandoc_template():
|
|
x, template = update_pad_contents()
|
|
|
|
return template, 200, {'Content-Type': 'text/html; charset=utf-8'}
|
|
|
|
@APP.route('/pagedjs.html')
|
|
def pagedjs():
|
|
# update pad contents
|
|
x, template = update_pad_contents()
|
|
# get feed contents
|
|
query = "https://multi.vvvvvvaria.org/API/latest/50" # !!! needs fixing
|
|
feed_html, feed_json = get_multifeeder_feed(query)
|
|
# render multifeeder feed in template
|
|
jinja_template = Template(template)
|
|
html = jinja_template.render(feed=feed_html, mode="print")
|
|
|
|
return html, 200, {'Content-Type': 'text/html; charset=utf-8'}
|
|
|
|
# //////////////
|
|
|
|
if __name__ == '__main__':
|
|
APP.debug=True
|
|
APP.run(host="0.0.0.0", port=f'{ APP.config["PORTNUMBER"] }', threaded=True)
|
|
|