Example #1
0
    def test_read(self):
        """Can older notebooks be opened without modification?"""

        # Open a version 3 notebook.  Make sure it is still version 3.
        with self.fopen("test3.ipynb", "r") as f:
            nb = read(f)
        (major, minor) = get_version(nb)
        self.assertEqual(major, 3)

        # Open a version 2 notebook.  Make sure it is still version 2.
        with self.fopen("test2.ipynb", "r") as f:
            nb = read(f)
        (major, minor) = get_version(nb)
        self.assertEqual(major, 2)
Example #2
0
    def refresh(self, on_changed=False):
        '''Reload the notebook from file and compile cells.'''
        # only refresh if the file has updated
        ts = os.stat(self.nb_path).st_mtime
        if on_changed:
            dtstr = datetime.datetime.fromtimestamp(ts).strftime('%m/%d/%Y %H:%M:%S')
            if ts == self.timestamp:
                # print('Notebook has not changed since {}'.format(dtstr))
                return self
            else:
                print('Notebook last updated at {}. Refreshing.'.format(dtstr))
        self.timestamp = ts

        self.cells = []
        self.md_tags = []
        self.block_tag = None

        with io.open(self.nb_path, 'r', encoding='utf-8') as f:
            notebook = reader.read(f)

        # convert to current notebook version
        notebook = converter.convert(notebook, current_nbformat)

        self.compiler = CachingCompiler()
        for i, cell in enumerate(notebook.cells):
            if cell.cell_type == 'markdown' and self.md_parser:
                self._markdown_tags(cell)

            elif cell.cell_type == 'code' and cell.source:
                source = self._compile_code(cell.source, i)
                self.cells.append({'source': cell.source, 'code': source,
                                   'tags': self._cell_tags(cell),
                                   'md_tags': tuple(self.md_tags)})

        return self
Example #3
0
    def load_module_by_path(self):
        # parse the notebook json
        with io.open(self.nb_path, 'r', encoding='utf-8') as f:
            notebook = reader.read(f)
        # convert to current notebook version
        notebook = convert_notebook(notebook)

        # create the module and generate a hash from the name
        fullname = hashlib.sha1().hexdigest()
        mod = types.ModuleType(fullname)
        mod.__file__ = self.nb_path
        mod.__package__ = None
        mod.__loader__ = self
        sys.modules[fullname] = mod

        # extra work to ensure that magics that would affect the user_ns
        # actually affect the notebook module's ns
        save_user_ns = self.shell.user_ns
        self.shell.user_ns = mod.__dict__

        try:
            self.eval_notebook(notebook, mod)
        finally:
            self.shell.user_ns = save_user_ns
        return mod
Example #4
0
    def load_module(self, fullname):
        '''
        Creates a module containing the exposed API content of a notebook
        by evaluating those notebook cells.
        '''
        # parse the notebook json
        with io.open(self.nb_path, 'r', encoding='utf-8') as f:
            notebook = reader.read(f)
        # convert to current notebook version
        notebook = convert_notebook(notebook)

        # create the module
        mod = types.ModuleType(fullname)
        mod.__file__ = self.nb_path
        mod.__package__ = '.'.join(fullname.split('.')[:-1])
        mod.__loader__ = self
        sys.modules[fullname] = mod

        # extra work to ensure that magics that would affect the user_ns
        # actually affect the notebook module's ns
        save_user_ns = self.shell.user_ns
        self.shell.user_ns = mod.__dict__

        try:
            self.eval_notebook(notebook, mod)
        finally:
            self.shell.user_ns = save_user_ns
        return mod
    def load_module_by_path(self):
        # parse the notebook json
        with io.open(self.nb_path, 'r', encoding='utf-8') as f:
            notebook = reader.read(f)
        # convert to current notebook version
        notebook = convert_notebook(notebook)

        # create the module and generate a hash from the name
        fullname = hashlib.sha1().hexdigest()
        mod = types.ModuleType(fullname)
        mod.__file__ = self.nb_path
        mod.__package__ = None
        mod.__loader__ = self
        sys.modules[fullname] = mod

        # extra work to ensure that magics that would affect the user_ns
        # actually affect the notebook module's ns
        save_user_ns = self.shell.user_ns
        self.shell.user_ns = mod.__dict__

        try:
            self.eval_notebook(notebook, mod)
        finally:
            self.shell.user_ns = save_user_ns
        return mod
    def load_module(self, fullname):
        '''
        Creates a module containing the exposed API content of a notebook
        by evaluating those notebook cells.
        '''
        # parse the notebook json
        with io.open(self.nb_path, 'r', encoding='utf-8') as f:
            notebook = reader.read(f)
        # convert to current notebook version
        notebook = convert_notebook(notebook)

        # create the module
        mod = types.ModuleType(fullname)
        mod.__file__ = self.nb_path
        mod.__package__ = '.'.join(fullname.split('.')[:-1])
        mod.__loader__ = self
        sys.modules[fullname] = mod

        # extra work to ensure that magics that would affect the user_ns
        # actually affect the notebook module's ns
        save_user_ns = self.shell.user_ns
        self.shell.user_ns = mod.__dict__

        try:
            self.eval_notebook(notebook, mod)
        finally:
            self.shell.user_ns = save_user_ns
        return mod
