spawner/render/__main__.py

60 lines
1.5 KiB
Python

"""Web Server Gateway Interface with autoreload to render spawner template.
Usage: `python -m render`
"""
from pathlib import Path
from traceback import format_exc
import glicid_spawner
from flask import Flask, render_template, request
from glicid_spawner.form import options_attrs, options_form, options_from_form
from livereload import Server
# Monkeypatch
USERNAME = 'john-doe'
glicid_spawner.micromamba.MICROMAMBA_ROOT = (
Path(__file__).parent / '..' / 'tests' / 'data' / 'micromamba'
).resolve()
glicid_spawner.micromamba.GLOBAL_USER = 'global'
glicid_spawner.micromamba.GLOBAL_EXCLUDED = 'qux'
# Flask app
app = Flask(__name__)
app.debug = True
@app.route('/')
def home():
"""Form spawner home page."""
return render_template(
'form.html', spawner_options_form=options_form(USERNAME), options=options_attrs(USERNAME)
)
@app.route('/submit', methods=['POST'])
def submit():
"""Reformat form data and extract spawner options.
https://jupyterhub.readthedocs.io/en/stable/reference/spawners.html#spawner-options-from-form
"""
formdata = dict(request.form.lists())
# Trying to parse the options from the formdata
try:
return render_template(
'options.html', formdata=formdata, options=options_from_form(formdata)
)
except Exception:
return render_template('options.html', formdata=formdata, err=format_exc())
def server_autoreload():
"""Start auto-reload server."""
server = Server(app.wsgi_app)
server.serve()
if __name__ == '__main__':
server_autoreload()