jupyter-book icon indicating copy to clipboard operation
jupyter-book copied to clipboard

using sphinx-book-theme-1.0.0 requires repository_provider

Open kbucheli opened this issue 1 year ago • 8 comments

Building the Jupyter Book as HTML newly requires a repository_provider to add GitLab-Buttons. How to add that? The documentation misses such a setting.

Our configuration is

...
repository:
  url: https://git.psi.ch/linux-infra/documentation
  branch: master

# Add GitLab buttons
html:
  use_issues_button: true
  use_repository_button: true

which then causes

Sphinx error:
Provider not recognized in repository url https://git.psi.ch/linux-infra/documentation. If you're using a custom provider URL, specify `repository_provider`
Traceback (most recent call last):
  File "/usr/local/lib/python3.9/dist-packages/jupyter_book/sphinx.py", line 114, in build_sphinx
    app = Sphinx(
  File "/usr/local/lib/python3.9/dist-packages/sphinx/application.py", line 256, in __init__
    self._init_builder()
  File "/usr/local/lib/python3.9/dist-packages/sphinx/application.py", line 314, in _init_builder
    self.events.emit('builder-inited')
  File "/usr/local/lib/python3.9/dist-packages/sphinx/events.py", line 94, in emit
    results.append(listener.handler(self.app, *args))
  File "/usr/local/lib/python3.9/dist-packages/sphinx_book_theme/header_buttons/__init__.py", line 175, in update_context_with_repository_info
    raise SphinxError(
sphinx.errors.SphinxError: Provider not recognized in repository url https://git.psi.ch/linux-infra/documentation. If you're using a custom provider URL, specify `repository_provider`

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/local/bin/jupyter-book", line 8, in <module>
    sys.exit(main())
  File "/usr/lib/python3/dist-packages/click/core.py", line 829, in __call__
    return self.main(*args, **kwargs)
  File "/usr/lib/python3/dist-packages/click/core.py", line 782, in main
    rv = self.invoke(ctx)
  File "/usr/lib/python3/dist-packages/click/core.py", line 1259, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/lib/python3/dist-packages/click/core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/lib/python3/dist-packages/click/core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "/usr/local/lib/python3.9/dist-packages/jupyter_book/cli/main.py", line 317, in build
    builder_specific_actions(
  File "/usr/local/lib/python3.9/dist-packages/jupyter_book/cli/main.py", line 525, in builder_specific_actions
    raise RuntimeError(_message_box(msg, color="red", doprint=False)) from result

This worked before the release v0.15.0.

Versions:

  • jupyter-book-0.15.0
  • sphinx-5.0.2
  • sphinx-book-theme-1.0.0

kbucheli avatar Mar 08 '23 09:03 kbucheli

Thanks for opening your first issue here! Engagement like this is essential for open source projects! :hugs:
If you haven't done so already, check out EBP's Code of Conduct. Also, please try to follow the issue template as it helps other community members to contribute more effectively.
If your issue is a feature request, others may react to it, to raise its prominence (see Feature Voting).
Welcome to the EBP community! :tada:

welcome[bot] avatar Mar 08 '23 09:03 welcome[bot]

This is also an issue when using a URL for a GitHub organisation (e.g. see the build error here).

This arises from this line in header_buttons/_init_.py.

For example, for my repo:

repo_url = "https://quantitative-environmental-science.github.io/Notes/"

provider_url, org, repo = repo_url.strip("/").rsplit("/", 2)

provider_url

> 'https:/'

Which is invalid.

Happy to specify repository_provider, as noted in the error message, but it's not clear where this goes in _config.yml. Have tried all combinations of:

repository:
  repository_provider: github
  provider: github

html:
  repository_provider: github
  provider: github

None worked...

oscarbranson avatar Mar 09 '23 09:03 oscarbranson

Just did some more digging into the issue, since we encountered it as well.

I took a look at the opts we receive here: https://github.com/executablebooks/sphinx-book-theme/blob/6601a2ff1e5a5d51d784f1e6cafd4ed11cb38c4f/src/sphinx_book_theme/header_buttons/init.py#L141

when trying out all of the following:

repository:
  repository_provider: github
  provider: github

html:
  repository_provider: github
  provider: github

No matter what I try, provider never ends up as a key in there. Instead, these are the available keys in opts: ['search_bar_text', 'launch_buttons', 'path_to_docs', 'repository_url', 'repository_branch', 'extra_footer', 'home_page_in_toc', 'announcement', 'analytics', 'use_repository_button', 'use_edit_page_button', 'use_issues_button']

The underlying _get_theme_options seems to be this: https://github.com/pydata/pydata-sphinx-theme/blob/main/src/pydata_sphinx_theme/init.py#L35 And both possible return values app.builder.theme_options and app.config.html_theme_options lack any trace of a provider.

Note however, the repository_url is correctly set to the url specified in the config.

lukasbindreiter avatar Mar 17 '23 16:03 lukasbindreiter

To explain what's going on here, Jupyter Book's repository section is manually mapped onto the Sphinx configuration html_theme_options. As we don't currently handle the provider options, you'd need to set them using the Sphinx escape hatch (which I've not tested):

sphinx:
  recursive_update: true
  config:
    html_theme_options:
      repository_provider: custom      

The recursive update just means that we don't clobber the existing settings. This maps onto the settings in this section: https://sphinx-book-theme.readthedocs.io/en/stable/components/source-files.html#manually-specify-the-provider

agoose77 avatar Mar 17 '23 16:03 agoose77

As we don't currently handle the provider options, you'd need to set them using the Sphinx escape hatch (which I've not tested):

Seems to work. Is there any chance this will be integrated in the yaml_to_sphinx function and therefore in the _config.yml. ? At least, it should be added in the documentation.

vincentxavier avatar Apr 14 '23 08:04 vincentxavier

sphinx:
  recursive_update: true
  config:
    html_theme_options:
      repository_provider: custom

I got it working by specifying repository_url as well. Since we have a github enterprise, I have changed repository_provider to github

xesf avatar May 24 '23 11:05 xesf

the following worked for me (using a custom gitlab repository)

in the config.yml file:

sphinx:
  recursive_update: true
    config:
      html_theme_options:
        repository_provider: https://my.provider.com
      html_context:
        gitlab_url: https://my.provider.com/my
        gitlab_repo: repository
        gitlab_user: ""
        gitlab_version: main
        doc_path: source

repository:
  url: https://my.provider.com/my/repository

It' basically the same as agoose77 proposed, but I also had to set the html_context otherwise I would get

Missing required value for `use_edit_page_button`. Ensure one set of the following in your `html_context` configuration: [('bitbucket_user', 'bitbucket_repo', 'bitbucket_version'), ('github_user', 'github_repo', 'github_version'), ('gitlab_user', 'gitlab_repo', 'gitlab_version')]

Australopiticus avatar Dec 06 '23 10:12 Australopiticus

the following worked for me (using a custom gitlab repository)

in the config.yml file:

sphinx:
  recursive_update: true
    config:
      html_theme_options:
        repository_provider: https://my.provider.com
      html_context:
        gitlab_url: https://my.provider.com/my
        gitlab_repo: repository
        gitlab_user: ""
        gitlab_version: main
        doc_path: source

repository:
  url: https://my.provider.com/my/repository

It' basically the same as agoose77 proposed, but I also had to set the html_context otherwise I would get

Missing required value for `use_edit_page_button`. Ensure one set of the following in your `html_context` configuration: [('bitbucket_user', 'bitbucket_repo', 'bitbucket_version'), ('github_user', 'github_repo', 'github_version'), ('gitlab_user', 'gitlab_repo', 'gitlab_version')]

Worked for me however the indentation seems to be slighty wrong:

sphinx:
  recursive_update: true
  config:
    html_theme_options:
      repository_provider: https://my.provider.com
    html_context:
      gitlab_url: https://my.provider.com/my
      gitlab_repo: repository
      gitlab_user: ""
      gitlab_version: main
      doc_path: source

repository:
  url: https://my.provider.com/my/repository```

buti1021 avatar May 27 '24 14:05 buti1021