##// END OF EJS Templates
Update readme with full index (auto-generated).
Update readme with full index (auto-generated).

File last commit:

r9389:00c6bd3f
r9710:d35b5787
Show More
display.py
304 lines | 11.7 KiB | text/x-python | PythonLexer
Brian E. Granger
Added lib/display.py for extra display related things.
r4408 """Various display related classes.
Greg Caporaso
updating my code to incorporate upstream changes; resolved a merge conflict in IPython/lib/display.py
r8798 Authors : MinRK, gregcaporaso, dannystaple
Brian E. Granger
Added lib/display.py for extra display related things.
r4408 """
Greg Caporaso
updated to use os.walk instead of os.path.walk - os.path.walk is not supported in Python 3
r8800 from os.path import exists, isfile, splitext, abspath, join, isdir
Greg Caporaso
this should address the failure in #2732...
r9093 from os import walk, sep
Greg Caporaso
Working versions of formatters for files and directories that are generated within an IPython notebook session. This is useful for integrating tools like QIIME with the IPython notebook as it allows users to generate QIIME's HTML visualizations and open them in new pages in their the web browser.
r8272
Brian E. Granger
Added lib/display.py for extra display related things.
r4408 class YouTubeVideo(object):
"""Class for embedding a YouTube Video in an IPython session, based on its video id.
Bernardo B. Marques
remove all trailling spaces
r4872
Brian E. Granger
Added lib/display.py for extra display related things.
r4408 e.g. to embed the video on this page:
Bernardo B. Marques
remove all trailling spaces
r4872
Brian E. Granger
Added lib/display.py for extra display related things.
r4408 http://www.youtube.com/watch?v=foo
Bernardo B. Marques
remove all trailling spaces
r4872
Brian E. Granger
Added lib/display.py for extra display related things.
r4408 you would do:
Bernardo B. Marques
remove all trailling spaces
r4872
Brian E. Granger
Added lib/display.py for extra display related things.
r4408 vid = YouTubeVideo("foo")
display(vid)
Danny Staple
Adding time offsets to the video...
r8639
Danny Staple
Swapped specific start param for any params...
r8645 To start from 30 seconds:
Danny Staple
Adding time offsets to the video...
r8639
Danny Staple
Swapped specific start param for any params...
r8645 vid = YouTubeVideo("abc", start=30)
Danny Staple
Adding time offsets to the video...
r8639 display(vid)
Danny Staple
Swapped specific start param for any params...
r8645
Danny Staple
Shortening documentation line length. ...
r8666 To calculate seconds from time as hours, minutes, seconds use:
start=int(timedelta(hours=1, minutes=46, seconds=40).total_seconds())
Danny Staple
Fixed some silly mistakes...
r8651
Danny Staple
Swapped specific start param for any params...
r8645 Other parameters can be provided as documented at
https://developers.google.com/youtube/player_parameters#parameter-subheader
Brian E. Granger
Added lib/display.py for extra display related things.
r4408 """
Bernardo B. Marques
remove all trailling spaces
r4872
Danny Staple
Swapped specific start param for any params...
r8645 def __init__(self, id, width=400, height=300, **kwargs):
Brian E. Granger
Added lib/display.py for extra display related things.
r4408 self.id = id
self.width = width
self.height = height
Danny Staple
Fixed some silly mistakes...
r8651 self.params = kwargs
Bernardo B. Marques
remove all trailling spaces
r4872
Brian E. Granger
Added lib/display.py for extra display related things.
r4408 def _repr_html_(self):
"""return YouTube embed iframe for this video id"""
Danny Staple
Swapped specific start param for any params...
r8645 if self.params:
Thomas Kluyver
Defer import of urllib
r9389 from urllib import urlencode # Deferred import
params = "?" + urlencode(self.params)
Danny Staple
Swapped specific start param for any params...
r8645 else:
params = ""
Brian E. Granger
Added lib/display.py for extra display related things.
r4408 return """
Bernardo B. Marques
remove all trailling spaces
r4872 <iframe
width="%i"
height="%i"
Danny Staple
Swapped specific start param for any params...
r8645 src="http://www.youtube.com/embed/%s%s"
Bernardo B. Marques
remove all trailling spaces
r4872 frameborder="0"
Brian E. Granger
Added lib/display.py for extra display related things.
r4408 allowfullscreen
></iframe>
Danny Staple
Add newline, spaces on string format...
r8680 """ % (self.width, self.height, self.id, params)
Brian E. Granger
Added lib/display.py for extra display related things.
r4408
Greg Caporaso
renamed classes as recommended by @takluyver
r8365 class FileLink(object):
Greg Caporaso
Working versions of formatters for files and directories that are generated within an IPython notebook session. This is useful for integrating tools like QIIME with the IPython notebook as it allows users to generate QIIME's HTML visualizations and open them in new pages in their the web browser.
r8272 """Class for embedding a local file link in an IPython session, based on path
e.g. to embed a link that was generated in the IPython notebook as my/data.txt
Thomas Kluyver
Miscellaneous docs fixes
r9244 you would do::
Greg Caporaso
Working versions of formatters for files and directories that are generated within an IPython notebook session. This is useful for integrating tools like QIIME with the IPython notebook as it allows users to generate QIIME's HTML visualizations and open them in new pages in their the web browser.
r8272
Thomas Kluyver
Miscellaneous docs fixes
r9244 local_file = FileLink("my/data.txt")
display(local_file)
Greg Caporaso
documentation modification
r8276
Thomas Kluyver
Miscellaneous docs fixes
r9244 or in the HTML notebook, just::
Greg Caporaso
documentation modification
r8276
Thomas Kluyver
Miscellaneous docs fixes
r9244 FileLink("my/data.txt")
Greg Caporaso
Working versions of formatters for files and directories that are generated within an IPython notebook session. This is useful for integrating tools like QIIME with the IPython notebook as it allows users to generate QIIME's HTML visualizations and open them in new pages in their the web browser.
r8272 """
Greg Caporaso
defined __repr__ for FileLink and FileLinks. this now presents the absolute path when run from an ipython session, and a link when run from the HTML notebook
r8442 html_link_str = "<a href='%s' target='_blank'>%s</a>"
Greg Caporaso
made link_str a class-level attribute based on suggestion from @takluyver
r8438
Greg Caporaso
Working versions of formatters for files and directories that are generated within an IPython notebook session. This is useful for integrating tools like QIIME with the IPython notebook as it allows users to generate QIIME's HTML visualizations and open them in new pages in their the web browser.
r8272 def __init__(self,
path,
Greg Caporaso
moved / to url_prefix rather than ''.join calls as this allows the user to override it
r8446 url_prefix='files/',
Greg Caporaso
removed leading underscore from parameters based on suggestion from @takluyver. the initial thought was that these would be private, but there's no harm in having them be public.
r8439 result_html_prefix='',
result_html_suffix='<br>'):
Greg Caporaso
Working versions of formatters for files and directories that are generated within an IPython notebook session. This is useful for integrating tools like QIIME with the IPython notebook as it allows users to generate QIIME's HTML visualizations and open them in new pages in their the web browser.
r8272 """
Thomas Kluyver
Miscellaneous docs fixes
r9244 Parameters
----------
path : str
path to the file or directory that should be formatted
directory_prefix : str
prefix to be prepended to all files to form a working link [default:
'files']
result_html_prefix : str
text to append to beginning to link [default: none]
result_html_suffix : str
text to append at the end of link [default: '<br>']
Greg Caporaso
Working versions of formatters for files and directories that are generated within an IPython notebook session. This is useful for integrating tools like QIIME with the IPython notebook as it allows users to generate QIIME's HTML visualizations and open them in new pages in their the web browser.
r8272 """
Greg Caporaso
removing DirectoryLink class (which was an alias for FileLink) and modifying FileLink to raise an error if a directory is provided. @ellisonbg pointed out that these give a 404. I think removing this for now is the way to go as we don't have an immediate use case for DirectoryLink - FileLinks is what we would want users to call for linking to a directory.
r8835 if isdir(path):
raise ValueError,\
Greg Caporaso
added tests to confirm that error is raise when FileLink is passed a directory. Also specifically disallowed passing a file to FileLinks for consistency.
r8836 ("Cannot display a directory using FileLink. "
Greg Caporaso
removing DirectoryLink class (which was an alias for FileLink) and modifying FileLink to raise an error if a directory is provided. @ellisonbg pointed out that these give a 404. I think removing this for now is the way to go as we don't have an immediate use case for DirectoryLink - FileLinks is what we would want users to call for linking to a directory.
r8835 "Use FileLinks to display '%s'." % path)
Greg Caporaso
Working versions of formatters for files and directories that are generated within an IPython notebook session. This is useful for integrating tools like QIIME with the IPython notebook as it allows users to generate QIIME's HTML visualizations and open them in new pages in their the web browser.
r8272 self.path = path
Greg Caporaso
updated parameter name based on suggestion from @takluyver
r8437 self.url_prefix = url_prefix
Greg Caporaso
removed leading underscore from parameters based on suggestion from @takluyver. the initial thought was that these would be private, but there's no harm in having them be public.
r8439 self.result_html_prefix = result_html_prefix
self.result_html_suffix = result_html_suffix
Greg Caporaso
Working versions of formatters for files and directories that are generated within an IPython notebook session. This is useful for integrating tools like QIIME with the IPython notebook as it allows users to generate QIIME's HTML visualizations and open them in new pages in their the web browser.
r8272
def _format_path(self):
Greg Caporaso
moved / to url_prefix rather than ''.join calls as this allows the user to override it
r8446 fp = ''.join([self.url_prefix,self.path])
Greg Caporaso
removed leading underscore from parameters based on suggestion from @takluyver. the initial thought was that these would be private, but there's no harm in having them be public.
r8439 return ''.join([self.result_html_prefix,
Greg Caporaso
defined __repr__ for FileLink and FileLinks. this now presents the absolute path when run from an ipython session, and a link when run from the HTML notebook
r8442 self.html_link_str % (fp, self.path),
Greg Caporaso
removed leading underscore from parameters based on suggestion from @takluyver. the initial thought was that these would be private, but there's no harm in having them be public.
r8439 self.result_html_suffix])
Greg Caporaso
Working versions of formatters for files and directories that are generated within an IPython notebook session. This is useful for integrating tools like QIIME with the IPython notebook as it allows users to generate QIIME's HTML visualizations and open them in new pages in their the web browser.
r8272
def _repr_html_(self):
Greg Caporaso
defined __repr__ for FileLink and FileLinks. this now presents the absolute path when run from an ipython session, and a link when run from the HTML notebook
r8442 """return html link to file
Greg Caporaso
Working versions of formatters for files and directories that are generated within an IPython notebook session. This is useful for integrating tools like QIIME with the IPython notebook as it allows users to generate QIIME's HTML visualizations and open them in new pages in their the web browser.
r8272 """
if not exists(self.path):
return ("Path (<tt>%s</tt>) doesn't exist. "
"It may still be in the process of "
"being generated, or you may have the "
"incorrect path." % self.path)
return self._format_path()
Greg Caporaso
defined __repr__ for FileLink and FileLinks. this now presents the absolute path when run from an ipython session, and a link when run from the HTML notebook
r8442
def __repr__(self):
Greg Caporaso
improved behavior of FileLinks.__repr__ to be more like the behvior of _repr_html_
r8443 """return absolute path to file
Greg Caporaso
defined __repr__ for FileLink and FileLinks. this now presents the absolute path when run from an ipython session, and a link when run from the HTML notebook
r8442 """
return abspath(self.path)
Greg Caporaso
Working versions of formatters for files and directories that are generated within an IPython notebook session. This is useful for integrating tools like QIIME with the IPython notebook as it allows users to generate QIIME's HTML visualizations and open them in new pages in their the web browser.
r8272
Greg Caporaso
renamed classes as recommended by @takluyver
r8365 class FileLinks(FileLink):
Greg Caporaso
Working versions of formatters for files and directories that are generated within an IPython notebook session. This is useful for integrating tools like QIIME with the IPython notebook as it allows users to generate QIIME's HTML visualizations and open them in new pages in their the web browser.
r8272 """Class for embedding local file links in an IPython session, based on path
e.g. to embed links to files that were generated in the IPython notebook under my/data
you would do:
Greg Caporaso
renamed classes as recommended by @takluyver
r8365 local_files = FileLinks("my/data")
Greg Caporaso
Working versions of formatters for files and directories that are generated within an IPython notebook session. This is useful for integrating tools like QIIME with the IPython notebook as it allows users to generate QIIME's HTML visualizations and open them in new pages in their the web browser.
r8272 display(local_files)
Greg Caporaso
documentation modification
r8276
or in the HTML notebook, just
Greg Caporaso
renamed classes as recommended by @takluyver
r8365 FileLinks("my/data")
Greg Caporaso
documentation modification
r8276
Greg Caporaso
Working versions of formatters for files and directories that are generated within an IPython notebook session. This is useful for integrating tools like QIIME with the IPython notebook as it allows users to generate QIIME's HTML visualizations and open them in new pages in their the web browser.
r8272 """
def __init__(self,
path,
Greg Caporaso
moved / to url_prefix rather than ''.join calls as this allows the user to override it
r8446 url_prefix='files/',
Greg Caporaso
removed leading underscore from parameters based on suggestion from @takluyver. the initial thought was that these would be private, but there's no harm in having them be public.
r8439 included_suffixes=None,
result_html_prefix='',
Greg Caporaso
improved formatting for FileLinks
r8619 result_html_suffix='<br>',
notebook_display_formatter=None,
terminal_display_formatter=None):
Greg Caporaso
Working versions of formatters for files and directories that are generated within an IPython notebook session. This is useful for integrating tools like QIIME with the IPython notebook as it allows users to generate QIIME's HTML visualizations and open them in new pages in their the web browser.
r8272 """
included_suffixes : list of filename suffixes to include when
formatting output [default: include all files]
Greg Caporaso
renamed classes as recommended by @takluyver
r8365 See the FileLink (baseclass of LocalDirectory) docstring for
Greg Caporaso
Working versions of formatters for files and directories that are generated within an IPython notebook session. This is useful for integrating tools like QIIME with the IPython notebook as it allows users to generate QIIME's HTML visualizations and open them in new pages in their the web browser.
r8272 information on additional parameters.
Greg Caporaso
noew removes trailing slashes if they are provided in input so the output can be formatted consistently by always appending a trailing slash (which previously could result in two trailing slashes if the input path included a trailing slash)
r8631
Greg Caporaso
updated documentation on display formatters
r8803 notebook_display_formatter : func used to format links for display
in the notebook. See discussion of formatter function below.
Greg Caporaso
noew removes trailing slashes if they are provided in input so the output can be formatted consistently by always appending a trailing slash (which previously could result in two trailing slashes if the input path included a trailing slash)
r8631
Greg Caporaso
updated documentation on display formatters
r8803 terminal_display_formatter : func used to format links for display
in the terminal. See discussion of formatter function below.
Passing custom formatter functions
----------------------------------
Formatter functions must be of the form:
f(dirname, fnames, included_suffixes)
dirname : the name of a directory (a string),
fnames : a list of the files in that directory
included_suffixes : a list of the file suffixes that should be
included in the output (passing None means
to include all suffixes in the output in
the built-in formatters)
returns a list of lines that should will be print in the
notebook (if passing notebook_display_formatter) or the terminal
(if passing terminal_display_formatter). This function is iterated
over for each directory in self.path. Default formatters are in
place, can be passed here to support alternative formatting.
Greg Caporaso
fixed bug in test and in support for passing alternative formatters
r8626
Greg Caporaso
Working versions of formatters for files and directories that are generated within an IPython notebook session. This is useful for integrating tools like QIIME with the IPython notebook as it allows users to generate QIIME's HTML visualizations and open them in new pages in their the web browser.
r8272 """
Greg Caporaso
added tests to confirm that error is raise when FileLink is passed a directory. Also specifically disallowed passing a file to FileLinks for consistency.
r8836 if isfile(path):
raise ValueError,\
("Cannot display a file using FileLinks. "
"Use FileLink to display '%s'." % path)
Greg Caporaso
removed leading underscore from parameters based on suggestion from @takluyver. the initial thought was that these would be private, but there's no harm in having them be public.
r8439 self.included_suffixes = included_suffixes
Greg Caporaso
noew removes trailing slashes if they are provided in input so the output can be formatted consistently by always appending a trailing slash (which previously could result in two trailing slashes if the input path included a trailing slash)
r8631 # remove trailing slashs for more consistent output formatting
path = path.rstrip('/')
Greg Caporaso
removing DirectoryLink class (which was an alias for FileLink) and modifying FileLink to raise an error if a directory is provided. @ellisonbg pointed out that these give a 404. I think removing this for now is the way to go as we don't have an immediate use case for DirectoryLink - FileLinks is what we would want users to call for linking to a directory.
r8835
self.path = path
self.url_prefix = url_prefix
self.result_html_prefix = result_html_prefix
self.result_html_suffix = result_html_suffix
Greg Caporaso
cleaned up to reduce duplicated code
r8624
self.notebook_display_formatter = \
Greg Caporaso
fixed bug in test and in support for passing alternative formatters
r8626 notebook_display_formatter or self._get_notebook_display_formatter()
Greg Caporaso
cleaned up to reduce duplicated code
r8624 self.terminal_display_formatter = \
Greg Caporaso
fixed bug in test and in support for passing alternative formatters
r8626 terminal_display_formatter or self._get_terminal_display_formatter()
Greg Caporaso
Working versions of formatters for files and directories that are generated within an IPython notebook session. This is useful for integrating tools like QIIME with the IPython notebook as it allows users to generate QIIME's HTML visualizations and open them in new pages in their the web browser.
r8272
Greg Caporaso
cleaned up to reduce duplicated code
r8624 def _get_display_formatter(self,
dirname_output_format,
fname_output_format,
Greg Caporaso
this should address the failure in #2732...
r9093 fp_format,
fp_cleaner=None):
Greg Caporaso
updated documentation on display formatters
r8803 """ generate built-in formatter function
this is used to define both the notebook and terminal built-in
formatters as they only differ by some wrapper text for each entry
Greg Caporaso
noew removes trailing slashes if they are provided in input so the output can be formatted consistently by always appending a trailing slash (which previously could result in two trailing slashes if the input path included a trailing slash)
r8631
dirname_output_format: string to use for formatting directory
names, dirname will be substituted for a single "%s" which
must appear in this string
fname_output_format: string to use for formatting file names,
if a single "%s" appears in the string, fname will be substituted
if two "%s" appear in the string, the path to fname will be
substituted for the first and fname will be substituted for the
second
fp_format: string to use for formatting filepaths, must contain
exactly two "%s" and the dirname will be subsituted for the first
and fname will be substituted for the second
"""
Greg Caporaso
added included_suffixes as an option to display formatters - previously it wasn't possible to pass these in if defining custom display formatters
r8802 def f(dirname, fnames, included_suffixes=None):
Greg Caporaso
updating to make interface more intuitive now that we're not using os.path.walk
r8801 result = []
Greg Caporaso
improved formatting for FileLinks
r8619 # begin by figuring out which filenames, if any,
# are going to be displayed
display_fnames = []
for fname in fnames:
if (isfile(join(dirname,fname)) and
(included_suffixes == None or
splitext(fname)[1] in included_suffixes)):
display_fnames.append(fname)
Greg Caporaso
cleaned up to reduce duplicated code
r8624
Greg Caporaso
improved formatting for FileLinks
r8619 if len(display_fnames) == 0:
Greg Caporaso
noew removes trailing slashes if they are provided in input so the output can be formatted consistently by always appending a trailing slash (which previously could result in two trailing slashes if the input path included a trailing slash)
r8631 # if there are no filenames to display, don't print anything
# (not even the directory name)
Greg Caporaso
improved formatting for FileLinks
r8619 pass
else:
Greg Caporaso
noew removes trailing slashes if they are provided in input so the output can be formatted consistently by always appending a trailing slash (which previously could result in two trailing slashes if the input path included a trailing slash)
r8631 # otherwise print the formatted directory name followed by
# the formatted filenames
Greg Caporaso
cleaned up to reduce duplicated code
r8624 dirname_output_line = dirname_output_format % dirname
Greg Caporaso
updating to make interface more intuitive now that we're not using os.path.walk
r8801 result.append(dirname_output_line)
Greg Caporaso
improved formatting for FileLinks
r8619 for fname in display_fnames:
Greg Caporaso
cleaned up to reduce duplicated code
r8624 fp = fp_format % (dirname,fname)
Greg Caporaso
updated based on comment from @takluyver
r9305 if fp_cleaner is not None:
Greg Caporaso
this should address the failure in #2732...
r9093 fp = fp_cleaner(fp)
Greg Caporaso
cleaned up to reduce duplicated code
r8624 try:
# output can include both a filepath and a filename...
fname_output_line = fname_output_format % (fp, fname)
except TypeError:
# ... or just a single filepath
fname_output_line = fname_output_format % fname
Greg Caporaso
updating to make interface more intuitive now that we're not using os.path.walk
r8801 result.append(fname_output_line)
return result
Greg Caporaso
improved formatting for FileLinks
r8619 return f
Greg Caporaso
cleaned up to reduce duplicated code
r8624 def _get_notebook_display_formatter(self,
spacer="&nbsp;&nbsp;"):
Greg Caporaso
added included_suffixes as an option to display formatters - previously it wasn't possible to pass these in if defining custom display formatters
r8802 """ generate function to use for notebook formatting
Greg Caporaso
noew removes trailing slashes if they are provided in input so the output can be formatted consistently by always appending a trailing slash (which previously could result in two trailing slashes if the input path included a trailing slash)
r8631 """
Greg Caporaso
cleaned up to reduce duplicated code
r8624 dirname_output_format = \
Greg Caporaso
noew removes trailing slashes if they are provided in input so the output can be formatted consistently by always appending a trailing slash (which previously could result in two trailing slashes if the input path included a trailing slash)
r8631 self.result_html_prefix + "%s/" + self.result_html_suffix
Greg Caporaso
cleaned up to reduce duplicated code
r8624 fname_output_format = \
self.result_html_prefix + spacer + self.html_link_str + self.result_html_suffix
fp_format = self.url_prefix + '%s/%s'
Greg Caporaso
this should address the failure in #2732...
r9093 if sep == "\\":
# Working on a platform where the path separator is "\", so
# must convert these to "/" for generating a URI
def fp_cleaner(fp):
# Replace all occurences of backslash ("\") with a forward
# slash ("/") - this is necessary on windows when a path is
# provided as input, but we must link to a URI
return fp.replace('\\','/')
else:
fp_cleaner = None
Greg Caporaso
cleaned up to reduce duplicated code
r8624
return self._get_display_formatter(dirname_output_format,
fname_output_format,
Greg Caporaso
this should address the failure in #2732...
r9093 fp_format,
fp_cleaner)
Greg Caporaso
improved formatting for FileLinks
r8619
Greg Caporaso
cleaned up to reduce duplicated code
r8624 def _get_terminal_display_formatter(self,
spacer=" "):
Greg Caporaso
added included_suffixes as an option to display formatters - previously it wasn't possible to pass these in if defining custom display formatters
r8802 """ generate function to use for terminal formatting
Greg Caporaso
noew removes trailing slashes if they are provided in input so the output can be formatted consistently by always appending a trailing slash (which previously could result in two trailing slashes if the input path included a trailing slash)
r8631 """
dirname_output_format = "%s/"
Greg Caporaso
cleaned up to reduce duplicated code
r8624 fname_output_format = spacer + "%s"
fp_format = '%s/%s'
return self._get_display_formatter(dirname_output_format,
fname_output_format,
fp_format)
Greg Caporaso
improved formatting for FileLinks
r8619
def _format_path(self):
result_lines = []
Greg Caporaso
updated to use os.walk instead of os.path.walk - os.path.walk is not supported in Python 3
r8800 walked_dir = list(walk(self.path))
walked_dir.sort()
for dirname, subdirs, fnames in walked_dir:
Greg Caporaso
added included_suffixes as an option to display formatters - previously it wasn't possible to pass these in if defining custom display formatters
r8802 result_lines += self.notebook_display_formatter(dirname, fnames, self.included_suffixes)
Greg Caporaso
improved formatting for FileLinks
r8619 return '\n'.join(result_lines)
Greg Caporaso
improved behavior of FileLinks.__repr__ to be more like the behvior of _repr_html_
r8443
def __repr__(self):
"""return newline-separated absolute paths
"""
Greg Caporaso
improved formatting for FileLinks
r8619 result_lines = []
Greg Caporaso
updated to use os.walk instead of os.path.walk - os.path.walk is not supported in Python 3
r8800 walked_dir = list(walk(self.path))
walked_dir.sort()
for dirname, subdirs, fnames in walked_dir:
Greg Caporaso
added included_suffixes as an option to display formatters - previously it wasn't possible to pass these in if defining custom display formatters
r8802 result_lines += self.terminal_display_formatter(dirname, fnames, self.included_suffixes)
Greg Caporaso
updating my code to incorporate upstream changes; resolved a merge conflict in IPython/lib/display.py
r8798 return '\n'.join(result_lines)