MyST-NB icon indicating copy to clipboard operation
MyST-NB copied to clipboard

Error parsing relative path in `{glue}` role with subcommand

Open rossbar opened this issue 5 months ago • 1 comments

Describe the bug

If I use the {glue} role with a specific subcommand (e.g. {glue:text}), I get a warning that the key is not found, even when the path is specified correctly. For example, this: {glue:text}demographics.md::num_respondents` gives the following warning:

WARNING: No key 'demographics.md:' found in glue data for this document. (use `path::key`, to glue from another document) [mystnb.glue] [mystnb.glue]

The structure of the warning to me implies that there is a problem with the parsing of colons here, as the demographics.md: part of the warning is very suspicious.

Indeed when I remove the :text subcommand from the {glue} directive, the warning disappears: {glue}demographics.md::num_respondents`.

Possibly related to #591

Reproduce the bug

For ease of reproduction, I recommend creating two new dummy files in the same directory of an existing myst-nb project:

  1. Create foo.md with the following contents:
---                                                                             
jupytext:                                                                       
  formats: md:myst                                                              
  text_representation:                                                          
    format_name: myst                                                           
kernelspec:                                                                     
  display_name: Python 3                                                        
  name: python3                                                                 
---                                                                             
                                                                                
# FOO                                                                           
                                                                                
```{code-cell} ipython3                                                         
---                                                                             
tags: [hide-input]                                                              
---                                                                             
from myst_nb import glue                                                        
glue("answer", 42, display=False)                                               
```
  1. Create bar.md with the following contents:
---                                                                             
jupytext:                                                                       
  formats: md:myst                                                              
  text_representation:                                                          
    format_name: myst                                                           
kernelspec:                                                                     
  display_name: Python 3                                                        
  name: python3                                                                 
---                                                                             
                                                                                
# BAR                                                                           
                                                                                
This line warns and fails to link: {glue:text}`foo.md::answer`.                 
                                                                                
This line is fine: {glue}`foo.md::answer`.
  1. Add foo and bar to the toctree
  2. Then build the project: make html. This should give the warning:
<path/to>/bar.md:13: WARNING: No key 'foo.md:' found in glue data for this document. (use `path::key`, to glue from another document) [mystnb.glue] [mystnb.glue]

List your environment

I'm using myst-nb via sphinx directly without the jupyter-book CLI, so hopefully relevant info:

myst-nb                       1.1.1
myst-parser                   4.0.0
Sphinx                        8.0.2

rossbar avatar Sep 13 '24 22:09 rossbar