Class: IpynbDiff::OutputTransformer
Overview
Transforms Jupyter output data into markdown
Constant Summary
collapse
- ORDERED_KEYS =
{
'execute_result' => %w[image/png image/svg+xml image/jpeg text/markdown text/latex text/plain],
'display_data' => %w[image/png image/svg+xml image/jpeg text/markdown text/latex]
}.freeze
Instance Method Summary
collapse
-
#decorate_output(output_rows, output, symbol) ⇒ Object
-
#transform(output, symbol) ⇒ Object
-
#transform_element(output_type, output_element, symbol_prefix) ⇒ Object
-
#transform_error(traceback, symbol) ⇒ Object
-
#transform_image(image_type, image_content, symbol) ⇒ Object
-
#transform_non_error(accepted_keys, elements, symbol) ⇒ Object
-
#transform_svg(image_content, symbol) ⇒ Object
-
#transform_text(text_content, symbol) ⇒ Object
#_, #array_if_not_array, #symbolize_array
Instance Method Details
#decorate_output(output_rows, output, symbol) ⇒ Object
25
26
27
28
29
30
31
32
|
# File 'lib/output_transformer.rb', line 25
def decorate_output(output_rows, output, symbol)
[
_,
symbol, %(%%%% Output: #{output['output_type']}),
_,
*output_rows
]
end
|
14
15
16
17
18
19
20
21
22
23
|
# File 'lib/output_transformer.rb', line 14
def transform(output, symbol)
transformed = case (output_type = output['output_type'])
when 'error'
transform_error(output['traceback'], symbol / 'traceback')
when 'execute_result', 'display_data'
transform_non_error(ORDERED_KEYS[output_type], output['data'], symbol / 'data')
end
decorate_output(transformed, output, symbol) if transformed
end
|
48
49
50
51
52
53
54
55
56
57
58
|
# File 'lib/output_transformer.rb', line 48
def transform_element(output_type, output_element, symbol_prefix)
new_symbol = symbol_prefix / output_type
case output_type
when 'image/png', 'image/jpeg'
transform_image(output_type, output_element, new_symbol)
when 'image/svg+xml'
transform_svg(output_element, new_symbol)
when 'text/markdown', 'text/latex', 'text/plain'
transform_text(output_element, new_symbol)
end
end
|
34
35
36
37
38
39
40
|
# File 'lib/output_transformer.rb', line 34
def transform_error(traceback, symbol)
traceback.map.with_index do |t, idx|
t.split("\n").map do |l|
[symbol / idx, l.gsub(/\[[0-9][0-9;]*m/, '').sub("\u001B", ' ').gsub(/\u001B/, '').rstrip]
end
end
end
|
60
61
62
|
# File 'lib/output_transformer.rb', line 60
def transform_image(image_type, image_content, symbol)
[symbol, " })"]
end
|
42
43
44
45
46
|
# File 'lib/output_transformer.rb', line 42
def transform_non_error(accepted_keys, elements, symbol)
accepted_keys.filter { |key| elements.key?(key) }.map do |key|
transform_element(key, elements[key], symbol)
end
end
|
64
65
66
67
68
69
70
|
# File 'lib/output_transformer.rb', line 64
def transform_svg(image_content, symbol)
lines = image_content.is_a?(Array) ? image_content : [image_content]
single_line = lines.map(&:strip).join.gsub(/\s+/, ' ')
[symbol, " "]
end
|
#transform_text(text_content, symbol) ⇒ Object
72
73
74
|
# File 'lib/output_transformer.rb', line 72
def transform_text(text_content, symbol)
symbolize_array(symbol, text_content) { |l| " #{l.rstrip}" }
end
|