Я делаю сервер для конвертации Rmarkdown в приложения Dash. Идея состоит в том, чтобы проанализировать все параметры в файле rmd и сделать соответствующие входные данные Dash. Затем добавьте кнопку отправки, которая скомпилирует rmd в html и вернет iframe. Я использую внешнюю базу данных для хранения информации о путях rmd, чтобы пользователь мог динамически добавлять файлы. Проблема заключается в том, что при изменении файла rmd сервер должен повторно проанализировать файл и заново создать приложение и обслуживать его по тому же URL-адресу. У меня нет элегантного решения. Прямо сейчас я делаю что-то вроде этого.
server = Flask(__name__)
@server.route(“rmd/path:path”):
def convert_rmd_to_dash(path):
file = get_file_path_from_db(path)
mtime = get_last_modified_time(file)
cached_app, cached_mtime = get_cache(path)
if cached_mtime == mtime:
return cached_app
inputs = parse_file(file)
app = construct_dash_app(inputs)
return app.index()
def construct_dash_app(inputs):
app = dash.Dash(
name,
server=server,
routes_pathname_prefix=’/some_url_user_will_never_use/’ + file_name + time.time())
app.layout = …
…
return app
Это работает, но я получаю много правил маршрутизации в / some_url_user_will_never_use. Может быть возможна прямая перезапись rmd / path, но она выглядит хакерской на основании ответа Stackoveflow. Есть ли лучшее решение? Спасибо.