In debug mode (elsa serve), a new model is returned for each requests, so changes are picked up. In non-debug mode (elsa freeze), a single model is used (and stored in _cached_model), so that metadata is only read once. """ global _cached_model if _cached_model: return _cached_model model = models.Root(os.path.join(app.root_path, '..')) if not app.config['DEBUG']: _cached_model = model return model register_url_converters(app, model) app.jinja_env.undefined = StrictUndefined def template_function(func): app.jinja_env.globals[func.__name__] = func return func @template_function def static(filename): return url_for('static', filename=filename) @template_function
models.Solution: lambda **kw: url_for('solution', **kw), models.Course: lambda **kw: url_for('course', **kw), models.Session: lambda **kw: url_for('session', **kw), models.SessionPage: lambda **kw: url_for( 'session', **kw), models.StaticFile: lambda **kw: url_for('page_static', **kw), models.Root: lambda **kw: url_for('index', **kw) }, }, schema_url_factory=lambda m, is_input, **kw: url_for( 'schema', model_slug=m.model_slug, is_input=is_input, **kw), ) register_url_converters(app) setup_jinja_env(app.jinja_env) @app.route('/') def index(): if g.model.aggregates_courses: return render_template("index.html", edit_info=g.model.edit_info) else: return render_template( "dev_course_list.html", load_path=g.model_load_path.resolve(), ) @app.route('/courses/')