Skip to main content

A Python library for managing source code repositories, interacting with Docker registries, handling MyST markdown operations, and spawning JupyterHub instances locally.

Project description

MyST Libre

PyPI - Version

Following the REES, myst-libre streamlines building ✨MyST articles✨ in containers.

  • A repository containing MyST sources
  • A Docker image (built by binderhub) in a public (or private) registry, including:
    • Dependencies to execute notebooks/markdown files in the MyST repository
    • JupyterHub (typically part of images built by binderhub)
  • Input data required by the executable content (optional)

Given these resources, myst-libre starts a Docker container, mounts the MyST repository and data (if available), and builds a MyST publication.

[!NOTE] This project was started to support publishing MyST articles as living preprints on NeuroLibre.

Installation

External dependencies

[!IMPORTANT] Ensure the following prerequisites are installed:

Install myst-libre

pip install myst-libre

Set up environment variables:

If you are using a private image registry, create a .env file in the project root and add the following:

DOCKER_PRIVATE_REGISTRY_USERNAME=your_username
DOCKER_PRIVATE_REGISTRY_PASSWORD=your_password

Quick Start

Import libraries and define REES resources

from myst_libre.tools import JupyterHubLocalSpawner, MystMD
from myst_libre.rees import REES
from myst_libre.builders import MystBuilder

rees_resources = REES(dict(
                  registry_url="https://your-registry.io",
                  gh_user_repo_name = "owner/repository",
                  gh_repo_commit_hash = "full_SHA_commit_A",
                  binder_image_tag = "full_SHA_commit_A_or_B",
                  dotenv = '/path/to/dotenv'))

[!NOTE] Currently, the assumption is that the Docker image was built by binderhub from a REES-compliant repository that also includes the MyST content. Therefore, binder_image_tag and gh_repo_commit_hash are simply two different commits in the same (gh_repo_user_name) repository. However, binder_image_tag is not allowed to be ahead of gh_repo_commit_hash.

Fetch resources and spawn JupyterHub in the respective container

hub = JupyterHubLocalSpawner(rees_resources,
                             host_build_source_parent_dir = '/tmp/myst_repos',
                             container_build_source_mount_dir = '/home/jovyan', #default
                             host_data_parent_dir = "/tmp/myst_data", #optional
                             container_data_mount_dir = '/home/jovyan/data', #optional
                             )
hub.spawn_jupyter_hub()
  • MyST repository will be cloned at:
tmp/
└── myst_repos/
    └── owner/
        └── repository/
            └── full_commit_SHA_A/
                ├── myst.yml
                ├── _toc.yml
                ├── binder/
                │   ├── requirements.txt (or other REES dependencies)
                │   └── data_requirement.json (optional)
                ├── content/
                │   ├── my_notebook.ipynb
                │   └── my_myst_markdown.md
                ├── paper.md
                └── paper.bib

Repository will be mounted to the container as /tmp/myst_repos/owner/repository/full_commit_SHA_A:/home/jovyan.

  • If a repo2data manifest is found in the repository, the data will be downloaded to and cached at:
tmp/
└── myst_data/
    └── my-dataset

otherwise, it can be manually defined for an existing data under /tmp/myst_data as follows:

rees_resources.dataset_name = "my-dataset"

In either case, data will be mounted as /tmp/myst_data/my-dataset:/home/jovyan/data/my-dataset. If no data is provided, this step will be skipped.

Build your MyST article

MystBuilder(hub).build()

Check out the built document

In your terminal:

npx serve /tmp/myst_repos/owner/repository/full_commit_SHA_A/_build/html

Visit ✨http://localhost:3000✨.

Table of Contents

Usage

Authentication

The Authenticator class handles loading authentication credentials from environment variables.

from myst_libre.tools.authenticator import Authenticator

auth = Authenticator()
print(auth._auth)

Docker Registry Client

The DockerRegistryClient class provides methods to interact with a Docker registry.

