Giter VIP home page Giter VIP logo

nbpages's Introduction

nbpages

nbpages is a command line tool for managing a collection of Jupyter notebooks published on Github Pages . This project was inspired by the tools included with the Python Data Science Handbook by Jake Vanderplas.

Installation

pip install nbpages

To upgrade a previously installed version to the latest version

pip install nbpages --upgrade

(Advanced Users) For an editable installation from a local clone of the git repo, use:

pip install --editable .

An editable installation will allow you keep your installation of nbpages in sync with github using git pull commands.

Setting up the notebook repository

Step 1. [Create a repository on Github.com](https://help.github.com/en/articles/creating-a-new-repository). A minimal repository will include README.md, .gitignore (typically the python option), and a license. Clone the repository to a local directory using either the command line or the "Code > Open with Github Desktop" menu option.

Step 2. Open a terminal/command window on your laptop, and navigate to the top level directory of the local repository created in Step 1. Issue the command

nbpages --setup

This will setup a docs, notebooks, and templates directory, load several templates into the templates directory, and create an nbpages.cfg configuration file. The templates and configuration file can be edited to change from default settings. When complete, push these changes to the remote git repository.

Step 3. Github Pages are enabled in the settings tab of the remote repository. Scroll down to the Github Pages heading. For source select master branch /docs folder and choose an appropriate theme. Selecting a theme will insert a file named _config.yml in the docs folder. If you wish to include a logo for the theme, add a line logo: image_url to _config.yml where image_url is a url for the desired logo image. Finally, on the main repository page you may wish to click edit to add a brief description and the github pages url as the website for the repository. When finished, sync these changes to the local repository.

Step 4. In the top level directory of the local repository, run the command

nbpages --publish

This will create additional table of contents and tag_index files in the docs directory. Commit and push these changes to the remote directory. At this stage you have a published an empty collection of notebooks to github pages.

Notebook organization

Notebooks are maintained within the notebooks directory. Thare are organized into a chapter/section heirarchy using a filename prefix. Filenames have an nn.mm- prefix where`nn` refers to the chapter number or, if a letter, to an Appendix. The digits mm refers to the section number. Section 00 is reserved to hold the chapter title and any introductory material. The notebooks must also have the usual .ipynb suffix.

Normal usage

Following setup, the normal use of nbpages is to execute the command line

nbpages --publish

from the top level directory of the notebook repository. Normally this command would be between completing edits or additions to the notebooks and prior to a github commit. The command will

  • add or amend headers and navigation bars in all notebooks,
  • write a table of contents file
  • write a keyword index
  • write index.md using the template file

Removing solution and hidden code

nbpages can be used to manage a collection of notebooks that serve as course notes that incorporate exercises and homework assignments. For that purpose, the command line

nbpages --remove_code --publish

will selectively remove code segments from code cells. Code segments beginning and ending with

### BEGIN SOLUTION ... python code ... ### END SOLUTION

are replaced with

# YOUR SOLUTION HERE

Code segments beginning and ending with

### BEGIN HIDDEN TESTS ... python code ... ### END HIDDEN TESTS

are removed with no replacement text.

Utilities

To help achieve a consistent style over a collection of notebooks, use the command

nbpages --lint

to locate some forms of notebook 'lint'. A current list of additional features can be found

nbpages --help

A summary of notebook metadata, such as python version last used to run the notebooks, is printed to stdout with

nbpages --metadata

Documentation

Documentation is available on the nbpages website `https://jckantor.github.io/nbpages/ <https://jckantor.github.io/nbpages/>?`_.

nbpages's People

Contributors

adowling2 avatar jckantor avatar

Stargazers

 avatar

Watchers

 avatar  avatar

nbpages's Issues

Critical: error with loading data files in Colab

Take a look at this notebook. Open it in Colab.
https://ndcbe.github.io/cbe67701-uncertainty-quantification/01.01-Contributed-Example.html

Running this line:

stock_data = pd.read_csv('./data/Stock_Data.csv')

Gave the following error:

---------------------------------------------------------------------------

FileNotFoundError                         Traceback (most recent call last)

<ipython-input-4-4072e866c75c> in <module>()
----> 1 stock_data = pd.read_csv('./data/Stock_Data.csv')

4 frames

/usr/local/lib/python3.6/dist-packages/pandas/io/parsers.py in __init__(self, src, **kwds)
   1889         kwds["usecols"] = self.usecols
   1890 
-> 1891         self._reader = parsers.TextReader(src, **kwds)
   1892         self.unnamed_cols = self._reader.unnamed_cols
   1893 

pandas/_libs/parsers.pyx in pandas._libs.parsers.TextReader.__cinit__()

pandas/_libs/parsers.pyx in pandas._libs.parsers.TextReader._setup_parser_source()

FileNotFoundError: [Errno 2] File ./data/Stock_Data.csv does not exist: './data/Stock_Data.csv'

Here is the problem: When writing to HTML, we need to point to the text file in GitHub.

@jckantor I would like to share this notebook with the class on Tuesday.

Special formatting for cells with special tags

In my current CBE 20258 notebooks, I use some HTML code to put a colored box around certain markdown cells. For example:

<div style="background-color: rgba(0,255,0,0.05) ; padding: 10px; border: 1px solid darkgreen;"> 
<b>Home Activity</b>: In the cell below, assign the value of 5 to the variable x. Then type Shift+Enter to execute the line.
</div>

This box is solid dark green which I use for all "home activities". I used a blue box for "class activities" and a red box for "important notes". Would it be possible to add a border and set the background color accordingly for cells with "home-activity", "class-activity", and "important-note" tags when publishing to the HTML pages? Currently, nbpages strips out this formatting, which I think is fine. I would much rather use tags.

Document the steps for setting up a new repo

Steps including:

  • Editing templates/index.md.tpl
  • Editing templates/notebook_header.tpl
  • Editing templates/nbpages.tpl (advanced users only)
  • Editing nbpages.cfg (advanced users only)

Special processing for tag under-construction

Proposal: With a special command-line option, if nbpages finds a header cell with the tag under-construction, it will strip out replace all of the subsequent non-header cells that under it with custom text. We can make the default "This notebook section is under construction". Check again soon."

Example with three markdown cells:

## Some time here

blah A blah A blab A 
### Subtle point 1

blah B blah B blah B
### Subtle point 2

blah C blah C blah C

If I tagged the first cell with under-construction, then the contents "blah B blah B, blah B" and "blah C blah C, blah C" would get replaced with "This notebook section is under construction".

Why is this helpful? I want to start migrating old class notebooks but I do not want to make the contents, besides the header structure, public. Some notebooks require a major text or example rewrite. I'd prefer to get everything online and "under construction" then systematically clean notebooks up one section at a time.

Implement "easier"/"poor man's" testing

Create three repositories owned by ndcbe:

  1. nbpages-testing (completely hosted in 1 repo)
  2. nbpages-testing-dev (private, publishes to nbpages-testing-public)
  3. nbpages-testing-public (public)

The repos would contain just a few example notebooks and a script to completely reset /docs.

read_config.py is redundant

read_config.py was originally used to read the nbpages config. That functionality has been moved into main.py and nbcollection.py. Need to remove file, then test.

Support for two repos

Need to verify support for two repositories:

  • Repo 1: private, for instructors
  • Repo 2: public, for everyone

readthedocs

Need to complete integration with readthedocs

Incorrect sorting of tags

Tags are sorted alphabetically. But the prefix is header section number which needs to be parsed to correct sort. This is a problem if any of the section number components is becomes more than on digit.

Error setting up dual repo

@jckantor I am trying to set up https://github.com/ndcbe/cbe-xx258 to be the public version of https://github.com/ndcbe/CBExx258-instructor. After creating the public repo, I tried to run nbpages --setup, but got the following error message:

Traceback (most recent call last):
  File "/anaconda3/bin/nbpages", line 11, in <module>
    load_entry_point('nbpaages', 'console_scripts', 'nbpages')()
  File "/anaconda3/lib/python3.7/site-packages/pkg_resources/__init__.py", line 489, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/anaconda3/lib/python3.7/site-packages/pkg_resources/__init__.py", line 2793, in load_entry_point
    return ep.load()
  File "/anaconda3/lib/python3.7/site-packages/pkg_resources/__init__.py", line 2411, in load
    return self.resolve()
  File "/anaconda3/lib/python3.7/site-packages/pkg_resources/__init__.py", line 2417, in resolve
    module = __import__(self.module_name, fromlist=['__name__'], level=0)
  File "/Users/adowling/DowlingLab/Teaching/nbpages/src/nbpages/__init__.py", line 4, in <module>
    from .nbcollection import Nb, NbCollection
  File "/Users/adowling/DowlingLab/Teaching/nbpages/src/nbpages/nbcollection.py", line 20, in <module>
    sys.exit(1)
NameError: name 'sys' is not defined

I then manually made nbpages.cfg using the example here:

https://github.com/ndcbe/nbpages-testing-public/blob/master/nbpages.cfg

When I run nbpages --setup, I get the following error message:

Traceback (most recent call last):
  File "/anaconda3/bin/nbpages", line 11, in <module>
    load_entry_point('nbpaages', 'console_scripts', 'nbpages')()
  File "/anaconda3/lib/python3.7/site-packages/pkg_resources/__init__.py", line 489, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/anaconda3/lib/python3.7/site-packages/pkg_resources/__init__.py", line 2793, in load_entry_point
    return ep.load()
  File "/anaconda3/lib/python3.7/site-packages/pkg_resources/__init__.py", line 2411, in load
    return self.resolve()
  File "/anaconda3/lib/python3.7/site-packages/pkg_resources/__init__.py", line 2417, in resolve
    module = __import__(self.module_name, fromlist=['__name__'], level=0)
  File "/Users/adowling/DowlingLab/Teaching/nbpages/src/nbpages/__init__.py", line 4, in <module>
    from .nbcollection import Nb, NbCollection
  File "/Users/adowling/DowlingLab/Teaching/nbpages/src/nbpages/nbcollection.py", line 24, in <module>
    config = config["nbpages"]
  File "/anaconda3/lib/python3.7/configparser.py", line 958, in __getitem__
    raise KeyError(key)
KeyError: 'nbpages'

I am using the master branch of nbpages.

Mistake in regular expression used to generate nbpages.cfg

[NBPAGES]
github_repo_url = [email protected]:ndcbe/cbe67701-uncertainty-quantification.git
github_user_name = [email protected]:ndcbe
github_repo_name = cbe67701-uncertainty-quantification
github_pages_url = https://[email protected]:ndcbe.github.io/cbe67701-uncertainty-quantification
repository = [email protected]:ndcbe/cbe67701-uncertainty-quantification
page_title = cbe67701-uncertainty-quantification
page_url = https://[email protected]:ndcbe.github.io/cbe67701-uncertainty-quantification

Bug: Extra prefix in github_pages_url. Perhaps this is because the repo is in an organization.

python library usage index

Index usage of python libraries by search code cells for "from ... import" and "import ... " expressions. Display as "python_library_index" sorted by library, sublibrary with links to each instance of usage. Add link to the index file in index.html.

IPython3 lexer unavailable warning

I installed nbpages from the master branch this morning on a second computer (macOS X).

I am seeing the following error messages:
ModuleNotFoundError: No module named 'jupyter_contrib_nbextensions'

UserWarning: IPython3 lexer unavailable, falling back on Python 3

Are these missing dependencies for nbpages?

I installed nbpages by cloning the git repo and running pin install -e .

can nbpages.cfg be hard coded?

Can we hard code the name 'nbpages.cfg'? Currently there is a --config option to allow the possibility of an alternate or multiple config file. But would that ever be necessary? For the case of multiple destinations, nbpages could always be run from the destination directory with a unique nbpages.cfg.

Index class needed

Indexing is turning out to be one of the most useful features of nbpages. So far there are tag, python module, figure, and data indexes. Additional indexes that might be useful for notebook development are

  • index of python error messages
  • index of bibliographic references
  • index resulting from a user search

Currently some of the indexes are cached, which makes it problematic to do rewriting for 'under-construction' tags. (issue #28).

Propose a new index class created with

tag_index = Index()
tag_index.index(pattern)
tag_index.write_html(title)

cleanup before write

The docs directory accumulates unused files after repeated publishing runs. Do a cleanup of

/docs
/docs/figures
/docs/data

before publish. But don't touch _config.yml or any file listed inside _config.yml

Possible bug in nbpages.tpl

Below is output after adopting the changes in PR #24:

(base) esc306856:cbe67701-uncertainty-quantification adowling$ nbpages 
- inserting header for 01.00-Introduction-to-Uncertainty-Quantification-and-Predictive-Sciences.ipynb
- inserting header for 02.00-Probability-and-Statistics-Preliminaries.ipynb
- inserting header for 03.00-Input-Parameter-Distributions.ipynb
- inserting navbar for 01.00-Introduction-to-Uncertainty-Quantification-and-Predictive-Sciences.ipynb
- inserting navbar for 01.00-Introduction-to-Uncertainty-Quantification-and-Predictive-Sciences.ipynb
- inserting navbar for 02.00-Probability-and-Statistics-Preliminaries.ipynb
- inserting navbar for 02.00-Probability-and-Statistics-Preliminaries.ipynb
- inserting navbar for 03.00-Input-Parameter-Distributions.ipynb
- inserting navbar for 03.00-Input-Parameter-Distributions.ipynb
- writing table of contents file
[NbConvertApp] Converting notebook docs/toc.ipynb to html
[NbConvertApp] Writing 274340 bytes to docs/toc.html
- writing tag index file
[NbConvertApp] Converting notebook docs/tag_index.ipynb to html
[NbConvertApp] Writing 273413 bytes to docs/tag_index.html
- writing index.md
Traceback (most recent call last):
  File "/anaconda3/bin/nbpages", line 11, in <module>
    load_entry_point('nbpaages', 'console_scripts', 'nbpages')()
  File "/Users/adowling/DowlingLab/Teaching/nbpages/src/nbpages/__main__.py", line 98, in main
    notebooks.write_html(NOTEBOOK_DST_DIR, os.path.join("templates", 'nbpages.tpl'))
  File "/Users/adowling/DowlingLab/Teaching/nbpages/src/nbpages/nbcollection.py", line 464, in write_html
    (body, resources) = html_exporter.from_notebook_node(nb.content)
  File "/anaconda3/lib/python3.7/site-packages/nbconvert/exporters/html.py", line 96, in from_notebook_node
    output, resources = super(HTMLExporter, self).from_notebook_node(nb, resources, **kw)
  File "/anaconda3/lib/python3.7/site-packages/nbconvert/exporters/templateexporter.py", line 315, in from_notebook_node
    output = self.template.render(nb=nb_copy, resources=resources)
  File "/anaconda3/lib/python3.7/site-packages/nbconvert/exporters/templateexporter.py", line 113, in template
    self._template_cached = self._load_template()
  File "/anaconda3/lib/python3.7/site-packages/nbconvert/exporters/templateexporter.py", line 286, in _load_template
    return self.environment.get_template(template_file)
  File "/anaconda3/lib/python3.7/site-packages/jinja2/environment.py", line 830, in get_template
    return self._load_template(name, self.make_globals(globals))
  File "/anaconda3/lib/python3.7/site-packages/jinja2/environment.py", line 804, in _load_template
    template = self.loader.load(self, name, globals)
  File "/anaconda3/lib/python3.7/site-packages/jinja2/loaders.py", line 405, in load
    return loader.load(environment, name, globals)
  File "/anaconda3/lib/python3.7/site-packages/jinja2/loaders.py", line 125, in load
    code = environment.compile(source, name, filename)
  File "/anaconda3/lib/python3.7/site-packages/jinja2/environment.py", line 591, in compile
    self.handle_exception(exc_info, source_hint=source_hint)
  File "/anaconda3/lib/python3.7/site-packages/jinja2/environment.py", line 780, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/anaconda3/lib/python3.7/site-packages/jinja2/_compat.py", line 37, in reraise
    raise value.with_traceback(tb)
  File "/Users/adowling/DowlingLab/Teaching/cbe67701-uncertainty-quantification/templates/nbpages.tpl", line 15, in template
    {% endblock any
  File "/anaconda3/lib/python3.7/site-packages/jinja2/environment.py", line 497, in _parse
    return Parser(self, source, name, encode_filename(filename)).parse()
  File "/anaconda3/lib/python3.7/site-packages/jinja2/parser.py", line 901, in parse
    result = nodes.Template(self.subparse(), lineno=1)
  File "/anaconda3/lib/python3.7/site-packages/jinja2/parser.py", line 888, in subparse
    self.stream.expect('block_end')
  File "/anaconda3/lib/python3.7/site-packages/jinja2/lexer.py", line 384, in expect
    self.name, self.filename)
jinja2.exceptions.TemplateSyntaxError: expected token 'end of statement block', got 'any'

Here are the contents of templates/nbpages.tpl:

<!-- jinja2 template that extendes `full` to add cell tags in the html rendering of notebooks -->
{% extends 'full.tpl'%}
{% block any_cell %}
{% if cell['metadata'].get('tags', []) %}
    <div style="background-color:white; border:thin solid grey; margin-left:95px; margin-right:6px">
    {% for tag in cell['metadata'].get('tags', []) %}
        &nbsp; <a href="https://{github_user_name}.github.io/{github_repo_name}/tag_index.html#{{ tag }}">{{ tag }}</a>
    {% endfor %}
    </div>
    {{ super() }}
{% else %}
    {{ super() }}
{% endif %}
{% endblock any

Error when running nbpages for a few stub notebooks

(base) esc306856:cbe67701-uncertainty-quantification adowling$ nbpages 
- inserting header for 01.00-Introduction-to-Uncertainty-Quantification-and-Predictive-Sciences.ipynb
Traceback (most recent call last):
  File "/anaconda3/bin/nbpages", line 11, in <module>
    load_entry_point('nbpaages', 'console_scripts', 'nbpages')()
  File "/Users/adowling/DowlingLab/Teaching/nbpages/src/nbpages/__main__.py", line 92, in main
    notebooks.insert_headers()
  File "/Users/adowling/DowlingLab/Teaching/nbpages/src/nbpages/nbcollection.py", line 365, in insert_headers
    self.nbheader.insert(nb)
  File "/Users/adowling/DowlingLab/Teaching/nbpages/src/nbpages/nbcollection.py", line 307, in insert
    print('- inserting header for {0}'.format(nb.filenapatth_srme))
AttributeError: 'Chapter' object has no attribute 'filenapatth_srme'

I will commit the offending notebooks in https://github.com/ndcbe/cbe67701-uncertainty-quantification in a few minutes.

Setup fails using a local installation from master of git repo

Installation of nbpages:

(teaching) esc306856:nbpages adowling$ pip install -e .
Obtaining file:///Users/adowling/DowlingLab/Teaching/nbpages
Requirement already satisfied: nbconvert in /anaconda3/lib/python3.7/site-packages (from nbpaages==0.0.1.dev12) (5.4.1)
Requirement already satisfied: nbformat in /anaconda3/lib/python3.7/site-packages (from nbpaages==0.0.1.dev12) (4.4.0)
Collecting notedown (from nbpaages==0.0.1.dev12)
  Downloading https://files.pythonhosted.org/packages/d3/3a/d7c1817f3acb2e958b32fe85a35f52d270820fb9cebf1364b36c772cf3d0/notedown-1.5.1-py3-none-any.whl
Requirement already satisfied: mistune>=0.8.1 in /anaconda3/lib/python3.7/site-packages (from nbconvert->nbpaages==0.0.1.dev12) (0.8.4)
Requirement already satisfied: jinja2 in /anaconda3/lib/python3.7/site-packages (from nbconvert->nbpaages==0.0.1.dev12) (2.10)
Requirement already satisfied: pygments in /anaconda3/lib/python3.7/site-packages (from nbconvert->nbpaages==0.0.1.dev12) (2.3.1)
Requirement already satisfied: traitlets>=4.2 in /anaconda3/lib/python3.7/site-packages (from nbconvert->nbpaages==0.0.1.dev12) (4.3.2)
Requirement already satisfied: jupyter_core in /anaconda3/lib/python3.7/site-packages (from nbconvert->nbpaages==0.0.1.dev12) (4.4.0)
Requirement already satisfied: entrypoints>=0.2.2 in /anaconda3/lib/python3.7/site-packages (from nbconvert->nbpaages==0.0.1.dev12) (0.3)
Requirement already satisfied: bleach in /anaconda3/lib/python3.7/site-packages (from nbconvert->nbpaages==0.0.1.dev12) (3.1.0)
Requirement already satisfied: pandocfilters>=1.4.1 in /anaconda3/lib/python3.7/site-packages (from nbconvert->nbpaages==0.0.1.dev12) (1.4.2)
Requirement already satisfied: testpath in /anaconda3/lib/python3.7/site-packages (from nbconvert->nbpaages==0.0.1.dev12) (0.4.2)
Requirement already satisfied: defusedxml in /anaconda3/lib/python3.7/site-packages (from nbconvert->nbpaages==0.0.1.dev12) (0.5.0)
Requirement already satisfied: ipython-genutils in /anaconda3/lib/python3.7/site-packages (from nbformat->nbpaages==0.0.1.dev12) (0.2.0)
Requirement already satisfied: jsonschema!=2.5.0,>=2.4 in /anaconda3/lib/python3.7/site-packages (from nbformat->nbpaages==0.0.1.dev12) (3.0.1)
Requirement already satisfied: six in /anaconda3/lib/python3.7/site-packages (from notedown->nbpaages==0.0.1.dev12) (1.12.0)
Collecting pandoc-attributes (from notedown->nbpaages==0.0.1.dev12)
  Downloading https://files.pythonhosted.org/packages/c2/0a/442cc9237dc997cd88155bdcb54bf86e703e699881f4134ecb733ccd670c/pandoc-attributes-0.1.7.tar.gz
Requirement already satisfied: MarkupSafe>=0.23 in /anaconda3/lib/python3.7/site-packages (from jinja2->nbconvert->nbpaages==0.0.1.dev12) (1.1.1)
Requirement already satisfied: decorator in /anaconda3/lib/python3.7/site-packages (from traitlets>=4.2->nbconvert->nbpaages==0.0.1.dev12) (4.4.0)
Requirement already satisfied: webencodings in /anaconda3/lib/python3.7/site-packages (from bleach->nbconvert->nbpaages==0.0.1.dev12) (0.5.1)
Requirement already satisfied: attrs>=17.4.0 in /anaconda3/lib/python3.7/site-packages (from jsonschema!=2.5.0,>=2.4->nbformat->nbpaages==0.0.1.dev12) (19.1.0)
Requirement already satisfied: pyrsistent>=0.14.0 in /anaconda3/lib/python3.7/site-packages (from jsonschema!=2.5.0,>=2.4->nbformat->nbpaages==0.0.1.dev12) (0.14.11)
Requirement already satisfied: setuptools in /anaconda3/lib/python3.7/site-packages (from jsonschema!=2.5.0,>=2.4->nbformat->nbpaages==0.0.1.dev12) (40.8.0)
Building wheels for collected packages: pandoc-attributes
  Building wheel for pandoc-attributes (setup.py) ... done
  Stored in directory: /Users/adowling/Library/Caches/pip/wheels/0f/43/b0/252730521a965a687748f0be111073e67ba229e640d147e65f
Successfully built pandoc-attributes
Installing collected packages: pandoc-attributes, notedown, nbpaages
  Running setup.py develop for nbpaages
Successfully installed nbpaages notedown-1.5.1 pandoc-attributes-0.1.7

Attempting to configure my first repo:

(teaching) esc306856:cbe67701-uncertainty-quantification adowling$ nbpages --setup
Traceback (most recent call last):
  File "/anaconda3/bin/nbpages", line 11, in <module>
    load_entry_point('nbpaages', 'console_scripts', 'nbpages')()
  File "/anaconda3/lib/python3.7/site-packages/pkg_resources/__init__.py", line 489, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/anaconda3/lib/python3.7/site-packages/pkg_resources/__init__.py", line 2793, in load_entry_point
    return ep.load()
  File "/anaconda3/lib/python3.7/site-packages/pkg_resources/__init__.py", line 2411, in load
    return self.resolve()
  File "/anaconda3/lib/python3.7/site-packages/pkg_resources/__init__.py", line 2417, in resolve
    module = __import__(self.module_name, fromlist=['__name__'], level=0)
  File "/Users/adowling/DowlingLab/Teaching/nbpages/src/nbpages/__main__.py", line 7, in <module>
    from .nbcollection import NbCollection
  File "/Users/adowling/DowlingLab/Teaching/nbpages/src/nbpages/nbcollection.py", line 30, in <module>
    assert os.path.exists(config_file), f"configuration file {config_file} not found"
AssertionError: configuration file nbpages.cfg not found

Document the metdata feature

This helps screen that all of the notebooks use the same version of Python.

Possible enhancements:

  • Specify a minimum version for Python

enhancements for lint

  • check and report dead links
  • check and report orphaned figure files
  • check and report orphaned data files

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.