"""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()