This Gist contains a Flask app that emulates a MyST content server. We dynamically generate AST on the fly.
npm run theme:bookin MyST Theme repoflask --app app run --port 3100- Go!
| import yaml from "js-yaml"; | |
| import traverse from "traverse"; | |
| import { readFileSync } from "node:fs"; | |
| import { SCHEMA } from "./schema.mjs"; | |
| function extendConfig(base, derived) { | |
| const baseRef = traverse(base); | |
| const mergedConfig = traverse(derived).map(function (item) { | |
| if (item.klass === "ExtendingArray") { | |
| const other = baseRef.get(this.path); |
| #!/usr/bin/env python | |
| import subprocess | |
| import json | |
| import argparse | |
| import math | |
| import sys | |
| NFS_TEMPLATE = """ | |
| jupyterhub-home-nfs: | |
| quotaEnforcer: |
| #!/usr/bin/env bash | |
| set -eu | |
| # We ensure that nothing has the wrong project by clearing project IDs | |
| # Clear the /export/staging project (it's not actually a project, but this works) | |
| xfs_quota -x -c "project -C -p /export/staging 0" /export -D /dev/null -P /dev/null | |
| # We ensure no quotas are set, so that the reconciliation loop happens | |
| # Clear all quotas | |
| cut -d: -f1 /etc/projid | tail -n+2 | xargs -I{} xfs_quota -x -c 'limit -p bhard=0 {}' -D /etc/projects -P /etc/projid /export |
| import retextSpell from "retext-spell"; | |
| async function loadDictionary(dictionary) { | |
| const baseUrl = new URL(`https://unpkg.com/dictionary-${dictionary}@latest/`); | |
| const [aff, dic] = await Promise.all([ | |
| fetch(new URL("index.aff", baseUrl)), | |
| fetch(new URL("index.dic", baseUrl)), | |
| ]); |
| .jp-NotebookPanel-toolbar { | |
| display: none; | |
| & ~ *{ | |
| top: 0px!important; | |
| } | |
| } |
| [flake8] | |
| # Match black | |
| max-line-length = 88 | |
| # Allow asymmetric commas, etc. | |
| extend-ignore = | |
| E203, | |
| # Spurious warnings in JupyterLab for code cells that follow Markdown cells | |
| E303 | |
| exclude = .git,__pycache__,build,dist,.venv | |
| max-complexity = 10 |
npm installnpm run buildnode dist/provision.cjs **/*.md inside your top-level Python virtual environment that is used by MyST to run Jupyter Server