from myst_libre.tools.docker_registry_client import DockerRegistryClient

client = DockerRegistryClient(registry_url='https://my-registry.example.com', gh_user_repo_name='user/repo')
token = client.get_token()
print(token)

Build Source Manager

The BuildSourceManager class manages source code repositories.

from myst_libre.tools.build_source_manager import BuildSourceManager

manager = BuildSourceManager(gh_user_repo_name='user/repo', gh_repo_commit_hash='commit_hash')
manager.git_clone_repo('/path/to/clone')
project_name = manager.get_project_name()
print(project_name)

Module and Class Descriptions

AbstractClass

Description: Provides basic logging functionality and colored printing capabilities.

Authenticator

Description: Handles authentication by loading credentials from environment variables.
Inherited from: AbstractClass
Inputs: Environment variables DOCKER_PRIVATE_REGISTRY_USERNAME and DOCKER_PRIVATE_REGISTRY_PASSWORD

RestClient

Description: Provides a client for making REST API calls.
Inherited from: Authenticator

DockerRegistryClient

Description: Manages interactions with a Docker registry.
Inherited from: Authenticator
Inputs:

  • registry_url: URL of the Docker registry
  • gh_user_repo_name: GitHub user/repository name
  • auth: Authentication credentials

BuildSourceManager

Description: Manages source code repositories.
Inherited from: AbstractClass
Inputs:

  • gh_user_repo_name: GitHub user/repository name
  • gh_repo_commit_hash: Commit hash of the repository

JupyterHubLocalSpawner

Description: Manages JupyterHub instances locally.
Inherited from: AbstractClass
Inputs:

  • rees: Instance of the REES class
  • registry_url: URL of the Docker registry
  • gh_user_repo_name: GitHub user/repository name
  • auth: Authentication credentials
  • binder_image_tag: Docker image tag
  • build_src_commit_hash: Commit hash of the repository
  • container_data_mount_dir: Directory to mount data in the container
  • container_build_source_mount_dir: Directory to mount build source in the container
  • host_data_parent_dir: Host directory for data
  • host_build_source_parent_dir: Host directory for build source

MystMD

Description: Manages MyST markdown operations such as building and converting files.
Inherited from: AbstractClass
Inputs:

  • build_dir: Directory where the build will take place
  • env_vars: Environment variables needed for the build process
  • executable: Name of the MyST executable (default is 'myst')

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

myst_libre-0.2.2.tar.gz (19.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

myst_libre-0.2.2-py3-none-any.whl (19.4 kB view details)

Uploaded Python 3

File details

Details for the file myst_libre-0.2.2.tar.gz.

File metadata

  • Download URL: myst_libre-0.2.2.tar.gz
  • Upload date:
  • Size: 19.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for myst_libre-0.2.2.tar.gz
Algorithm Hash digest
SHA256 d3849bf35889285e928a7d41d17c60c3b807a0093f7485485ac4eff0b1b63205
MD5 91c46c28df16ad6a31b396d6ae918eb7
BLAKE2b-256 0fccc0b82c41ccc006762427734fa97dc155ad92a55575c5b2b0c37fc2359b31

See more details on using hashes here.

Provenance

The following attestation bundles were made for myst_libre-0.2.2.tar.gz:

Publisher: publish.yml on neurolibre/myst-libre

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file myst_libre-0.2.2-py3-none-any.whl.

File metadata

  • Download URL: myst_libre-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 19.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for myst_libre-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 2a5e9fc4bf33f015a3af8d5cceef3de42bc4a74cc74bdc24b220207e2cd98f9c
MD5 5f375a77821c8cfeba5524bdc9675879
BLAKE2b-256 7b81ddb9cfbadca0dbb812e097599651705e95a79a75d97b71af27f0b58a6eb2

See more details on using hashes here.

Provenance

The following attestation bundles were made for myst_libre-0.2.2-py3-none-any.whl:

Publisher: publish.yml on neurolibre/myst-libre

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page