Мы хотели бы создать систему, в которой пользователь мог бы создавать Jupyter Notebook с любой логикой, которая ему нужна, но предоставлял бы дополнительные функциональные возможности на основе нашей существующей системы. Чтобы получить доступ к этим дополнительным функциям, пользователю потребуется помощь от нашего программного обеспечения. Пользователь будет использовать пользовательский интерфейс, который облегчает составление операторов, которые получают доступ к нашей системе. Например, чтобы пользователь мог получить переменную, хранящуюся в нашей системе, нам нужно отобразить список переменных, после того как пользователь выбрал переменную - список ключей имеет переменную, чтобы пользователь мог предоставить значения для этих ключей.
Мы рассматривали расширения NB в JavaScript и, необязательно, в бэкэнде Python. JavaScipt будет запрашивать необходимую информацию через REST, анализировать JSON и заполнять элементы управления соответственно, без проблем. Однако пользователю потребуется нажать кнопку на панели инструментов, чтобы получить доступ к этим диалоговым окнам JavaScript.
Мы столкнулись с виджетами, которые даже более удобны, чем расширения NB. Однако, чтобы разместить виджет в блокноте Jupyter, пользователь должен предоставить код, который импортирует библиотеку ipywidgets, создает виджет, заполняет его данными (если говорить о выпадающем списке, пользователю необходимо вызвать службу REST, проанализировать JSON и заполнить выпадающий список элементами). из JSON) и вставляет его в Блокнот.
Вопрос - можем ли мы как-то объединить силу расширений NB и виджетов? Например, предоставьте шаблон Jupyter Notebook с одним виджетом с надписью «выберите команду». После того, как пользователь сделал выбор, появляется набор виджетов, помогающих составить выбранную команду, оригинальный виджет «команда выбора» исчезает и снова появляется как последний элемент в блокноте. Никакой видимый код в блокноте, связанный с этими виджетами, не должен присутствовать, все это «волшебство» должно быть доставлено как некоторое расширение.