Example #7
0
 def test_upgrade_downgrade_4_3_4(self):
     """Test that a v4 notebook downgraded to v3 and then upgraded to v4
     passes validation tests"""
     with self.fopen("test4.ipynb", "r") as f:
         nb = read(f)
     validate(nb)
     nb = convert(nb, 3)
     validate(nb)
     nb = convert(nb, 4)
     self.assertEqual(isvalid(nb), True)
Example #8
0
    def test_upgrade_2_3(self):
        """Do notebook upgrades work?"""

        # Open a version 2 notebook and attempt to upgrade it to version 3.
        with self.fopen("test2.ipynb", "r") as f:
            nb = read(f)
        nb = convert(nb, 3)

        # Check if upgrade was successful.
        (major, minor) = get_version(nb)
        self.assertEqual(major, 3)
Example #9
0
    def test_downgrade_3_2(self):
        """Do notebook downgrades work?"""

        # Open a version 3 notebook and attempt to downgrade it to version 2.
        with self.fopen("test3.ipynb", "r") as f:
            nb = read(f)
        nb = convert(nb, 2)

        # Check if downgrade was successful.
        (major, minor) = get_version(nb)
        self.assertEqual(major, 2)
Example #10
0
    def test_open_current(self):
        """Can an old notebook be opened and converted to the current version
        while remembering the original version of the notebook?"""

        # Open a version 2 notebook and attempt to upgrade it to the current version
        # while remembering it's version information.
        with self.fopen("test2.ipynb", "r") as f:
            nb = read(f)
        (original_major, original_minor) = get_version(nb)
        nb = convert(nb, current_nbformat)

        # Check if upgrade was successful.
        (major, minor) = get_version(nb)
        self.assertEqual(major, current_nbformat)

        # Check if the original major revision was remembered.
        self.assertEqual(original_major, 2)
Example #11
0
def execute_notebook(nbfile, silent=True):
    """
    execute a notebook file
    Args:
        nbfile: the filename
        silent: should output be hidden.

    Returns: Nothing

    """
    with io.open(nbfile) as f:
        nb = reader.read(f)

    ip = get_ipython()

    for cell in nb.cells:
        if cell.cell_type != 'code':
            continue
        ip.run_cell(cell.source, silent=silent)
Example #12
0
def execute_notebook(nbfile, silent=True):
    """
    execute a notebook file
    Args:
        nbfile: the filename
        silent: should output be hidden.

    Returns: Nothing

    """
    with io.open(nbfile) as f:
        nb = reader.read(f)

    ip = get_ipython()

    for cell in nb.cells:
        if cell.cell_type != 'code':
            continue
        ip.run_cell(cell.source, silent=silent)
Example #13
0
    def test_upgrade_3_4__missing_metadata(self):
        with self.fopen("test3_no_metadata.ipynb", "r") as f:
            nb = read(f)

        with self.assertRaisesRegex(ValidationError, r"could not be converted.+metadata"):
            convert(nb, 4)
Example #14
0
 def test_read_fails_on_missing_worksheet_cells(self):
     with self.fopen("test3_worksheet_with_no_cells.ipynb", "r") as f:
         with self.assertRaisesRegex(ValidationError, r"cells"):
             nb = read(f)