view ipynb.py @ 0:7ae1c661a86c draft

Uploaded
author iuc
date Mon, 28 Jul 2014 03:21:07 -0400
parents
children 8e8555ca07f9
line wrap: on
line source

# -*- coding: utf-8 -*-

from galaxy.datatypes.json import Json
from galaxy.datatypes.data import get_file_peek
import subprocess
import tempfile
import json
import os

class Ipynb( Text ):
    file_ext = "ipynb"

    def set_peek( self, dataset, is_multi_byte=False ):
        if not dataset.dataset.purged:
            dataset.peek = get_file_peek( dataset.file_name, is_multi_byte=is_multi_byte )
            dataset.blurb = "IPython Notebook"
        else:
            dataset.peek = 'file does not exist'
            dataset.blurb = 'file purged from disc'

    def sniff( self, filename ):
        """
            Try to load the string with the json module. If successful it's a json file.
        """
        try:
            json.load( filename )
            if a.get('nbformat', False) != False and a.get('metadata', False):
                return True
            else:
                return False
        except:
            return False

    def display_data(self, trans, dataset, preview=False, filename=None, to_ext=None, chunk=None, **kwd):
        preview = util.string_as_bool( preview )
        if chunk:
            return self.get_chunk(trans, dataset, chunk)
        elif to_ext or not preview:
            return self._serve_raw(trans, dataset, to_ext)
        else:
            ofile_handle = tempfile.NamedTemporaryFile(delete=False)
            ofilename = file_handle.name
            ofile_handle.close()
            try:
                cmd = 'ipython nbconvert --to html --template basic %s %s' % (dataset.file_name, ofilename)
                subprocess.call(cmd)
                ofilename = '%s.html' % ofilename
            except:
                ofilename = dataset.file_name
                log.exception( 'Command "%s" failed. Could not convert the IPython Notebook to HTML, defaulting to plain text.' % cmd )
            return open( ofilename )
            """return trans.fill_template( "/dataset/tabular_chunked.mako",
                        dataset = dataset,
                        chunk = self.get_chunk(trans, dataset, 0),
                        column_number = column_number,
                        column_names = column_names,
                        column_types = column_types )"""

    def set_meta( self, dataset, **kwd ):
        """
        Set the number of models in dataset.
        """
        pass