Доступ к объекту данных в расширении Jupyter

Я создал расширение JavaScript для моего ноутбука Jupyter, которое будет отображать некоторые данные для меня. Прямо сейчас у меня есть данные, жестко закодированные в расширении.

Мой вопрос: есть ли способ получить доступ к объекту данных, который существует в ноутбуке?

Например, ниже приведен пример кода для расширения:

define([
    'base/js/namespace'
], function(
    Jupyter
) {
  function test_second_extension() {

    var handler = function () {
      console.log(
          'This is the current notebook application instance:',
          Jupyter.notebook
      );
      var data = [{"x": 1, "y": 5}, {"x": 2, "y":12}, {"x": 3, "y": 27}];
      console.log(data);
    };

    var action = {
        icon: 'fa-comment-o', // a font-awesome class used on buttons, etc
        help    : 'Print notebook instance',
        help_index : 'zz',
        handler : handler
    };
    var prefix = 'test_second_extension';
    var action_name = 'show-alert';

    var full_action_name = Jupyter.actions.register(action, action_name, prefix); // returns 'my_extension:show-alert'
    Jupyter.toolbar.add_buttons_group([full_action_name]);
  }

  return {
    load_ipython_extension: test_second_extension
  };
});

И это то, что у меня есть в ячейке Python3 Jupyter:

import pandas as pd
data = pd.read_json('[{"x": 1, "y": 5}, {"x": 2, "y":12}, {"x": 3, "y": 27}]')

Есть ли способ получить доступ к объекту данных, созданному в ячейке Jupyter из расширения, вместо его жесткого кодирования?

Ответы

Ответ 1

Немного странно, но попробуй это

from IPython.core.display import Javascript
import json

#list of dicts
list_of_dicts = [{"x": 1, "y": 5}, {"x": 2, "y":12}, {"x": 3, "y": 27}]

#convert to json string
json_list = json.dumps(list_of_dicts)

#run in cell
#This will run in the console check your browser
Javascript("""
var json_list = {};
window.variable = json_list;
console.log(json_list);""".format(json_list))

#or as a function
#replace console_log with what you need
def run_in_console(data):
    json_list = json.dumps(data)
    return Javascript("""
        var json_list = {};
        window.variable = json_list;
        console.log(json_list);""".format(json_list))