##// END OF EJS Templates
Cleanup and refactor, transformers
Cleanup and refactor, transformers

File last commit:

r10674:6e8e0573
r10674:6e8e0573
Show More
sphinx.py
281 lines | 9.7 KiB | text/x-python | PythonLexer
Jonathan Frederic
Transformer refactor
r10436 """Module that allows custom Sphinx parameters to be set on the notebook and
Jonathan Frederic
Cleanup and refactor, transformers
r10674 on the 'other' object passed into Jinja. Called prior to Jinja conversion
process.
Jonathan Frederic
Added Sphinx transformer....
r9772 """
Jonathan Frederic
Transformer refactor
r10436 #-----------------------------------------------------------------------------
# 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
Cleanup and refactor, transformers
r10674
Jonathan Frederic
Transformer refactor
r10436 from __future__ import print_function, absolute_import
Jonathan Frederic
Added Sphinx transformer....
r9772
Jonathan Frederic
Transformer refactor
r10436 # Stdlib imports
Jonathan Frederic
Added Sphinx transformer....
r9772 # Used to find Sphinx package location
import sphinx
import os.path
# Used to set the default date to today's date
from datetime import date
Jonathan Frederic
Transformer refactor
r10436 # Third-party imports
Jonathan Frederic
Added pygments syntax highlighting....
r9780 # Needed for Pygments latex definitions.
from pygments.formatters import LatexFormatter
Jonathan Frederic
Transformer refactor
r10436 # Our own imports
# Configurable traitlets
from IPython.utils.traitlets import Unicode, Bool
Jonathan Frederic
Added Sphinx transformer....
r9772 # Needed to override transformer
Jonathan Frederic
Fixed all broken references, refactored some stuff here and there,...
r10624 from .activatable import (ActivatableTransformer) #TODO
Jonathan Frederic
Added Sphinx transformer....
r9772
Jonathan Frederic
Cleanup and refactor, transformers
r10674 import nbconvert.utils.console
Jonathan Frederic
Transformer refactor
r10436 #-----------------------------------------------------------------------------
# Classes and functions
#-----------------------------------------------------------------------------
Jonathan Frederic
Cleanup and refactor, transformers
r10674
Jonathan Frederic
Changed SphinxTransformer to inherit...
r9775 class SphinxTransformer(ActivatableTransformer):
Jonathan Frederic
Added Sphinx transformer....
r9772 """
Sphinx utility transformer.
This transformer is used to set variables needed by the latex to build
Sphinx stylized templates.
"""
interactive = Bool(True, config=True, help="""
Jonathan Frederic
Cleanup and refactor, transformers
r10674 Allows you to define whether or not the Sphinx exporter will prompt
you for input during the conversion process. If this is set to false,
the author, version, release, date, and chapter_style traits should
be set.
""")
Jonathan Frederic
Added Sphinx transformer....
r9772
author = Unicode("Unknown Author", config=True, help="Author name")
Jonathan Frederic
Cleanup and refactor, transformers
r10674 version = Unicode("", config=True, help="""
Version number
You can leave this blank if you do not want to render a version number.
Example: "1.0.0"
""")
Jonathan Frederic
Added Sphinx transformer....
r9772
Jonathan Frederic
Cleanup and refactor, transformers
r10674 release = Unicode("", config=True, help="""
Release name
You can leave this blank if you do not want to render a release name.
Example: "Rough Draft"
""")
Jonathan Frederic
Added Sphinx transformer....
r9772
Jonathan Frederic
Cleanup and refactor, transformers
r10674 publish_date = Unicode("", config=True, help="""
Publish date
This is the date to render on the document as the publish date.
Leave this blank to default to todays date.
Example: "June 12, 1990"
""")
Jonathan Frederic
Added Sphinx transformer....
r9772
Jonathan Frederic
Cleanup and refactor, transformers
r10674 chapter_style = Unicode("Bjarne", config=True, help="""
Sphinx chapter style
This is the style to use for the chapter headers in the document.
You may choose one of the following:
"Bjarne" (default)
"Lenny"
"Glenn"
"Conny"
"Rejne"
"Sonny" (used for international documents)
""")
Jonathan Frederic
Added Sphinx transformer....
r9772
Jonathan Frederic
Cleanup and refactor, transformers
r10674 output_style = Unicode("notebook", config=True, help="""
Nbconvert Ipython
notebook input/output formatting style.
You may choose one of the following:
"simple (recommended for long code segments)"
"notebook" (default)
""")
Jonathan Frederic
Added notebook style input highlighting.
r9939
Jonathan Frederic
Added option to center output and remove title.
r9949 center_output = Bool(False, config=True, help="""
Jonathan Frederic
Cleanup and refactor, transformers
r10674 Optional attempt to center all output. If this is false, no additional
formatting is applied.
""")
Jonathan Frederic
Added option to center output and remove title.
r9949
use_headers = Bool(True, config=True, help="""
Jonathan Frederic
Cleanup and refactor, transformers
r10674 Whether not a header should be added to the document.
""")
Jonathan Frederic
Added option to center output and remove title.
r9949
Jonathan Frederic
Cleanup and refactor, transformers
r10674 #Allow the user to override the title of the notebook (useful for
#fancy document titles that the file system doesn't support.)
Jonathan Frederic
Added the ability to override the document title (useful for batch jobs)
r10174 overridetitle = Unicode("", config=True, help="")
Jonathan Frederic
Cleanup and refactor, transformers
r10674
Jonathan Frederic
Added the ability to override the document title (useful for batch jobs)
r10174
Jonathan Frederic
Cleanup and refactor, transformers
r10674 def __call__(self, nb, resources):
Jonathan Frederic
Added Sphinx transformer....
r9772 """
Jonathan Frederic
Cleanup and refactor, transformers
r10674 Entrypoint
Jonathan Frederic
Added Sphinx transformer....
r9772 Since we are not interested in any additional manipulation on a cell
by cell basis, we do not call the base implementation.
Jonathan Frederic
Cleanup and refactor, transformers
r10674
Parameters
----------
nb : NotebookNode
Notebook being converted
resources : dictionary
Additional resources used in the conversion process. Allows
transformers to pass variables into the Jinja engine.
"""
Jonathan Frederic
Changed SphinxTransformer to inherit...
r9775 if self.enabled:
Jonathan Frederic
Cleanup and refactor, transformers
r10674 return self.transform(nb, resources)
Matthias BUSSONNIER
fix enable
r9807 else:
Jonathan Frederic
Cleanup and refactor, transformers
r10674 return nb,resources
Jonathan Frederic
Added Sphinx transformer....
r9772
Jonathan Frederic
Cleanup and refactor, transformers
r10674 def transform(self, nb, resources):
Jonathan Frederic
Changed SphinxTransformer to inherit...
r9775 """
Sphinx transformation to apply on each notebook.
Jonathan Frederic
Cleanup and refactor, transformers
r10674
Parameters
----------
nb : NotebookNode
Notebook being converted
resources : dictionary
Additional resources used in the conversion process. Allows
transformers to pass variables into the Jinja engine.
Jonathan Frederic
Changed SphinxTransformer to inherit...
r9775 """
Jonathan Frederic
Sphinx specific metadata now stored in _draft namespace.
r9918
# TODO: Add versatile method of additional notebook metadata. Include
# handling of multiple files. For now use a temporay namespace,
# '_draft' to signify that this needs to change.
Jonathan Frederic
Make sure we dont stomp all over an existing _draft key, value.
r9923 if not "_draft" in nb.metadata:
nb.metadata._draft = {}
Jonathan Frederic
Moved sphinx template related resources into Sphinx namespace
r9937
Jonathan Frederic
Cleanup and refactor, transformers
r10674 if not "sphinx" in resources:
resources["sphinx"] = {}
Jonathan Frederic
Sphinx specific metadata now stored in _draft namespace.
r9918
Jonathan Frederic
Added Sphinx transformer....
r9772 if self.interactive:
# Prompt the user for additional meta data that doesn't exist currently
# but would be usefull for Sphinx.
Jonathan Frederic
Sphinx specific metadata now stored in _draft namespace.
r9918 nb.metadata._draft["author"] = self._prompt_author()
nb.metadata._draft["version"] = self._prompt_version()
nb.metadata._draft["release"] = self._prompt_release()
nb.metadata._draft["date"] = self._prompt_date()
Jonathan Frederic
Added Sphinx transformer....
r9772
# Prompt the user for the document style.
Jonathan Frederic
Cleanup and refactor, transformers
r10674 resources["sphinx"]["chapterstyle"] = self._prompt_chapter_title_style()
resources["sphinx"]["outputstyle"] = self._prompt_output_style()
Jonathan Frederic
Added option to center output and remove title.
r9949
# Small options
Jonathan Frederic
Cleanup and refactor, transformers
r10674 resources["sphinx"]["centeroutput"] = nbconvert.utils.console.prompt_boolean("Do you want to center the output? (false)", False)
resources["sphinx"]["header"] = nbconvert.utils.console.prompt_boolean("Should a Sphinx document header be used? (true)", True)
Jonathan Frederic
Added Sphinx transformer....
r9772 else:
# Try to use the traitlets.
Jonathan Frederic
Sphinx specific metadata now stored in _draft namespace.
r9918 nb.metadata._draft["author"] = self.author
nb.metadata._draft["version"] = self.version
nb.metadata._draft["release"] = self.release
Jonathan Frederic
Added Sphinx transformer....
r9772
Jonathan Frederic
Added option to center output and remove title.
r9949 # Use todays date if none is provided.
Jonathan Frederic
PEP8 conformance
r9936 if len(self.publish_date.strip()) == 0:
Jonathan Frederic
Sphinx specific metadata now stored in _draft namespace.
r9918 nb.metadata._draft["date"] = date.today().strftime("%B %-d, %Y")
Jonathan Frederic
Added Sphinx transformer....
r9772 else:
Jonathan Frederic
PEP8 conformance
r9936 nb.metadata._draft["date"] = self.publish_date
Jonathan Frederic
Added option to center output and remove title.
r9949
# Sphinx traitlets.
Jonathan Frederic
Cleanup and refactor, transformers
r10674 resources["sphinx"]["chapterstyle"] = self.chapter_style
resources["sphinx"]["outputstyle"] = self.output_style
resources["sphinx"]["centeroutput"] = self.center_output
resources["sphinx"]["header"] = self.use_headers
Jonathan Frederic
Added Sphinx transformer....
r9772
# Find and pass in the path to the Sphinx dependencies.
Jonathan Frederic
Cleanup and refactor, transformers
r10674 resources["sphinx"]["texinputs"] = os.path.abspath(sphinx.__file__ + "/../texinputs")
Jonathan Frederic
Added Sphinx transformer....
r9772
Jonathan Frederic
Added pygments syntax highlighting....
r9780 # Generate Pygments definitions for Latex
Jonathan Frederic
Cleanup and refactor, transformers
r10674 resources["sphinx"]["pygment_definitions"] = self._generate_pygments_latex_def()
Jonathan Frederic
Added pygments syntax highlighting....
r9780
Jonathan Frederic
Added the ability to override the document title (useful for batch jobs)
r10174 if not (self.overridetitle == None or len(self.overridetitle.strip()) == 0):
nb.metadata.name = self.overridetitle
Jonathan Frederic
Added Sphinx transformer....
r9772 # End
Jonathan Frederic
Cleanup and refactor, transformers
r10674 return nb, resources
Jonathan Frederic
Added pygments syntax highlighting....
r9780
def _generate_pygments_latex_def(self):
Jonathan Frederic
Cleanup and refactor, transformers
r10674 """
Generate the pygments latex definitions that allows pygments
to work in latex.
"""
Jonathan Frederic
Added pygments syntax highlighting....
r9780 return LatexFormatter().get_style_defs()
Jonathan Frederic
Added Sphinx transformer....
r9772
Jonathan Frederic
Cleanup and refactor, transformers
r10674
Jonathan Frederic
Added Sphinx transformer....
r9772 def _prompt_author(self):
Jonathan Frederic
Cleanup and refactor, transformers
r10674 """
Prompt the user to input an Author name
"""
return nbconvert.utils.console.input("Author name: ")
Jonathan Frederic
Added Sphinx transformer....
r9772
def _prompt_version(self):
Jonathan Frederic
Cleanup and refactor, transformers
r10674 """
prompt the user to enter a version number
"""
return nbconvert.utils.console.input("Version (ie ""1.0.0""): ")
Jonathan Frederic
Added Sphinx transformer....
r9772
def _prompt_release(self):
Jonathan Frederic
Cleanup and refactor, transformers
r10674 """
Prompt the user to input a release name
"""
return nbconvert.utils.console.input("Release Name (ie ""Rough draft""): ")
Jonathan Frederic
Added Sphinx transformer....
r9772
def _prompt_date(self):
Jonathan Frederic
Cleanup and refactor, transformers
r10674 """
Prompt the user to enter a date
"""
Jonathan Frederic
Added Sphinx transformer....
r9772 default_date = date.today().strftime("%B %-d, %Y")
Jonathan Frederic
Cleanup and refactor, transformers
r10674 user_date = nbconvert.utils.console.input("Date (deafults to \"" + default_date + "\"): ")
Jonathan Frederic
Added Sphinx transformer....
r9772 if len(user_date.strip()) == 0:
user_date = default_date
return user_date
Jonathan Frederic
Cleanup and refactor, transformers
r10674
Jonathan Frederic
Added notebook style input highlighting.
r9939 def _prompt_output_style(self):
Jonathan Frederic
Cleanup and refactor, transformers
r10674 """
Prompts the user to pick an iPython output style.
"""
Jonathan Frederic
Added notebook style input highlighting.
r9939
# Dictionary of available output styles
styles = {1: "simple",
2: "notebook"}
#Append comments to the menu when displaying it to the user.
Jonathan Frederic
Changed default input/output formatting to notebook style.
r10037 comments = {1: "(recommended for long code segments)",
2: "(default)"}
Jonathan Frederic
Added notebook style input highlighting.
r9939
Jonathan Frederic
Cleanup and refactor, transformers
r10674 return nbconvert.utils.console.prompt_dictionary(styles, default_style=2, menu_comments=comments)
Jonathan Frederic
Added notebook style input highlighting.
r9939
Jonathan Frederic
Added Sphinx transformer....
r9772 def _prompt_chapter_title_style(self):
Jonathan Frederic
Cleanup and refactor, transformers
r10674 """
Prompts the user to pick a Sphinx chapter style
"""
Jonathan Frederic
Added Sphinx transformer....
r9772
# Dictionary of available Sphinx styles
styles = {1: "Bjarne",
2: "Lenny",
3: "Glenn",
4: "Conny",
5: "Rejne",
6: "Sonny"}
Jonathan Frederic
Generalized dictionary based menu input prompting.
r9938 #Append comments to the menu when displaying it to the user.
comments = {1: "(default)",
6: "(for international documents)"}
Jonathan Frederic
Cleanup and refactor, transformers
r10674 return nbconvert.utils.console.prompt_dictionary(styles, menu_comments=comments)