##// END OF EJS Templates
To and from formats are now configurable
To and from formats are now configurable

File last commit:

r11389:a4ae7dcf
r11391:a13467ff
Show More
extractfigure.py
90 lines | 3.6 KiB | text/x-python | PythonLexer
Jonathan Frederic
Cleanup and refactor, transformers
r10674 """Module containing a transformer that extracts all of the figures from the
notebook file. The extracted figures are returned in the 'resources' dictionary.
"""
#-----------------------------------------------------------------------------
# Copyright (c) 2013, the IPython Development Team.
#
# Distributed under the terms of the Modified BSD License.
#
# The full license is in the file COPYING.txt, distributed with this software.
#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
# Imports
#-----------------------------------------------------------------------------
Jonathan Frederic
Missing sys import
r11370 import sys
Jonathan Frederic
Missing imports
r11389 from IPython.utils.traitlets import Unicode
Jonathan Frederic
Removed ActivatableTransformer and moved enabled key into base.
r11388 from .base import ConfigurableTransformer
Jonathan Frederic
Split transformer code
r10437
Jonathan Frederic
Cleanup and refactor, transformers
r10674 #-----------------------------------------------------------------------------
# Classes
#-----------------------------------------------------------------------------
Jonathan Frederic
Removed ActivatableTransformer and moved enabled key into base.
r11388 class ExtractFigureTransformer(ConfigurableTransformer):
Jonathan Frederic
Cleanup and refactor, transformers
r10674 """
Extracts all of the figures from the notebook file. The extracted
figures are returned in the 'resources' dictionary.
"""
Jonathan Frederic
Added writers and supporting code.
r11367 figure_filename_template = Unicode(
"{unique_key}_{cell_index}_{index}.{extension}", config=True)
Zbigniew Jędrzejewski-Szmek
Fix problem with missing .index_generator...
r10795
Jonathan Frederic
Added writers and supporting code.
r11367 def transform_cell(self, cell, resources, cell_index):
Jonathan Frederic
Cleanup and refactor, transformers
r10674 """
Apply a transformation on each cell,
Parameters
----------
cell : NotebookNode cell
Notebook cell being processed
resources : dictionary
Additional resources used in the conversion process. Allows
transformers to pass variables into the Jinja engine.
Jonathan Frederic
Added writers and supporting code.
r11367 cell_index : int
Jonathan Frederic
Generator used to create figure indicies
r10772 Index of the cell being processed (see base.py)
Jonathan Frederic
Cleanup and refactor, transformers
r10674 """
Jonathan Frederic
Added writers and supporting code.
r11367
#Get the unique key from the resource dict if it exists. If it does not
#exist, use 'figure' as the default.
unique_key = resources.get('unique_key', 'figure')
Jonathan Frederic
Cleanup and refactor, transformers
r10674
Jonathan Frederic
Added writers and supporting code.
r11367 #Make sure figures key exists
if not 'figures' in resources:
resources['figures'] = {}
Jonathan Frederic
Cleanup and refactor, transformers
r10674
Jonathan Frederic
Added writers and supporting code.
r11367 #Loop through all of the outputs in the cell
for index, out in enumerate(cell.get('outputs', [])):
#Get the output in data formats that the template is interested in.
Jonathan Frederic
Cleanup and refactor, transformers
r10674 for out_type in self.display_data_priority:
if out.hasattr(out_type):
Jonathan Frederic
Added writers and supporting code.
r11367 data = out[out_type]
Jonathan Frederic
Split transformer code
r10437
Jonathan Frederic
Added writers and supporting code.
r11367 #Binary files are base64-encoded, SVG is already XML
if out_type in ('png', 'jpg', 'pdf'):
data = data.decode('base64')
Jonathan Frederic
Changes after in person review with @ellisonbg including TODO tags
r11379 elif sys.platform == 'win32':
Jonathan Frederic
Fixed unicode data not written to files properly.
r11371 data = data.replace('\n', '\r\n').encode("UTF-8")
else:
data = data.encode("UTF-8")
Jonathan Frederic
Added writers and supporting code.
r11367
#Build a figure name
figure_name = self.figure_filename_template.format(
unique_key=unique_key,
cell_index=cell_index,
index=index,
extension=out_type)
#On the cell, make the figure available via
# cell.outputs[i].svg_filename ... etc (svg in example)
# Where
# cell.outputs[i].svg contains the data
out[out_type + '_filename'] = figure_name
#In the resources, make the figure available via
# resources['figures']['filename'] = data
resources['figures'][figure_name] = data
Jonathan Frederic
Split transformer code
r10437
Jonathan Frederic
Added writers and supporting code.
r11367 return cell, resources