Add flask app with auto-reload to render the form template
This commit is contained in:
parent
433862d0ad
commit
2333ccd168
12 changed files with 662 additions and 61 deletions
60
render/__main__.py
Normal file
60
render/__main__.py
Normal file
|
@ -0,0 +1,60 @@
|
|||
"""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()
|
Loading…
Add table
Add a link
Reference in a new issue