Module: Legion::Notebook::Parser

Defined in:
lib/legion/notebook/parser.rb

Class Method Summary collapse

Class Method Details

.parse(path) ⇒ Object



8
9
10
11
12
13
14
15
16
# File 'lib/legion/notebook/parser.rb', line 8

def self.parse(path)
  data = ::JSON.parse(File.read(path))
  {
    metadata: data['metadata'],
    kernel:   data.dig('metadata', 'kernelspec', 'display_name'),
    language: data.dig('metadata', 'kernelspec', 'language') || 'python',
    cells:    Array(data['cells']).map { |c| parse_cell(c) }
  }
end

.parse_cell(cell) ⇒ Object



18
19
20
21
22
23
24
# File 'lib/legion/notebook/parser.rb', line 18

def self.parse_cell(cell)
  {
    type:    cell['cell_type'],
    source:  Array(cell['source']).join,
    outputs: Array(cell.fetch('outputs', [])).map { |o| parse_output(o) }
  }
end

.parse_output(output) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/legion/notebook/parser.rb', line 26

def self.parse_output(output)
  text = case output['output_type']
         when 'execute_result', 'display_data'
           data = output.fetch('data', {})
           Array(data.fetch('text/plain', [])).join
         when 'error'
           "#{output['ename']}: #{output['evalue']}"
         else
           Array(output.fetch('text', [])).join
         end

  {
    output_type: output['output_type'],
    text:        text
  }
end