Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

The FixNotebookLinks fails to handle links which are not in the same folder as the notebook with the links #297

Open
fohrloop opened this issue Feb 3, 2024 · 0 comments

Comments

@fohrloop
Copy link
Contributor

fohrloop commented Feb 3, 2024

I found this out while working on holoviz/holoviews#6086. See the details and MWE / reproducing instructions from there. In short, the holoviews documentation build process has fairly large amount of warnings like this (See: holoviz/holoviews#5676).

 WARNING: 'myst' reference target not found: SomeFile.ipynb
 WARNING: 'myst' reference target not found: OtherFile.rst

In my tests all of the warnings I checked corresponded to a broken link in the documentation. I checked output of one holoviews docs build run, and the number of broken links could be 185:

niko@niko-ubuntu-home:~/tmp$ cat holoviews-logs.txt | grep "WARNING: 'myst'" | wc -l
185

Some (38) of them have also an anchor (#) in them, like

/home/niko/code/holoviews/doc/getting_started/5-Live_Data.ipynb:240004: WARNING: 'myst' reference target not found: ../reference/index.html#streams
/home/niko/code/holoviews/doc/user_guide/03-Applying_Customizations.ipynb:230060: WARNING: 'myst' reference target not found: #Coding-style-guide

and the root cause for these might be different

Demo

Using the "bottom-up" MWE I could reproduce the behavior locally with the latest nbsite version (from git). Using following file structure:

📁 examples/
├─📁 user_guide/
│ ├─📄 03-Applying_Customizations.ipynb
│ └─📄 04-Style_Mapping.ipynb
└─📁 getting_started/
  └─📄 2-Customization.ipynb

And writing in one cell of 03-Applying_Customizations.ipynb the following:

- Here is a link to [style mapping](04-Style_Mapping.ipynb)
- Here is a link to [customization](../getting_started/2-Customization.ipynb)

and adding

These prints
# nbsite/nbbuild.py:FixNotebookLinks

    def preprocess_cell(self, cell, resources, index):

        if cell["cell_type"] != "markdown":
            return cell, resources
        matches = re.findall("\[.+\]\((.+\.ipynb)\)", cell["source"])

        print("\n\nSTARTING\n--------\n")
        print("Notebook", self.nb_path, matches)
        print("old source: ", cell["source"], "\n")

        for match in matches:
            for ft in self.file_types:
                file_path = os.path.join(self.nb_path, match[:-5] + ft)
                if os.path.isfile(file_path):
                    cell["source"] = cell["source"].replace(
                        "(%s)" % match, "(%s)" % (match[:-5] + ft)
                    )
                    break

                # Try unnumbered path
                num_name = os.path.basename(file_path)
                name = re.split(r"^\d+( |-|_)", num_name)[-1]
                unnumbered_path = file_path.replace(num_name, name)
                if os.path.isfile(unnumbered_path):
                    cell["source"] = cell["source"].replace(
                        "(%s)" % match, "(%s)" % name
                    )
                    break
        print("new source: ", cell["source"], "\n")
        return cell, resources

I could see this in the stdout:

STARTING
--------

Notebook /home/niko/tmp/minimal-doc-error/doc/user_guide ['04-Style_Mapping.ipynb', '../getting_started/2-Customization.ipynb']
old source:  - Here is a link to [style mapping](04-Style_Mapping.ipynb)
- Here is a link to [customization](../getting_started/2-Customization.ipynb) 

new source:  - Here is a link to [style mapping](Style_Mapping.rst)
- Here is a link to [customization](Customization.rst) 

and this in the nbsite build (or sphinx-build) output:

/home/niko/tmp/minimal-doc-error/doc/user_guide/03-Applying_Customizations.ipynb:20003: WARNING: 'myst' reference target not found: Customization.rst

and this in the browser (missing link):

image

I am working on a fix and will supply a PR. This should fix quite many (potentially hundreds if ~150 in just holoviews) broken links from all of the holoviz projects documentation using the notebook directive of the nbsite package.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant