spawner/render/__main__.py

67 lines
1.7 KiB
Python
Raw Normal View History

"""Web Server Gateway Interface with autoreload to render spawner template.
Usage: `python -m render`
"""
from traceback import format_exc
from flask import Flask, render_template, request
2024-02-14 15:19:31 +01:00
from glicid_spawner.form import TEMPLATE_FORM, options_from_form
from glicid_spawner.micromamba import MicromambaEnv
from glicid_spawner.resources import CPU, GPU, RAM
from livereload import Server
# Monkeypatch
2024-02-14 15:19:31 +01:00
OPTIONS = {
'username': 'john-doe',
'python_envs': [
MicromambaEnv('USER', 'foo', '/john-doe/envs/foo'),
MicromambaEnv('USER', 'bar', '/john-doe/envs/bar'),
MicromambaEnv('GLOBAL', 'baz', '/global/envs/baz'),
],
'cpu_available': CPU,
'ram_available': RAM,
'gpu_available': GPU,
}
# Flask app
app = Flask(__name__)
app.debug = True
@app.route('/')
def home():
"""Form spawner home page."""
return render_template(
2024-02-14 15:19:31 +01:00
'form.html', spawner_options_form=TEMPLATE_FORM.render(**OPTIONS), options=OPTIONS
)
@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()