From 5867837b9704f2e600158d403cb7aa8e849257a3 Mon Sep 17 00:00:00 2001 From: Jacobus Geluk Date: Mon, 1 Dec 2025 21:59:41 +0000 Subject: [PATCH 01/32] chore(docs): drop Insiders and consolidate to single mkdocs config - Merge outsiders Mermaid setup into mkdocs.yml (mermaid2 + JS) - Always use mkdocs.yml in Makefile; remove Insiders token logic - Always install open mkdocs-material via Poetry - Remove mkdocs.insiders.yml and mkdocs.outsiders.yml Simplifies builds to free Material and reduces config drift. --- Makefile | 25 ++++--------------------- mkdocs.insiders.yml | 14 -------------- mkdocs.outsiders.yml | 25 ------------------------- mkdocs.yml | 13 ++++++++++++- 4 files changed, 16 insertions(+), 61 deletions(-) delete mode 100644 mkdocs.insiders.yml delete mode 100644 mkdocs.outsiders.yml diff --git a/Makefile b/Makefile index d3bcfc60..7d2671cf 100644 --- a/Makefile +++ b/Makefile @@ -48,13 +48,7 @@ PIPENV_DEFAULT_PYTHON_VERSION := 3.11 PIPENV_VENV_IN_PROJECT := 1 CURRENT_BRANCH := $(shell git branch --show-current) -PAT_MKDOCS_INSIDERS := $(shell cat $(HOME)/.secrets/PAT_MKDOCS_INSIDERS.txt 2>/dev/null) -ifneq ($(PAT_MKDOCS_INSIDERS),) MKDOCS_CONFIG_FILE := mkdocs.yml -else -$(info You do not have the $(HOME)/.secrets/PAT_MKDOCS_INSIDERS.txt file so we are using the open source version of MkDocs) -MKDOCS_CONFIG_FILE := mkdocs.outsiders.yml -endif .PHONY: all all: docs-build @@ -161,28 +155,17 @@ docs-install-standard-python-packages: $(VENV_POETRY) $(VENV_POETRY) config experimental.system-git-client true --local .PHONY: docs-install-special-python-packages -docs-install-special-python-packages: docs-install-ekglib docs-install-mkdocs-insider-version-packages +docs-install-special-python-packages: docs-install-ekglib docs-install-mkdocs-packages .PHONY: docs-install-ekglib docs-install-ekglib: $(VENV_POETRY) @echo "Install ekglib via poetry:" $(VENV_POETRY) add "git+https://github.com/EKGF/ekglib.git" -.PHONY: docs-install-mkdocs-insider-version-packages -docs-install-mkdocs-insider-version-packages: $(VENV_POETRY) -ifeq ($(PAT_MKDOCS_INSIDERS),) - @echo "Install standard mkdocs python package via poetry:" +.PHONY: docs-install-mkdocs-packages +docs-install-mkdocs-packages: $(VENV_POETRY) + @echo "Install mkdocs-material (open source) via poetry:" @$(VENV_POETRY) add mkdocs-material -else - @if ! cat poetry.lock | grep -q "mkdocs-material-insiders" ; then \ - echo "Install special insiders version of mkdocs python package via poetry:" ;\ - echo "First remove the public version of mkdocs-material, if it's installed:" ;\ - $(VENV_POETRY) remove mkdocs-material || true ;\ - echo "Then install the actual insiders version:" ;\ - $(VENV_POETRY) add "git+https://$(PAT_MKDOCS_INSIDERS)@github.com/squidfunk/mkdocs-material-insiders.git" ;\ - echo "Insider's version of mkdocs-material has been installed successfully!" ;\ - fi -endif $(VENV_MKDOCS): docs-install-python-packages @if [ -f $(VENV_MKDOCS) ] ; then echo $(VENV_MKDOCS) exists ; exit 0 ; else echo $(VENV_MKDOCS) does not exist ; exit 1 ; fi diff --git a/mkdocs.insiders.yml b/mkdocs.insiders.yml deleted file mode 100644 index 37a0f903..00000000 --- a/mkdocs.insiders.yml +++ /dev/null @@ -1,14 +0,0 @@ -INHERIT: mkdocs.yml -theme: - custom_dir: docs-overrides/ -plugins: - - search - - social - - tags -markdown_extensions: - - pymdownx.superfences: - # make exceptions to highlighting of code: - custom_fences: - - name: mermaid - class: mermaid - format: !!python/name:pymdownx.superfences.fence_code_format diff --git a/mkdocs.outsiders.yml b/mkdocs.outsiders.yml deleted file mode 100644 index 24f0e002..00000000 --- a/mkdocs.outsiders.yml +++ /dev/null @@ -1,25 +0,0 @@ -INHERIT: mkdocs.yml -plugins: - - search - - mermaid2: - arguments: - # test if its __palette_1 (dark) or __palette_2 (light) - # for mkdocs-material >=8.0.0 - theme: | - ^(JSON.parse(__md_get("__palette").index == 1)) ? 'dark' : 'light' - securityLevel: 'loose' -extra_javascript: - - https://unpkg.com/mermaid/dist/mermaid.min.js - - javascript/refresh_on_toggle_dark_light.js -markdown_extensions: - - pymdownx.superfences: - custom_fences: - - name: mermaid - class: mermaid - format: !!python/name:mermaid2.fence_mermaid - - pymdownx.emoji: - emoji_index: !!python/name:materialx.emoji.twemoji - emoji_generator: !!python/name:materialx.emoji.to_svg - options: - custom_icons: - - docs-overrides/.icons \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index e12aaffa..3eb3258c 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -88,6 +88,7 @@ extra: Thanks for your feedback! Help us improve this page by using our feedback form. extra_javascript: + - "https://unpkg.com/mermaid/dist/mermaid.min.js" - "javascript/images_dark.js" - "javascript/refresh_on_toggle_dark_light.js" - "https://cdn.jsdelivr.net/gh/rod2ik/cdn@main/mkdocs/javascripts/mkdocs-graphviz.js" @@ -104,6 +105,13 @@ plugins: - search: lang: - en + - mermaid2: + arguments: + # test if its __palette_1 (dark) or __palette_2 (light) + # for mkdocs-material >=8.0.0 + theme: | + ^(JSON.parse(__md_get("__palette").index == 1)) ? 'dark' : 'light' + securityLevel: 'loose' - exclude-search: exclude: - 'fragment/*' @@ -173,11 +181,14 @@ markdown_extensions: - pymdownx.emoji: emoji_generator: !!python/name:materialx.emoji.to_svg emoji_index: !!python/name:materialx.emoji.twemoji + options: + custom_icons: + - docs-overrides/.icons - pymdownx.superfences: custom_fences: - name: mermaid class: mermaid - format: !!python/name:pymdownx.superfences.fence_code_format + format: !!python/name:mermaid2.fence_mermaid - pymdownx.tabbed: alternate_style: true - pymdownx.tasklist: From badae0eb85c4262430f21fd2c85ad169ade33858 Mon Sep 17 00:00:00 2001 From: Jacobus Geluk Date: Mon, 1 Dec 2025 22:04:54 +0000 Subject: [PATCH 02/32] chore(build): replace Poetry with uv and PEP 621 deps - Move dependencies to [project.dependencies] and set license file - Remove Poetry/asdf-poetry; install and use uv - Use 'uv venv' + 'uv sync'; run mkdocs via 'uv run' - Drop Poetry from .tool-versions --- .tool-versions | 1 - Makefile | 78 +++++++++++++++++--------------------------------- pyproject.toml | 68 +++++++++++++++++++------------------------ 3 files changed, 57 insertions(+), 90 deletions(-) diff --git a/.tool-versions b/.tool-versions index 500c6562..e51b7448 100644 --- a/.tool-versions +++ b/.tool-versions @@ -1,4 +1,3 @@ python 3.10.8 nodejs 17.4.0 java openjdk-18 -poetry 1.4.2 diff --git a/Makefile b/Makefile index 7d2671cf..04e049f8 100644 --- a/Makefile +++ b/Makefile @@ -34,15 +34,8 @@ endif # on windows in a different way. Here we assume you did that yourself in # the local project's virtualenv directory (./.venv). # -ifeq ($(OS),Windows_NT) -VENV_POETRY := $(VIRTUAL_ENV)/bin/poetry -VENV_MKDOCS := $(VIRTUAL_ENV)/bin/mkdocs -VENV_PYTHON := $(VIRTUAL_ENV)/bin/python3 -else # On mac and linux we have asdf: -VENV_POETRY := $(shell asdf where poetry)/bin/poetry -VENV_MKDOCS := $(VIRTUAL_ENV)/bin/mkdocs VENV_PYTHON := $(VIRTUAL_ENV)/bin/python3 -endif +UV := uv PIPENV_DEFAULT_PYTHON_VERSION := 3.11 PIPENV_VENV_IN_PROJECT := 1 @@ -61,7 +54,7 @@ info: @echo "MkDocs config file: ${MKDOCS_CONFIG_FILE}" @echo "System Python : ${SYSTEM_PYTHON} version: $$($(SYSTEM_PYTHON) --version)" @echo "Virtual Env Python: ${VENV_PYTHON} version: $$($(VENV_PYTHON) --version)" - @echo "Python poetry : ${VENV_POETRY}" + @echo "uv : $$($(UV) --version)" @echo "install target : ${INSTALL_TARGET}" .PHONY: clean @@ -92,7 +85,7 @@ docs-install-brew-packages: @brew upgrade zlib 2>/dev/null || brew install zlib @brew upgrade plantuml 2>/dev/null || brew install plantuml @brew upgrade graphviz 2>/dev/null || brew install graphviz - @brew upgrade pdm 2>/dev/null || brew install pdm + @brew upgrade uv 2>/dev/null || brew install uv .PHONY: docs-install-brew ifeq ($(YOUR_OS), Linux) @@ -130,77 +123,60 @@ docs-install-asdf: docs-install-brew @asdf plugin add python 2>/dev/null || true @asdf plugin add nodejs 2>/dev/null || true @asdf plugin add java 2>/dev/null || true - @asdf plugin add poetry https://github.com/asdf-community/asdf-poetry.git 2>/dev/null || true .PHONY: docs-install-asdf-packages docs-install-asdf-packages: docs-install-asdf @echo "Install packages via asdf:" asdf install -# poetry gets installed via asdf -$(VENV_POETRY): docs-install-asdf-packages - @echo $@ - .PHONY: docs-install-python-packages #ifneq ($(wildcard /home/runner/.*),) #docs-install-python-packages: docs-install-asdf #else -docs-install-python-packages: docs-install-asdf-packages docs-install-standard-python-packages docs-install-special-python-packages +docs-install-python-packages: docs-install-asdf-packages docs-install-standard-python-packages #endif .PHONY: docs-install-standard-python-packages -docs-install-standard-python-packages: $(VENV_POETRY) - @echo "Install standard python packages via pip:" - $(VENV_POETRY) config virtualenvs.in-project true --local - $(VENV_POETRY) config experimental.system-git-client true --local - -.PHONY: docs-install-special-python-packages -docs-install-special-python-packages: docs-install-ekglib docs-install-mkdocs-packages - -.PHONY: docs-install-ekglib -docs-install-ekglib: $(VENV_POETRY) - @echo "Install ekglib via poetry:" - $(VENV_POETRY) add "git+https://github.com/EKGF/ekglib.git" - -.PHONY: docs-install-mkdocs-packages -docs-install-mkdocs-packages: $(VENV_POETRY) - @echo "Install mkdocs-material (open source) via poetry:" - @$(VENV_POETRY) add mkdocs-material +docs-install-standard-python-packages: + @echo "Create venv and install Python packages via uv:" + $(UV) venv + $(UV) sync -$(VENV_MKDOCS): docs-install-python-packages - @if [ -f $(VENV_MKDOCS) ] ; then echo $(VENV_MKDOCS) exists ; exit 0 ; else echo $(VENV_MKDOCS) does not exist ; exit 1 ; fi +.PHONY: docs-ensure-venv +docs-ensure-venv: + @$(UV) venv .PHONY: docs-build -docs-build: $(VENV_MKDOCS) - $(VENV_MKDOCS) build --config-file $(MKDOCS_CONFIG_FILE) +docs-build: docs-ensure-venv + $(UV) run mkdocs build --config-file $(MKDOCS_CONFIG_FILE) .PHONY: docs-build-clean -docs-build-clean: - $(VENV_MKDOCS) build --config-file $(MKDOCS_CONFIG_FILE) --clean +docs-build-clean: docs-ensure-venv + $(UV) run mkdocs build --config-file $(MKDOCS_CONFIG_FILE) --clean .PHONY: docs-serve -docs-serve: $(VENV_MKDOCS) - $(VENV_MKDOCS) serve --config-file $(MKDOCS_CONFIG_FILE) --livereload --strict +docs-serve: docs-ensure-venv + $(UV) run mkdocs serve --config-file $(MKDOCS_CONFIG_FILE) --livereload --strict .PHONY: docs-serve-fast -docs-serve-fast: - $(VENV_MKDOCS) serve --config-file $(MKDOCS_CONFIG_FILE) --livereload --strict +docs-serve-fast: docs-ensure-venv + $(UV) run mkdocs serve --config-file $(MKDOCS_CONFIG_FILE) --livereload --strict .PHONY: docs-serve-non-strict -docs-serve-non-strict: $(VENV_MKDOCS) - $(VENV_MKDOCS) serve --config-file $(MKDOCS_CONFIG_FILE) --livereload +docs-serve-non-strict: docs-ensure-venv + $(UV) run mkdocs serve --config-file $(MKDOCS_CONFIG_FILE) --livereload .PHONY: docs-serve-debug -docs-serve-debug: $(VENV_MKDOCS) - $(VENV_MKDOCS) serve --config-file $(MKDOCS_CONFIG_FILE) --livereload --verbose --strict +docs-serve-debug: docs-ensure-venv + $(UV) run mkdocs serve --config-file $(MKDOCS_CONFIG_FILE) --livereload --verbose --strict .PHONY: docs-serve-debug-non-strict -docs-serve-debug-non-strict: $(VENV_MKDOCS) - $(VENV_MKDOCS) serve --config-file $(MKDOCS_CONFIG_FILE) --livereload --verbose +docs-serve-debug-non-strict: docs-ensure-venv + $(UV) run mkdocs serve --config-file $(MKDOCS_CONFIG_FILE) --livereload --verbose .PHONY: docs-deploy -docs-deploy: $(VENV_MKDOCS) - $(VENV_MKDOCS) gh-deploy --config-file $(MKDOCS_CONFIG_FILE) --verbose +docs-deploy: docs-ensure-venv + $(UV) run mkdocs gh-deploy --config-file $(MKDOCS_CONFIG_FILE) --verbose .PHONY: docs-sync-from docs-sync-from: docs-sync-from-ekg-maturity docs-sync-from-ekg-principles diff --git a/pyproject.toml b/pyproject.toml index efb12402..690f6188 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,39 +1,3 @@ -[tool.poetry] -name = "ekg-method" -version = "1.0.0" -description = "" -authors = ["Jacobus Geluk "] -readme = "README.md" -license = "GPL-3.0-only" -homepage = "https://method.ekgf.org" -repository = "https://github.com/EKGF/ekg-method" -packages = [ -] - -[tool.poetry.dependencies] -python = "^3.10" -mkdocs-build-plantuml-plugin = "*" -mdutils = "*" -mkdocs-awesome-pages-plugin = "*" -mkdocs-exclude = "*" -mkdocs-exclude-search = "*" -mkdocs-gen-files = "*" -mkdocs-git-revision-date-localized-plugin = "*" -mkdocs-graphviz = "*" -mkdocs-include-markdown-plugin = "*" -mkdocs-localsearch = "*" -mkdocs-macros-plugin = "*" -mkdocs-mermaid2-plugin = "*" -mkdocs-minify-plugin = "*" -mkdocs-redirects = "*" -mkdocs-kroki-plugin = "*" -mdx-spanner = "*" -markdown-emdash = "*" -smartypants = "*" -pillow = "*" -cairosvg = "*" -ekglib = {git = "https://github.com/EKGF/ekglib.git"} - [project] name = "ekg-method" version = "1.0.0" @@ -41,6 +5,34 @@ description = "" authors = [ {name = "Jacobus Geluk", email = "jacobus.geluk@ekgf.org"}, ] -dependencies = [] requires-python = ">=3.10" -license = {text = "MIT"} +readme = "README.md" +license = { file = "LICENSE" } +dependencies = [ + "mkdocs-material", + "mkdocs-build-plantuml-plugin", + "mdutils", + "mkdocs-awesome-pages-plugin", + "mkdocs-exclude", + "mkdocs-exclude-search", + "mkdocs-gen-files", + "mkdocs-git-revision-date-localized-plugin", + "mkdocs-graphviz", + "mkdocs-include-markdown-plugin", + "mkdocs-localsearch", + "mkdocs-macros-plugin", + "mkdocs-mermaid2-plugin", + "mkdocs-minify-plugin", + "mkdocs-redirects", + "mkdocs-kroki-plugin", + "mdx-spanner", + "markdown-emdash", + "smartypants", + "pillow", + "cairosvg", + "ekglib @ git+https://github.com/EKGF/ekglib.git", +] + +[project.urls] +Homepage = "https://method.ekgf.org" +Repository = "https://github.com/EKGF/ekg-method" From 45628ebde6f742e7391585d85cb602eb3e27d9f6 Mon Sep 17 00:00:00 2001 From: Jacobus Geluk Date: Mon, 1 Dec 2025 22:05:35 +0000 Subject: [PATCH 03/32] chore(ci): remove local GH Actions helper script act.sh Remove obsolete local 'act' helper; not used in current workflow. --- act.sh | 44 -------------------------------------------- 1 file changed, 44 deletions(-) delete mode 100755 act.sh diff --git a/act.sh b/act.sh deleted file mode 100755 index 7455512e..00000000 --- a/act.sh +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/env bash -# -# run the act utility (which runs the Github Actions in the .github directory locally) -# -# Mac OS X: -# - Install "act" with "brew install act" -# -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)" - -act_bin="" - -function checkAct() { - - local linux_image="ghcr.io/catthehacker/ubuntu:full-latest" - - cd "${SCRIPT_DIR}" || return $? - - echo "========================== check environment" - - dockr image pull "${linux_image}" - - echo "-P ubuntu-latest=${linux_image}" > "${SCRIPT_DIR}/.actrc" - - act_bin="$(command -v act)" - - return 0 -} - -function execAct() { - - echo "Jobs: (use --job to select just one of these)" - "${act_bin}" -l - - # shellcheck disable=SC2068 - set -x - # shellcheck disable=SC2068 - exec "${act_bin}" $@ - -} - -checkAct || exit 1 -# shellcheck disable=SC2068 -execAct $@ -exit $? From 0d5cda5adaa7258eb0d5370a767f85e63d7cb17f Mon Sep 17 00:00:00 2001 From: Jacobus Geluk Date: Mon, 1 Dec 2025 22:06:38 +0000 Subject: [PATCH 04/32] chore(python): bump to Python 3.13 - Update .tool-versions to 3.13.1 (asdf) - Set requires-python to ">=3.13" in pyproject - Align Makefile fallback var to 3.13 --- .tool-versions | 2 +- Makefile | 2 +- pyproject.toml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.tool-versions b/.tool-versions index e51b7448..cafb9b9b 100644 --- a/.tool-versions +++ b/.tool-versions @@ -1,3 +1,3 @@ -python 3.10.8 +python 3.13.1 nodejs 17.4.0 java openjdk-18 diff --git a/Makefile b/Makefile index 04e049f8..c9cb2e2c 100644 --- a/Makefile +++ b/Makefile @@ -37,7 +37,7 @@ endif VENV_PYTHON := $(VIRTUAL_ENV)/bin/python3 UV := uv -PIPENV_DEFAULT_PYTHON_VERSION := 3.11 +PIPENV_DEFAULT_PYTHON_VERSION := 3.13 PIPENV_VENV_IN_PROJECT := 1 CURRENT_BRANCH := $(shell git branch --show-current) diff --git a/pyproject.toml b/pyproject.toml index 690f6188..494101e3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ description = "" authors = [ {name = "Jacobus Geluk", email = "jacobus.geluk@ekgf.org"}, ] -requires-python = ">=3.10" +requires-python = ">=3.13" readme = "README.md" license = { file = "LICENSE" } dependencies = [ From b8d15febc470bec4e5cd7a133c22f8615f03d49d Mon Sep 17 00:00:00 2001 From: Jacobus Geluk Date: Mon, 1 Dec 2025 22:07:54 +0000 Subject: [PATCH 05/32] chore(build): remove pip remnants; show mkdocs via uv in info - Drop unused PIP variables - Info target prints mkdocs version using `uv run` --- Makefile | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/Makefile b/Makefile index c9cb2e2c..2fff318b 100644 --- a/Makefile +++ b/Makefile @@ -11,16 +11,13 @@ else ifeq ($(YOUR_OS), Linux) INSTALL_TARGET := install-linux ifneq ($(wildcard /home/runner/.*),) # this means we're running in Github Actions - PIP := pip SYSTEM_PYTHON := python3 else - PIP := $(shell asdf where python)/bin/python -m pip SYSTEM_PYTHON := $(shell asdf where python)/bin/python3 endif endif ifeq ($(YOUR_OS), Darwin) INSTALL_TARGET := install-macos - PIP := $(shell asdf where python)/bin/python -m pip ifneq (,$(wildcard /usr/local/bin/python3)) SYSTEM_PYTHON := /usr/local/bin/python3 else @@ -50,7 +47,7 @@ all: docs-build info: @echo "Git Branch : ${CURRENT_BRANCH}" @echo "Operating System : ${YOUR_OS}" - @echo "MkDocs : ${VENV_MKDOCS}" + @echo "MkDocs : $$($(UV) run mkdocs --version)" @echo "MkDocs config file: ${MKDOCS_CONFIG_FILE}" @echo "System Python : ${SYSTEM_PYTHON} version: $$($(SYSTEM_PYTHON) --version)" @echo "Virtual Env Python: ${VENV_PYTHON} version: $$($(VENV_PYTHON) --version)" From 2ee8e4449df660f13b19a52be0ab2fcd7afaebb5 Mon Sep 17 00:00:00 2001 From: Jacobus Geluk Date: Mon, 1 Dec 2025 22:09:28 +0000 Subject: [PATCH 06/32] chore(build): fix System Python detection; CI to Python 3.13 - Use `command -v python3` for SYSTEM_PYTHON on macOS/Linux - Bump actions/setup-python to v5 and 3.13 --- .github/workflows/docs.yml | 4 ++-- Makefile | 10 +++------- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index b64e29a2..a5f31067 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -23,9 +23,9 @@ jobs: # uses: Homebrew/actions/setup-homebrew@master - name: Install Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: - python-version: '3.10.8' + python-version: '3.13' - name: Set up Git repository uses: actions/checkout@v3 diff --git a/Makefile b/Makefile index 2fff318b..d917f65c 100644 --- a/Makefile +++ b/Makefile @@ -11,18 +11,14 @@ else ifeq ($(YOUR_OS), Linux) INSTALL_TARGET := install-linux ifneq ($(wildcard /home/runner/.*),) # this means we're running in Github Actions - SYSTEM_PYTHON := python3 + SYSTEM_PYTHON := $(shell command -v python3 || echo python3) else - SYSTEM_PYTHON := $(shell asdf where python)/bin/python3 + SYSTEM_PYTHON := $(shell command -v python3 || echo python3) endif endif ifeq ($(YOUR_OS), Darwin) INSTALL_TARGET := install-macos - ifneq (,$(wildcard /usr/local/bin/python3)) - SYSTEM_PYTHON := /usr/local/bin/python3 - else - SYSTEM_PYTHON := $(shell asdf where python)/bin/python3 - endif + SYSTEM_PYTHON := $(shell command -v python3 || echo python3) endif endif From dc166990719ebf54ac8871f1dcc64b15ba02c7d8 Mon Sep 17 00:00:00 2001 From: Jacobus Geluk Date: Mon, 1 Dec 2025 22:10:20 +0000 Subject: [PATCH 07/32] chore(build): pin uv venv to Python 3.13 Force `uv venv --python 3.13` to avoid accidental 3.14 picks on hosts with newer system interpreters; keeps env aligned with asdf/CI. --- Makefile | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index d917f65c..a824997c 100644 --- a/Makefile +++ b/Makefile @@ -29,6 +29,7 @@ endif # VENV_PYTHON := $(VIRTUAL_ENV)/bin/python3 UV := uv +PYTHON_VERSION := 3.13 PIPENV_DEFAULT_PYTHON_VERSION := 3.13 PIPENV_VENV_IN_PROJECT := 1 @@ -132,12 +133,12 @@ docs-install-python-packages: docs-install-asdf-packages docs-install-standard-p .PHONY: docs-install-standard-python-packages docs-install-standard-python-packages: @echo "Create venv and install Python packages via uv:" - $(UV) venv + $(UV) venv --python $(PYTHON_VERSION) $(UV) sync .PHONY: docs-ensure-venv docs-ensure-venv: - @$(UV) venv + @$(UV) venv --python $(PYTHON_VERSION) .PHONY: docs-build docs-build: docs-ensure-venv From 4f097cbfc905d434a0b2ddf65c32fcdd0c44f1f1 Mon Sep 17 00:00:00 2001 From: Jacobus Geluk Date: Mon, 1 Dec 2025 22:12:43 +0000 Subject: [PATCH 08/32] chore(build): make install non-interactive and show correct versions - Reorder docs-install so venv/deps are set up before info - Ensure venv step recreates with Python 3.13 when mismatched - Avoid interactive prompts by setting UV_VENV_CLEAR=1 - Install packages via `uv sync` only --- Makefile | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index a824997c..a9bc9f49 100644 --- a/Makefile +++ b/Makefile @@ -62,10 +62,11 @@ clean: install: docs-install .PHONY: docs-install -docs-install: info docs-install-brew docs-install-brew-packages docs-install-python-packages +# Run env setup first so info shows correct versions +docs-install: docs-install-brew docs-install-brew-packages docs-install-python-packages info .PHONY: docs-install-github-actions -docs-install-github-actions: info docs-install-brew-packages docs-install-python-packages +docs-install-github-actions: docs-install-brew-packages docs-install-python-packages info .PHONY: docs-install-brew-packages docs-install-brew-packages: @@ -131,14 +132,19 @@ docs-install-python-packages: docs-install-asdf-packages docs-install-standard-p #endif .PHONY: docs-install-standard-python-packages -docs-install-standard-python-packages: - @echo "Create venv and install Python packages via uv:" - $(UV) venv --python $(PYTHON_VERSION) +docs-install-standard-python-packages: docs-ensure-venv + @echo "Install Python packages via uv:" $(UV) sync .PHONY: docs-ensure-venv docs-ensure-venv: - @$(UV) venv --python $(PYTHON_VERSION) + @echo "Ensure venv (Python $(PYTHON_VERSION)) exists and matches version:" + @if [ ! -d ".venv" ] || ! ./.venv/bin/python3 --version 2>/dev/null | grep -q "$(PYTHON_VERSION)"; then \ + echo "Creating/Recreating venv with Python $(PYTHON_VERSION)"; \ + UV_VENV_CLEAR=1 $(UV) venv --python $(PYTHON_VERSION) --quiet; \ + else \ + echo "Existing venv uses correct Python version"; \ + fi .PHONY: docs-build docs-build: docs-ensure-venv From 9bc00ec10772806dc9bb447ab373e0726ca46987 Mon Sep 17 00:00:00 2001 From: Jacobus Geluk Date: Mon, 1 Dec 2025 22:15:06 +0000 Subject: [PATCH 09/32] fix(mkdocs): update emoji extensions and kroki options for strict mode - Switch from materialx.emoji.* to material.extensions.emoji.* (Material >=9.4) - Rename kroki options to snake_case (server_url, download_images, download_dir) --- mkdocs.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/mkdocs.yml b/mkdocs.yml index 3eb3258c..48b3a13c 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -143,9 +143,9 @@ plugins: - '.*\.(tmp|bin|tar)$' - '_.*\.md$' - kroki: - ServerURL: https://kroki.io/ - DownloadImages: false - DownloadDir: docs/diagrams/out + server_url: https://kroki.io/ + download_images: false + download_dir: docs/diagrams/out markdown_extensions: - footnotes @@ -179,8 +179,8 @@ markdown_extensions: - pymdownx.smartsymbols - pymdownx.critic - pymdownx.emoji: - emoji_generator: !!python/name:materialx.emoji.to_svg - emoji_index: !!python/name:materialx.emoji.twemoji + emoji_generator: !!python/name:material.extensions.emoji.to_svg + emoji_index: !!python/name:material.extensions.emoji.twemoji options: custom_icons: - docs-overrides/.icons From 678ea64e0fa9894a502a4137e8eda65b3878021c Mon Sep 17 00:00:00 2001 From: Jacobus Geluk Date: Mon, 1 Dec 2025 22:15:40 +0000 Subject: [PATCH 10/32] fix(kroki): drop removed download_dir option (strict mode) Newer mkdocs-kroki-plugin no longer supports download_dir; rely on server rendering only. --- mkdocs.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/mkdocs.yml b/mkdocs.yml index 48b3a13c..cbea7419 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -144,8 +144,6 @@ plugins: - '_.*\.md$' - kroki: server_url: https://kroki.io/ - download_images: false - download_dir: docs/diagrams/out markdown_extensions: - footnotes From dc0e0548a544d32a96b6f8ae9753b7c6e5cdbe4d Mon Sep 17 00:00:00 2001 From: Jacobus Geluk Date: Mon, 1 Dec 2025 22:16:37 +0000 Subject: [PATCH 11/32] fix(docs): use root-relative include paths in objective/index Ensures mkdocs-include-markdown finds files consistently in strict mode. --- docs/objective/index.md | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/docs/objective/index.md b/docs/objective/index.md index 421f096e..52a6d122 100644 --- a/docs/objective/index.md +++ b/docs/objective/index.md @@ -10,79 +10,79 @@ The primary reasons for creating a [Use Case Tree](/concept/use-case-tree) are: - :material-cached:{ .lg } __Interoperability Achieved__ - {% include-markdown "interoperability.md" + {% include-markdown "objective/interoperability.md" start="" end="" %} [:octicons-arrow-right-24: Learn more](/objective/interoperability/) - :material-cached:{ .lg } __Business Composability Improved__ - {% include-markdown "composable-business.md" + {% include-markdown "objective/composable-business.md" start="" end="" %} [:octicons-arrow-right-24: Learn more](/objective/composable-business/) - :material-cached:{ .lg } __Requirements Captured__ - {% include-markdown "know-what-the-business-wants.md" + {% include-markdown "objective/know-what-the-business-wants.md" start="" end="" %} [:octicons-arrow-right-24: Learn more](/objective/know-what-the-business-wants/) - :material-cached:{ .lg } __Knowledge Captured__ - {% include-markdown "capture-knowledge.md" + {% include-markdown "objective/capture-knowledge.md" start="" end="" %} [:octicons-arrow-right-24: Learn more](/objective/capture-knowledge/) - :material-cached:{ .lg } __Gaps Bridged__ - {% include-markdown "bridge-the-gap.md" + {% include-markdown "objective/bridge-the-gap.md" start="" end="" %} [:octicons-arrow-right-24: Learn more](/objective/bridge-the-gap/) - :material-cached:{ .lg } __Expectations Managed__ - {% include-markdown "manage-expectations.md" + {% include-markdown "objective/manage-expectations.md" start="" end="" %} [:octicons-arrow-right-24: Learn more](/objective/manage-expectations/) - :material-cached:{ .lg } __Did not boil the ocean__ - {% include-markdown "avoid-boiling-the-ocean.md" + {% include-markdown "objective/avoid-boiling-the-ocean.md" start="" end="" %} [:octicons-arrow-right-24: Learn more](/objective/avoid-boiling-the-ocean/) - :material-cached:{ .lg } __Disruption Avoided__ - {% include-markdown "avoid-disruption.md" + {% include-markdown "objective/avoid-disruption.md" start="" end="" %} [:octicons-arrow-right-24: Learn more](/objective/avoid-disruption/) - :material-cached:{ .lg } __Quality Increased__ - {% include-markdown "increase-quality.md" + {% include-markdown "objective/increase-quality.md" start="" end="" %} [:octicons-arrow-right-24: Learn more](/objective/increase-quality/) - :material-cached:{ .lg } __Aligned with Strategy__ - {% include-markdown "align-with-business-strategy.md" + {% include-markdown "objective/align-with-business-strategy.md" start="" end="" %} [:octicons-arrow-right-24: Learn more](/objective/align-with-business-strategy/) - :material-cached:{ .lg } __Delivered__ - {% include-markdown "strategic-usecases.md" + {% include-markdown "objective/strategic-usecases.md" start="" end="" %} [:octicons-arrow-right-24: Learn more](/objective/strategic-usecases/) - :material-cached:{ .lg } __Modularity Managed__ - {% include-markdown "modularity.md" + {% include-markdown "objective/modularity.md" start="" end="" %} [:octicons-arrow-right-24: Learn more](/objective/modularity/) - :material-cached:{ .lg } __Reuse Enabled__ - {% include-markdown "enable-reuse.md" + {% include-markdown "objective/enable-reuse.md" start="" end="" %} [:octicons-arrow-right-24: Learn more](/objective/enable-reuse/) From e88d7c4b44243a359d248e7fd33cac14022dc358 Mon Sep 17 00:00:00 2001 From: Jacobus Geluk Date: Mon, 1 Dec 2025 22:17:43 +0000 Subject: [PATCH 12/32] fix(docs): resolve strict include and link warnings in process section - Use root-relative include paths for build step summaries - Replace trailing-slash links with explicit .md doc links --- docs/process/build/index.md | 12 +++++------ docs/process/index.md | 42 ++++++++++++++++++------------------- 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/docs/process/build/index.md b/docs/process/build/index.md index df78d39d..c6a0ea90 100644 --- a/docs/process/build/index.md +++ b/docs/process/build/index.md @@ -33,37 +33,37 @@ hide: - :material-cached:{ .lg } __Allocate__ - {% include-markdown "allocate.md" + {% include-markdown "process/build/allocate.md" start="" end="" %} [:octicons-arrow-right-24: Learn more](allocate.md) - :material-cached:{ .lg } __Design__ - {% include-markdown "design.md" + {% include-markdown "process/build/design.md" start="" end="" %} [:octicons-arrow-right-24: Learn more](design.md) - :material-cached:{ .lg } __Implement__ - {% include-markdown "implement.md" + {% include-markdown "process/build/implement.md" start="" end="" %} [:octicons-arrow-right-24: Learn more](implement.md) - :material-cached:{ .lg } __Test__ - {% include-markdown "test.md" + {% include-markdown "process/build/test.md" start="" end="" %} [:octicons-arrow-right-24: Learn more](test.md) - :material-cached:{ .lg } __Verify__ - {% include-markdown "verify.md" + {% include-markdown "process/build/verify.md" start="" end="" %} [:octicons-arrow-right-24: Learn more](verify.md) - :material-cached:{ .lg } __Deliver__ - {% include-markdown "deliver.md" + {% include-markdown "process/build/deliver.md" start="" end="" %} [:octicons-arrow-right-24: Learn more](deliver.md) diff --git a/docs/process/index.md b/docs/process/index.md index 0b320f4e..c479f67b 100644 --- a/docs/process/index.md +++ b/docs/process/index.md @@ -17,11 +17,11 @@ hide: ----- - [Envision](./plan/envision/), - [Discover](./plan/discover/), - [Assess](./plan/assess/), - [Train](./plan/train/) and - [Chart](./plan/chart/). + [Envision](./plan/envision.md), + [Discover](./plan/discover.md), + [Assess](./plan/assess.md), + [Train](./plan/train.md) and + [Chart](./plan/chart.md). [:octicons-arrow-right-24: Learn more](./plan/) @@ -44,37 +44,37 @@ hide: [EKG/Platform](/vocab/ekg-platform/) that serves many Use Cases across the Enterprise. - [:octicons-arrow-right-24: Learn more](run) + [:octicons-arrow-right-24: Learn more](./run/) - :material-foot-print: Steps ----- - [Envision](./plan/envision/), - [Discover](./plan/discover/), - [Assess](./plan/assess/), - [Train](./plan/train/) and - [Chart](./plan/chart/). + [Envision](./plan/envision.md), + [Discover](./plan/discover.md), + [Assess](./plan/assess.md), + [Train](./plan/train.md) and + [Chart](./plan/chart.md). - :material-foot-print: Steps ----- - [Allocate](./build/allocate/), - [Design](./build/design/), - [Implement](./build/implement/), - [Test](./build/test/), - [Verify](./build/verify/) and - [Deliver](./build/deliver/). + [Allocate](./build/allocate.md), + [Design](./build/design.md), + [Implement](./build/implement.md), + [Test](./build/test.md), + [Verify](./build/verify.md) and + [Deliver](./build/deliver.md). - :material-foot-print: Steps ----- - [Deploy](./run/deploy/), - [Operate](./run/operate/), - [Measure](./run/measure/) and - [Optimize](./run/optimize/). + [Deploy](./run/deploy.md), + [Operate](./run/operate.md), + [Measure](./run/measure.md) and + [Optimize](./run/optimize.md). From 0f767fe286868fdb3ea45b4820b8359e97977316 Mon Sep 17 00:00:00 2001 From: Jacobus Geluk Date: Mon, 1 Dec 2025 22:19:18 +0000 Subject: [PATCH 13/32] fix(docs): root-relative includes and links in plan/index Resolve strict include failure for Envision/Discover/Assess/Train/Chart. --- docs/process/plan/index.md | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/docs/process/plan/index.md b/docs/process/plan/index.md index a2560810..2a43be10 100644 --- a/docs/process/plan/index.md +++ b/docs/process/plan/index.md @@ -39,35 +39,35 @@ hide:
- - :material-cached:{ .lg } __[Envision](envision)__ + - :material-cached:{ .lg } __[Envision](envision.md)__ - {% include-markdown "envision.md" + {% include-markdown "process/plan/envision.md" start="" end="" %} - [:octicons-arrow-right-24: Learn more](envision) + [:octicons-arrow-right-24: Learn more](envision.md) - - :material-cached:{ .lg } __[Discover](discover)__ + - :material-cached:{ .lg } __[Discover](discover.md)__ - {% include-markdown "discover.md" + {% include-markdown "process/plan/discover.md" start="" end="" %} - [:octicons-arrow-right-24: Learn more](discover) + [:octicons-arrow-right-24: Learn more](discover.md) - - :material-cached:{ .lg } __[Assess](assess)__ + - :material-cached:{ .lg } __[Assess](assess.md)__ - {% include-markdown "assess.md" + {% include-markdown "process/plan/assess.md" start="" end="" %} - [:octicons-arrow-right-24: Learn more](assess) + [:octicons-arrow-right-24: Learn more](assess.md) - - :material-cached:{ .lg } __[Train](train)__ + - :material-cached:{ .lg } __[Train](train.md)__ - {% include-markdown "train.md" + {% include-markdown "process/plan/train.md" start="" end="" %} - [:octicons-arrow-right-24: Learn more](train) + [:octicons-arrow-right-24: Learn more](train.md) - - :material-cached:{ .lg } __[Chart](chart)__ + - :material-cached:{ .lg } __[Chart](chart.md)__ - {% include-markdown "chart.md" + {% include-markdown "process/plan/chart.md" start="" end="" %} - [:octicons-arrow-right-24: Learn more](chart) + [:octicons-arrow-right-24: Learn more](chart.md)
From 3938d6541cd4860ca80ef4740c15dc105322fdcf Mon Sep 17 00:00:00 2001 From: Jacobus Geluk Date: Mon, 1 Dec 2025 22:19:42 +0000 Subject: [PATCH 14/32] fix(docs): root-relative includes in run/index Resolve strict include failure for run phase pages. --- docs/process/run/index.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/process/run/index.md b/docs/process/run/index.md index af70e240..8f2a9ee5 100644 --- a/docs/process/run/index.md +++ b/docs/process/run/index.md @@ -28,25 +28,25 @@ - :material-cached:{ .lg } __Deploy__ - {% include-markdown "deploy.md" + {% include-markdown "process/run/deploy.md" start="" end="" %} [:octicons-arrow-right-24: Learn more](deploy.md) - :material-cached:{ .lg } __Operate__ - {% include-markdown "operate.md" + {% include-markdown "process/run/operate.md" start="" end="" %} [:octicons-arrow-right-24: Learn more](operate.md) - :material-cached:{ .lg } __Measure__ - {% include-markdown "measure.md" + {% include-markdown "process/run/measure.md" start="" end="" %} [:octicons-arrow-right-24: Learn more](measure.md) - :material-cached:{ .lg } __Optimize__ - {% include-markdown "optimize.md" + {% include-markdown "process/run/optimize.md" start="" end="" %} [:octicons-arrow-right-24: Learn more](optimize.md) From 1f1e90e8b5fb416c43b2487559f2210d1d2f936f Mon Sep 17 00:00:00 2001 From: Jacobus Geluk Date: Mon, 1 Dec 2025 22:23:55 +0000 Subject: [PATCH 15/32] fix(plantuml): replace deprecated 'skinparam handwritten' with '!option' Removes yellow banner advising to use !option handwritten. --- docs/diagrams/include/themes/general.puml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/diagrams/include/themes/general.puml b/docs/diagrams/include/themes/general.puml index ff3170d0..8cedf3dd 100644 --- a/docs/diagrams/include/themes/general.puml +++ b/docs/diagrams/include/themes/general.puml @@ -4,7 +4,7 @@ skinparam Padding 4 skinparam RoundCorner 40 skinparam Shadowing true skinparam HyperlinkUnderline false -skinparam handwritten false +!option handwritten false skinparam Default { 'FontName "Open Sans Semibold" From 6d175bc89eb1ade1f1375798d8cc6ab4fd3eafa5 Mon Sep 17 00:00:00 2001 From: Jacobus Geluk Date: Mon, 1 Dec 2025 22:26:04 +0000 Subject: [PATCH 16/32] style(plantuml): modernize theme (flat, smaller radius, Roboto) - Disable shadows, reduce round corners to 8 - Use Roboto font to match site - Thinner sequence borders - Handwritten already disabled via !option --- docs/diagrams/include/themes/general.puml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/diagrams/include/themes/general.puml b/docs/diagrams/include/themes/general.puml index 8cedf3dd..511eb47a 100644 --- a/docs/diagrams/include/themes/general.puml +++ b/docs/diagrams/include/themes/general.puml @@ -1,13 +1,13 @@ !define BORDER_THICKNESS 1 skinparam Padding 4 -skinparam RoundCorner 40 -skinparam Shadowing true +skinparam RoundCorner 8 +skinparam Shadowing false skinparam HyperlinkUnderline false !option handwritten false skinparam Default { - 'FontName "Open Sans Semibold" + FontName "Roboto" FontColor FONT_COLOR FontSize 12 } @@ -72,7 +72,7 @@ skinparam interface { BorderColor BORDER_COLOR FontColor FONT_COLOR } -skinparam SequenceParticipantBorderThickness 3 +skinparam SequenceParticipantBorderThickness 1 skinparam sequence { ParticipantBackgroundColor BG_MAIN_COLOR ParticipantBorderColor BORDER_COLOR From 186dd16ac98352132aa93c1f25f8192e90373afa Mon Sep 17 00:00:00 2001 From: Jacobus Geluk Date: Mon, 1 Dec 2025 22:27:34 +0000 Subject: [PATCH 17/32] chore(make): add docs-diagrams-clean and docs-serve-fresh to refresh UML Ensures PlantUML diagrams are regenerated after theme changes. --- Makefile | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Makefile b/Makefile index a9bc9f49..033c553d 100644 --- a/Makefile +++ b/Makefile @@ -158,6 +158,14 @@ docs-build-clean: docs-ensure-venv docs-serve: docs-ensure-venv $(UV) run mkdocs serve --config-file $(MKDOCS_CONFIG_FILE) --livereload --strict +.PHONY: docs-diagrams-clean +docs-diagrams-clean: + @echo "Cleaning generated PlantUML diagrams" + @rm -rf docs/diagrams/out 2>/dev/null || true + +.PHONY: docs-serve-fresh +docs-serve-fresh: docs-diagrams-clean docs-serve + .PHONY: docs-serve-fast docs-serve-fast: docs-ensure-venv $(UV) run mkdocs serve --config-file $(MKDOCS_CONFIG_FILE) --livereload --strict From 09f89de094d9f65d0db46a65d0b8f4b4fff4c676 Mon Sep 17 00:00:00 2001 From: Jacobus Geluk Date: Mon, 1 Dec 2025 22:31:25 +0000 Subject: [PATCH 18/32] style(plantuml): force non-handwritten mode in all diagrams; increase font size - Add `!option handwritten false` at top of each .puml - Bump default FontSize to 14 for better readability --- docs/diagrams/include/themes/general.puml | 2 +- docs/diagrams/src/persona-class-diagram.puml | 1 + docs/diagrams/src/process-plan.puml | 1 + docs/diagrams/src/process.puml | 1 + docs/diagrams/src/use-case-life-cycle.puml | 1 + 5 files changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/diagrams/include/themes/general.puml b/docs/diagrams/include/themes/general.puml index 511eb47a..f2c4f4a4 100644 --- a/docs/diagrams/include/themes/general.puml +++ b/docs/diagrams/include/themes/general.puml @@ -9,7 +9,7 @@ skinparam HyperlinkUnderline false skinparam Default { FontName "Roboto" FontColor FONT_COLOR - FontSize 12 + FontSize 14 } skinparam Arrow { diff --git a/docs/diagrams/src/persona-class-diagram.puml b/docs/diagrams/src/persona-class-diagram.puml index 6b07c8c4..c65d6e0f 100644 --- a/docs/diagrams/src/persona-class-diagram.puml +++ b/docs/diagrams/src/persona-class-diagram.puml @@ -1,5 +1,6 @@ @startuml +!option handwritten false !include ../include/themes/light.puml class Concept { diff --git a/docs/diagrams/src/process-plan.puml b/docs/diagrams/src/process-plan.puml index 8f331024..fb1e739c 100644 --- a/docs/diagrams/src/process-plan.puml +++ b/docs/diagrams/src/process-plan.puml @@ -1,5 +1,6 @@ @startuml +!option handwritten false !include ../include/themes/light.puml hide empty description diff --git a/docs/diagrams/src/process.puml b/docs/diagrams/src/process.puml index d1dcbf48..c66d2404 100644 --- a/docs/diagrams/src/process.puml +++ b/docs/diagrams/src/process.puml @@ -1,5 +1,6 @@ @startuml +!option handwritten false !include ../include/themes/light.puml state Plan { diff --git a/docs/diagrams/src/use-case-life-cycle.puml b/docs/diagrams/src/use-case-life-cycle.puml index f5723f26..0f1ecd95 100644 --- a/docs/diagrams/src/use-case-life-cycle.puml +++ b/docs/diagrams/src/use-case-life-cycle.puml @@ -1,5 +1,6 @@ @startuml +!option handwritten false !include ../include/themes/light.puml [*] -> Identified From bd35c8eef36b965ca78d998c1797056e81fd1263 Mon Sep 17 00:00:00 2001 From: Jacobus Geluk Date: Mon, 1 Dec 2025 22:33:56 +0000 Subject: [PATCH 19/32] fix(plantuml): move '!option handwritten false' before @startuml Ensures PlantUML processes the non-handwritten directive globally. --- docs/diagrams/src/persona-class-diagram.puml | 3 +-- docs/diagrams/src/process-plan.puml | 3 +-- docs/diagrams/src/process.puml | 3 +-- docs/diagrams/src/use-case-life-cycle.puml | 3 +-- 4 files changed, 4 insertions(+), 8 deletions(-) diff --git a/docs/diagrams/src/persona-class-diagram.puml b/docs/diagrams/src/persona-class-diagram.puml index c65d6e0f..4287ae92 100644 --- a/docs/diagrams/src/persona-class-diagram.puml +++ b/docs/diagrams/src/persona-class-diagram.puml @@ -1,6 +1,5 @@ -@startuml - !option handwritten false +@startuml !include ../include/themes/light.puml class Concept { diff --git a/docs/diagrams/src/process-plan.puml b/docs/diagrams/src/process-plan.puml index fb1e739c..d27815e6 100644 --- a/docs/diagrams/src/process-plan.puml +++ b/docs/diagrams/src/process-plan.puml @@ -1,6 +1,5 @@ -@startuml - !option handwritten false +@startuml !include ../include/themes/light.puml hide empty description diff --git a/docs/diagrams/src/process.puml b/docs/diagrams/src/process.puml index c66d2404..7b305a88 100644 --- a/docs/diagrams/src/process.puml +++ b/docs/diagrams/src/process.puml @@ -1,6 +1,5 @@ -@startuml - !option handwritten false +@startuml !include ../include/themes/light.puml state Plan { diff --git a/docs/diagrams/src/use-case-life-cycle.puml b/docs/diagrams/src/use-case-life-cycle.puml index 0f1ecd95..c7ef3093 100644 --- a/docs/diagrams/src/use-case-life-cycle.puml +++ b/docs/diagrams/src/use-case-life-cycle.puml @@ -1,6 +1,5 @@ -@startuml - !option handwritten false +@startuml !include ../include/themes/light.puml [*] -> Identified From 47886c5e1de5a83d5feda738ba6593aa0820fe96 Mon Sep 17 00:00:00 2001 From: Jacobus Geluk Date: Mon, 1 Dec 2025 22:35:31 +0000 Subject: [PATCH 20/32] fix(plantuml): add explicit skinparam handwritten false at top Force both !option and skinparam handwritten false to eliminate wavy edges. --- docs/diagrams/include/themes/general.puml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/diagrams/include/themes/general.puml b/docs/diagrams/include/themes/general.puml index f2c4f4a4..33478fbf 100644 --- a/docs/diagrams/include/themes/general.puml +++ b/docs/diagrams/include/themes/general.puml @@ -1,10 +1,11 @@ !define BORDER_THICKNESS 1 +!option handwritten false +skinparam handwritten false skinparam Padding 4 skinparam RoundCorner 8 skinparam Shadowing false skinparam HyperlinkUnderline false -!option handwritten false skinparam Default { FontName "Roboto" From 59901ce4edaadb5e2ecc02ec8c7bd64669f3cf47 Mon Sep 17 00:00:00 2001 From: Jacobus Geluk Date: Mon, 1 Dec 2025 22:51:54 +0000 Subject: [PATCH 21/32] Fix MkDocs warnings and update configuration - Switch PlantUML back to server rendering (avoid CI complexity) - Fix all absolute links to use relative paths with .md extensions - Fix relative links to include proper .md extensions for strict mode - Remove broken links to non-existent dataset.md file - Update Mermaid config to use plugin's javascript option (fix deprecation) - Remove PAT_MKDOCS_INSIDERS references from GitHub workflow - Update GitHub Actions to latest versions (checkout@v4, cache@v4) - Fix all link warnings to ensure clean builds in strict mode --- .github/workflows/docs.yml | 10 ++----- docs/concept/story.md | 6 ++-- docs/concept/use-case-tree.md | 2 +- docs/concept/use-case.md | 8 ++--- docs/diagrams/include/themes/general.puml | 3 +- docs/diagrams/include/themes/light.puml | 1 + docs/intro/index.md | 16 +++++----- .../objective/align-with-business-strategy.md | 6 ++-- docs/objective/avoid-boiling-the-ocean.md | 2 +- docs/objective/avoid-disruption.md | 2 +- docs/objective/bridge-the-gap.md | 2 +- docs/objective/capture-knowledge.md | 2 +- docs/objective/composable-business.md | 2 +- docs/objective/enable-reuse.md | 2 +- docs/objective/increase-quality.md | 2 +- docs/objective/index.md | 30 +++++++++---------- docs/objective/interoperability.md | 2 +- .../objective/know-what-the-business-wants.md | 10 +++---- docs/other/faq.md | 28 ++++++++--------- docs/process/build/allocate.md | 4 +-- docs/process/build/design.md | 4 +-- docs/process/build/index.md | 18 +++++------ docs/process/index.md | 16 +++++----- docs/process/plan/assess.md | 2 +- docs/process/plan/chart.md | 4 +-- docs/process/plan/discover.md | 2 +- docs/process/plan/envision.md | 4 +-- docs/process/plan/index.md | 2 +- docs/process/run/index.md | 4 +-- docs/process/run/operate.md | 6 ++-- docs/process/run/optimize.md | 4 +-- docs/vocab/ekg-iri.md | 8 ++--- docs/vocab/ekg.md | 6 ++-- docs/vocab/maturity-model.md | 2 +- mkdocs.yml | 2 +- 35 files changed, 109 insertions(+), 115 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index a5f31067..71f116ba 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -28,11 +28,11 @@ jobs: python-version: '3.13' - name: Set up Git repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 - - uses: actions/cache@v3 + uses: actions/cache@v4 if: ${{ github.ref == 'refs/heads/main' }} with: key: ${{ github.ref }} @@ -43,16 +43,12 @@ jobs: - name: Install all MkDocs dependencies if: ${{ github.ref == 'refs/heads/main' }} - env: - PAT_MKDOCS_INSIDERS: ${{ secrets.PAT_MKDOCS_INSIDERS }} run: | # echo "/home/linuxbrew/.linuxbrew/bin/brew" >> $GITHUB_PATH make --environment-overrides docs-install-github-actions - name: Build Site # if: ${{ github.ref != 'refs/heads/main' }} - env: - PAT_MKDOCS_INSIDERS: ${{ secrets.PAT_MKDOCS_INSIDERS }} # run 'docs-build' twice because 'gen_files' doesn't let MkDocs # pick up on the generated files in the first run run: | @@ -61,6 +57,4 @@ jobs: - name: Deploy Site if: ${{ github.ref == 'refs/heads/main' }} - env: - PAT_MKDOCS_INSIDERS: ${{ secrets.PAT_MKDOCS_INSIDERS }} run: make --environment-overrides docs-deploy diff --git a/docs/concept/story.md b/docs/concept/story.md index 9be2aaf8..87e4e0a2 100644 --- a/docs/concept/story.md +++ b/docs/concept/story.md @@ -2,8 +2,8 @@ === "Business & Management Audience" - A Story --- in the context of a [Use Case](usecase) in the - [Use Case Tree](/concept/use-case-tree) --- defines a business requirement. + A Story --- in the context of a [Use Case](use-case.md) in the + [Use Case Tree](use-case-tree.md) --- defines a business requirement. A business user could specify a requirement as follows: @@ -53,7 +53,7 @@ whether it can still deliver all functionality Here's a diagram that illustrates how we can break up a user story in some interesting components that - we can link to other data structures in the Knowledge Graph such as a taxonomy of all ["Personas"](persona) + we can link to other data structures in the Knowledge Graph such as a taxonomy of all ["Personas"](persona.md)
TODO diff --git a/docs/concept/use-case-tree.md b/docs/concept/use-case-tree.md index 3ef2cc3b..29b83d03 100644 --- a/docs/concept/use-case-tree.md +++ b/docs/concept/use-case-tree.md @@ -14,7 +14,7 @@ Some notes as input for this article (to still be written): (EKG) is “the Use Case Tree” (UCT). - The Use Case Tree is the EKG’s equivalent of a long term data strategy and business capability plan. - The Use Case Tree is the EKG high level requirements overview, scoping and dependency model. - In its initial stages, in the [Plan Phase](/process/plan/), it gives a mile wide, inch deep view + In its initial stages, in the [Plan Phase](../process/plan/index.md), it gives a mile wide, inch deep view of business capabilities. - The Use Case Tree is a breakdown of strategic planned-for capabilities into smaller building blocks, all called ”use cases”. Strategic long term use cases such as diff --git a/docs/concept/use-case.md b/docs/concept/use-case.md index 28ae7d84..b7f1c52f 100644 --- a/docs/concept/use-case.md +++ b/docs/concept/use-case.md @@ -11,13 +11,13 @@ the organization at any point in time. We want to capture all these ideas (and as much of the knowledge behind those ideas) and create one data structure for it that - we call "the [Use Case Tree](/concept/use-case-tree)" because it looks like an inverted tree: it's + we call "the [Use Case Tree](use-case-tree.md)" because it looks like an inverted tree: it's something that starts on a whiteboard, showing a break-down of a component of the business into smaller components. Anyone should be able to contribute ideas that may or may not end up as fully implemented use cases to end up in the organization's - [Use Case Tree](/concept/use-case-tree), whether they are viable or not. + [Use Case Tree](use-case-tree.md), whether they are viable or not. If an idea for a given use case is rejected then show the rationale for that to everyone so that everyone can learn, and we're not wasting anyones time on that idea again. @@ -75,7 +75,7 @@ At a later stage in the life-cycle of the Use Case we add: - The stories, see [Story](story.md) - - The [datasets](dataset) and their ontologies + - The datasets and their ontologies - The workflows Specialists of various disciplines in the organization can add their details @@ -121,7 +121,7 @@ (some of which are reusable and some of which are specific to the parent use case) - Priority is to look up in the tree, not down, and define the longer term “strategic use cases” as well - [:octicons-arrow-right-24: Learn more about the _Discover Step_](../../process/plan/discover/) + [:octicons-arrow-right-24: Learn more about the _Discover Step_](../process/plan/discover.md) - :construction_site:{ .lg } __Build Phase__ diff --git a/docs/diagrams/include/themes/general.puml b/docs/diagrams/include/themes/general.puml index 33478fbf..5d97fe0e 100644 --- a/docs/diagrams/include/themes/general.puml +++ b/docs/diagrams/include/themes/general.puml @@ -1,7 +1,6 @@ !define BORDER_THICKNESS 1 !option handwritten false -skinparam handwritten false skinparam Padding 4 skinparam RoundCorner 8 skinparam Shadowing false @@ -159,4 +158,4 @@ skinparam rectangle<> { FontColor FONT_COLOR BorderColor BORDER_COLOR BorderThickness BORDER_THICKNESS -} \ No newline at end of file +} diff --git a/docs/diagrams/include/themes/light.puml b/docs/diagrams/include/themes/light.puml index 461fa0d6..cee5e2e2 100644 --- a/docs/diagrams/include/themes/light.puml +++ b/docs/diagrams/include/themes/light.puml @@ -1,3 +1,4 @@ +!option handwritten false !define BG_MAIN_COLOR #66BCF0 !define BG_SECONDARY_COLOR #B4BCBE !define BG_PACKAGE_COLOR #eeb291 diff --git a/docs/intro/index.md b/docs/intro/index.md index 69674346..018d1a6b 100644 --- a/docs/intro/index.md +++ b/docs/intro/index.md @@ -20,12 +20,12 @@ to be able to: 5. To create business agility by creating reusable business components 6. To capture intellectual property and manage your business value -The key _artifact_ in the development of an EKG is "the [Use Case Tree](/concept/use-case-tree)": +The key _artifact_ in the development of an EKG is "the [Use Case Tree](../concept/use-case-tree.md)": -- The [Use Case Tree](/concept/use-case-tree) provides a +- The [Use Case Tree](../concept/use-case-tree.md) provides a **long term data strategy and business capability plan**. -- The [Use Case Tree](/concept/use-case-tree) is the +- The [Use Case Tree](../concept/use-case-tree.md) is the **high-level requirements overview, scoping and dependency model**.
It gives a _mile wide, inch deep_ view of business capabilities. @@ -40,7 +40,7 @@ by technology, different groups of people, often across many departments, will g have their own way of looking at it. There is no shared language, not one single artifact that they can all talk to and reason about. -The [Use Case Tree](/concept/use-case-tree) is that single artifact. +The [Use Case Tree](../concept/use-case-tree.md) is that single artifact. It provides one single construct, owned by _the business_, and primarily driven by business strategy, that every group of people, every specialist, can relate their way of thinking to. @@ -48,13 +48,13 @@ This includes not only data and technology specialists but also project managers, financial managers, security and compliance officers, operations engineers and so forth. All their models and different ways of looking at a given capability -can be plugged into the [Use Case Tree](/concept/use-case-tree) as different views. +can be plugged into the [Use Case Tree](../concept/use-case-tree.md) as different views. Everything we ever do in an organization, especially in the data and technology pillars of that enterprise, should be related to at least -one use case in the organization's [Use Case Tree](/concept/use-case-tree). +one use case in the organization's [Use Case Tree](../concept/use-case-tree.md). -The [Use Case Tree](/concept/use-case-tree) is a breakdown of strategic planned-for +The [Use Case Tree](../concept/use-case-tree.md) is a breakdown of strategic planned-for capabilities into smaller building blocks, all called use cases. Strategic long term use cases such as _[Enterprise Risk Management](https://catalog.ekgf.org/use-case/risk-management/)_ @@ -63,7 +63,7 @@ down into smaller use cases that can---and should---be done first. Each use case is a module---an EKG-component so you will---a building block with which other use cases can be constructed -(see ["Modularity Managed"](http://localhost:8000/objective/modularity/)). +(see ["Modularity Managed"](../objective/modularity.md)). The Use Case Tree Method is a practice that has been developed and used for many EKG use cases that are running in production. diff --git a/docs/objective/align-with-business-strategy.md b/docs/objective/align-with-business-strategy.md index c76ae197..2f5ea469 100644 --- a/docs/objective/align-with-business-strategy.md +++ b/docs/objective/align-with-business-strategy.md @@ -16,11 +16,11 @@ Most---if not all---large enterprises are complex and consist of many _lines of business has its own "business identity" and therefore its own long term strategy. Each of these organizational divisions has its own agenda. -The [Use Case Tree](/concept/use-case-tree) is the single artifact that all lines of business can talk to. +The [Use Case Tree](../concept/use-case-tree.md) is the single artifact that all lines of business can talk to. ## Business Capability Map -At the highest levels, the [Use Case Tree](/concept/use-case-tree) will end up being +At the highest levels, the [Use Case Tree](../concept/use-case-tree.md) will end up being identical---or almost identical---to a _business capability map_. Here's an example of a simplified capability map of an insurance company @@ -47,7 +47,7 @@ models but in many cases: ## Next-level Capability Map -The [Use Case Tree](/concept/use-case-tree) serves as the next level in Business Capability Mapping where each capability gets broken down +The [Use Case Tree](../concept/use-case-tree.md) serves as the next level in Business Capability Mapping where each capability gets broken down into smaller capabilities each of which ends up as an executable model --- or component or model so you will --- in the EKG itself. diff --git a/docs/objective/avoid-boiling-the-ocean.md b/docs/objective/avoid-boiling-the-ocean.md index d168e2e8..d9605e8a 100644 --- a/docs/objective/avoid-boiling-the-ocean.md +++ b/docs/objective/avoid-boiling-the-ocean.md @@ -37,7 +37,7 @@ to have managed expectations, to not waste time on things that are not important yet, to keep the eye on the ball which is to keep delivering real business value to real end-users continuously. -The [Use Case Tree](/concept/use-case-tree) avoids the boil-the-ocean-phenomenon +The [Use Case Tree](../concept/use-case-tree.md) avoids the boil-the-ocean-phenomenon because the Use Case Tree and its individual use cases define an agreed scope at the detail level without becoming technical immediately. diff --git a/docs/objective/avoid-disruption.md b/docs/objective/avoid-disruption.md index bad84b65..c00dba71 100644 --- a/docs/objective/avoid-disruption.md +++ b/docs/objective/avoid-disruption.md @@ -33,5 +33,5 @@ So, for instance, when some sub-use case of a high-level use case is also used in another high-level use case then a change that serves the needs of one could potentially also affect the other and its users. -That's why we need the [Use Case Tree](/concept/use-case-tree), to allow us to avoid any disruption +That's why we need the [Use Case Tree](../concept/use-case-tree.md), to allow us to avoid any disruption across the board. diff --git a/docs/objective/bridge-the-gap.md b/docs/objective/bridge-the-gap.md index d6f95682..04656301 100644 --- a/docs/objective/bridge-the-gap.md +++ b/docs/objective/bridge-the-gap.md @@ -24,7 +24,7 @@ Align business expectations with technology delivery. be used for many other use cases such as "Shareholding disclosure"? -- Yes, the customer is always right but the [Use Case Tree](/concept/use-case-tree) +- Yes, the customer is always right but the [Use Case Tree](../concept/use-case-tree.md) shows to the customer that there are many other customers (or future customers, in and outside the organization even) and why it makes sense to prioritize reuse and how that not diff --git a/docs/objective/capture-knowledge.md b/docs/objective/capture-knowledge.md index 9d9ebe96..04905cd4 100644 --- a/docs/objective/capture-knowledge.md +++ b/docs/objective/capture-knowledge.md @@ -11,7 +11,7 @@ hide: _Enabling a whole new league of use cases._ -The [Use Case Tree](/concept/use-case-tree) **Provides a "map"[^1] of all knowledge, data and +The [Use Case Tree](../concept/use-case-tree.md) **Provides a "map"[^1] of all knowledge, data and functionality** that the EKG provides to the enterprise. Enabling a whole new league of use cases. diff --git a/docs/objective/composable-business.md b/docs/objective/composable-business.md index 9f40c988..18cd5808 100644 --- a/docs/objective/composable-business.md +++ b/docs/objective/composable-business.md @@ -16,7 +16,7 @@ The Future of Business Is Composable Work in progress. Points to make: - - Explain that the [Use Case Tree (UCT)](/concept/use-case-tree) is the ultimate way to implement + - Explain that the [Use Case Tree (UCT)](../concept/use-case-tree.md) is the ultimate way to implement what Gartner now calls "Composable Business": - https://www.gartner.com/smarterwithgartner/gartner-keynote-the-future-of-business-is-composable - Same for "Packaged Business Capabilities (PBCs)" (also called Packaged Business Components): diff --git a/docs/objective/enable-reuse.md b/docs/objective/enable-reuse.md index 93d62c04..070ec6c5 100644 --- a/docs/objective/enable-reuse.md +++ b/docs/objective/enable-reuse.md @@ -11,5 +11,5 @@ hide: _TODO: Summary_ -The [Use Case Tree](/concept/use-case-tree) is a foundational mechanism to create an ecosystem of +The [Use Case Tree](../concept/use-case-tree.md) is a foundational mechanism to create an ecosystem of reusable components for the EKG. diff --git a/docs/objective/increase-quality.md b/docs/objective/increase-quality.md index ab4b79d5..863cb506 100644 --- a/docs/objective/increase-quality.md +++ b/docs/objective/increase-quality.md @@ -11,7 +11,7 @@ hide: _TODO: Summary_ -The [Use Case Tree](/concept/use-case-tree) is a foundational structure for quality +The [Use Case Tree](../concept/use-case-tree.md) is a foundational structure for quality --- any kind of quality --- since it enforces, requires and enables 100% test coverage based on real business scenarios and requirements. diff --git a/docs/objective/index.md b/docs/objective/index.md index 52a6d122..38fa28d0 100644 --- a/docs/objective/index.md +++ b/docs/objective/index.md @@ -1,10 +1,10 @@ # Objectives -The primary reasons for creating a [Use Case Tree](/concept/use-case-tree) are: +The primary reasons for creating a [Use Case Tree](../concept/use-case-tree.md) are: -![Conveyer Belt](/assets/conveyer-belt.jpg)[^copyright] +![Conveyer Belt](../assets/conveyer-belt.jpg)[^copyright]
@@ -12,79 +12,79 @@ The primary reasons for creating a [Use Case Tree](/concept/use-case-tree) are: {% include-markdown "objective/interoperability.md" start="" end="" %} - [:octicons-arrow-right-24: Learn more](/objective/interoperability/) + [:octicons-arrow-right-24: Learn more](interoperability.md) - :material-cached:{ .lg } __Business Composability Improved__ {% include-markdown "objective/composable-business.md" start="" end="" %} - [:octicons-arrow-right-24: Learn more](/objective/composable-business/) + [:octicons-arrow-right-24: Learn more](composable-business.md) - :material-cached:{ .lg } __Requirements Captured__ {% include-markdown "objective/know-what-the-business-wants.md" start="" end="" %} - [:octicons-arrow-right-24: Learn more](/objective/know-what-the-business-wants/) + [:octicons-arrow-right-24: Learn more](know-what-the-business-wants.md) - :material-cached:{ .lg } __Knowledge Captured__ {% include-markdown "objective/capture-knowledge.md" start="" end="" %} - [:octicons-arrow-right-24: Learn more](/objective/capture-knowledge/) + [:octicons-arrow-right-24: Learn more](capture-knowledge.md) - :material-cached:{ .lg } __Gaps Bridged__ {% include-markdown "objective/bridge-the-gap.md" start="" end="" %} - [:octicons-arrow-right-24: Learn more](/objective/bridge-the-gap/) + [:octicons-arrow-right-24: Learn more](bridge-the-gap.md) - :material-cached:{ .lg } __Expectations Managed__ {% include-markdown "objective/manage-expectations.md" start="" end="" %} - [:octicons-arrow-right-24: Learn more](/objective/manage-expectations/) + [:octicons-arrow-right-24: Learn more](manage-expectations.md) - :material-cached:{ .lg } __Did not boil the ocean__ {% include-markdown "objective/avoid-boiling-the-ocean.md" start="" end="" %} - [:octicons-arrow-right-24: Learn more](/objective/avoid-boiling-the-ocean/) + [:octicons-arrow-right-24: Learn more](avoid-boiling-the-ocean.md) - :material-cached:{ .lg } __Disruption Avoided__ {% include-markdown "objective/avoid-disruption.md" start="" end="" %} - [:octicons-arrow-right-24: Learn more](/objective/avoid-disruption/) + [:octicons-arrow-right-24: Learn more](avoid-disruption.md) - :material-cached:{ .lg } __Quality Increased__ {% include-markdown "objective/increase-quality.md" start="" end="" %} - [:octicons-arrow-right-24: Learn more](/objective/increase-quality/) + [:octicons-arrow-right-24: Learn more](increase-quality.md) - :material-cached:{ .lg } __Aligned with Strategy__ {% include-markdown "objective/align-with-business-strategy.md" start="" end="" %} - [:octicons-arrow-right-24: Learn more](/objective/align-with-business-strategy/) + [:octicons-arrow-right-24: Learn more](align-with-business-strategy.md) - :material-cached:{ .lg } __Delivered__ {% include-markdown "objective/strategic-usecases.md" start="" end="" %} - [:octicons-arrow-right-24: Learn more](/objective/strategic-usecases/) + [:octicons-arrow-right-24: Learn more](strategic-usecases.md) - :material-cached:{ .lg } __Modularity Managed__ {% include-markdown "objective/modularity.md" start="" end="" %} - [:octicons-arrow-right-24: Learn more](/objective/modularity/) + [:octicons-arrow-right-24: Learn more](modularity.md) - :material-cached:{ .lg } __Reuse Enabled__ {% include-markdown "objective/enable-reuse.md" start="" end="" %} - [:octicons-arrow-right-24: Learn more](/objective/enable-reuse/) + [:octicons-arrow-right-24: Learn more](enable-reuse.md)
diff --git a/docs/objective/interoperability.md b/docs/objective/interoperability.md index 7b67c2cb..9b36e08c 100644 --- a/docs/objective/interoperability.md +++ b/docs/objective/interoperability.md @@ -156,7 +156,7 @@ The _Use Case Tree Method_ is a rationale by which enterprises could design, build and deploy Enterprise Knowledge Graphs that, at high levels of maturity, will enable interoperability across the enterprise. Besides offering in semantic interoperability via ontologies and -machine-readable definitions of meaning, the [Use Case Tree](/concept/use-case-tree) enables +machine-readable definitions of meaning, the [Use Case Tree](../concept/use-case-tree.md) enables organizational by offering the opportunity to different parts of an organization to align their business processes, responsibilities, and expectations through modular reusable business capabilities diff --git a/docs/objective/know-what-the-business-wants.md b/docs/objective/know-what-the-business-wants.md index cfa56594..e695d459 100644 --- a/docs/objective/know-what-the-business-wants.md +++ b/docs/objective/know-what-the-business-wants.md @@ -12,7 +12,7 @@ _Know exactly what the business---the customer or product owner---really needs, short-, mid- and long-term._ -## [Plan Phase](../../process/plan/) +## [Plan Phase](../process/plan/index.md) One of the tasks during the planning phase of any new initiative---or iteration---is to ["Discover"](../process/plan/discover.md) @@ -40,7 +40,7 @@ the business opportunities & needs: bar lower than it could be. * Continuously improve, new insights occur all the time, have one - "living" shared data structure --- the [Use Case Tree](/concept/use-case-tree) --- that gets + "living" shared data structure --- the [Use Case Tree](../concept/use-case-tree.md) --- that gets continuously updated with the latest insights even while parts of that Use Case Tree are already running in production or still worked on. @@ -51,7 +51,7 @@ the business opportunities & needs: --- with the business --- the shortest path to delivering on the specified business outcomes. -## [Build Phase](../../process/build/) +## [Build Phase](../process/build/index.md) Once a roadmap has been agreed, which is "the contract with the business" i.e. the budget holder or product owner, implementation of the first use @@ -71,7 +71,7 @@ the business: All reporting to the business occurs in the context of the agreed roadmap, even after delivery. -## [Run Phase](../../process/run/) +## [Run Phase](../process/run/index.md) Ideally, at higher levels of operational maturity, changes get rolled out to production continuously and as frequently as possible so that any given update @@ -86,7 +86,7 @@ to production is as small and impact-free as possible. in cold water, thereby reducing the resistance to change and enabling a much more engaged user community. * End users will be able to relate their work directly to the appropriate use cases - as they are defined in the [Use Case Tree](/concept/use-case-tree) because the + as they are defined in the [Use Case Tree](../concept/use-case-tree.md) because the Use Case Tree is part of the EKG itself and advanced user interfaces can link to it. It describes the user's domain in their own terms. Direct feedback loops to all relevant stakeholders are therefore possible which yet again promotes collaboration, diff --git a/docs/other/faq.md b/docs/other/faq.md index 71aa6edf..d2cdb9a5 100644 --- a/docs/other/faq.md +++ b/docs/other/faq.md @@ -7,16 +7,16 @@ author: ## What is a Use Case? -A [Use Case](/concept/use-case/) is an aggregation of user (or data-) [stories](/concept/story/) on a common theme. +A [Use Case](../concept/use-case.md) is an aggregation of user (or data-) [stories](../concept/story.md) on a common theme. -They are the modules---or components, so you will---of an [EKG](/vocab/ekg/). +They are the modules---or components, so you will---of an [EKG](../vocab/ekg.md). A business-focused packaging of stories, concepts, personas, logical [self-describing](https://principles.ekgf.org/vocab/sdd/) -[datasets](/concept/dataset/) (or data products), ontologies, workflows, user interface models and functionality. +datasets (or data products), ontologies, workflows, user interface models and functionality. ## What’s the relationship to user stories? A user story can be seen as a black-box function with inputs and outputs. -We model these inputs and outputs initially just as simple "[Concepts](/concept/concept/)" +We model these inputs and outputs initially just as simple "[Concepts](../concept/concept.md)" (and the terms that are being used for those concepts). By adding more and more detail to these stories, they eventually become runnable or executable and can be invoked as an HTTP API, in response to a Kafka message, @@ -41,7 +41,7 @@ The UML notion of single-user interaction is closer to an EKG story. A use case can be a `componentOf` of other use cases and therefore form a hierarchy that more or less resembles a tree structure that can be easily visualized on a whiteboard hence -the term [Use Case Tree](/concept/use-case-tree/). +the term [Use Case Tree](../concept/use-case-tree.md/). ## Are use case trees actually trees (hierarchies)? @@ -51,7 +51,7 @@ can support, and be supported by, many others) but we obviously didn't want to c ## What is the detail needed behind each use case? - Narrative? Happy case? Exceptions -Here's a [template](/concept/use-case/#__tabbed_1_5) for the kind of information that we need +Here's a [template](../concept/use-case.md#__tabbed_1_5) for the kind of information that we need to collect for any given use case during the various phases in their life cycle. ## How are use cases named? @@ -86,7 +86,7 @@ Stories are not depicted. ## What about Actors/Personas? -We use the term [_Personas_](/concept/persona/) rather than _Actors_ or _Roles_ to avoid confusion because +We use the term [_Personas_](../concept/persona.md) rather than _Actors_ or _Roles_ to avoid confusion because they are slightly different concepts. Like in the real world, you could have a `Person` who is an `Actor` playing a `Role` as a certain `Persona.` @@ -187,7 +187,7 @@ See above. ## What is the relationship to organizations? -Any EKG enterprise will have their own [use case tree (UCT)](/concept/use-case-tree) but +Any EKG enterprise will have their own [use case tree (UCT)](../concept/use-case-tree.md) but not all use cases are owned by that enterprise since many use cases may have been provided by external parties such as the EKGF community as "reusable components". @@ -286,7 +286,7 @@ in other EKGs. ## How do you work - top down or bottom up? -Think big, start small, rinse, repeat, accelerate. See [Process](/process/plan/). +Think big, start small, rinse, repeat, accelerate. See [Process](../process/plan/index.md). ### Think Big @@ -297,7 +297,7 @@ So that's a top-down approach. ### Start Small -Then once a business case has been created and approved (see [Chart](/process/plan/chart)), +Then once a business case has been created and approved (see [Chart](../process/plan/chart.md)), the build-phase can start with a use case at the bottom of the tree, building all lego bricks to then build higher level use cases. That's the start small (and bottom up) approach. @@ -312,10 +312,10 @@ analysis on real production usage, and rerun the cycle. A use case is "done" when the business says so. Ideally, the initial use case in its early plan stage of its life cycle serves as a "contract with the business" that includes agreed test scenarios so that -a it can be [verified](/process/build/verify/) and validated with the business +a it can be [verified](../process/build/verify.md) and validated with the business that a given use case is "done". -After deployment to production, business metrics could be [collected](/process/run/measure/) +After deployment to production, business metrics could be [collected](../process/run/measure.md) to check whether the use case actually delivers on the agreed business outcome. ## How to measure the design and the implementation? @@ -351,11 +351,11 @@ corporate styling etc. ## How can you drive (data) modeling? One major "lesson learned" is that semantic technology and knowledge graphs easily -allow people to "[boil the ocean](/objective/avoid-boiling-the-ocean/)" and +allow people to "[boil the ocean](../objective/avoid-boiling-the-ocean.md)" and "model the whole world" using generic abstract ontologies, sometimes even up to philosophical levels of abstraction. -One of the key objectives of the EKG/Method is to [avoid boiling the ocean](/objective/avoid-boiling-the-ocean/) +One of the key objectives of the EKG/Method is to [avoid boiling the ocean](../objective/avoid-boiling-the-ocean.md) by creating a laser sharp description of what the business needs and pays for. And make that description testable and therefore verifiable. diff --git a/docs/process/build/allocate.md b/docs/process/build/allocate.md index ca02349d..d9103794 100644 --- a/docs/process/build/allocate.md +++ b/docs/process/build/allocate.md @@ -14,11 +14,11 @@ Allocate resources, organize a team and start creating a "Center of Excellence f Building an EKG falls apart into two major types of development work-streams: -1. The [EKG/Platform](/vocab/ekg-platform/) +1. The [EKG/Platform](../../vocab/ekg-platform.md) 2. Any of the EKG use cases
EKG Use Cases – reusable EKG components that can be seen as “apps” or “systems” or “projects” – we call them use cases – can only be delivered if there is at least a minimal form of an - [EKG/Platform](/vocab/ekg-platform/) in place. + [EKG/Platform](../../vocab/ekg-platform.md) in place. One EKG/Platform---either in distributed form or not---can serve an unlimited number of EKG Use Cases across an unlimited number of business areas and user groups, serving all the various needs, priorities, and agendas of all at the same time. diff --git a/docs/process/build/design.md b/docs/process/build/design.md index 0c095ab1..d3749778 100644 --- a/docs/process/build/design.md +++ b/docs/process/build/design.md @@ -19,7 +19,7 @@ business. ## Approach -Once the business case has been approved, as it comes out of the [Chart phase](../plan/chart) +Once the business case has been approved, as it comes out of the [Chart phase](../plan/chart.md) an initial team can be created, the scope is clearly defined, and we know what the first use case is to start with. First thing to do then is to organize design sessions with that team and go through all the various @@ -36,7 +36,7 @@ first having a good plan. 3. Then the translation of that to: * Ontology Architecture * Technical Architecture - - [EKG/Platform](/vocab/ekg-platform/), identification and + - [EKG/Platform](../../vocab/ekg-platform.md), identification and functional description and requirements of all the various platform services needed. - A design and architecture for the ”DataOps Environment” diff --git a/docs/process/build/index.md b/docs/process/build/index.md index c6a0ea90..f2e80fd8 100644 --- a/docs/process/build/index.md +++ b/docs/process/build/index.md @@ -11,7 +11,7 @@ hide: ** _"Building" an EKG-based use case involves everything from detailed requirements gathering---structured - around the [Use Case Tree](/concept/use-case-tree)---all the way up to delivery of + around the [Use Case Tree](../../concept/use-case-tree.md)---all the way up to delivery of components for your production EKG-platform._ ** @@ -72,25 +72,25 @@ hide: === "Inputs" To set up for success, it is essential that the build phase starts with - the following artifacts and results that are created during the [plan phase](../plan) + the following artifacts and results that are created during the [plan phase](../plan/index.md) are input for the build phase: - - **From [Envision](../plan/envision):** A shared vision and strategy, + - **From [Envision](../plan/envision.md):** A shared vision and strategy, an agreed overall scope and direction, all stakeholders are identified and are supporting the strategy. - - **From [Discover](../plan/discover):** The UCT, a broad-stroke overview + - **From [Discover](../plan/discover.md):** The UCT, a broad-stroke overview of all use cases in the agreed scope with agreed names and "Business Outcomes" plus abstract business descriptions of functional requirements. (Details of the UCT to be determined during the build phase). - - **From [Assess](../plan/assess):** A light assessment of the various + - **From [Assess](../plan/assess.md):** A light assessment of the various non-functional requirements and levels of maturity in the areas of the organization that the EKG and the EKG team would depend on plus a plan as to how to bridge gaps. - - **From [Train](../plan/train):** Depending on the size of the + - **From [Train](../plan/train.md):** Depending on the size of the selected use cases and their scope, everyone involved should have gone through some light basic training where the various new concepts around EKG have been explained, especially the members of the initial team. - - **From [Chart](../plan/chart):** An agreed, supported and funded project + - **From [Chart](../plan/chart.md):** An agreed, supported and funded project plan. With a well-defined _definition of done (DoD)_ or a definition of what a successful delivery of the selected use cases means, ideally around agreed business outcomes. @@ -106,7 +106,7 @@ hide: 3. An EKG requires internal ownership and a team that understands the many new paradigms that are involved. - Creating a solid team---let's call it the [Center of Excellence (CoE) - for the EKG](../../vocab/coe)---is essential. + for the EKG](../../vocab/coe.md)---is essential. - It is not the technology that holds us back---the technology works---it is the internal organization’s readiness and level of maturity in a number of areas that require focus. @@ -115,6 +115,6 @@ hide: all areas, from strategy and idea inception to capturing the right business outcomes and requirements all the way to delivering a use case in production and supporting it during its life cycle. - 6. Any investment in a properly executed [plan phase](../plan) will + 6. Any investment in a properly executed [plan phase](../plan/index.md) will drastically increase the likelihood of successful delivery. diff --git a/docs/process/index.md b/docs/process/index.md index c479f67b..1bd99a6c 100644 --- a/docs/process/index.md +++ b/docs/process/index.md @@ -9,7 +9,7 @@ hide:
- - :material-floor-plan:{ .lg } __[Plan](plan)__ + - :material-floor-plan:{ .lg } __[Plan](plan/index.md)__ ----- @@ -23,28 +23,28 @@ hide: [Train](./plan/train.md) and [Chart](./plan/chart.md). - [:octicons-arrow-right-24: Learn more](./plan/) + [:octicons-arrow-right-24: Learn more](./plan/index.md) - - :construction_site:{ .lg } __[Build](build)__ + - :construction_site:{ .lg } __[Build](build/index.md)__ ----- "Building" an EKG-based use case involves everything from detailed requirements gathering---structured - around the [Use Case Tree](/concept/use-case-tree)---all the way up to delivery of + around the [Use Case Tree](../concept/use-case-tree.md)---all the way up to delivery of components for your production EKG-platform. - [:octicons-arrow-right-24: Learn more](./build/) + [:octicons-arrow-right-24: Learn more](./build/index.md) - - :material-run:{ .lg } __[Run](run)__ + - :material-run:{ .lg } __[Run](run/index.md)__ --- Deploying, Operating, Measuring and Optimizing an - [EKG/Platform](/vocab/ekg-platform/) that + [EKG/Platform](../vocab/ekg-platform.md) that serves many Use Cases across the Enterprise. - [:octicons-arrow-right-24: Learn more](./run/) + [:octicons-arrow-right-24: Learn more](./run/index.md) - :material-foot-print: Steps diff --git a/docs/process/plan/assess.md b/docs/process/plan/assess.md index add2ddf8..5ecee88a 100644 --- a/docs/process/plan/assess.md +++ b/docs/process/plan/assess.md @@ -8,7 +8,7 @@ hide: _Assess where your current organization stands in terms of the non-functional requirements and -where it should be to be able to support the use cases as they come out of the [Discover phase](discover). +where it should be to be able to support the use cases as they come out of the [Discover phase](discover.md). These assessments are based on the [Maturity Model for the EKG (EKG/Maturity)](https://maturity.ekgf.org). This is partly about "the how" and "can we?"._ diff --git a/docs/process/plan/chart.md b/docs/process/plan/chart.md index 9dfe4aaa..464a9efd 100644 --- a/docs/process/plan/chart.md +++ b/docs/process/plan/chart.md @@ -17,8 +17,8 @@ key-stakeholders and “champions”, setting up for successful delivery of the first use cases in production and establishing the foundation for a “CoE” for the EKG. -Use the outcomes of "[Envision](envision), [Discover](discover), -[Assess](assess) & [Train](train)" to develop a well-justified +Use the outcomes of "[Envision](envision.md), [Discover](discover.md), +[Assess](assess.md) & [Train](train.md)" to develop a well-justified thorough ”business case”. Think big, start small, but have a solid and well-supported plan to be used diff --git a/docs/process/plan/discover.md b/docs/process/plan/discover.md index 727ef89a..af2515d8 100644 --- a/docs/process/plan/discover.md +++ b/docs/process/plan/discover.md @@ -8,7 +8,7 @@ hide: _Discover all use cases in the given scope, short-term and long-term, -create a “[Use Case Tree](/concept/use-case-tree)” that shows a viable, realistic, logical, +create a “[Use Case Tree](../../concept/use-case-tree.md)” that shows a viable, realistic, logical, and successful pathway towards strategic goals. This is about “the what” and how it relates to "the why"._ diff --git a/docs/process/plan/envision.md b/docs/process/plan/envision.md index 27b48b2e..302d0486 100644 --- a/docs/process/plan/envision.md +++ b/docs/process/plan/envision.md @@ -102,7 +102,7 @@ Key Paradigm Changes (in non-technical business terms) such as: [_Infrastructure as Code (IaC)_](`https://en.wikipedia.org/wiki/Infrastructure_as_code`) * Agile and how this applies to one single EKG serving many agendas and how company culture and current practices may prohibit innovation * _Composability_, [_Composable Business_](https://www.gartner.com/smarterwithgartner/gartner-keynote-the-future-of-business-is-composable), _Packaged business capabilities (PBCs)_, - _Reusable Data Components_, _Reusable Business Components_ and how that relates to the _[Use Case Tree](/concept/use-case-tree)_ + _Reusable Data Components_, _Reusable Business Components_ and how that relates to the _[Use Case Tree](../../concept/use-case-tree.md)_ * Various “Delusions” in Data Management * The economics of EKG * Breaking the technical, legal, organizational and cultural silos @@ -117,7 +117,7 @@ Key Paradigm Changes (in non-technical business terms) such as: * Explain (in business terms) what “the method” is, why it is essential to have an agreed, standardized and measurable approach. How can one EKG serve all agendas across the enterprise successfully? -* [Use Case Tree](/concept/use-case-tree)s (Summary) +* [Use Case Tree](../../concept/use-case-tree.md)s (Summary) * Maturity Model (Summary) * EKG Maturity Levels in the Business realm * EKG Maturity Levels in the Organization (in general) realm diff --git a/docs/process/plan/index.md b/docs/process/plan/index.md index 2a43be10..08774d09 100644 --- a/docs/process/plan/index.md +++ b/docs/process/plan/index.md @@ -33,7 +33,7 @@ hide: what the longer-term vision behind it is, agree on that vision, whereby the first use cases need to be very convincing and need to be delivered successfully. - That's what this method is for. See also all other [objectives](../../objective). + That's what this method is for. See also all other [objectives](../../objective/index.md). === "Steps" diff --git a/docs/process/run/index.md b/docs/process/run/index.md index 8f2a9ee5..d9022928 100644 --- a/docs/process/run/index.md +++ b/docs/process/run/index.md @@ -13,9 +13,9 @@ of functionality, not many). *** - Once the [EKG/Platform](/vocab/ekg-platform/) has been [deployed](deploy) in + Once the [EKG/Platform](../../vocab/ekg-platform.md) has been [deployed](deploy.md) in production, it needs to be supported and maintained. - Or [Operated](operate), [Measured](measure) and [Optimized](optimize) so you will. + Or [Operated](operate.md), [Measured](measure.md) and [Optimized](optimize.md) so you will. We recommend to allocate funding for these services, whether they are performed by your CoE or by an external consultancy firm, from _Business-as-Usual (BAU)_ diff --git a/docs/process/run/operate.md b/docs/process/run/operate.md index f0a33d07..c0dacf65 100644 --- a/docs/process/run/operate.md +++ b/docs/process/run/operate.md @@ -7,14 +7,14 @@ hide: # Operate -_Operating production-level, distributed and federated [EKG/Platform](/vocab/ekg-platform/) that serves +_Operating production-level, distributed and federated [EKG/Platform](../../vocab/ekg-platform.md) that serves any wildly different use cases across the enterprise, guaranteeing business continuity._ What’s new for most organizations is to have one platform supporting many wildly different and potentially complex transactional use cases used across many parts of the business. This is different from managing a siloed landscape of more or less independent systems. -Operating a production-level, distributed and federated [EKG/Platform](/vocab/ekg-platform/) that serves many +Operating a production-level, distributed and federated [EKG/Platform](../../vocab/ekg-platform.md) that serves many wildly different use cases across the enterprise where stakeholders do not necessarily even know each other---let alone have their priorities aligned---is not something that most organizations are used to. @@ -49,7 +49,7 @@ operating models and practices needed for distributed EKG deployment. ## Outputs -- An [EKG/Platform](/vocab/ekg-platform/) that complies with agreed levels of service and support +- An [EKG/Platform](../../vocab/ekg-platform.md) that complies with agreed levels of service and support - Disaster recovery and business continuity testing for the EKG - Operational Processes for fast and effective issue resolution diff --git a/docs/process/run/optimize.md b/docs/process/run/optimize.md index 34fb4b53..be54e305 100644 --- a/docs/process/run/optimize.md +++ b/docs/process/run/optimize.md @@ -7,14 +7,14 @@ hide: # Optimize -_Structural feedback loops, continuously improve, continuously updating the [Use Case Tree](/concept/use-case-tree)._ +_Structural feedback loops, continuously improve, continuously updating the [Use Case Tree](../../concept/use-case-tree.md)._ Continuously optimize, as a _Business-as-Usual (BAU)_ activity, all delivered use cases in terms of quality, inter-use case integration, evolution of more reusable components, "connecting the dots" across use cases, analysing the EKG to see patterns and so forth. -The [EKG CoE](../../vocab/coe) should be a standing organization (federated or not) +The [EKG CoE](../../vocab/coe.md) should be a standing organization (federated or not) that "owns" and orchestrates the EKG overall — not necessarily the data or the various distributed platforms themselves — and continuously looks into how things can be improved and how changes can be prepared and planned for. diff --git a/docs/vocab/ekg-iri.md b/docs/vocab/ekg-iri.md index a402be26..527bfe63 100644 --- a/docs/vocab/ekg-iri.md +++ b/docs/vocab/ekg-iri.md @@ -10,10 +10,10 @@ that forms the primary identifier of an object[^object] in the EKG. According to the first---and most important---of the ten principles of the EKGF, [Principle 1: Identity](https://principles.ekgf.org/principle/01-identity): -_Any EKG/IRI is [universally unique](../ekg-id/#universally-unique), -[opaque](../ekg-id/#opaque), [permanent](../ekg-id/#permanent), -[non-reassignable](../ekg-id/#non-reassignable) and -[web-resolvable](../ekg-id/#web-resolvable)._ +_Any EKG/IRI is [universally unique](ekg-id.md#universally-unique), +[opaque](ekg-id.md#opaque), [permanent](ekg-id.md#permanent), +[non-reassignable](ekg-id.md#non-reassignable) and +[web-resolvable](ekg-id.md#web-resolvable)._ An EKG/IRI consists of a locator-part and an identifier-part: `[locator][identifier]`. Where the `[identifier]` is an [EKG/ID](ekg-id.md). diff --git a/docs/vocab/ekg.md b/docs/vocab/ekg.md index e7c06aec..90611e93 100644 --- a/docs/vocab/ekg.md +++ b/docs/vocab/ekg.md @@ -21,7 +21,7 @@ the current state of the art that traditional technologies allow. ### Technical perspective An EKG requires a "platform" to run it, where the term "platform"---or -[EKG/Platform](/vocab/ekg-platform/)---is used for the collection of software services that serve +[EKG/Platform](ekg-platform.md)---is used for the collection of software services that serve the content of the EKG to users and systems. The EKG/Platform can be seen as a "layer" on top of all your other data sources, providing a "holistic view"---from a user perspective---to all data and knowledge, @@ -49,14 +49,14 @@ The primary justification for EKG is short and simple: to get your strategic use One EKG can support an unlimited number of use cases. These use cases are structured as a tree of reusable components, -the so-called [Use Case Tree](/concept/use-case-tree) (UCT). +the so-called [Use Case Tree](../concept/use-case-tree.md) (UCT). Each use case represents data or information or knowledge even and behavior. These UCTs are defined and constructed with "the business", your primary stakeholders and budget holders. They capture in non-technical terms which functional requirements your business needs and what the desired Business Outcomes are. -At the top of a [Use Case Tree](/concept/use-case-tree) you generally see the Strategic Use Case that +At the top of a [Use Case Tree](../concept/use-case-tree.md) you generally see the Strategic Use Case that your business plans to implement in the long term. Such as true Client 360, Customer Analytics, Enterprise Fraud Detection, real-time Enterprise Risk & Compliance Management, Supply Chain Management, diff --git a/docs/vocab/maturity-model.md b/docs/vocab/maturity-model.md index 36649174..eac985cb 100644 --- a/docs/vocab/maturity-model.md +++ b/docs/vocab/maturity-model.md @@ -1,7 +1,7 @@ # Maturity Model for the EKG (EKG/Maturity) The [Maturity Model for the Enterprise Knowledge Graph (EKG/Maturity)](https://maturity.ekgf.org) -plays an important role in the [Use Case Tree](/concept/use-case-tree) Method since it's the reference framework for all +plays an important role in the [Use Case Tree](../concept/use-case-tree.md) Method since it's the reference framework for all non-functional requirements of any given use case. ## Links diff --git a/mkdocs.yml b/mkdocs.yml index cbea7419..86d3ee59 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -88,7 +88,6 @@ extra: Thanks for your feedback! Help us improve this page by using our feedback form. extra_javascript: - - "https://unpkg.com/mermaid/dist/mermaid.min.js" - "javascript/images_dark.js" - "javascript/refresh_on_toggle_dark_light.js" - "https://cdn.jsdelivr.net/gh/rod2ik/cdn@main/mkdocs/javascripts/mkdocs-graphviz.js" @@ -106,6 +105,7 @@ plugins: lang: - en - mermaid2: + javascript: "https://unpkg.com/mermaid/dist/mermaid.min.js" arguments: # test if its __palette_1 (dark) or __palette_2 (light) # for mkdocs-material >=8.0.0 From 5134e74a9c62d1558554ea8a808a094bb17ba687 Mon Sep 17 00:00:00 2001 From: Jacobus Geluk Date: Mon, 1 Dec 2025 22:56:49 +0000 Subject: [PATCH 22/32] Fix GitHub workflow: install dependencies for PR builds - Remove condition from 'Install all MkDocs dependencies' step so it runs on PRs - This fixes 'uv: command not found' error when building PRs - Build step runs on all branches/PRs to validate changes - Deploy step only runs on main branch after successful build - Add clarifying comments to workflow steps --- .github/workflows/docs.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 71f116ba..7c6f04f3 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -42,13 +42,12 @@ jobs: uses: asdf-vm/actions/install@v2 - name: Install all MkDocs dependencies - if: ${{ github.ref == 'refs/heads/main' }} run: | # echo "/home/linuxbrew/.linuxbrew/bin/brew" >> $GITHUB_PATH make --environment-overrides docs-install-github-actions - name: Build Site -# if: ${{ github.ref != 'refs/heads/main' }} + # Build runs on all branches and PRs to validate changes # run 'docs-build' twice because 'gen_files' doesn't let MkDocs # pick up on the generated files in the first run run: | @@ -56,5 +55,6 @@ jobs: make --environment-overrides docs-build - name: Deploy Site + # Deploy only runs on main branch after successful build if: ${{ github.ref == 'refs/heads/main' }} run: make --environment-overrides docs-deploy From a4b8074e5c3b8f0a24ef18ea3348f04eb95996b7 Mon Sep 17 00:00:00 2001 From: Jacobus Geluk Date: Mon, 1 Dec 2025 22:58:43 +0000 Subject: [PATCH 23/32] Add project files: VS Code settings, charter, and uv lock file - Add .vscode/settings.json for Makefile configuration - Add charter/proposed-charter.md for Use Case Tree Workgroup - Add uv.lock for dependency locking --- .vscode/settings.json | 3 + charter/proposed-charter.md | 47 ++ uv.lock | 1545 +++++++++++++++++++++++++++++++++++ 3 files changed, 1595 insertions(+) create mode 100644 .vscode/settings.json create mode 100644 charter/proposed-charter.md create mode 100644 uv.lock diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..a49ee134 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "makefile.configureOnOpen": false +} diff --git a/charter/proposed-charter.md b/charter/proposed-charter.md new file mode 100644 index 00000000..a488a91b --- /dev/null +++ b/charter/proposed-charter.md @@ -0,0 +1,47 @@ + +# Charter for Use Case Tree Workgroup of EKGF Managed Community + +**Date**: November 13, 2024 + +## Leads & Initial Participants (as of November 13, 2024) + +- Jacobus Geluk (Chair) +- David Wynter +- Carl Mattocks? +- Carlos Tubbax? +- Marcelo Barbieri? +- ?? + +## Mission + +Develop and standardize the Use Case Tree (UCT) framework to facilitate the structured definition, organization, and evolution of enterprise knowledge graph (EKG) use cases across industries. The ultimate goal is to create a central EKGF-hosted repository where enterprises can publish and access fully reusable, production-ready use cases, paving the way for OMG standardization. + +## Scope + +The Use Case Tree Workgroup builds upon the methodologies established by the former Method Workgroup (active between 2019 and 2022). This initiative seeks to advance the use case tree model, emphasizing modularity, reusability, and interoperability. A key objective is to establish a central registry on [https://method.ekgf.org](https://method.ekgf.org) where reusable, production-ready use cases—akin to packages on pypi.org or npmjs.org—can be shared and adopted across enterprises. + +Each use case represents a scoped, agreed-upon set of business requirements, effectively serving as a "contract with the business" that specifies information demands. This aligns with a data economy or data marketplace paradigm, where the use cases reflect the demand side of the business’s information needs, while the supply side is represented by data products, enabling a balanced and dynamic exchange between data suppliers and consumers. + +## Objectives + +1. **Standardization**: Develop a structured methodology for creating and sharing modular, reusable use case components within enterprise knowledge graphs. +2. **Central Registry of Reusable Use Cases**: Establish a central repository for publishing production-ready use cases, positioning EKG use cases as reusable "apps" or components that enterprises can integrate directly into their EKG environments. +3. **Community and Adoption Support**: Foster awareness and provide resources to support the adoption of the UCT framework across industries and related EKGF workgroups. +4. **Alignment with Strategic Business Outcomes**: Ensure use case trees bridge business needs with technology, driving strategic outcomes and robust data governance within a supply-and-demand framework for enterprise data. + +## Key Results + +- **Repository Establishment**: Launch and maintain a central registry of reusable, production-ready use cases accessible to the EKG community, enabling enterprises to share and adopt EKG components. +- **Framework and Methodology Publication**: Finalize and disseminate a structured UCT framework with guidelines, templates, and best practices for defining, sharing, and managing use cases in hierarchical models. +- **Adoption Milestone**: Achieve pilot implementation of the UCT framework by at least three organizations by mid-2025. +- **Educational Outreach**: Publish white papers, tutorials, and talks to promote UCT adoption, particularly emphasizing the benefits of reusable, production-ready components in enterprise knowledge graph environments. +- **Intergroup Collaboration**: Engage with the Data Products Workgroup and other EKGF groups to ensure alignment and interoperability between use case trees and related methodologies. + +## Mode of Operation + +- **Weekly Calls**: Regular meetings to discuss progress, resolve issues, and align on deliverables. +- **Documentation and Resources**: Produce comprehensive documentation on use case tree structures, workflows, personas, and outcomes to guide industry practitioners in implementing UCT. +- **Community Engagement**: Organize webinars, presentations, and training sessions to promote the advantages of modular and reusable use case designs. +- **Collaboration and Feedback**: Partner with other EKGF workgroups to gather feedback, explore synergies, and refine UCT methodologies. +- **Standards Pathway**: Facilitate OMG standardization processes for the UCT framework, preparing the methodology and repository for industry-wide adoption. + diff --git a/uv.lock b/uv.lock new file mode 100644 index 00000000..8a1c7d87 --- /dev/null +++ b/uv.lock @@ -0,0 +1,1545 @@ +version = 1 +revision = 3 +requires-python = ">=3.13" + +[[package]] +name = "anyio" +version = "4.12.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "idna" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/16/ce/8a777047513153587e5434fd752e89334ac33e379aa3497db860eeb60377/anyio-4.12.0.tar.gz", hash = "sha256:73c693b567b0c55130c104d0b43a9baf3aa6a31fc6110116509f27bf75e21ec0", size = 228266, upload-time = "2025-11-28T23:37:38.911Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7f/9c/36c5c37947ebfb8c7f22e0eb6e4d188ee2d53aa3880f3f2744fb894f0cb1/anyio-4.12.0-py3-none-any.whl", hash = "sha256:dad2376a628f98eeca4881fc56cd06affd18f659b17a747d3ff0307ced94b1bb", size = 113362, upload-time = "2025-11-28T23:36:57.897Z" }, +] + +[[package]] +name = "babel" +version = "2.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/6b/d52e42361e1aa00709585ecc30b3f9684b3ab62530771402248b1b1d6240/babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d", size = 9951852, upload-time = "2025-02-01T15:17:41.026Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2", size = 10182537, upload-time = "2025-02-01T15:17:37.39Z" }, +] + +[[package]] +name = "backrefs" +version = "6.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/86/e3/bb3a439d5cb255c4774724810ad8073830fac9c9dee123555820c1bcc806/backrefs-6.1.tar.gz", hash = "sha256:3bba1749aafe1db9b915f00e0dd166cba613b6f788ffd63060ac3485dc9be231", size = 7011962, upload-time = "2025-11-15T14:52:08.323Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3b/ee/c216d52f58ea75b5e1841022bbae24438b19834a29b163cb32aa3a2a7c6e/backrefs-6.1-py310-none-any.whl", hash = "sha256:2a2ccb96302337ce61ee4717ceacfbf26ba4efb1d55af86564b8bbaeda39cac1", size = 381059, upload-time = "2025-11-15T14:51:59.758Z" }, + { url = "https://files.pythonhosted.org/packages/e6/9a/8da246d988ded941da96c7ed945d63e94a445637eaad985a0ed88787cb89/backrefs-6.1-py311-none-any.whl", hash = "sha256:e82bba3875ee4430f4de4b6db19429a27275d95a5f3773c57e9e18abc23fd2b7", size = 392854, upload-time = "2025-11-15T14:52:01.194Z" }, + { url = "https://files.pythonhosted.org/packages/37/c9/fd117a6f9300c62bbc33bc337fd2b3c6bfe28b6e9701de336b52d7a797ad/backrefs-6.1-py312-none-any.whl", hash = "sha256:c64698c8d2269343d88947c0735cb4b78745bd3ba590e10313fbf3f78c34da5a", size = 398770, upload-time = "2025-11-15T14:52:02.584Z" }, + { url = "https://files.pythonhosted.org/packages/eb/95/7118e935b0b0bd3f94dfec2d852fd4e4f4f9757bdb49850519acd245cd3a/backrefs-6.1-py313-none-any.whl", hash = "sha256:4c9d3dc1e2e558965202c012304f33d4e0e477e1c103663fd2c3cc9bb18b0d05", size = 400726, upload-time = "2025-11-15T14:52:04.093Z" }, + { url = "https://files.pythonhosted.org/packages/1d/72/6296bad135bfafd3254ae3648cd152980a424bd6fed64a101af00cc7ba31/backrefs-6.1-py314-none-any.whl", hash = "sha256:13eafbc9ccd5222e9c1f0bec563e6d2a6d21514962f11e7fc79872fd56cbc853", size = 412584, upload-time = "2025-11-15T14:52:05.233Z" }, + { url = "https://files.pythonhosted.org/packages/02/e3/a4fa1946722c4c7b063cc25043a12d9ce9b4323777f89643be74cef2993c/backrefs-6.1-py39-none-any.whl", hash = "sha256:a9e99b8a4867852cad177a6430e31b0f6e495d65f8c6c134b68c14c3c95bf4b0", size = 381058, upload-time = "2025-11-15T14:52:06.698Z" }, +] + +[[package]] +name = "beautifulsoup4" +version = "4.14.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "soupsieve" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c3/b0/1c6a16426d389813b48d95e26898aff79abbde42ad353958ad95cc8c9b21/beautifulsoup4-4.14.3.tar.gz", hash = "sha256:6292b1c5186d356bba669ef9f7f051757099565ad9ada5dd630bd9de5fa7fb86", size = 627737, upload-time = "2025-11-30T15:08:26.084Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1a/39/47f9197bdd44df24d67ac8893641e16f386c984a0619ef2ee4c51fbbc019/beautifulsoup4-4.14.3-py3-none-any.whl", hash = "sha256:0918bfe44902e6ad8d57732ba310582e98da931428d231a5ecb9e7c703a735bb", size = 107721, upload-time = "2025-11-30T15:08:24.087Z" }, +] + +[[package]] +name = "boto3" +version = "1.42.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "botocore" }, + { name = "jmespath" }, + { name = "s3transfer" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f0/9b/eef5346ce3148bf4856318fe629e0fd7f6dd73ffd55ea08e316c967f8af0/boto3-1.42.0.tar.gz", hash = "sha256:9c67729a6112b7dced521ea70b0369fba138e89852b029a7876041cd1460c084", size = 112854, upload-time = "2025-12-01T02:31:09.157Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e6/2c/6c6ee5667426aee6629106b9e51668449fb34ec077655da82bf4b15d8890/boto3-1.42.0-py3-none-any.whl", hash = "sha256:af32b7f61dd6293cad728ec205bcb3611ab1bf7b7dbccfd0f2bd7b9c9af96039", size = 140617, upload-time = "2025-12-01T02:31:07.238Z" }, +] + +[[package]] +name = "boto3-stubs" +version = "1.41.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "botocore-stubs" }, + { name = "types-s3transfer" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9c/2a/e259a37840cfbe066bf9675a9fb712fc745337bef08fbaa3dfb1ad5c21f4/boto3_stubs-1.41.5.tar.gz", hash = "sha256:514a24282147760af1ec6f9035c2c451c91c78817d18457c50d841ee52daa088", size = 100005, upload-time = "2025-11-26T20:38:19.486Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a7/13/9b140e3cfe22c6538f46f4e96ac5fa30467117321309a5fe5eea1d09daf7/boto3_stubs-1.41.5-py3-none-any.whl", hash = "sha256:016f45999d6685f8d80f07f24d3a16eab4e50ba153e6cd3398dc290bf968cbca", size = 69296, upload-time = "2025-11-26T20:38:14.254Z" }, +] + +[[package]] +name = "botocore" +version = "1.41.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jmespath" }, + { name = "python-dateutil" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/03/04/8e8ca38631eeb499a1099dcc2a081faaea399f9d46080720540ff54ec609/botocore-1.41.6.tar.gz", hash = "sha256:08fe47e9b306f4436f5eaf6a02cb6d55c7745d13d2d093ce5d917d3ef3d3df75", size = 14770281, upload-time = "2025-12-01T02:30:54.286Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ab/d4/587a71c599997b0f7aa842ea71604348f5a7d239cfff338292904f236983/botocore-1.41.6-py3-none-any.whl", hash = "sha256:963cc946e885acb941c96e7d343cb6507b479812ca22566ceb3e9410d0588de0", size = 14442076, upload-time = "2025-12-01T02:30:50.724Z" }, +] + +[[package]] +name = "botocore-stubs" +version = "1.41.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "types-awscrt" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/34/7b/e8ec783105bba9800624dbfb91661a01f45baec570c5f4adac0dac64abe5/botocore_stubs-1.41.6.tar.gz", hash = "sha256:2b53574c4ea4f8d5887e516ef2208b996fd988fc2a613f676ea9144597f20cd2", size = 42421, upload-time = "2025-12-01T04:14:14.192Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/68/b6/f624f5143bc5f7a66b79fc40e67b30b9584471a6143062af420bc83ae887/botocore_stubs-1.41.6-py3-none-any.whl", hash = "sha256:859e4147b5b14dc5eb64fc84fa02424839354368a0fea41da52c7a1d06427e37", size = 66748, upload-time = "2025-12-01T04:14:12.833Z" }, +] + +[[package]] +name = "bracex" +version = "2.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/63/9a/fec38644694abfaaeca2798b58e276a8e61de49e2e37494ace423395febc/bracex-2.6.tar.gz", hash = "sha256:98f1347cd77e22ee8d967a30ad4e310b233f7754dbf31ff3fceb76145ba47dc7", size = 26642, upload-time = "2025-06-22T19:12:31.254Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9d/2a/9186535ce58db529927f6cf5990a849aa9e052eea3e2cfefe20b9e1802da/bracex-2.6-py3-none-any.whl", hash = "sha256:0b0049264e7340b3ec782b5cb99beb325f36c3782a32e36e876452fd49a09952", size = 11508, upload-time = "2025-06-22T19:12:29.781Z" }, +] + +[[package]] +name = "cairocffi" +version = "1.7.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/70/c5/1a4dc131459e68a173cbdab5fad6b524f53f9c1ef7861b7698e998b837cc/cairocffi-1.7.1.tar.gz", hash = "sha256:2e48ee864884ec4a3a34bfa8c9ab9999f688286eb714a15a43ec9d068c36557b", size = 88096, upload-time = "2024-06-18T10:56:06.741Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/93/d8/ba13451aa6b745c49536e87b6bf8f629b950e84bd0e8308f7dc6883b67e2/cairocffi-1.7.1-py3-none-any.whl", hash = "sha256:9803a0e11f6c962f3b0ae2ec8ba6ae45e957a146a004697a1ac1bbf16b073b3f", size = 75611, upload-time = "2024-06-18T10:55:59.489Z" }, +] + +[[package]] +name = "cairosvg" +version = "2.8.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cairocffi" }, + { name = "cssselect2" }, + { name = "defusedxml" }, + { name = "pillow" }, + { name = "tinycss2" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ab/b9/5106168bd43d7cd8b7cc2a2ee465b385f14b63f4c092bb89eee2d48c8e67/cairosvg-2.8.2.tar.gz", hash = "sha256:07cbf4e86317b27a92318a4cac2a4bb37a5e9c1b8a27355d06874b22f85bef9f", size = 8398590, upload-time = "2025-05-15T06:56:32.653Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/67/48/816bd4aaae93dbf9e408c58598bc32f4a8c65f4b86ab560864cb3ee60adb/cairosvg-2.8.2-py3-none-any.whl", hash = "sha256:eab46dad4674f33267a671dce39b64be245911c901c70d65d2b7b0821e852bf5", size = 45773, upload-time = "2025-05-15T06:56:28.552Z" }, +] + +[[package]] +name = "certifi" +version = "2025.11.12" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/8c/58f469717fa48465e4a50c014a0400602d3c437d7c0c468e17ada824da3a/certifi-2025.11.12.tar.gz", hash = "sha256:d8ab5478f2ecd78af242878415affce761ca6bc54a22a27e026d7c25357c3316", size = 160538, upload-time = "2025-11-12T02:54:51.517Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/70/7d/9bc192684cea499815ff478dfcdc13835ddf401365057044fb721ec6bddb/certifi-2025.11.12-py3-none-any.whl", hash = "sha256:97de8790030bbd5c2d96b7ec782fc2f7820ef8dba6db909ccf95449f2d062d4b", size = 159438, upload-time = "2025-11-12T02:54:49.735Z" }, +] + +[[package]] +name = "cffi" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pycparser", marker = "implementation_name != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/eb/56/b1ba7935a17738ae8453301356628e8147c79dbb825bcbc73dc7401f9846/cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529", size = 523588, upload-time = "2025-09-08T23:24:04.541Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4b/8d/a0a47a0c9e413a658623d014e91e74a50cdd2c423f7ccfd44086ef767f90/cffi-2.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb", size = 185230, upload-time = "2025-09-08T23:23:00.879Z" }, + { url = "https://files.pythonhosted.org/packages/4a/d2/a6c0296814556c68ee32009d9c2ad4f85f2707cdecfd7727951ec228005d/cffi-2.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca", size = 181043, upload-time = "2025-09-08T23:23:02.231Z" }, + { url = "https://files.pythonhosted.org/packages/b0/1e/d22cc63332bd59b06481ceaac49d6c507598642e2230f201649058a7e704/cffi-2.0.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b", size = 212446, upload-time = "2025-09-08T23:23:03.472Z" }, + { url = "https://files.pythonhosted.org/packages/a9/f5/a2c23eb03b61a0b8747f211eb716446c826ad66818ddc7810cc2cc19b3f2/cffi-2.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b", size = 220101, upload-time = "2025-09-08T23:23:04.792Z" }, + { url = "https://files.pythonhosted.org/packages/f2/7f/e6647792fc5850d634695bc0e6ab4111ae88e89981d35ac269956605feba/cffi-2.0.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2", size = 207948, upload-time = "2025-09-08T23:23:06.127Z" }, + { url = "https://files.pythonhosted.org/packages/cb/1e/a5a1bd6f1fb30f22573f76533de12a00bf274abcdc55c8edab639078abb6/cffi-2.0.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3", size = 206422, upload-time = "2025-09-08T23:23:07.753Z" }, + { url = "https://files.pythonhosted.org/packages/98/df/0a1755e750013a2081e863e7cd37e0cdd02664372c754e5560099eb7aa44/cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26", size = 219499, upload-time = "2025-09-08T23:23:09.648Z" }, + { url = "https://files.pythonhosted.org/packages/50/e1/a969e687fcf9ea58e6e2a928ad5e2dd88cc12f6f0ab477e9971f2309b57c/cffi-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c", size = 222928, upload-time = "2025-09-08T23:23:10.928Z" }, + { url = "https://files.pythonhosted.org/packages/36/54/0362578dd2c9e557a28ac77698ed67323ed5b9775ca9d3fe73fe191bb5d8/cffi-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b", size = 221302, upload-time = "2025-09-08T23:23:12.42Z" }, + { url = "https://files.pythonhosted.org/packages/eb/6d/bf9bda840d5f1dfdbf0feca87fbdb64a918a69bca42cfa0ba7b137c48cb8/cffi-2.0.0-cp313-cp313-win32.whl", hash = "sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27", size = 172909, upload-time = "2025-09-08T23:23:14.32Z" }, + { url = "https://files.pythonhosted.org/packages/37/18/6519e1ee6f5a1e579e04b9ddb6f1676c17368a7aba48299c3759bbc3c8b3/cffi-2.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75", size = 183402, upload-time = "2025-09-08T23:23:15.535Z" }, + { url = "https://files.pythonhosted.org/packages/cb/0e/02ceeec9a7d6ee63bb596121c2c8e9b3a9e150936f4fbef6ca1943e6137c/cffi-2.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91", size = 177780, upload-time = "2025-09-08T23:23:16.761Z" }, + { url = "https://files.pythonhosted.org/packages/92/c4/3ce07396253a83250ee98564f8d7e9789fab8e58858f35d07a9a2c78de9f/cffi-2.0.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5", size = 185320, upload-time = "2025-09-08T23:23:18.087Z" }, + { url = "https://files.pythonhosted.org/packages/59/dd/27e9fa567a23931c838c6b02d0764611c62290062a6d4e8ff7863daf9730/cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13", size = 181487, upload-time = "2025-09-08T23:23:19.622Z" }, + { url = "https://files.pythonhosted.org/packages/d6/43/0e822876f87ea8a4ef95442c3d766a06a51fc5298823f884ef87aaad168c/cffi-2.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b", size = 220049, upload-time = "2025-09-08T23:23:20.853Z" }, + { url = "https://files.pythonhosted.org/packages/b4/89/76799151d9c2d2d1ead63c2429da9ea9d7aac304603de0c6e8764e6e8e70/cffi-2.0.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c", size = 207793, upload-time = "2025-09-08T23:23:22.08Z" }, + { url = "https://files.pythonhosted.org/packages/bb/dd/3465b14bb9e24ee24cb88c9e3730f6de63111fffe513492bf8c808a3547e/cffi-2.0.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef", size = 206300, upload-time = "2025-09-08T23:23:23.314Z" }, + { url = "https://files.pythonhosted.org/packages/47/d9/d83e293854571c877a92da46fdec39158f8d7e68da75bf73581225d28e90/cffi-2.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775", size = 219244, upload-time = "2025-09-08T23:23:24.541Z" }, + { url = "https://files.pythonhosted.org/packages/2b/0f/1f177e3683aead2bb00f7679a16451d302c436b5cbf2505f0ea8146ef59e/cffi-2.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205", size = 222828, upload-time = "2025-09-08T23:23:26.143Z" }, + { url = "https://files.pythonhosted.org/packages/c6/0f/cafacebd4b040e3119dcb32fed8bdef8dfe94da653155f9d0b9dc660166e/cffi-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1", size = 220926, upload-time = "2025-09-08T23:23:27.873Z" }, + { url = "https://files.pythonhosted.org/packages/3e/aa/df335faa45b395396fcbc03de2dfcab242cd61a9900e914fe682a59170b1/cffi-2.0.0-cp314-cp314-win32.whl", hash = "sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f", size = 175328, upload-time = "2025-09-08T23:23:44.61Z" }, + { url = "https://files.pythonhosted.org/packages/bb/92/882c2d30831744296ce713f0feb4c1cd30f346ef747b530b5318715cc367/cffi-2.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25", size = 185650, upload-time = "2025-09-08T23:23:45.848Z" }, + { url = "https://files.pythonhosted.org/packages/9f/2c/98ece204b9d35a7366b5b2c6539c350313ca13932143e79dc133ba757104/cffi-2.0.0-cp314-cp314-win_arm64.whl", hash = "sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad", size = 180687, upload-time = "2025-09-08T23:23:47.105Z" }, + { url = "https://files.pythonhosted.org/packages/3e/61/c768e4d548bfa607abcda77423448df8c471f25dbe64fb2ef6d555eae006/cffi-2.0.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9", size = 188773, upload-time = "2025-09-08T23:23:29.347Z" }, + { url = "https://files.pythonhosted.org/packages/2c/ea/5f76bce7cf6fcd0ab1a1058b5af899bfbef198bea4d5686da88471ea0336/cffi-2.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d", size = 185013, upload-time = "2025-09-08T23:23:30.63Z" }, + { url = "https://files.pythonhosted.org/packages/be/b4/c56878d0d1755cf9caa54ba71e5d049479c52f9e4afc230f06822162ab2f/cffi-2.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c", size = 221593, upload-time = "2025-09-08T23:23:31.91Z" }, + { url = "https://files.pythonhosted.org/packages/e0/0d/eb704606dfe8033e7128df5e90fee946bbcb64a04fcdaa97321309004000/cffi-2.0.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8", size = 209354, upload-time = "2025-09-08T23:23:33.214Z" }, + { url = "https://files.pythonhosted.org/packages/d8/19/3c435d727b368ca475fb8742ab97c9cb13a0de600ce86f62eab7fa3eea60/cffi-2.0.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc", size = 208480, upload-time = "2025-09-08T23:23:34.495Z" }, + { url = "https://files.pythonhosted.org/packages/d0/44/681604464ed9541673e486521497406fadcc15b5217c3e326b061696899a/cffi-2.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592", size = 221584, upload-time = "2025-09-08T23:23:36.096Z" }, + { url = "https://files.pythonhosted.org/packages/25/8e/342a504ff018a2825d395d44d63a767dd8ebc927ebda557fecdaca3ac33a/cffi-2.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512", size = 224443, upload-time = "2025-09-08T23:23:37.328Z" }, + { url = "https://files.pythonhosted.org/packages/e1/5e/b666bacbbc60fbf415ba9988324a132c9a7a0448a9a8f125074671c0f2c3/cffi-2.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4", size = 223437, upload-time = "2025-09-08T23:23:38.945Z" }, + { url = "https://files.pythonhosted.org/packages/a0/1d/ec1a60bd1a10daa292d3cd6bb0b359a81607154fb8165f3ec95fe003b85c/cffi-2.0.0-cp314-cp314t-win32.whl", hash = "sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e", size = 180487, upload-time = "2025-09-08T23:23:40.423Z" }, + { url = "https://files.pythonhosted.org/packages/bf/41/4c1168c74fac325c0c8156f04b6749c8b6a8f405bbf91413ba088359f60d/cffi-2.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6", size = 191726, upload-time = "2025-09-08T23:23:41.742Z" }, + { url = "https://files.pythonhosted.org/packages/ae/3a/dbeec9d1ee0844c679f6bb5d6ad4e9f198b1224f4e7a32825f47f6192b0c/cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9", size = 184195, upload-time = "2025-09-08T23:23:43.004Z" }, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/13/69/33ddede1939fdd074bce5434295f38fae7136463422fe4fd3e0e89b98062/charset_normalizer-3.4.4.tar.gz", hash = "sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a", size = 129418, upload-time = "2025-10-14T04:42:32.879Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/97/45/4b3a1239bbacd321068ea6e7ac28875b03ab8bc0aa0966452db17cd36714/charset_normalizer-3.4.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e1f185f86a6f3403aa2420e815904c67b2f9ebc443f045edd0de921108345794", size = 208091, upload-time = "2025-10-14T04:41:13.346Z" }, + { url = "https://files.pythonhosted.org/packages/7d/62/73a6d7450829655a35bb88a88fca7d736f9882a27eacdca2c6d505b57e2e/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b39f987ae8ccdf0d2642338faf2abb1862340facc796048b604ef14919e55ed", size = 147936, upload-time = "2025-10-14T04:41:14.461Z" }, + { url = "https://files.pythonhosted.org/packages/89/c5/adb8c8b3d6625bef6d88b251bbb0d95f8205831b987631ab0c8bb5d937c2/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3162d5d8ce1bb98dd51af660f2121c55d0fa541b46dff7bb9b9f86ea1d87de72", size = 144180, upload-time = "2025-10-14T04:41:15.588Z" }, + { url = "https://files.pythonhosted.org/packages/91/ed/9706e4070682d1cc219050b6048bfd293ccf67b3d4f5a4f39207453d4b99/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:81d5eb2a312700f4ecaa977a8235b634ce853200e828fbadf3a9c50bab278328", size = 161346, upload-time = "2025-10-14T04:41:16.738Z" }, + { url = "https://files.pythonhosted.org/packages/d5/0d/031f0d95e4972901a2f6f09ef055751805ff541511dc1252ba3ca1f80cf5/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5bd2293095d766545ec1a8f612559f6b40abc0eb18bb2f5d1171872d34036ede", size = 158874, upload-time = "2025-10-14T04:41:17.923Z" }, + { url = "https://files.pythonhosted.org/packages/f5/83/6ab5883f57c9c801ce5e5677242328aa45592be8a00644310a008d04f922/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a8a8b89589086a25749f471e6a900d3f662d1d3b6e2e59dcecf787b1cc3a1894", size = 153076, upload-time = "2025-10-14T04:41:19.106Z" }, + { url = "https://files.pythonhosted.org/packages/75/1e/5ff781ddf5260e387d6419959ee89ef13878229732732ee73cdae01800f2/charset_normalizer-3.4.4-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc7637e2f80d8530ee4a78e878bce464f70087ce73cf7c1caf142416923b98f1", size = 150601, upload-time = "2025-10-14T04:41:20.245Z" }, + { url = "https://files.pythonhosted.org/packages/d7/57/71be810965493d3510a6ca79b90c19e48696fb1ff964da319334b12677f0/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f8bf04158c6b607d747e93949aa60618b61312fe647a6369f88ce2ff16043490", size = 150376, upload-time = "2025-10-14T04:41:21.398Z" }, + { url = "https://files.pythonhosted.org/packages/e5/d5/c3d057a78c181d007014feb7e9f2e65905a6c4ef182c0ddf0de2924edd65/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:554af85e960429cf30784dd47447d5125aaa3b99a6f0683589dbd27e2f45da44", size = 144825, upload-time = "2025-10-14T04:41:22.583Z" }, + { url = "https://files.pythonhosted.org/packages/e6/8c/d0406294828d4976f275ffbe66f00266c4b3136b7506941d87c00cab5272/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:74018750915ee7ad843a774364e13a3db91682f26142baddf775342c3f5b1133", size = 162583, upload-time = "2025-10-14T04:41:23.754Z" }, + { url = "https://files.pythonhosted.org/packages/d7/24/e2aa1f18c8f15c4c0e932d9287b8609dd30ad56dbe41d926bd846e22fb8d/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:c0463276121fdee9c49b98908b3a89c39be45d86d1dbaa22957e38f6321d4ce3", size = 150366, upload-time = "2025-10-14T04:41:25.27Z" }, + { url = "https://files.pythonhosted.org/packages/e4/5b/1e6160c7739aad1e2df054300cc618b06bf784a7a164b0f238360721ab86/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:362d61fd13843997c1c446760ef36f240cf81d3ebf74ac62652aebaf7838561e", size = 160300, upload-time = "2025-10-14T04:41:26.725Z" }, + { url = "https://files.pythonhosted.org/packages/7a/10/f882167cd207fbdd743e55534d5d9620e095089d176d55cb22d5322f2afd/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9a26f18905b8dd5d685d6d07b0cdf98a79f3c7a918906af7cc143ea2e164c8bc", size = 154465, upload-time = "2025-10-14T04:41:28.322Z" }, + { url = "https://files.pythonhosted.org/packages/89/66/c7a9e1b7429be72123441bfdbaf2bc13faab3f90b933f664db506dea5915/charset_normalizer-3.4.4-cp313-cp313-win32.whl", hash = "sha256:9b35f4c90079ff2e2edc5b26c0c77925e5d2d255c42c74fdb70fb49b172726ac", size = 99404, upload-time = "2025-10-14T04:41:29.95Z" }, + { url = "https://files.pythonhosted.org/packages/c4/26/b9924fa27db384bdcd97ab83b4f0a8058d96ad9626ead570674d5e737d90/charset_normalizer-3.4.4-cp313-cp313-win_amd64.whl", hash = "sha256:b435cba5f4f750aa6c0a0d92c541fb79f69a387c91e61f1795227e4ed9cece14", size = 107092, upload-time = "2025-10-14T04:41:31.188Z" }, + { url = "https://files.pythonhosted.org/packages/af/8f/3ed4bfa0c0c72a7ca17f0380cd9e4dd842b09f664e780c13cff1dcf2ef1b/charset_normalizer-3.4.4-cp313-cp313-win_arm64.whl", hash = "sha256:542d2cee80be6f80247095cc36c418f7bddd14f4a6de45af91dfad36d817bba2", size = 100408, upload-time = "2025-10-14T04:41:32.624Z" }, + { url = "https://files.pythonhosted.org/packages/2a/35/7051599bd493e62411d6ede36fd5af83a38f37c4767b92884df7301db25d/charset_normalizer-3.4.4-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:da3326d9e65ef63a817ecbcc0df6e94463713b754fe293eaa03da99befb9a5bd", size = 207746, upload-time = "2025-10-14T04:41:33.773Z" }, + { url = "https://files.pythonhosted.org/packages/10/9a/97c8d48ef10d6cd4fcead2415523221624bf58bcf68a802721a6bc807c8f/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8af65f14dc14a79b924524b1e7fffe304517b2bff5a58bf64f30b98bbc5079eb", size = 147889, upload-time = "2025-10-14T04:41:34.897Z" }, + { url = "https://files.pythonhosted.org/packages/10/bf/979224a919a1b606c82bd2c5fa49b5c6d5727aa47b4312bb27b1734f53cd/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:74664978bb272435107de04e36db5a9735e78232b85b77d45cfb38f758efd33e", size = 143641, upload-time = "2025-10-14T04:41:36.116Z" }, + { url = "https://files.pythonhosted.org/packages/ba/33/0ad65587441fc730dc7bd90e9716b30b4702dc7b617e6ba4997dc8651495/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:752944c7ffbfdd10c074dc58ec2d5a8a4cd9493b314d367c14d24c17684ddd14", size = 160779, upload-time = "2025-10-14T04:41:37.229Z" }, + { url = "https://files.pythonhosted.org/packages/67/ed/331d6b249259ee71ddea93f6f2f0a56cfebd46938bde6fcc6f7b9a3d0e09/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d1f13550535ad8cff21b8d757a3257963e951d96e20ec82ab44bc64aeb62a191", size = 159035, upload-time = "2025-10-14T04:41:38.368Z" }, + { url = "https://files.pythonhosted.org/packages/67/ff/f6b948ca32e4f2a4576aa129d8bed61f2e0543bf9f5f2b7fc3758ed005c9/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ecaae4149d99b1c9e7b88bb03e3221956f68fd6d50be2ef061b2381b61d20838", size = 152542, upload-time = "2025-10-14T04:41:39.862Z" }, + { url = "https://files.pythonhosted.org/packages/16/85/276033dcbcc369eb176594de22728541a925b2632f9716428c851b149e83/charset_normalizer-3.4.4-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:cb6254dc36b47a990e59e1068afacdcd02958bdcce30bb50cc1700a8b9d624a6", size = 149524, upload-time = "2025-10-14T04:41:41.319Z" }, + { url = "https://files.pythonhosted.org/packages/9e/f2/6a2a1f722b6aba37050e626530a46a68f74e63683947a8acff92569f979a/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c8ae8a0f02f57a6e61203a31428fa1d677cbe50c93622b4149d5c0f319c1d19e", size = 150395, upload-time = "2025-10-14T04:41:42.539Z" }, + { url = "https://files.pythonhosted.org/packages/60/bb/2186cb2f2bbaea6338cad15ce23a67f9b0672929744381e28b0592676824/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:47cc91b2f4dd2833fddaedd2893006b0106129d4b94fdb6af1f4ce5a9965577c", size = 143680, upload-time = "2025-10-14T04:41:43.661Z" }, + { url = "https://files.pythonhosted.org/packages/7d/a5/bf6f13b772fbb2a90360eb620d52ed8f796f3c5caee8398c3b2eb7b1c60d/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:82004af6c302b5d3ab2cfc4cc5f29db16123b1a8417f2e25f9066f91d4411090", size = 162045, upload-time = "2025-10-14T04:41:44.821Z" }, + { url = "https://files.pythonhosted.org/packages/df/c5/d1be898bf0dc3ef9030c3825e5d3b83f2c528d207d246cbabe245966808d/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:2b7d8f6c26245217bd2ad053761201e9f9680f8ce52f0fcd8d0755aeae5b2152", size = 149687, upload-time = "2025-10-14T04:41:46.442Z" }, + { url = "https://files.pythonhosted.org/packages/a5/42/90c1f7b9341eef50c8a1cb3f098ac43b0508413f33affd762855f67a410e/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:799a7a5e4fb2d5898c60b640fd4981d6a25f1c11790935a44ce38c54e985f828", size = 160014, upload-time = "2025-10-14T04:41:47.631Z" }, + { url = "https://files.pythonhosted.org/packages/76/be/4d3ee471e8145d12795ab655ece37baed0929462a86e72372fd25859047c/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:99ae2cffebb06e6c22bdc25801d7b30f503cc87dbd283479e7b606f70aff57ec", size = 154044, upload-time = "2025-10-14T04:41:48.81Z" }, + { url = "https://files.pythonhosted.org/packages/b0/6f/8f7af07237c34a1defe7defc565a9bc1807762f672c0fde711a4b22bf9c0/charset_normalizer-3.4.4-cp314-cp314-win32.whl", hash = "sha256:f9d332f8c2a2fcbffe1378594431458ddbef721c1769d78e2cbc06280d8155f9", size = 99940, upload-time = "2025-10-14T04:41:49.946Z" }, + { url = "https://files.pythonhosted.org/packages/4b/51/8ade005e5ca5b0d80fb4aff72a3775b325bdc3d27408c8113811a7cbe640/charset_normalizer-3.4.4-cp314-cp314-win_amd64.whl", hash = "sha256:8a6562c3700cce886c5be75ade4a5db4214fda19fede41d9792d100288d8f94c", size = 107104, upload-time = "2025-10-14T04:41:51.051Z" }, + { url = "https://files.pythonhosted.org/packages/da/5f/6b8f83a55bb8278772c5ae54a577f3099025f9ade59d0136ac24a0df4bde/charset_normalizer-3.4.4-cp314-cp314-win_arm64.whl", hash = "sha256:de00632ca48df9daf77a2c65a484531649261ec9f25489917f09e455cb09ddb2", size = 100743, upload-time = "2025-10-14T04:41:52.122Z" }, + { url = "https://files.pythonhosted.org/packages/0a/4c/925909008ed5a988ccbb72dcc897407e5d6d3bd72410d69e051fc0c14647/charset_normalizer-3.4.4-py3-none-any.whl", hash = "sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f", size = 53402, upload-time = "2025-10-14T04:42:31.76Z" }, +] + +[[package]] +name = "click" +version = "8.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3d/fa/656b739db8587d7b5dfa22e22ed02566950fbfbcdc20311993483657a5c0/click-8.3.1.tar.gz", hash = "sha256:12ff4785d337a1bb490bb7e9c2b1ee5da3112e94a8622f26a6c77f5d2fc6842a", size = 295065, upload-time = "2025-11-15T20:45:42.706Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl", hash = "sha256:981153a64e25f12d547d3426c367a4857371575ee7ad18df2a6183ab0545b2a6", size = 108274, upload-time = "2025-11-15T20:45:41.139Z" }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, +] + +[[package]] +name = "csscompressor" +version = "0.9.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f1/2a/8c3ac3d8bc94e6de8d7ae270bb5bc437b210bb9d6d9e46630c98f4abd20c/csscompressor-0.9.5.tar.gz", hash = "sha256:afa22badbcf3120a4f392e4d22f9fff485c044a1feda4a950ecc5eba9dd31a05", size = 237808, upload-time = "2017-11-26T21:13:08.238Z" } + +[[package]] +name = "cssselect2" +version = "0.8.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "tinycss2" }, + { name = "webencodings" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9f/86/fd7f58fc498b3166f3a7e8e0cddb6e620fe1da35b02248b1bd59e95dbaaa/cssselect2-0.8.0.tar.gz", hash = "sha256:7674ffb954a3b46162392aee2a3a0aedb2e14ecf99fcc28644900f4e6e3e9d3a", size = 35716, upload-time = "2025-03-05T14:46:07.988Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0f/e7/aa315e6a749d9b96c2504a1ba0ba031ba2d0517e972ce22682e3fccecb09/cssselect2-0.8.0-py3-none-any.whl", hash = "sha256:46fc70ebc41ced7a32cd42d58b1884d72ade23d21e5a4eaaf022401c13f0e76e", size = 15454, upload-time = "2025-03-05T14:46:06.463Z" }, +] + +[[package]] +name = "data-science-types" +version = "0.2.23" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ae/5f/6c4888c17fa53c551df740d93806c68f1d5eed6b6167747087415e50dccb/data-science-types-0.2.23.tar.gz", hash = "sha256:8096b9a35a8a187bf9a122b4707c97de841d810744690ee2a4ac30c6462e0d16", size = 35914, upload-time = "2021-02-16T16:45:05.066Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9f/66/3f48f40f1aaa0508732706271db4285c25977ee0e00d6c3582e2a6ec2f01/data_science_types-0.2.23-py3-none-any.whl", hash = "sha256:bca319abc0e53a0316f9fcb887937e942477cb9e5fc63c8581e0b0438903b977", size = 42682, upload-time = "2021-02-16T16:45:03.733Z" }, +] + +[[package]] +name = "defusedxml" +version = "0.7.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0f/d5/c66da9b79e5bdb124974bfe172b4daf3c984ebd9c2a06e2b8a4dc7331c72/defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69", size = 75520, upload-time = "2021-03-08T10:59:26.269Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61", size = 25604, upload-time = "2021-03-08T10:59:24.45Z" }, +] + +[[package]] +name = "editorconfig" +version = "0.17.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/88/3a/a61d9a1f319a186b05d14df17daea42fcddea63c213bcd61a929fb3a6796/editorconfig-0.17.1.tar.gz", hash = "sha256:23c08b00e8e08cc3adcddb825251c497478df1dada6aefeb01e626ad37303745", size = 14695, upload-time = "2025-06-09T08:21:37.097Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/96/fd/a40c621ff207f3ce8e484aa0fc8ba4eb6e3ecf52e15b42ba764b457a9550/editorconfig-0.17.1-py3-none-any.whl", hash = "sha256:1eda9c2c0db8c16dbd50111b710572a5e6de934e39772de1959d41f64fc17c82", size = 16360, upload-time = "2025-06-09T08:21:35.654Z" }, +] + +[[package]] +name = "ekg-method" +version = "1.0.0" +source = { virtual = "." } +dependencies = [ + { name = "cairosvg" }, + { name = "ekglib" }, + { name = "markdown-emdash" }, + { name = "mdutils" }, + { name = "mdx-spanner" }, + { name = "mkdocs-awesome-pages-plugin" }, + { name = "mkdocs-build-plantuml-plugin" }, + { name = "mkdocs-exclude" }, + { name = "mkdocs-exclude-search" }, + { name = "mkdocs-gen-files" }, + { name = "mkdocs-git-revision-date-localized-plugin" }, + { name = "mkdocs-graphviz" }, + { name = "mkdocs-include-markdown-plugin" }, + { name = "mkdocs-kroki-plugin" }, + { name = "mkdocs-localsearch" }, + { name = "mkdocs-macros-plugin" }, + { name = "mkdocs-material" }, + { name = "mkdocs-mermaid2-plugin" }, + { name = "mkdocs-minify-plugin" }, + { name = "mkdocs-redirects" }, + { name = "pillow" }, + { name = "smartypants" }, +] + +[package.metadata] +requires-dist = [ + { name = "cairosvg" }, + { name = "ekglib", git = "https://github.com/EKGF/ekglib.git" }, + { name = "markdown-emdash" }, + { name = "mdutils" }, + { name = "mdx-spanner" }, + { name = "mkdocs-awesome-pages-plugin" }, + { name = "mkdocs-build-plantuml-plugin" }, + { name = "mkdocs-exclude" }, + { name = "mkdocs-exclude-search" }, + { name = "mkdocs-gen-files" }, + { name = "mkdocs-git-revision-date-localized-plugin" }, + { name = "mkdocs-graphviz" }, + { name = "mkdocs-include-markdown-plugin" }, + { name = "mkdocs-kroki-plugin" }, + { name = "mkdocs-localsearch" }, + { name = "mkdocs-macros-plugin" }, + { name = "mkdocs-material" }, + { name = "mkdocs-mermaid2-plugin" }, + { name = "mkdocs-minify-plugin" }, + { name = "mkdocs-redirects" }, + { name = "pillow" }, + { name = "smartypants" }, +] + +[[package]] +name = "ekglib" +version = "0.0.30" +source = { git = "https://github.com/EKGF/ekglib.git#6ea1aa1d809098cffd7285547bdb6ec50f67939e" } +dependencies = [ + { name = "boto3" }, + { name = "boto3-stubs" }, + { name = "botocore" }, + { name = "data-science-types" }, + { name = "humps" }, + { name = "inflection" }, + { name = "ldap3" }, + { name = "mdutils" }, + { name = "mkdocs-gen-files" }, + { name = "numpy" }, + { name = "openpyxl" }, + { name = "option" }, + { name = "owlrl" }, + { name = "pandas" }, + { name = "pandas-stubs" }, + { name = "python-dateutil" }, + { name = "rdflib" }, + { name = "requests" }, + { name = "setuptools" }, + { name = "sparqlwrapper" }, + { name = "stringcase" }, + { name = "toml" }, +] + +[[package]] +name = "et-xmlfile" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d3/38/af70d7ab1ae9d4da450eeec1fa3918940a5fafb9055e934af8d6eb0c2313/et_xmlfile-2.0.0.tar.gz", hash = "sha256:dab3f4764309081ce75662649be815c4c9081e88f0837825f90fd28317d4da54", size = 17234, upload-time = "2024-10-25T17:25:40.039Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl", hash = "sha256:7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa", size = 18059, upload-time = "2024-10-25T17:25:39.051Z" }, +] + +[[package]] +name = "ghp-import" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "python-dateutil" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d9/29/d40217cbe2f6b1359e00c6c307bb3fc876ba74068cbab3dde77f03ca0dc4/ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343", size = 10943, upload-time = "2022-05-02T15:47:16.11Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619", size = 11034, upload-time = "2022-05-02T15:47:14.552Z" }, +] + +[[package]] +name = "gitdb" +version = "4.0.12" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "smmap" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/72/94/63b0fc47eb32792c7ba1fe1b694daec9a63620db1e313033d18140c2320a/gitdb-4.0.12.tar.gz", hash = "sha256:5ef71f855d191a3326fcfbc0d5da835f26b13fbcba60c32c21091c349ffdb571", size = 394684, upload-time = "2025-01-02T07:20:46.413Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl", hash = "sha256:67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf", size = 62794, upload-time = "2025-01-02T07:20:43.624Z" }, +] + +[[package]] +name = "gitpython" +version = "3.1.45" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "gitdb" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9a/c8/dd58967d119baab745caec2f9d853297cec1989ec1d63f677d3880632b88/gitpython-3.1.45.tar.gz", hash = "sha256:85b0ee964ceddf211c41b9f27a49086010a190fd8132a24e21f362a4b36a791c", size = 215076, upload-time = "2025-07-24T03:45:54.871Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/01/61/d4b89fec821f72385526e1b9d9a3a0385dda4a72b206d28049e2c7cd39b8/gitpython-3.1.45-py3-none-any.whl", hash = "sha256:8908cb2e02fb3b93b7eb0f2827125cb699869470432cc885f019b8fd0fccff77", size = 208168, upload-time = "2025-07-24T03:45:52.517Z" }, +] + +[[package]] +name = "h11" +version = "0.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250, upload-time = "2025-04-24T03:35:25.427Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515, upload-time = "2025-04-24T03:35:24.344Z" }, +] + +[[package]] +name = "hjson" +version = "3.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/82/e5/0b56d723a76ca67abadbf7fb71609fb0ea7e6926e94fcca6c65a85b36a0e/hjson-3.1.0.tar.gz", hash = "sha256:55af475a27cf83a7969c808399d7bccdec8fb836a07ddbd574587593b9cdcf75", size = 40541, upload-time = "2022-08-13T02:53:01.919Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1f/7f/13cd798d180af4bf4c0ceddeefba2b864a63c71645abc0308b768d67bb81/hjson-3.1.0-py3-none-any.whl", hash = "sha256:65713cdcf13214fb554eb8b4ef803419733f4f5e551047c9b711098ab7186b89", size = 54018, upload-time = "2022-08-13T02:52:59.899Z" }, +] + +[[package]] +name = "htmlmin2" +version = "0.1.13" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/be/31/a76f4bfa885f93b8167cb4c85cf32b54d1f64384d0b897d45bc6d19b7b45/htmlmin2-0.1.13-py3-none-any.whl", hash = "sha256:75609f2a42e64f7ce57dbff28a39890363bde9e7e5885db633317efbdf8c79a2", size = 34486, upload-time = "2023-03-14T21:28:30.388Z" }, +] + +[[package]] +name = "httpcore" +version = "1.0.9" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "h11" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8", size = 85484, upload-time = "2025-04-24T22:06:22.219Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55", size = 78784, upload-time = "2025-04-24T22:06:20.566Z" }, +] + +[[package]] +name = "httplib2" +version = "0.31.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyparsing" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/52/77/6653db69c1f7ecfe5e3f9726fdadc981794656fcd7d98c4209fecfea9993/httplib2-0.31.0.tar.gz", hash = "sha256:ac7ab497c50975147d4f7b1ade44becc7df2f8954d42b38b3d69c515f531135c", size = 250759, upload-time = "2025-09-11T12:16:03.403Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8c/a2/0d269db0f6163be503775dc8b6a6fa15820cc9fdc866f6ba608d86b721f2/httplib2-0.31.0-py3-none-any.whl", hash = "sha256:b9cd78abea9b4e43a7714c6e0f8b6b8561a6fc1e95d5dbd367f5bf0ef35f5d24", size = 91148, upload-time = "2025-09-11T12:16:01.803Z" }, +] + +[[package]] +name = "httpx" +version = "0.28.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "certifi" }, + { name = "httpcore" }, + { name = "idna" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406, upload-time = "2024-12-06T15:37:23.222Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517, upload-time = "2024-12-06T15:37:21.509Z" }, +] + +[[package]] +name = "humps" +version = "0.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fd/e0/d7a257bfa65809cc80bf956825e57094cba2f5b70c92ef761790dd4dcffa/humps-0.2.2.tar.gz", hash = "sha256:777f7a17f6b20aa9cc078d63b56ebd66532c6b2c88b370f1d596d5205410f67c", size = 3289, upload-time = "2018-03-13T09:10:17.602Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/02/07/3dbbe1c94649793c39dbb24445a667d0530d25e35033217b8c15f70c1646/humps-0.2.2-py2.py3-none-any.whl", hash = "sha256:401de60fd73673b697086ba7c865966751c57b11cce57a37c9eabb3e75938417", size = 5347, upload-time = "2018-03-13T09:10:15.567Z" }, +] + +[[package]] +name = "idna" +version = "3.11" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/0703ccc57f3a7233505399edb88de3cbd678da106337b9fcde432b65ed60/idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902", size = 194582, upload-time = "2025-10-12T14:55:20.501Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea", size = 71008, upload-time = "2025-10-12T14:55:18.883Z" }, +] + +[[package]] +name = "inflection" +version = "0.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e1/7e/691d061b7329bc8d54edbf0ec22fbfb2afe61facb681f9aaa9bff7a27d04/inflection-0.5.1.tar.gz", hash = "sha256:1a29730d366e996aaacffb2f1f1cb9593dc38e2ddd30c91250c6dde09ea9b417", size = 15091, upload-time = "2020-08-22T08:16:29.139Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/59/91/aa6bde563e0085a02a435aa99b49ef75b0a4b062635e606dab23ce18d720/inflection-0.5.1-py2.py3-none-any.whl", hash = "sha256:f38b2b640938a4f35ade69ac3d053042959b62a0f1076a5bbaa1b9526605a8a2", size = 9454, upload-time = "2020-08-22T08:16:27.816Z" }, +] + +[[package]] +name = "jinja2" +version = "3.1.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115, upload-time = "2025-03-05T20:05:02.478Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z" }, +] + +[[package]] +name = "jmespath" +version = "1.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/00/2a/e867e8531cf3e36b41201936b7fa7ba7b5702dbef42922193f05c8976cd6/jmespath-1.0.1.tar.gz", hash = "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe", size = 25843, upload-time = "2022-06-17T18:00:12.224Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/31/b4/b9b800c45527aadd64d5b442f9b932b00648617eb5d63d2c7a6587b7cafc/jmespath-1.0.1-py3-none-any.whl", hash = "sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980", size = 20256, upload-time = "2022-06-17T18:00:10.251Z" }, +] + +[[package]] +name = "jsbeautifier" +version = "1.15.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "editorconfig" }, + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ea/98/d6cadf4d5a1c03b2136837a435682418c29fdeb66be137128544cecc5b7a/jsbeautifier-1.15.4.tar.gz", hash = "sha256:5bb18d9efb9331d825735fbc5360ee8f1aac5e52780042803943aa7f854f7592", size = 75257, upload-time = "2025-02-27T17:53:53.252Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2d/14/1c65fccf8413d5f5c6e8425f84675169654395098000d8bddc4e9d3390e1/jsbeautifier-1.15.4-py3-none-any.whl", hash = "sha256:72f65de312a3f10900d7685557f84cb61a9733c50dcc27271a39f5b0051bf528", size = 94707, upload-time = "2025-02-27T17:53:46.152Z" }, +] + +[[package]] +name = "jsmin" +version = "3.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5e/73/e01e4c5e11ad0494f4407a3f623ad4d87714909f50b17a06ed121034ff6e/jsmin-3.0.1.tar.gz", hash = "sha256:c0959a121ef94542e807a674142606f7e90214a2b3d1eb17300244bbb5cc2bfc", size = 13925, upload-time = "2022-01-16T20:35:59.13Z" } + +[[package]] +name = "ldap3" +version = "2.9.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyasn1" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/43/ac/96bd5464e3edbc61595d0d69989f5d9969ae411866427b2500a8e5b812c0/ldap3-2.9.1.tar.gz", hash = "sha256:f3e7fc4718e3f09dda568b57100095e0ce58633bcabbed8667ce3f8fbaa4229f", size = 398830, upload-time = "2021-07-18T06:34:21.786Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4e/f6/71d6ec9f18da0b2201287ce9db6afb1a1f637dedb3f0703409558981c723/ldap3-2.9.1-py2.py3-none-any.whl", hash = "sha256:5869596fc4948797020d3f03b7939da938778a0f9e2009f7a072ccf92b8e8d70", size = 432192, upload-time = "2021-07-18T06:34:12.905Z" }, +] + +[[package]] +name = "markdown" +version = "3.10" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/ab/7dd27d9d863b3376fcf23a5a13cb5d024aed1db46f963f1b5735ae43b3be/markdown-3.10.tar.gz", hash = "sha256:37062d4f2aa4b2b6b32aefb80faa300f82cc790cb949a35b8caede34f2b68c0e", size = 364931, upload-time = "2025-11-03T19:51:15.007Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/70/81/54e3ce63502cd085a0c556652a4e1b919c45a446bd1e5300e10c44c8c521/markdown-3.10-py3-none-any.whl", hash = "sha256:b5b99d6951e2e4948d939255596523444c0e677c669700b1d17aa4a8a464cb7c", size = 107678, upload-time = "2025-11-03T19:51:13.887Z" }, +] + +[[package]] +name = "markdown-emdash" +version = "0.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/82/68/ad594d8f09a9bc37958d729fd7986d4e17e5fc92b39c2b40d78ec3cf4c7e/markdown-emdash-0.2.0.tar.gz", hash = "sha256:410cb8797e5b35c39f0b6a3671903d451f201447af141866656abd7ed0712574", size = 2707, upload-time = "2023-05-18T13:14:36.98Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c6/ad/ae6d00aa1508aebe8ad121ec009e6ded59b1cf1e39373cc43e5f9ba8c658/markdown_emdash-0.2.0-py3-none-any.whl", hash = "sha256:6d2380310f460e865154f8bc6b77e38cd263833a74e0235c147593de1d434b83", size = 2783, upload-time = "2023-05-18T13:14:21.71Z" }, +] + +[[package]] +name = "markupsafe" +version = "3.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7e/99/7690b6d4034fffd95959cbe0c02de8deb3098cc577c67bb6a24fe5d7caa7/markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698", size = 80313, upload-time = "2025-09-27T18:37:40.426Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/2f/907b9c7bbba283e68f20259574b13d005c121a0fa4c175f9bed27c4597ff/markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795", size = 11622, upload-time = "2025-09-27T18:36:41.777Z" }, + { url = "https://files.pythonhosted.org/packages/9c/d9/5f7756922cdd676869eca1c4e3c0cd0df60ed30199ffd775e319089cb3ed/markupsafe-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219", size = 12029, upload-time = "2025-09-27T18:36:43.257Z" }, + { url = "https://files.pythonhosted.org/packages/00/07/575a68c754943058c78f30db02ee03a64b3c638586fba6a6dd56830b30a3/markupsafe-3.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6", size = 24374, upload-time = "2025-09-27T18:36:44.508Z" }, + { url = "https://files.pythonhosted.org/packages/a9/21/9b05698b46f218fc0e118e1f8168395c65c8a2c750ae2bab54fc4bd4e0e8/markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676", size = 22980, upload-time = "2025-09-27T18:36:45.385Z" }, + { url = "https://files.pythonhosted.org/packages/7f/71/544260864f893f18b6827315b988c146b559391e6e7e8f7252839b1b846a/markupsafe-3.0.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9", size = 21990, upload-time = "2025-09-27T18:36:46.916Z" }, + { url = "https://files.pythonhosted.org/packages/c2/28/b50fc2f74d1ad761af2f5dcce7492648b983d00a65b8c0e0cb457c82ebbe/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1", size = 23784, upload-time = "2025-09-27T18:36:47.884Z" }, + { url = "https://files.pythonhosted.org/packages/ed/76/104b2aa106a208da8b17a2fb72e033a5a9d7073c68f7e508b94916ed47a9/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc", size = 21588, upload-time = "2025-09-27T18:36:48.82Z" }, + { url = "https://files.pythonhosted.org/packages/b5/99/16a5eb2d140087ebd97180d95249b00a03aa87e29cc224056274f2e45fd6/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12", size = 23041, upload-time = "2025-09-27T18:36:49.797Z" }, + { url = "https://files.pythonhosted.org/packages/19/bc/e7140ed90c5d61d77cea142eed9f9c303f4c4806f60a1044c13e3f1471d0/markupsafe-3.0.3-cp313-cp313-win32.whl", hash = "sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed", size = 14543, upload-time = "2025-09-27T18:36:51.584Z" }, + { url = "https://files.pythonhosted.org/packages/05/73/c4abe620b841b6b791f2edc248f556900667a5a1cf023a6646967ae98335/markupsafe-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5", size = 15113, upload-time = "2025-09-27T18:36:52.537Z" }, + { url = "https://files.pythonhosted.org/packages/f0/3a/fa34a0f7cfef23cf9500d68cb7c32dd64ffd58a12b09225fb03dd37d5b80/markupsafe-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485", size = 13911, upload-time = "2025-09-27T18:36:53.513Z" }, + { url = "https://files.pythonhosted.org/packages/e4/d7/e05cd7efe43a88a17a37b3ae96e79a19e846f3f456fe79c57ca61356ef01/markupsafe-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73", size = 11658, upload-time = "2025-09-27T18:36:54.819Z" }, + { url = "https://files.pythonhosted.org/packages/99/9e/e412117548182ce2148bdeacdda3bb494260c0b0184360fe0d56389b523b/markupsafe-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37", size = 12066, upload-time = "2025-09-27T18:36:55.714Z" }, + { url = "https://files.pythonhosted.org/packages/bc/e6/fa0ffcda717ef64a5108eaa7b4f5ed28d56122c9a6d70ab8b72f9f715c80/markupsafe-3.0.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19", size = 25639, upload-time = "2025-09-27T18:36:56.908Z" }, + { url = "https://files.pythonhosted.org/packages/96/ec/2102e881fe9d25fc16cb4b25d5f5cde50970967ffa5dddafdb771237062d/markupsafe-3.0.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025", size = 23569, upload-time = "2025-09-27T18:36:57.913Z" }, + { url = "https://files.pythonhosted.org/packages/4b/30/6f2fce1f1f205fc9323255b216ca8a235b15860c34b6798f810f05828e32/markupsafe-3.0.3-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6", size = 23284, upload-time = "2025-09-27T18:36:58.833Z" }, + { url = "https://files.pythonhosted.org/packages/58/47/4a0ccea4ab9f5dcb6f79c0236d954acb382202721e704223a8aafa38b5c8/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f", size = 24801, upload-time = "2025-09-27T18:36:59.739Z" }, + { url = "https://files.pythonhosted.org/packages/6a/70/3780e9b72180b6fecb83a4814d84c3bf4b4ae4bf0b19c27196104149734c/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb", size = 22769, upload-time = "2025-09-27T18:37:00.719Z" }, + { url = "https://files.pythonhosted.org/packages/98/c5/c03c7f4125180fc215220c035beac6b9cb684bc7a067c84fc69414d315f5/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009", size = 23642, upload-time = "2025-09-27T18:37:01.673Z" }, + { url = "https://files.pythonhosted.org/packages/80/d6/2d1b89f6ca4bff1036499b1e29a1d02d282259f3681540e16563f27ebc23/markupsafe-3.0.3-cp313-cp313t-win32.whl", hash = "sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354", size = 14612, upload-time = "2025-09-27T18:37:02.639Z" }, + { url = "https://files.pythonhosted.org/packages/2b/98/e48a4bfba0a0ffcf9925fe2d69240bfaa19c6f7507b8cd09c70684a53c1e/markupsafe-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218", size = 15200, upload-time = "2025-09-27T18:37:03.582Z" }, + { url = "https://files.pythonhosted.org/packages/0e/72/e3cc540f351f316e9ed0f092757459afbc595824ca724cbc5a5d4263713f/markupsafe-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287", size = 13973, upload-time = "2025-09-27T18:37:04.929Z" }, + { url = "https://files.pythonhosted.org/packages/33/8a/8e42d4838cd89b7dde187011e97fe6c3af66d8c044997d2183fbd6d31352/markupsafe-3.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe", size = 11619, upload-time = "2025-09-27T18:37:06.342Z" }, + { url = "https://files.pythonhosted.org/packages/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026", size = 12029, upload-time = "2025-09-27T18:37:07.213Z" }, + { url = "https://files.pythonhosted.org/packages/da/ef/e648bfd021127bef5fa12e1720ffed0c6cbb8310c8d9bea7266337ff06de/markupsafe-3.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737", size = 24408, upload-time = "2025-09-27T18:37:09.572Z" }, + { url = "https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97", size = 23005, upload-time = "2025-09-27T18:37:10.58Z" }, + { url = "https://files.pythonhosted.org/packages/bc/20/b7fdf89a8456b099837cd1dc21974632a02a999ec9bf7ca3e490aacd98e7/markupsafe-3.0.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d", size = 22048, upload-time = "2025-09-27T18:37:11.547Z" }, + { url = "https://files.pythonhosted.org/packages/9a/a7/591f592afdc734f47db08a75793a55d7fbcc6902a723ae4cfbab61010cc5/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda", size = 23821, upload-time = "2025-09-27T18:37:12.48Z" }, + { url = "https://files.pythonhosted.org/packages/7d/33/45b24e4f44195b26521bc6f1a82197118f74df348556594bd2262bda1038/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf", size = 21606, upload-time = "2025-09-27T18:37:13.485Z" }, + { url = "https://files.pythonhosted.org/packages/ff/0e/53dfaca23a69fbfbbf17a4b64072090e70717344c52eaaaa9c5ddff1e5f0/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe", size = 23043, upload-time = "2025-09-27T18:37:14.408Z" }, + { url = "https://files.pythonhosted.org/packages/46/11/f333a06fc16236d5238bfe74daccbca41459dcd8d1fa952e8fbd5dccfb70/markupsafe-3.0.3-cp314-cp314-win32.whl", hash = "sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9", size = 14747, upload-time = "2025-09-27T18:37:15.36Z" }, + { url = "https://files.pythonhosted.org/packages/28/52/182836104b33b444e400b14f797212f720cbc9ed6ba34c800639d154e821/markupsafe-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581", size = 15341, upload-time = "2025-09-27T18:37:16.496Z" }, + { url = "https://files.pythonhosted.org/packages/6f/18/acf23e91bd94fd7b3031558b1f013adfa21a8e407a3fdb32745538730382/markupsafe-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4", size = 14073, upload-time = "2025-09-27T18:37:17.476Z" }, + { url = "https://files.pythonhosted.org/packages/3c/f0/57689aa4076e1b43b15fdfa646b04653969d50cf30c32a102762be2485da/markupsafe-3.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab", size = 11661, upload-time = "2025-09-27T18:37:18.453Z" }, + { url = "https://files.pythonhosted.org/packages/89/c3/2e67a7ca217c6912985ec766c6393b636fb0c2344443ff9d91404dc4c79f/markupsafe-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175", size = 12069, upload-time = "2025-09-27T18:37:19.332Z" }, + { url = "https://files.pythonhosted.org/packages/f0/00/be561dce4e6ca66b15276e184ce4b8aec61fe83662cce2f7d72bd3249d28/markupsafe-3.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634", size = 25670, upload-time = "2025-09-27T18:37:20.245Z" }, + { url = "https://files.pythonhosted.org/packages/50/09/c419f6f5a92e5fadde27efd190eca90f05e1261b10dbd8cbcb39cd8ea1dc/markupsafe-3.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50", size = 23598, upload-time = "2025-09-27T18:37:21.177Z" }, + { url = "https://files.pythonhosted.org/packages/22/44/a0681611106e0b2921b3033fc19bc53323e0b50bc70cffdd19f7d679bb66/markupsafe-3.0.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e", size = 23261, upload-time = "2025-09-27T18:37:22.167Z" }, + { url = "https://files.pythonhosted.org/packages/5f/57/1b0b3f100259dc9fffe780cfb60d4be71375510e435efec3d116b6436d43/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5", size = 24835, upload-time = "2025-09-27T18:37:23.296Z" }, + { url = "https://files.pythonhosted.org/packages/26/6a/4bf6d0c97c4920f1597cc14dd720705eca0bf7c787aebc6bb4d1bead5388/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523", size = 22733, upload-time = "2025-09-27T18:37:24.237Z" }, + { url = "https://files.pythonhosted.org/packages/14/c7/ca723101509b518797fedc2fdf79ba57f886b4aca8a7d31857ba3ee8281f/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc", size = 23672, upload-time = "2025-09-27T18:37:25.271Z" }, + { url = "https://files.pythonhosted.org/packages/fb/df/5bd7a48c256faecd1d36edc13133e51397e41b73bb77e1a69deab746ebac/markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d", size = 14819, upload-time = "2025-09-27T18:37:26.285Z" }, + { url = "https://files.pythonhosted.org/packages/1a/8a/0402ba61a2f16038b48b39bccca271134be00c5c9f0f623208399333c448/markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9", size = 15426, upload-time = "2025-09-27T18:37:27.316Z" }, + { url = "https://files.pythonhosted.org/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", size = 14146, upload-time = "2025-09-27T18:37:28.327Z" }, +] + +[[package]] +name = "mdutils" +version = "1.8.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8a/44/73810a6af37f57ec00f6e480bbb0f24ea1e25e85923025eb8ddabc54fe68/mdutils-1.8.1.tar.gz", hash = "sha256:cdce6bde79822a7fea3c8fd6426cea0acfadd0f94ee3d3ebfa09aa38b561af35", size = 24077, upload-time = "2025-10-18T15:30:14.546Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/06/38/f2eeaa5d1c13e64a4dc18b5c6e28b9d5f8b20f5450ba8c3a694e4a78893d/mdutils-1.8.1-py3-none-any.whl", hash = "sha256:3d62d0a4d19fcd68d1daf956d1832f4a598663c73022bd95b09fae69c994b5ac", size = 21656, upload-time = "2025-10-18T15:30:13.129Z" }, +] + +[[package]] +name = "mdx-spanner" +version = "0.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/92/bc/c4785b372c2dd968d4b864bcdf06b6ece3c2cd43a3148e66109a79e74622/mdx_spanner-0.1.0.tar.gz", hash = "sha256:e72345800a9b867412dc3cb7b1c53dbf2ed327bdaf559917f9107af62eac13b3", size = 4080, upload-time = "2024-12-17T08:06:48.351Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/77/32/f4653b6acac2c7b541e42c903bb106cb4a163775c7e6488c76d3b9bd8f73/mdx_spanner-0.1.0-py3-none-any.whl", hash = "sha256:43934ad26924418521fc908968db1611be109577c910a6a8baa6b91b12e9b4fc", size = 4134, upload-time = "2024-12-17T08:06:46.218Z" }, +] + +[[package]] +name = "mergedeep" +version = "1.3.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3a/41/580bb4006e3ed0361b8151a01d324fb03f420815446c7def45d02f74c270/mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8", size = 4661, upload-time = "2021-02-05T18:55:30.623Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307", size = 6354, upload-time = "2021-02-05T18:55:29.583Z" }, +] + +[[package]] +name = "mkdocs" +version = "1.6.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "ghp-import" }, + { name = "jinja2" }, + { name = "markdown" }, + { name = "markupsafe" }, + { name = "mergedeep" }, + { name = "mkdocs-get-deps" }, + { name = "packaging" }, + { name = "pathspec" }, + { name = "pyyaml" }, + { name = "pyyaml-env-tag" }, + { name = "watchdog" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bc/c6/bbd4f061bd16b378247f12953ffcb04786a618ce5e904b8c5a01a0309061/mkdocs-1.6.1.tar.gz", hash = "sha256:7b432f01d928c084353ab39c57282f29f92136665bdd6abf7c1ec8d822ef86f2", size = 3889159, upload-time = "2024-08-30T12:24:06.899Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl", hash = "sha256:db91759624d1647f3f34aa0c3f327dd2601beae39a366d6e064c03468d35c20e", size = 3864451, upload-time = "2024-08-30T12:24:05.054Z" }, +] + +[[package]] +name = "mkdocs-awesome-pages-plugin" +version = "2.10.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mkdocs" }, + { name = "natsort" }, + { name = "wcmatch" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/92/e8/6ae9c18d8174a5d74ce4ade7a7f4c350955063968bc41ff1e5833cff4a2b/mkdocs_awesome_pages_plugin-2.10.1.tar.gz", hash = "sha256:cda2cb88c937ada81a4785225f20ef77ce532762f4500120b67a1433c1cdbb2f", size = 16303, upload-time = "2024-12-22T21:13:49.19Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/73/61/19fc1e9c579dbfd4e8a402748f1d63cab7aabe8f8d91eb0235e45b32d040/mkdocs_awesome_pages_plugin-2.10.1-py3-none-any.whl", hash = "sha256:c6939dbea37383fc3cf8c0a4e892144ec3d2f8a585e16fdc966b34e7c97042a7", size = 15118, upload-time = "2024-12-22T21:13:46.945Z" }, +] + +[[package]] +name = "mkdocs-build-plantuml-plugin" +version = "1.11.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "httplib2" }, + { name = "mkdocs" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a8/f8/e00b685ad5390a617a2e5325ebd14103fdfbd35c3d8a74810752f306d086/mkdocs-build-plantuml-plugin-1.11.0.tar.gz", hash = "sha256:3e894ab71e75f37f8c5236dbe4e63d938312bfa7a5fc2489cf9347a659db41f8", size = 8933, upload-time = "2024-03-25T13:36:34.376Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/23/c3/4e670e59e5edf8c4c136bee1604dd149e2b4c393b4266cdb10c7a93aefac/mkdocs_build_plantuml_plugin-1.11.0-py3-none-any.whl", hash = "sha256:528e883a7e5485576b60a51e22dc0232d31e5ae7c19640f9dc201f655e9ce0f5", size = 9318, upload-time = "2024-03-25T13:36:32.702Z" }, +] + +[[package]] +name = "mkdocs-exclude" +version = "1.0.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mkdocs" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/54/b5/3a8e289282c9e8d7003f8a2f53d673d4fdaa81d493dc6966092d9985b6fc/mkdocs-exclude-1.0.2.tar.gz", hash = "sha256:ba6fab3c80ddbe3fd31d3e579861fd3124513708271180a5f81846da8c7e2a51", size = 6751, upload-time = "2019-02-20T23:34:12.81Z" } + +[[package]] +name = "mkdocs-exclude-search" +version = "0.6.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mkdocs" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1d/52/8243589d294cf6091c1145896915fe50feea0e91d64d843942d0175770c2/mkdocs-exclude-search-0.6.6.tar.gz", hash = "sha256:3cdff1b9afdc1b227019cd1e124f401453235b92153d60c0e5e651a76be4f044", size = 9501, upload-time = "2023-12-03T22:58:21.259Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3b/ef/9af45ffb1bdba684a0694922abae0bb771e9777aba005933f838b7f1bcea/mkdocs_exclude_search-0.6.6-py3-none-any.whl", hash = "sha256:2b4b941d1689808db533fe4a6afba75ce76c9bab8b21d4e31efc05fd8c4e0a4f", size = 7821, upload-time = "2023-12-03T22:58:19.355Z" }, +] + +[[package]] +name = "mkdocs-gen-files" +version = "0.6.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mkdocs" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/61/35/f26349f7fa18414eb2e25d75a6fa9c7e3186c36e1d227c0b2d785a7bd5c4/mkdocs_gen_files-0.6.0.tar.gz", hash = "sha256:52022dc14dcc0451e05e54a8f5d5e7760351b6701eff816d1e9739577ec5635e", size = 8642, upload-time = "2025-11-23T12:13:22.124Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8d/ec/72417415563c60ae01b36f0d497f1f4c803972f447ef4fb7f7746d6e07db/mkdocs_gen_files-0.6.0-py3-none-any.whl", hash = "sha256:815af15f3e2dbfda379629c1b95c02c8e6f232edf2a901186ea3b204ab1135b2", size = 8182, upload-time = "2025-11-23T12:13:20.756Z" }, +] + +[[package]] +name = "mkdocs-get-deps" +version = "0.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mergedeep" }, + { name = "platformdirs" }, + { name = "pyyaml" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/98/f5/ed29cd50067784976f25ed0ed6fcd3c2ce9eb90650aa3b2796ddf7b6870b/mkdocs_get_deps-0.2.0.tar.gz", hash = "sha256:162b3d129c7fad9b19abfdcb9c1458a651628e4b1dea628ac68790fb3061c60c", size = 10239, upload-time = "2023-11-20T17:51:09.981Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9f/d4/029f984e8d3f3b6b726bd33cafc473b75e9e44c0f7e80a5b29abc466bdea/mkdocs_get_deps-0.2.0-py3-none-any.whl", hash = "sha256:2bf11d0b133e77a0dd036abeeb06dec8775e46efa526dc70667d8863eefc6134", size = 9521, upload-time = "2023-11-20T17:51:08.587Z" }, +] + +[[package]] +name = "mkdocs-git-revision-date-localized-plugin" +version = "1.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "babel" }, + { name = "gitpython" }, + { name = "mkdocs" }, + { name = "tzdata", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0f/c5/1d3c4e6ddae6230b89d09105cb79de711655e3ebd6745f7a92efea0f5160/mkdocs_git_revision_date_localized_plugin-1.5.0.tar.gz", hash = "sha256:17345ccfdf69a1905dc96fb1070dce82d03a1eb6b0d48f958081a7589ce3c248", size = 460697, upload-time = "2025-10-31T16:11:34.44Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bc/51/fe0e3fdb16f6eed65c9459d12bae6a4e1f0bb4e2228cb037e7907b002678/mkdocs_git_revision_date_localized_plugin-1.5.0-py3-none-any.whl", hash = "sha256:933f9e35a8c135b113f21bb57610d82e9b7bcc71dd34fb06a029053c97e99656", size = 26153, upload-time = "2025-10-31T16:11:32.987Z" }, +] + +[[package]] +name = "mkdocs-graphviz" +version = "1.5.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/26/93/ddfa0703229416de9cbc8a51eeddf9312dd1d64b6b376e63b1cecd241f69/mkdocs_graphviz-1.5.3.tar.gz", hash = "sha256:913fbd77a0b4f2683b6d4f244f1f7d4e421866f9a7b70057900700909052709c", size = 23140, upload-time = "2023-01-26T22:18:39.227Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/11/e6/616986bd2f2d555236978eced99ce54d9dd852d60d77f817b4be71b8c5c8/mkdocs_graphviz-1.5.3-py3-none-any.whl", hash = "sha256:fb2159cf49c02604104a4077f4b92ddc543cd054102dc78cb1c347dd1a847ddc", size = 19835, upload-time = "2023-01-26T22:18:37.496Z" }, +] + +[[package]] +name = "mkdocs-include-markdown-plugin" +version = "7.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mkdocs" }, + { name = "wcmatch" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/90/10/b0b75ac42f4613556a808eee2dad3efe7a7d5079349aa5b9229d863e829f/mkdocs_include_markdown_plugin-7.2.0.tar.gz", hash = "sha256:4a67a91ade680dc0e15f608e5b6343bec03372ffa112c40a4254c1bfb10f42f3", size = 25509, upload-time = "2025-09-28T21:50:50.41Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ba/f9/783338d1d7fd548c7635728b67a0f8f96d9e6c265aa61c51356c03597767/mkdocs_include_markdown_plugin-7.2.0-py3-none-any.whl", hash = "sha256:d56cdaeb2d113fb66ed0fe4fb7af1da889926b0b9872032be24e19bbb09c9f5b", size = 29548, upload-time = "2025-09-28T21:50:49.373Z" }, +] + +[[package]] +name = "mkdocs-kroki-plugin" +version = "1.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "defusedxml" }, + { name = "httpx" }, + { name = "mkdocs" }, + { name = "result" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/aa/d9/f5d64114a22c082f8fe6c614ed0c725c56a37499cfd641346755f35568cd/mkdocs_kroki_plugin-1.0.0.tar.gz", hash = "sha256:36b89ba6a36b8a0c87f77e9ea5ec673df58a91f046793206a5cd0b6545bc68e5", size = 13207, upload-time = "2025-11-29T12:33:05.077Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/06/1a/6f7648740d358e07cc3e71821f482d1d1919188d027c7d20a0f266418d59/mkdocs_kroki_plugin-1.0.0-py3-none-any.whl", hash = "sha256:eda8579400eeba3f145bb396f48de4f6d3d4187d5509da0992f8344e42f762b9", size = 16196, upload-time = "2025-11-29T12:33:06.076Z" }, +] + +[[package]] +name = "mkdocs-localsearch" +version = "0.9.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mkdocs" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/c4/7f/1bb57c0fdd84db8d1a93e96e428822ff22111d85e99f2faa2c4fff26620e/mkdocs_localsearch-0.9.2-py3-none-any.whl", hash = "sha256:ec69715136d23fb5b0c31436147d58bd9ab9339039247887dc6ae527686c7076", size = 3443, upload-time = "2022-07-25T14:58:08.248Z" }, +] + +[[package]] +name = "mkdocs-macros-plugin" +version = "1.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "hjson" }, + { name = "jinja2" }, + { name = "mkdocs" }, + { name = "packaging" }, + { name = "pathspec" }, + { name = "python-dateutil" }, + { name = "pyyaml" }, + { name = "requests" }, + { name = "super-collections" }, + { name = "termcolor" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/92/15/e6a44839841ebc9c5872fa0e6fad1c3757424e4fe026093b68e9f386d136/mkdocs_macros_plugin-1.5.0.tar.gz", hash = "sha256:12aa45ce7ecb7a445c66b9f649f3dd05e9b92e8af6bc65e4acd91d26f878c01f", size = 37730, upload-time = "2025-11-13T08:08:55.545Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/51/62/9fffba5bb9ed3d31a932ad35038ba9483d59850256ee0fea7f1187173983/mkdocs_macros_plugin-1.5.0-py3-none-any.whl", hash = "sha256:c10fabd812bf50f9170609d0ed518e54f1f0e12c334ac29141723a83c881dd6f", size = 44626, upload-time = "2025-11-13T08:08:53.878Z" }, +] + +[[package]] +name = "mkdocs-material" +version = "9.7.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "babel" }, + { name = "backrefs" }, + { name = "colorama" }, + { name = "jinja2" }, + { name = "markdown" }, + { name = "mkdocs" }, + { name = "mkdocs-material-extensions" }, + { name = "paginate" }, + { name = "pygments" }, + { name = "pymdown-extensions" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9c/3b/111b84cd6ff28d9e955b5f799ef217a17bc1684ac346af333e6100e413cb/mkdocs_material-9.7.0.tar.gz", hash = "sha256:602b359844e906ee402b7ed9640340cf8a474420d02d8891451733b6b02314ec", size = 4094546, upload-time = "2025-11-11T08:49:09.73Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/87/eefe8d5e764f4cf50ed91b943f8e8f96b5efd65489d8303b7a36e2e79834/mkdocs_material-9.7.0-py3-none-any.whl", hash = "sha256:da2866ea53601125ff5baa8aa06404c6e07af3c5ce3d5de95e3b52b80b442887", size = 9283770, upload-time = "2025-11-11T08:49:06.26Z" }, +] + +[[package]] +name = "mkdocs-material-extensions" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/79/9b/9b4c96d6593b2a541e1cb8b34899a6d021d208bb357042823d4d2cabdbe7/mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443", size = 11847, upload-time = "2023-11-22T19:09:45.208Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl", hash = "sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31", size = 8728, upload-time = "2023-11-22T19:09:43.465Z" }, +] + +[[package]] +name = "mkdocs-mermaid2-plugin" +version = "1.2.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "beautifulsoup4" }, + { name = "jsbeautifier" }, + { name = "mkdocs" }, + { name = "pymdown-extensions" }, + { name = "requests" }, + { name = "setuptools" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2a/6d/308f443a558b6a97ce55782658174c0d07c414405cfc0a44d36ad37e36f9/mkdocs_mermaid2_plugin-1.2.3.tar.gz", hash = "sha256:fb6f901d53e5191e93db78f93f219cad926ccc4d51e176271ca5161b6cc5368c", size = 16220, upload-time = "2025-10-17T19:38:53.047Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1a/4b/6fd6dd632019b7f522f1b1f794ab6115cd79890330986614be56fd18f0eb/mkdocs_mermaid2_plugin-1.2.3-py3-none-any.whl", hash = "sha256:33f60c582be623ed53829a96e19284fc7f1b74a1dbae78d4d2e47fe00c3e190d", size = 17299, upload-time = "2025-10-17T19:38:51.874Z" }, +] + +[[package]] +name = "mkdocs-minify-plugin" +version = "0.8.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "csscompressor" }, + { name = "htmlmin2" }, + { name = "jsmin" }, + { name = "mkdocs" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/52/67/fe4b77e7a8ae7628392e28b14122588beaf6078b53eb91c7ed000fd158ac/mkdocs-minify-plugin-0.8.0.tar.gz", hash = "sha256:bc11b78b8120d79e817308e2b11539d790d21445eb63df831e393f76e52e753d", size = 8366, upload-time = "2024-01-29T16:11:32.982Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1b/cd/2e8d0d92421916e2ea4ff97f10a544a9bd5588eb747556701c983581df13/mkdocs_minify_plugin-0.8.0-py3-none-any.whl", hash = "sha256:5fba1a3f7bd9a2142c9954a6559a57e946587b21f133165ece30ea145c66aee6", size = 6723, upload-time = "2024-01-29T16:11:31.851Z" }, +] + +[[package]] +name = "mkdocs-redirects" +version = "1.2.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mkdocs" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f1/a8/6d44a6cf07e969c7420cb36ab287b0669da636a2044de38a7d2208d5a758/mkdocs_redirects-1.2.2.tar.gz", hash = "sha256:3094981b42ffab29313c2c1b8ac3969861109f58b2dd58c45fc81cd44bfa0095", size = 7162, upload-time = "2024-11-07T14:57:21.109Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c4/ec/38443b1f2a3821bbcb24e46cd8ba979154417794d54baf949fefde1c2146/mkdocs_redirects-1.2.2-py3-none-any.whl", hash = "sha256:7dbfa5647b79a3589da4401403d69494bd1f4ad03b9c15136720367e1f340ed5", size = 6142, upload-time = "2024-11-07T14:57:19.143Z" }, +] + +[[package]] +name = "natsort" +version = "8.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e2/a9/a0c57aee75f77794adaf35322f8b6404cbd0f89ad45c87197a937764b7d0/natsort-8.4.0.tar.gz", hash = "sha256:45312c4a0e5507593da193dedd04abb1469253b601ecaf63445ad80f0a1ea581", size = 76575, upload-time = "2023-06-20T04:17:19.925Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/82/7a9d0550484a62c6da82858ee9419f3dd1ccc9aa1c26a1e43da3ecd20b0d/natsort-8.4.0-py3-none-any.whl", hash = "sha256:4732914fb471f56b5cce04d7bae6f164a592c7712e1c85f9ef585e197299521c", size = 38268, upload-time = "2023-06-20T04:17:17.522Z" }, +] + +[[package]] +name = "numpy" +version = "2.3.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/76/65/21b3bc86aac7b8f2862db1e808f1ea22b028e30a225a34a5ede9bf8678f2/numpy-2.3.5.tar.gz", hash = "sha256:784db1dcdab56bf0517743e746dfb0f885fc68d948aba86eeec2cba234bdf1c0", size = 20584950, upload-time = "2025-11-16T22:52:42.067Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/db/69/9cde09f36da4b5a505341180a3f2e6fadc352fd4d2b7096ce9778db83f1a/numpy-2.3.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d0f23b44f57077c1ede8c5f26b30f706498b4862d3ff0a7298b8411dd2f043ff", size = 16728251, upload-time = "2025-11-16T22:50:19.013Z" }, + { url = "https://files.pythonhosted.org/packages/79/fb/f505c95ceddd7027347b067689db71ca80bd5ecc926f913f1a23e65cf09b/numpy-2.3.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:aa5bc7c5d59d831d9773d1170acac7893ce3a5e130540605770ade83280e7188", size = 12254652, upload-time = "2025-11-16T22:50:21.487Z" }, + { url = "https://files.pythonhosted.org/packages/78/da/8c7738060ca9c31b30e9301ee0cf6c5ffdbf889d9593285a1cead337f9a5/numpy-2.3.5-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:ccc933afd4d20aad3c00bcef049cb40049f7f196e0397f1109dba6fed63267b0", size = 5083172, upload-time = "2025-11-16T22:50:24.562Z" }, + { url = "https://files.pythonhosted.org/packages/a4/b4/ee5bb2537fb9430fd2ef30a616c3672b991a4129bb1c7dcc42aa0abbe5d7/numpy-2.3.5-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:afaffc4393205524af9dfa400fa250143a6c3bc646c08c9f5e25a9f4b4d6a903", size = 6622990, upload-time = "2025-11-16T22:50:26.47Z" }, + { url = "https://files.pythonhosted.org/packages/95/03/dc0723a013c7d7c19de5ef29e932c3081df1c14ba582b8b86b5de9db7f0f/numpy-2.3.5-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c75442b2209b8470d6d5d8b1c25714270686f14c749028d2199c54e29f20b4d", size = 14248902, upload-time = "2025-11-16T22:50:28.861Z" }, + { url = "https://files.pythonhosted.org/packages/f5/10/ca162f45a102738958dcec8023062dad0cbc17d1ab99d68c4e4a6c45fb2b/numpy-2.3.5-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:11e06aa0af8c0f05104d56450d6093ee639e15f24ecf62d417329d06e522e017", size = 16597430, upload-time = "2025-11-16T22:50:31.56Z" }, + { url = "https://files.pythonhosted.org/packages/2a/51/c1e29be863588db58175175f057286900b4b3327a1351e706d5e0f8dd679/numpy-2.3.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ed89927b86296067b4f81f108a2271d8926467a8868e554eaf370fc27fa3ccaf", size = 16024551, upload-time = "2025-11-16T22:50:34.242Z" }, + { url = "https://files.pythonhosted.org/packages/83/68/8236589d4dbb87253d28259d04d9b814ec0ecce7cb1c7fed29729f4c3a78/numpy-2.3.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51c55fe3451421f3a6ef9a9c1439e82101c57a2c9eab9feb196a62b1a10b58ce", size = 18533275, upload-time = "2025-11-16T22:50:37.651Z" }, + { url = "https://files.pythonhosted.org/packages/40/56/2932d75b6f13465239e3b7b7e511be27f1b8161ca2510854f0b6e521c395/numpy-2.3.5-cp313-cp313-win32.whl", hash = "sha256:1978155dd49972084bd6ef388d66ab70f0c323ddee6f693d539376498720fb7e", size = 6277637, upload-time = "2025-11-16T22:50:40.11Z" }, + { url = "https://files.pythonhosted.org/packages/0c/88/e2eaa6cffb115b85ed7c7c87775cb8bcf0816816bc98ca8dbfa2ee33fe6e/numpy-2.3.5-cp313-cp313-win_amd64.whl", hash = "sha256:00dc4e846108a382c5869e77c6ed514394bdeb3403461d25a829711041217d5b", size = 12779090, upload-time = "2025-11-16T22:50:42.503Z" }, + { url = "https://files.pythonhosted.org/packages/8f/88/3f41e13a44ebd4034ee17baa384acac29ba6a4fcc2aca95f6f08ca0447d1/numpy-2.3.5-cp313-cp313-win_arm64.whl", hash = "sha256:0472f11f6ec23a74a906a00b48a4dcf3849209696dff7c189714511268d103ae", size = 10194710, upload-time = "2025-11-16T22:50:44.971Z" }, + { url = "https://files.pythonhosted.org/packages/13/cb/71744144e13389d577f867f745b7df2d8489463654a918eea2eeb166dfc9/numpy-2.3.5-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:414802f3b97f3c1eef41e530aaba3b3c1620649871d8cb38c6eaff034c2e16bd", size = 16827292, upload-time = "2025-11-16T22:50:47.715Z" }, + { url = "https://files.pythonhosted.org/packages/71/80/ba9dc6f2a4398e7f42b708a7fdc841bb638d353be255655498edbf9a15a8/numpy-2.3.5-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5ee6609ac3604fa7780e30a03e5e241a7956f8e2fcfe547d51e3afa5247ac47f", size = 12378897, upload-time = "2025-11-16T22:50:51.327Z" }, + { url = "https://files.pythonhosted.org/packages/2e/6d/db2151b9f64264bcceccd51741aa39b50150de9b602d98ecfe7e0c4bff39/numpy-2.3.5-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:86d835afea1eaa143012a2d7a3f45a3adce2d7adc8b4961f0b362214d800846a", size = 5207391, upload-time = "2025-11-16T22:50:54.542Z" }, + { url = "https://files.pythonhosted.org/packages/80/ae/429bacace5ccad48a14c4ae5332f6aa8ab9f69524193511d60ccdfdc65fa/numpy-2.3.5-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:30bc11310e8153ca664b14c5f1b73e94bd0503681fcf136a163de856f3a50139", size = 6721275, upload-time = "2025-11-16T22:50:56.794Z" }, + { url = "https://files.pythonhosted.org/packages/74/5b/1919abf32d8722646a38cd527bc3771eb229a32724ee6ba340ead9b92249/numpy-2.3.5-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1062fde1dcf469571705945b0f221b73928f34a20c904ffb45db101907c3454e", size = 14306855, upload-time = "2025-11-16T22:50:59.208Z" }, + { url = "https://files.pythonhosted.org/packages/a5/87/6831980559434973bebc30cd9c1f21e541a0f2b0c280d43d3afd909b66d0/numpy-2.3.5-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ce581db493ea1a96c0556360ede6607496e8bf9b3a8efa66e06477267bc831e9", size = 16657359, upload-time = "2025-11-16T22:51:01.991Z" }, + { url = "https://files.pythonhosted.org/packages/dd/91/c797f544491ee99fd00495f12ebb7802c440c1915811d72ac5b4479a3356/numpy-2.3.5-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:cc8920d2ec5fa99875b670bb86ddeb21e295cb07aa331810d9e486e0b969d946", size = 16093374, upload-time = "2025-11-16T22:51:05.291Z" }, + { url = "https://files.pythonhosted.org/packages/74/a6/54da03253afcbe7a72785ec4da9c69fb7a17710141ff9ac5fcb2e32dbe64/numpy-2.3.5-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:9ee2197ef8c4f0dfe405d835f3b6a14f5fee7782b5de51ba06fb65fc9b36e9f1", size = 18594587, upload-time = "2025-11-16T22:51:08.585Z" }, + { url = "https://files.pythonhosted.org/packages/80/e9/aff53abbdd41b0ecca94285f325aff42357c6b5abc482a3fcb4994290b18/numpy-2.3.5-cp313-cp313t-win32.whl", hash = "sha256:70b37199913c1bd300ff6e2693316c6f869c7ee16378faf10e4f5e3275b299c3", size = 6405940, upload-time = "2025-11-16T22:51:11.541Z" }, + { url = "https://files.pythonhosted.org/packages/d5/81/50613fec9d4de5480de18d4f8ef59ad7e344d497edbef3cfd80f24f98461/numpy-2.3.5-cp313-cp313t-win_amd64.whl", hash = "sha256:b501b5fa195cc9e24fe102f21ec0a44dffc231d2af79950b451e0d99cea02234", size = 12920341, upload-time = "2025-11-16T22:51:14.312Z" }, + { url = "https://files.pythonhosted.org/packages/bb/ab/08fd63b9a74303947f34f0bd7c5903b9c5532c2d287bead5bdf4c556c486/numpy-2.3.5-cp313-cp313t-win_arm64.whl", hash = "sha256:a80afd79f45f3c4a7d341f13acbe058d1ca8ac017c165d3fa0d3de6bc1a079d7", size = 10262507, upload-time = "2025-11-16T22:51:16.846Z" }, + { url = "https://files.pythonhosted.org/packages/ba/97/1a914559c19e32d6b2e233cf9a6a114e67c856d35b1d6babca571a3e880f/numpy-2.3.5-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:bf06bc2af43fa8d32d30fae16ad965663e966b1a3202ed407b84c989c3221e82", size = 16735706, upload-time = "2025-11-16T22:51:19.558Z" }, + { url = "https://files.pythonhosted.org/packages/57/d4/51233b1c1b13ecd796311216ae417796b88b0616cfd8a33ae4536330748a/numpy-2.3.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:052e8c42e0c49d2575621c158934920524f6c5da05a1d3b9bab5d8e259e045f0", size = 12264507, upload-time = "2025-11-16T22:51:22.492Z" }, + { url = "https://files.pythonhosted.org/packages/45/98/2fe46c5c2675b8306d0b4a3ec3494273e93e1226a490f766e84298576956/numpy-2.3.5-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:1ed1ec893cff7040a02c8aa1c8611b94d395590d553f6b53629a4461dc7f7b63", size = 5093049, upload-time = "2025-11-16T22:51:25.171Z" }, + { url = "https://files.pythonhosted.org/packages/ce/0e/0698378989bb0ac5f1660c81c78ab1fe5476c1a521ca9ee9d0710ce54099/numpy-2.3.5-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:2dcd0808a421a482a080f89859a18beb0b3d1e905b81e617a188bd80422d62e9", size = 6626603, upload-time = "2025-11-16T22:51:27Z" }, + { url = "https://files.pythonhosted.org/packages/5e/a6/9ca0eecc489640615642a6cbc0ca9e10df70df38c4d43f5a928ff18d8827/numpy-2.3.5-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:727fd05b57df37dc0bcf1a27767a3d9a78cbbc92822445f32cc3436ba797337b", size = 14262696, upload-time = "2025-11-16T22:51:29.402Z" }, + { url = "https://files.pythonhosted.org/packages/c8/f6/07ec185b90ec9d7217a00eeeed7383b73d7e709dae2a9a021b051542a708/numpy-2.3.5-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fffe29a1ef00883599d1dc2c51aa2e5d80afe49523c261a74933df395c15c520", size = 16597350, upload-time = "2025-11-16T22:51:32.167Z" }, + { url = "https://files.pythonhosted.org/packages/75/37/164071d1dde6a1a84c9b8e5b414fa127981bad47adf3a6b7e23917e52190/numpy-2.3.5-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:8f7f0e05112916223d3f438f293abf0727e1181b5983f413dfa2fefc4098245c", size = 16040190, upload-time = "2025-11-16T22:51:35.403Z" }, + { url = "https://files.pythonhosted.org/packages/08/3c/f18b82a406b04859eb026d204e4e1773eb41c5be58410f41ffa511d114ae/numpy-2.3.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2e2eb32ddb9ccb817d620ac1d8dae7c3f641c1e5f55f531a33e8ab97960a75b8", size = 18536749, upload-time = "2025-11-16T22:51:39.698Z" }, + { url = "https://files.pythonhosted.org/packages/40/79/f82f572bf44cf0023a2fe8588768e23e1592585020d638999f15158609e1/numpy-2.3.5-cp314-cp314-win32.whl", hash = "sha256:66f85ce62c70b843bab1fb14a05d5737741e74e28c7b8b5a064de10142fad248", size = 6335432, upload-time = "2025-11-16T22:51:42.476Z" }, + { url = "https://files.pythonhosted.org/packages/a3/2e/235b4d96619931192c91660805e5e49242389742a7a82c27665021db690c/numpy-2.3.5-cp314-cp314-win_amd64.whl", hash = "sha256:e6a0bc88393d65807d751a614207b7129a310ca4fe76a74e5c7da5fa5671417e", size = 12919388, upload-time = "2025-11-16T22:51:45.275Z" }, + { url = "https://files.pythonhosted.org/packages/07/2b/29fd75ce45d22a39c61aad74f3d718e7ab67ccf839ca8b60866054eb15f8/numpy-2.3.5-cp314-cp314-win_arm64.whl", hash = "sha256:aeffcab3d4b43712bb7a60b65f6044d444e75e563ff6180af8f98dd4b905dfd2", size = 10476651, upload-time = "2025-11-16T22:51:47.749Z" }, + { url = "https://files.pythonhosted.org/packages/17/e1/f6a721234ebd4d87084cfa68d081bcba2f5cfe1974f7de4e0e8b9b2a2ba1/numpy-2.3.5-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:17531366a2e3a9e30762c000f2c43a9aaa05728712e25c11ce1dbe700c53ad41", size = 16834503, upload-time = "2025-11-16T22:51:50.443Z" }, + { url = "https://files.pythonhosted.org/packages/5c/1c/baf7ffdc3af9c356e1c135e57ab7cf8d247931b9554f55c467efe2c69eff/numpy-2.3.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:d21644de1b609825ede2f48be98dfde4656aefc713654eeee280e37cadc4e0ad", size = 12381612, upload-time = "2025-11-16T22:51:53.609Z" }, + { url = "https://files.pythonhosted.org/packages/74/91/f7f0295151407ddc9ba34e699013c32c3c91944f9b35fcf9281163dc1468/numpy-2.3.5-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:c804e3a5aba5460c73955c955bdbd5c08c354954e9270a2c1565f62e866bdc39", size = 5210042, upload-time = "2025-11-16T22:51:56.213Z" }, + { url = "https://files.pythonhosted.org/packages/2e/3b/78aebf345104ec50dd50a4d06ddeb46a9ff5261c33bcc58b1c4f12f85ec2/numpy-2.3.5-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:cc0a57f895b96ec78969c34f682c602bf8da1a0270b09bc65673df2e7638ec20", size = 6724502, upload-time = "2025-11-16T22:51:58.584Z" }, + { url = "https://files.pythonhosted.org/packages/02/c6/7c34b528740512e57ef1b7c8337ab0b4f0bddf34c723b8996c675bc2bc91/numpy-2.3.5-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:900218e456384ea676e24ea6a0417f030a3b07306d29d7ad843957b40a9d8d52", size = 14308962, upload-time = "2025-11-16T22:52:01.698Z" }, + { url = "https://files.pythonhosted.org/packages/80/35/09d433c5262bc32d725bafc619e095b6a6651caf94027a03da624146f655/numpy-2.3.5-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:09a1bea522b25109bf8e6f3027bd810f7c1085c64a0c7ce050c1676ad0ba010b", size = 16655054, upload-time = "2025-11-16T22:52:04.267Z" }, + { url = "https://files.pythonhosted.org/packages/7a/ab/6a7b259703c09a88804fa2430b43d6457b692378f6b74b356155283566ac/numpy-2.3.5-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:04822c00b5fd0323c8166d66c701dc31b7fbd252c100acd708c48f763968d6a3", size = 16091613, upload-time = "2025-11-16T22:52:08.651Z" }, + { url = "https://files.pythonhosted.org/packages/c2/88/330da2071e8771e60d1038166ff9d73f29da37b01ec3eb43cb1427464e10/numpy-2.3.5-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:d6889ec4ec662a1a37eb4b4fb26b6100841804dac55bd9df579e326cdc146227", size = 18591147, upload-time = "2025-11-16T22:52:11.453Z" }, + { url = "https://files.pythonhosted.org/packages/51/41/851c4b4082402d9ea860c3626db5d5df47164a712cb23b54be028b184c1c/numpy-2.3.5-cp314-cp314t-win32.whl", hash = "sha256:93eebbcf1aafdf7e2ddd44c2923e2672e1010bddc014138b229e49725b4d6be5", size = 6479806, upload-time = "2025-11-16T22:52:14.641Z" }, + { url = "https://files.pythonhosted.org/packages/90/30/d48bde1dfd93332fa557cff1972fbc039e055a52021fbef4c2c4b1eefd17/numpy-2.3.5-cp314-cp314t-win_amd64.whl", hash = "sha256:c8a9958e88b65c3b27e22ca2a076311636850b612d6bbfb76e8d156aacde2aaf", size = 13105760, upload-time = "2025-11-16T22:52:17.975Z" }, + { url = "https://files.pythonhosted.org/packages/2d/fd/4b5eb0b3e888d86aee4d198c23acec7d214baaf17ea93c1adec94c9518b9/numpy-2.3.5-cp314-cp314t-win_arm64.whl", hash = "sha256:6203fdf9f3dc5bdaed7319ad8698e685c7a3be10819f41d32a0723e611733b42", size = 10545459, upload-time = "2025-11-16T22:52:20.55Z" }, +] + +[[package]] +name = "openpyxl" +version = "3.1.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "et-xmlfile" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3d/f9/88d94a75de065ea32619465d2f77b29a0469500e99012523b91cc4141cd1/openpyxl-3.1.5.tar.gz", hash = "sha256:cf0e3cf56142039133628b5acffe8ef0c12bc902d2aadd3e0fe5878dc08d1050", size = 186464, upload-time = "2024-06-28T14:03:44.161Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl", hash = "sha256:5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2", size = 250910, upload-time = "2024-06-28T14:03:41.161Z" }, +] + +[[package]] +name = "option" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/15/7a/3622379bd82f70a0b88779566c4847f167ae54103187922b69ad63d3c3b2/option-2.1.0.tar.gz", hash = "sha256:9fe95a231e54724d2382a5124b55cd84b82339edf1d4e88d6977cedffbfeadf1", size = 8042, upload-time = "2022-04-18T15:33:45.856Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b0/e7/a4ece49ebcb33fc43577538f85406598ec93d5675dfb30331ec586351656/option-2.1.0-py3-none-any.whl", hash = "sha256:21ccd9a437dbee0341700367efb68e82065fd7a7dba09f8c3263cf2dc1a2b0e0", size = 11931, upload-time = "2022-04-18T15:33:44.627Z" }, +] + +[[package]] +name = "owlrl" +version = "7.1.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "rdflib" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d1/fc/ce12482d096d65fff01af58f555a6f25e9dbf416fad5d99f91eaab0e11ca/owlrl-7.1.4.tar.gz", hash = "sha256:60bd4067e346b9111f0a2924565afe97ac6595b98b2bbe953928b5113971daf7", size = 44420, upload-time = "2025-07-29T00:17:27.608Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/de/78/f857ff1a7207e967dc5e8414bbcc15e0aa5cf45f693b1d2ebe2afb3eb1ce/owlrl-7.1.4-py3-none-any.whl", hash = "sha256:e78b46020169783345636da93a467d318f18700c483184dd15e885850cf64775", size = 51981, upload-time = "2025-07-29T00:17:26.229Z" }, +] + +[[package]] +name = "packaging" +version = "25.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a1/d4/1fc4078c65507b51b96ca8f8c3ba19e6a61c8253c72794544580a7b6c24d/packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f", size = 165727, upload-time = "2025-04-19T11:48:59.673Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469, upload-time = "2025-04-19T11:48:57.875Z" }, +] + +[[package]] +name = "paginate" +version = "0.5.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ec/46/68dde5b6bc00c1296ec6466ab27dddede6aec9af1b99090e1107091b3b84/paginate-0.5.7.tar.gz", hash = "sha256:22bd083ab41e1a8b4f3690544afb2c60c25e5c9a63a30fa2f483f6c60c8e5945", size = 19252, upload-time = "2024-08-25T14:17:24.139Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/90/96/04b8e52da071d28f5e21a805b19cb9390aa17a47462ac87f5e2696b9566d/paginate-0.5.7-py2.py3-none-any.whl", hash = "sha256:b885e2af73abcf01d9559fd5216b57ef722f8c42affbb63942377668e35c7591", size = 13746, upload-time = "2024-08-25T14:17:22.55Z" }, +] + +[[package]] +name = "pandas" +version = "2.3.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "python-dateutil" }, + { name = "pytz" }, + { name = "tzdata" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/33/01/d40b85317f86cf08d853a4f495195c73815fdf205eef3993821720274518/pandas-2.3.3.tar.gz", hash = "sha256:e05e1af93b977f7eafa636d043f9f94c7ee3ac81af99c13508215942e64c993b", size = 4495223, upload-time = "2025-09-29T23:34:51.853Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cd/4b/18b035ee18f97c1040d94debd8f2e737000ad70ccc8f5513f4eefad75f4b/pandas-2.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:56851a737e3470de7fa88e6131f41281ed440d29a9268dcbf0002da5ac366713", size = 11544671, upload-time = "2025-09-29T23:21:05.024Z" }, + { url = "https://files.pythonhosted.org/packages/31/94/72fac03573102779920099bcac1c3b05975c2cb5f01eac609faf34bed1ca/pandas-2.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bdcd9d1167f4885211e401b3036c0c8d9e274eee67ea8d0758a256d60704cfe8", size = 10680807, upload-time = "2025-09-29T23:21:15.979Z" }, + { url = "https://files.pythonhosted.org/packages/16/87/9472cf4a487d848476865321de18cc8c920b8cab98453ab79dbbc98db63a/pandas-2.3.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e32e7cc9af0f1cc15548288a51a3b681cc2a219faa838e995f7dc53dbab1062d", size = 11709872, upload-time = "2025-09-29T23:21:27.165Z" }, + { url = "https://files.pythonhosted.org/packages/15/07/284f757f63f8a8d69ed4472bfd85122bd086e637bf4ed09de572d575a693/pandas-2.3.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:318d77e0e42a628c04dc56bcef4b40de67918f7041c2b061af1da41dcff670ac", size = 12306371, upload-time = "2025-09-29T23:21:40.532Z" }, + { url = "https://files.pythonhosted.org/packages/33/81/a3afc88fca4aa925804a27d2676d22dcd2031c2ebe08aabd0ae55b9ff282/pandas-2.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4e0a175408804d566144e170d0476b15d78458795bb18f1304fb94160cabf40c", size = 12765333, upload-time = "2025-09-29T23:21:55.77Z" }, + { url = "https://files.pythonhosted.org/packages/8d/0f/b4d4ae743a83742f1153464cf1a8ecfafc3ac59722a0b5c8602310cb7158/pandas-2.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:93c2d9ab0fc11822b5eece72ec9587e172f63cff87c00b062f6e37448ced4493", size = 13418120, upload-time = "2025-09-29T23:22:10.109Z" }, + { url = "https://files.pythonhosted.org/packages/4f/c7/e54682c96a895d0c808453269e0b5928a07a127a15704fedb643e9b0a4c8/pandas-2.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:f8bfc0e12dc78f777f323f55c58649591b2cd0c43534e8355c51d3fede5f4dee", size = 10993991, upload-time = "2025-09-29T23:25:04.889Z" }, + { url = "https://files.pythonhosted.org/packages/f9/ca/3f8d4f49740799189e1395812f3bf23b5e8fc7c190827d55a610da72ce55/pandas-2.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:75ea25f9529fdec2d2e93a42c523962261e567d250b0013b16210e1d40d7c2e5", size = 12048227, upload-time = "2025-09-29T23:22:24.343Z" }, + { url = "https://files.pythonhosted.org/packages/0e/5a/f43efec3e8c0cc92c4663ccad372dbdff72b60bdb56b2749f04aa1d07d7e/pandas-2.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:74ecdf1d301e812db96a465a525952f4dde225fdb6d8e5a521d47e1f42041e21", size = 11411056, upload-time = "2025-09-29T23:22:37.762Z" }, + { url = "https://files.pythonhosted.org/packages/46/b1/85331edfc591208c9d1a63a06baa67b21d332e63b7a591a5ba42a10bb507/pandas-2.3.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6435cb949cb34ec11cc9860246ccb2fdc9ecd742c12d3304989017d53f039a78", size = 11645189, upload-time = "2025-09-29T23:22:51.688Z" }, + { url = "https://files.pythonhosted.org/packages/44/23/78d645adc35d94d1ac4f2a3c4112ab6f5b8999f4898b8cdf01252f8df4a9/pandas-2.3.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:900f47d8f20860de523a1ac881c4c36d65efcb2eb850e6948140fa781736e110", size = 12121912, upload-time = "2025-09-29T23:23:05.042Z" }, + { url = "https://files.pythonhosted.org/packages/53/da/d10013df5e6aaef6b425aa0c32e1fc1f3e431e4bcabd420517dceadce354/pandas-2.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a45c765238e2ed7d7c608fc5bc4a6f88b642f2f01e70c0c23d2224dd21829d86", size = 12712160, upload-time = "2025-09-29T23:23:28.57Z" }, + { url = "https://files.pythonhosted.org/packages/bd/17/e756653095a083d8a37cbd816cb87148debcfcd920129b25f99dd8d04271/pandas-2.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c4fc4c21971a1a9f4bdb4c73978c7f7256caa3e62b323f70d6cb80db583350bc", size = 13199233, upload-time = "2025-09-29T23:24:24.876Z" }, + { url = "https://files.pythonhosted.org/packages/04/fd/74903979833db8390b73b3a8a7d30d146d710bd32703724dd9083950386f/pandas-2.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:ee15f284898e7b246df8087fc82b87b01686f98ee67d85a17b7ab44143a3a9a0", size = 11540635, upload-time = "2025-09-29T23:25:52.486Z" }, + { url = "https://files.pythonhosted.org/packages/21/00/266d6b357ad5e6d3ad55093a7e8efc7dd245f5a842b584db9f30b0f0a287/pandas-2.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1611aedd912e1ff81ff41c745822980c49ce4a7907537be8692c8dbc31924593", size = 10759079, upload-time = "2025-09-29T23:26:33.204Z" }, + { url = "https://files.pythonhosted.org/packages/ca/05/d01ef80a7a3a12b2f8bbf16daba1e17c98a2f039cbc8e2f77a2c5a63d382/pandas-2.3.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d2cefc361461662ac48810cb14365a365ce864afe85ef1f447ff5a1e99ea81c", size = 11814049, upload-time = "2025-09-29T23:27:15.384Z" }, + { url = "https://files.pythonhosted.org/packages/15/b2/0e62f78c0c5ba7e3d2c5945a82456f4fac76c480940f805e0b97fcbc2f65/pandas-2.3.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ee67acbbf05014ea6c763beb097e03cd629961c8a632075eeb34247120abcb4b", size = 12332638, upload-time = "2025-09-29T23:27:51.625Z" }, + { url = "https://files.pythonhosted.org/packages/c5/33/dd70400631b62b9b29c3c93d2feee1d0964dc2bae2e5ad7a6c73a7f25325/pandas-2.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c46467899aaa4da076d5abc11084634e2d197e9460643dd455ac3db5856b24d6", size = 12886834, upload-time = "2025-09-29T23:28:21.289Z" }, + { url = "https://files.pythonhosted.org/packages/d3/18/b5d48f55821228d0d2692b34fd5034bb185e854bdb592e9c640f6290e012/pandas-2.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6253c72c6a1d990a410bc7de641d34053364ef8bcd3126f7e7450125887dffe3", size = 13409925, upload-time = "2025-09-29T23:28:58.261Z" }, + { url = "https://files.pythonhosted.org/packages/a6/3d/124ac75fcd0ecc09b8fdccb0246ef65e35b012030defb0e0eba2cbbbe948/pandas-2.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:1b07204a219b3b7350abaae088f451860223a52cfb8a6c53358e7948735158e5", size = 11109071, upload-time = "2025-09-29T23:32:27.484Z" }, + { url = "https://files.pythonhosted.org/packages/89/9c/0e21c895c38a157e0faa1fb64587a9226d6dd46452cac4532d80c3c4a244/pandas-2.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:2462b1a365b6109d275250baaae7b760fd25c726aaca0054649286bcfbb3e8ec", size = 12048504, upload-time = "2025-09-29T23:29:31.47Z" }, + { url = "https://files.pythonhosted.org/packages/d7/82/b69a1c95df796858777b68fbe6a81d37443a33319761d7c652ce77797475/pandas-2.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0242fe9a49aa8b4d78a4fa03acb397a58833ef6199e9aa40a95f027bb3a1b6e7", size = 11410702, upload-time = "2025-09-29T23:29:54.591Z" }, + { url = "https://files.pythonhosted.org/packages/f9/88/702bde3ba0a94b8c73a0181e05144b10f13f29ebfc2150c3a79062a8195d/pandas-2.3.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a21d830e78df0a515db2b3d2f5570610f5e6bd2e27749770e8bb7b524b89b450", size = 11634535, upload-time = "2025-09-29T23:30:21.003Z" }, + { url = "https://files.pythonhosted.org/packages/a4/1e/1bac1a839d12e6a82ec6cb40cda2edde64a2013a66963293696bbf31fbbb/pandas-2.3.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e3ebdb170b5ef78f19bfb71b0dc5dc58775032361fa188e814959b74d726dd5", size = 12121582, upload-time = "2025-09-29T23:30:43.391Z" }, + { url = "https://files.pythonhosted.org/packages/44/91/483de934193e12a3b1d6ae7c8645d083ff88dec75f46e827562f1e4b4da6/pandas-2.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d051c0e065b94b7a3cea50eb1ec32e912cd96dba41647eb24104b6c6c14c5788", size = 12699963, upload-time = "2025-09-29T23:31:10.009Z" }, + { url = "https://files.pythonhosted.org/packages/70/44/5191d2e4026f86a2a109053e194d3ba7a31a2d10a9c2348368c63ed4e85a/pandas-2.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3869faf4bd07b3b66a9f462417d0ca3a9df29a9f6abd5d0d0dbab15dac7abe87", size = 13202175, upload-time = "2025-09-29T23:31:59.173Z" }, +] + +[[package]] +name = "pandas-stubs" +version = "2.3.3.251201" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "types-pytz" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ee/a6/491b2af2cb3ee232765a73fb273a44cc1ac33b154f7745b2df2ee1dc4d01/pandas_stubs-2.3.3.251201.tar.gz", hash = "sha256:7a980f4f08cff2a6d7e4c6d6d26f4c5fcdb82a6f6531489b2f75c81567fe4536", size = 107787, upload-time = "2025-12-01T18:29:22.403Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e2/68/78a3c253f146254b8e2c19f4a4768f272e12ef11001d9b45ec7b165db054/pandas_stubs-2.3.3.251201-py3-none-any.whl", hash = "sha256:eb5c9b6138bd8492fd74a47b09c9497341a278fcfbc8633ea4b35b230ebf4be5", size = 164638, upload-time = "2025-12-01T18:29:21.006Z" }, +] + +[[package]] +name = "pathspec" +version = "0.12.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ca/bc/f35b8446f4531a7cb215605d100cd88b7ac6f44ab3fc94870c120ab3adbf/pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712", size = 51043, upload-time = "2023-12-10T22:30:45Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08", size = 31191, upload-time = "2023-12-10T22:30:43.14Z" }, +] + +[[package]] +name = "pillow" +version = "12.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5a/b0/cace85a1b0c9775a9f8f5d5423c8261c858760e2466c79b2dd184638b056/pillow-12.0.0.tar.gz", hash = "sha256:87d4f8125c9988bfbed67af47dd7a953e2fc7b0cc1e7800ec6d2080d490bb353", size = 47008828, upload-time = "2025-10-15T18:24:14.008Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/f2/de993bb2d21b33a98d031ecf6a978e4b61da207bef02f7b43093774c480d/pillow-12.0.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:0869154a2d0546545cde61d1789a6524319fc1897d9ee31218eae7a60ccc5643", size = 4045493, upload-time = "2025-10-15T18:22:25.758Z" }, + { url = "https://files.pythonhosted.org/packages/0e/b6/bc8d0c4c9f6f111a783d045310945deb769b806d7574764234ffd50bc5ea/pillow-12.0.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:a7921c5a6d31b3d756ec980f2f47c0cfdbce0fc48c22a39347a895f41f4a6ea4", size = 4120461, upload-time = "2025-10-15T18:22:27.286Z" }, + { url = "https://files.pythonhosted.org/packages/5d/57/d60d343709366a353dc56adb4ee1e7d8a2cc34e3fbc22905f4167cfec119/pillow-12.0.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:1ee80a59f6ce048ae13cda1abf7fbd2a34ab9ee7d401c46be3ca685d1999a399", size = 3576912, upload-time = "2025-10-15T18:22:28.751Z" }, + { url = "https://files.pythonhosted.org/packages/a4/a4/a0a31467e3f83b94d37568294b01d22b43ae3c5d85f2811769b9c66389dd/pillow-12.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c50f36a62a22d350c96e49ad02d0da41dbd17ddc2e29750dbdba4323f85eb4a5", size = 5249132, upload-time = "2025-10-15T18:22:30.641Z" }, + { url = "https://files.pythonhosted.org/packages/83/06/48eab21dd561de2914242711434c0c0eb992ed08ff3f6107a5f44527f5e9/pillow-12.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5193fde9a5f23c331ea26d0cf171fbf67e3f247585f50c08b3e205c7aeb4589b", size = 4650099, upload-time = "2025-10-15T18:22:32.73Z" }, + { url = "https://files.pythonhosted.org/packages/fc/bd/69ed99fd46a8dba7c1887156d3572fe4484e3f031405fcc5a92e31c04035/pillow-12.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:bde737cff1a975b70652b62d626f7785e0480918dece11e8fef3c0cf057351c3", size = 6230808, upload-time = "2025-10-15T18:22:34.337Z" }, + { url = "https://files.pythonhosted.org/packages/ea/94/8fad659bcdbf86ed70099cb60ae40be6acca434bbc8c4c0d4ef356d7e0de/pillow-12.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a6597ff2b61d121172f5844b53f21467f7082f5fb385a9a29c01414463f93b07", size = 8037804, upload-time = "2025-10-15T18:22:36.402Z" }, + { url = "https://files.pythonhosted.org/packages/20/39/c685d05c06deecfd4e2d1950e9a908aa2ca8bc4e6c3b12d93b9cafbd7837/pillow-12.0.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0b817e7035ea7f6b942c13aa03bb554fc44fea70838ea21f8eb31c638326584e", size = 6345553, upload-time = "2025-10-15T18:22:38.066Z" }, + { url = "https://files.pythonhosted.org/packages/38/57/755dbd06530a27a5ed74f8cb0a7a44a21722ebf318edbe67ddbd7fb28f88/pillow-12.0.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f4f1231b7dec408e8670264ce63e9c71409d9583dd21d32c163e25213ee2a344", size = 7037729, upload-time = "2025-10-15T18:22:39.769Z" }, + { url = "https://files.pythonhosted.org/packages/ca/b6/7e94f4c41d238615674d06ed677c14883103dce1c52e4af16f000338cfd7/pillow-12.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6e51b71417049ad6ab14c49608b4a24d8fb3fe605e5dfabfe523b58064dc3d27", size = 6459789, upload-time = "2025-10-15T18:22:41.437Z" }, + { url = "https://files.pythonhosted.org/packages/9c/14/4448bb0b5e0f22dd865290536d20ec8a23b64e2d04280b89139f09a36bb6/pillow-12.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d120c38a42c234dc9a8c5de7ceaaf899cf33561956acb4941653f8bdc657aa79", size = 7130917, upload-time = "2025-10-15T18:22:43.152Z" }, + { url = "https://files.pythonhosted.org/packages/dd/ca/16c6926cc1c015845745d5c16c9358e24282f1e588237a4c36d2b30f182f/pillow-12.0.0-cp313-cp313-win32.whl", hash = "sha256:4cc6b3b2efff105c6a1656cfe59da4fdde2cda9af1c5e0b58529b24525d0a098", size = 6302391, upload-time = "2025-10-15T18:22:44.753Z" }, + { url = "https://files.pythonhosted.org/packages/6d/2a/dd43dcfd6dae9b6a49ee28a8eedb98c7d5ff2de94a5d834565164667b97b/pillow-12.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:4cf7fed4b4580601c4345ceb5d4cbf5a980d030fd5ad07c4d2ec589f95f09905", size = 7007477, upload-time = "2025-10-15T18:22:46.838Z" }, + { url = "https://files.pythonhosted.org/packages/77/f0/72ea067f4b5ae5ead653053212af05ce3705807906ba3f3e8f58ddf617e6/pillow-12.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:9f0b04c6b8584c2c193babcccc908b38ed29524b29dd464bc8801bf10d746a3a", size = 2435918, upload-time = "2025-10-15T18:22:48.399Z" }, + { url = "https://files.pythonhosted.org/packages/f5/5e/9046b423735c21f0487ea6cb5b10f89ea8f8dfbe32576fe052b5ba9d4e5b/pillow-12.0.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:7fa22993bac7b77b78cae22bad1e2a987ddf0d9015c63358032f84a53f23cdc3", size = 5251406, upload-time = "2025-10-15T18:22:49.905Z" }, + { url = "https://files.pythonhosted.org/packages/12/66/982ceebcdb13c97270ef7a56c3969635b4ee7cd45227fa707c94719229c5/pillow-12.0.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f135c702ac42262573fe9714dfe99c944b4ba307af5eb507abef1667e2cbbced", size = 4653218, upload-time = "2025-10-15T18:22:51.587Z" }, + { url = "https://files.pythonhosted.org/packages/16/b3/81e625524688c31859450119bf12674619429cab3119eec0e30a7a1029cb/pillow-12.0.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:c85de1136429c524e55cfa4e033b4a7940ac5c8ee4d9401cc2d1bf48154bbc7b", size = 6266564, upload-time = "2025-10-15T18:22:53.215Z" }, + { url = "https://files.pythonhosted.org/packages/98/59/dfb38f2a41240d2408096e1a76c671d0a105a4a8471b1871c6902719450c/pillow-12.0.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:38df9b4bfd3db902c9c2bd369bcacaf9d935b2fff73709429d95cc41554f7b3d", size = 8069260, upload-time = "2025-10-15T18:22:54.933Z" }, + { url = "https://files.pythonhosted.org/packages/dc/3d/378dbea5cd1874b94c312425ca77b0f47776c78e0df2df751b820c8c1d6c/pillow-12.0.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7d87ef5795da03d742bf49439f9ca4d027cde49c82c5371ba52464aee266699a", size = 6379248, upload-time = "2025-10-15T18:22:56.605Z" }, + { url = "https://files.pythonhosted.org/packages/84/b0/d525ef47d71590f1621510327acec75ae58c721dc071b17d8d652ca494d8/pillow-12.0.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:aff9e4d82d082ff9513bdd6acd4f5bd359f5b2c870907d2b0a9c5e10d40c88fe", size = 7066043, upload-time = "2025-10-15T18:22:58.53Z" }, + { url = "https://files.pythonhosted.org/packages/61/2c/aced60e9cf9d0cde341d54bf7932c9ffc33ddb4a1595798b3a5150c7ec4e/pillow-12.0.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:8d8ca2b210ada074d57fcee40c30446c9562e542fc46aedc19baf758a93532ee", size = 6490915, upload-time = "2025-10-15T18:23:00.582Z" }, + { url = "https://files.pythonhosted.org/packages/ef/26/69dcb9b91f4e59f8f34b2332a4a0a951b44f547c4ed39d3e4dcfcff48f89/pillow-12.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:99a7f72fb6249302aa62245680754862a44179b545ded638cf1fef59befb57ef", size = 7157998, upload-time = "2025-10-15T18:23:02.627Z" }, + { url = "https://files.pythonhosted.org/packages/61/2b/726235842220ca95fa441ddf55dd2382b52ab5b8d9c0596fe6b3f23dafe8/pillow-12.0.0-cp313-cp313t-win32.whl", hash = "sha256:4078242472387600b2ce8d93ade8899c12bf33fa89e55ec89fe126e9d6d5d9e9", size = 6306201, upload-time = "2025-10-15T18:23:04.709Z" }, + { url = "https://files.pythonhosted.org/packages/c0/3d/2afaf4e840b2df71344ababf2f8edd75a705ce500e5dc1e7227808312ae1/pillow-12.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:2c54c1a783d6d60595d3514f0efe9b37c8808746a66920315bfd34a938d7994b", size = 7013165, upload-time = "2025-10-15T18:23:06.46Z" }, + { url = "https://files.pythonhosted.org/packages/6f/75/3fa09aa5cf6ed04bee3fa575798ddf1ce0bace8edb47249c798077a81f7f/pillow-12.0.0-cp313-cp313t-win_arm64.whl", hash = "sha256:26d9f7d2b604cd23aba3e9faf795787456ac25634d82cd060556998e39c6fa47", size = 2437834, upload-time = "2025-10-15T18:23:08.194Z" }, + { url = "https://files.pythonhosted.org/packages/54/2a/9a8c6ba2c2c07b71bec92cf63e03370ca5e5f5c5b119b742bcc0cde3f9c5/pillow-12.0.0-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:beeae3f27f62308f1ddbcfb0690bf44b10732f2ef43758f169d5e9303165d3f9", size = 4045531, upload-time = "2025-10-15T18:23:10.121Z" }, + { url = "https://files.pythonhosted.org/packages/84/54/836fdbf1bfb3d66a59f0189ff0b9f5f666cee09c6188309300df04ad71fa/pillow-12.0.0-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:d4827615da15cd59784ce39d3388275ec093ae3ee8d7f0c089b76fa87af756c2", size = 4120554, upload-time = "2025-10-15T18:23:12.14Z" }, + { url = "https://files.pythonhosted.org/packages/0d/cd/16aec9f0da4793e98e6b54778a5fbce4f375c6646fe662e80600b8797379/pillow-12.0.0-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:3e42edad50b6909089750e65c91aa09aaf1e0a71310d383f11321b27c224ed8a", size = 3576812, upload-time = "2025-10-15T18:23:13.962Z" }, + { url = "https://files.pythonhosted.org/packages/f6/b7/13957fda356dc46339298b351cae0d327704986337c3c69bb54628c88155/pillow-12.0.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:e5d8efac84c9afcb40914ab49ba063d94f5dbdf5066db4482c66a992f47a3a3b", size = 5252689, upload-time = "2025-10-15T18:23:15.562Z" }, + { url = "https://files.pythonhosted.org/packages/fc/f5/eae31a306341d8f331f43edb2e9122c7661b975433de5e447939ae61c5da/pillow-12.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:266cd5f2b63ff316d5a1bba46268e603c9caf5606d44f38c2873c380950576ad", size = 4650186, upload-time = "2025-10-15T18:23:17.379Z" }, + { url = "https://files.pythonhosted.org/packages/86/62/2a88339aa40c4c77e79108facbd307d6091e2c0eb5b8d3cf4977cfca2fe6/pillow-12.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:58eea5ebe51504057dd95c5b77d21700b77615ab0243d8152793dc00eb4faf01", size = 6230308, upload-time = "2025-10-15T18:23:18.971Z" }, + { url = "https://files.pythonhosted.org/packages/c7/33/5425a8992bcb32d1cb9fa3dd39a89e613d09a22f2c8083b7bf43c455f760/pillow-12.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f13711b1a5ba512d647a0e4ba79280d3a9a045aaf7e0cc6fbe96b91d4cdf6b0c", size = 8039222, upload-time = "2025-10-15T18:23:20.909Z" }, + { url = "https://files.pythonhosted.org/packages/d8/61/3f5d3b35c5728f37953d3eec5b5f3e77111949523bd2dd7f31a851e50690/pillow-12.0.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6846bd2d116ff42cba6b646edf5bf61d37e5cbd256425fa089fee4ff5c07a99e", size = 6346657, upload-time = "2025-10-15T18:23:23.077Z" }, + { url = "https://files.pythonhosted.org/packages/3a/be/ee90a3d79271227e0f0a33c453531efd6ed14b2e708596ba5dd9be948da3/pillow-12.0.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c98fa880d695de164b4135a52fd2e9cd7b7c90a9d8ac5e9e443a24a95ef9248e", size = 7038482, upload-time = "2025-10-15T18:23:25.005Z" }, + { url = "https://files.pythonhosted.org/packages/44/34/a16b6a4d1ad727de390e9bd9f19f5f669e079e5826ec0f329010ddea492f/pillow-12.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:fa3ed2a29a9e9d2d488b4da81dcb54720ac3104a20bf0bd273f1e4648aff5af9", size = 6461416, upload-time = "2025-10-15T18:23:27.009Z" }, + { url = "https://files.pythonhosted.org/packages/b6/39/1aa5850d2ade7d7ba9f54e4e4c17077244ff7a2d9e25998c38a29749eb3f/pillow-12.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d034140032870024e6b9892c692fe2968493790dd57208b2c37e3fb35f6df3ab", size = 7131584, upload-time = "2025-10-15T18:23:29.752Z" }, + { url = "https://files.pythonhosted.org/packages/bf/db/4fae862f8fad0167073a7733973bfa955f47e2cac3dc3e3e6257d10fab4a/pillow-12.0.0-cp314-cp314-win32.whl", hash = "sha256:1b1b133e6e16105f524a8dec491e0586d072948ce15c9b914e41cdadd209052b", size = 6400621, upload-time = "2025-10-15T18:23:32.06Z" }, + { url = "https://files.pythonhosted.org/packages/2b/24/b350c31543fb0107ab2599464d7e28e6f856027aadda995022e695313d94/pillow-12.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:8dc232e39d409036af549c86f24aed8273a40ffa459981146829a324e0848b4b", size = 7142916, upload-time = "2025-10-15T18:23:34.71Z" }, + { url = "https://files.pythonhosted.org/packages/0f/9b/0ba5a6fd9351793996ef7487c4fdbde8d3f5f75dbedc093bb598648fddf0/pillow-12.0.0-cp314-cp314-win_arm64.whl", hash = "sha256:d52610d51e265a51518692045e372a4c363056130d922a7351429ac9f27e70b0", size = 2523836, upload-time = "2025-10-15T18:23:36.967Z" }, + { url = "https://files.pythonhosted.org/packages/f5/7a/ceee0840aebc579af529b523d530840338ecf63992395842e54edc805987/pillow-12.0.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:1979f4566bb96c1e50a62d9831e2ea2d1211761e5662afc545fa766f996632f6", size = 5255092, upload-time = "2025-10-15T18:23:38.573Z" }, + { url = "https://files.pythonhosted.org/packages/44/76/20776057b4bfd1aef4eeca992ebde0f53a4dce874f3ae693d0ec90a4f79b/pillow-12.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:b2e4b27a6e15b04832fe9bf292b94b5ca156016bbc1ea9c2c20098a0320d6cf6", size = 4653158, upload-time = "2025-10-15T18:23:40.238Z" }, + { url = "https://files.pythonhosted.org/packages/82/3f/d9ff92ace07be8836b4e7e87e6a4c7a8318d47c2f1463ffcf121fc57d9cb/pillow-12.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:fb3096c30df99fd01c7bf8e544f392103d0795b9f98ba71a8054bcbf56b255f1", size = 6267882, upload-time = "2025-10-15T18:23:42.434Z" }, + { url = "https://files.pythonhosted.org/packages/9f/7a/4f7ff87f00d3ad33ba21af78bfcd2f032107710baf8280e3722ceec28cda/pillow-12.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7438839e9e053ef79f7112c881cef684013855016f928b168b81ed5835f3e75e", size = 8071001, upload-time = "2025-10-15T18:23:44.29Z" }, + { url = "https://files.pythonhosted.org/packages/75/87/fcea108944a52dad8cca0715ae6247e271eb80459364a98518f1e4f480c1/pillow-12.0.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5d5c411a8eaa2299322b647cd932586b1427367fd3184ffbb8f7a219ea2041ca", size = 6380146, upload-time = "2025-10-15T18:23:46.065Z" }, + { url = "https://files.pythonhosted.org/packages/91/52/0d31b5e571ef5fd111d2978b84603fce26aba1b6092f28e941cb46570745/pillow-12.0.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d7e091d464ac59d2c7ad8e7e08105eaf9dafbc3883fd7265ffccc2baad6ac925", size = 7067344, upload-time = "2025-10-15T18:23:47.898Z" }, + { url = "https://files.pythonhosted.org/packages/7b/f4/2dd3d721f875f928d48e83bb30a434dee75a2531bca839bb996bb0aa5a91/pillow-12.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:792a2c0be4dcc18af9d4a2dfd8a11a17d5e25274a1062b0ec1c2d79c76f3e7f8", size = 6491864, upload-time = "2025-10-15T18:23:49.607Z" }, + { url = "https://files.pythonhosted.org/packages/30/4b/667dfcf3d61fc309ba5a15b141845cece5915e39b99c1ceab0f34bf1d124/pillow-12.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:afbefa430092f71a9593a99ab6a4e7538bc9eabbf7bf94f91510d3503943edc4", size = 7158911, upload-time = "2025-10-15T18:23:51.351Z" }, + { url = "https://files.pythonhosted.org/packages/a2/2f/16cabcc6426c32218ace36bf0d55955e813f2958afddbf1d391849fee9d1/pillow-12.0.0-cp314-cp314t-win32.whl", hash = "sha256:3830c769decf88f1289680a59d4f4c46c72573446352e2befec9a8512104fa52", size = 6408045, upload-time = "2025-10-15T18:23:53.177Z" }, + { url = "https://files.pythonhosted.org/packages/35/73/e29aa0c9c666cf787628d3f0dcf379f4791fba79f4936d02f8b37165bdf8/pillow-12.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:905b0365b210c73afb0ebe9101a32572152dfd1c144c7e28968a331b9217b94a", size = 7148282, upload-time = "2025-10-15T18:23:55.316Z" }, + { url = "https://files.pythonhosted.org/packages/c1/70/6b41bdcddf541b437bbb9f47f94d2db5d9ddef6c37ccab8c9107743748a4/pillow-12.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:99353a06902c2e43b43e8ff74ee65a7d90307d82370604746738a1e0661ccca7", size = 2525630, upload-time = "2025-10-15T18:23:57.149Z" }, +] + +[[package]] +name = "platformdirs" +version = "4.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/61/33/9611380c2bdb1225fdef633e2a9610622310fed35ab11dac9620972ee088/platformdirs-4.5.0.tar.gz", hash = "sha256:70ddccdd7c99fc5942e9fc25636a8b34d04c24b335100223152c2803e4063312", size = 21632, upload-time = "2025-10-08T17:44:48.791Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/73/cb/ac7874b3e5d58441674fb70742e6c374b28b0c7cb988d37d991cde47166c/platformdirs-4.5.0-py3-none-any.whl", hash = "sha256:e578a81bb873cbb89a41fcc904c7ef523cc18284b7e3b3ccf06aca1403b7ebd3", size = 18651, upload-time = "2025-10-08T17:44:47.223Z" }, +] + +[[package]] +name = "pyasn1" +version = "0.6.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ba/e9/01f1a64245b89f039897cb0130016d79f77d52669aae6ee7b159a6c4c018/pyasn1-0.6.1.tar.gz", hash = "sha256:6f580d2bdd84365380830acf45550f2511469f673cb4a5ae3857a3170128b034", size = 145322, upload-time = "2024-09-10T22:41:42.55Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c8/f1/d6a797abb14f6283c0ddff96bbdd46937f64122b8c925cab503dd37f8214/pyasn1-0.6.1-py3-none-any.whl", hash = "sha256:0d632f46f2ba09143da3a8afe9e33fb6f92fa2320ab7e886e2d0f7672af84629", size = 83135, upload-time = "2024-09-11T16:00:36.122Z" }, +] + +[[package]] +name = "pycparser" +version = "2.23" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fe/cf/d2d3b9f5699fb1e4615c8e32ff220203e43b248e1dfcc6736ad9057731ca/pycparser-2.23.tar.gz", hash = "sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2", size = 173734, upload-time = "2025-09-09T13:23:47.91Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/e3/59cd50310fc9b59512193629e1984c1f95e5c8ae6e5d8c69532ccc65a7fe/pycparser-2.23-py3-none-any.whl", hash = "sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934", size = 118140, upload-time = "2025-09-09T13:23:46.651Z" }, +] + +[[package]] +name = "pygments" +version = "2.19.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b0/77/a5b8c569bf593b0140bde72ea885a803b82086995367bf2037de0159d924/pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887", size = 4968631, upload-time = "2025-06-21T13:39:12.283Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size = 1225217, upload-time = "2025-06-21T13:39:07.939Z" }, +] + +[[package]] +name = "pymdown-extensions" +version = "10.17.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown" }, + { name = "pyyaml" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/25/6d/af5378dbdb379fddd9a277f8b9888c027db480cde70028669ebd009d642a/pymdown_extensions-10.17.2.tar.gz", hash = "sha256:26bb3d7688e651606260c90fb46409fbda70bf9fdc3623c7868643a1aeee4713", size = 847344, upload-time = "2025-11-26T15:43:57.004Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/93/78/b93cb80bd673bdc9f6ede63d8eb5b4646366953df15667eb3603be57a2b1/pymdown_extensions-10.17.2-py3-none-any.whl", hash = "sha256:bffae79a2e8b9e44aef0d813583a8fea63457b7a23643a43988055b7b79b4992", size = 266556, upload-time = "2025-11-26T15:43:55.162Z" }, +] + +[[package]] +name = "pyparsing" +version = "3.2.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f2/a5/181488fc2b9d093e3972d2a472855aae8a03f000592dbfce716a512b3359/pyparsing-3.2.5.tar.gz", hash = "sha256:2df8d5b7b2802ef88e8d016a2eb9c7aeaa923529cd251ed0fe4608275d4105b6", size = 1099274, upload-time = "2025-09-21T04:11:06.277Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/10/5e/1aa9a93198c6b64513c9d7752de7422c06402de6600a8767da1524f9570b/pyparsing-3.2.5-py3-none-any.whl", hash = "sha256:e38a4f02064cf41fe6593d328d0512495ad1f3d8a91c4f73fc401b3079a59a5e", size = 113890, upload-time = "2025-09-21T04:11:04.117Z" }, +] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" }, +] + +[[package]] +name = "pytz" +version = "2025.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f8/bf/abbd3cdfb8fbc7fb3d4d38d320f2441b1e7cbe29be4f23797b4a2b5d8aac/pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3", size = 320884, upload-time = "2025-03-25T02:25:00.538Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00", size = 509225, upload-time = "2025-03-25T02:24:58.468Z" }, +] + +[[package]] +name = "pyyaml" +version = "6.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8", size = 181669, upload-time = "2025-09-25T21:32:23.673Z" }, + { url = "https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", size = 173252, upload-time = "2025-09-25T21:32:25.149Z" }, + { url = "https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", size = 767081, upload-time = "2025-09-25T21:32:26.575Z" }, + { url = "https://files.pythonhosted.org/packages/49/1e/a55ca81e949270d5d4432fbbd19dfea5321eda7c41a849d443dc92fd1ff7/pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5", size = 841159, upload-time = "2025-09-25T21:32:27.727Z" }, + { url = "https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6", size = 801626, upload-time = "2025-09-25T21:32:28.878Z" }, + { url = "https://files.pythonhosted.org/packages/f9/11/ba845c23988798f40e52ba45f34849aa8a1f2d4af4b798588010792ebad6/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", size = 753613, upload-time = "2025-09-25T21:32:30.178Z" }, + { url = "https://files.pythonhosted.org/packages/3d/e0/7966e1a7bfc0a45bf0a7fb6b98ea03fc9b8d84fa7f2229e9659680b69ee3/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be", size = 794115, upload-time = "2025-09-25T21:32:31.353Z" }, + { url = "https://files.pythonhosted.org/packages/de/94/980b50a6531b3019e45ddeada0626d45fa85cbe22300844a7983285bed3b/pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26", size = 137427, upload-time = "2025-09-25T21:32:32.58Z" }, + { url = "https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c", size = 154090, upload-time = "2025-09-25T21:32:33.659Z" }, + { url = "https://files.pythonhosted.org/packages/73/e8/2bdf3ca2090f68bb3d75b44da7bbc71843b19c9f2b9cb9b0f4ab7a5a4329/pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb", size = 140246, upload-time = "2025-09-25T21:32:34.663Z" }, + { url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", size = 181814, upload-time = "2025-09-25T21:32:35.712Z" }, + { url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809, upload-time = "2025-09-25T21:32:36.789Z" }, + { url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454, upload-time = "2025-09-25T21:32:37.966Z" }, + { url = "https://files.pythonhosted.org/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", size = 836355, upload-time = "2025-09-25T21:32:39.178Z" }, + { url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", size = 794175, upload-time = "2025-09-25T21:32:40.865Z" }, + { url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228, upload-time = "2025-09-25T21:32:42.084Z" }, + { url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", size = 789194, upload-time = "2025-09-25T21:32:43.362Z" }, + { url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", size = 156429, upload-time = "2025-09-25T21:32:57.844Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", size = 143912, upload-time = "2025-09-25T21:32:59.247Z" }, + { url = "https://files.pythonhosted.org/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", size = 189108, upload-time = "2025-09-25T21:32:44.377Z" }, + { url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", size = 183641, upload-time = "2025-09-25T21:32:45.407Z" }, + { url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901, upload-time = "2025-09-25T21:32:48.83Z" }, + { url = "https://files.pythonhosted.org/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", size = 861132, upload-time = "2025-09-25T21:32:50.149Z" }, + { url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", size = 839261, upload-time = "2025-09-25T21:32:51.808Z" }, + { url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272, upload-time = "2025-09-25T21:32:52.941Z" }, + { url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923, upload-time = "2025-09-25T21:32:54.537Z" }, + { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062, upload-time = "2025-09-25T21:32:55.767Z" }, + { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z" }, +] + +[[package]] +name = "pyyaml-env-tag" +version = "1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyyaml" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/eb/2e/79c822141bfd05a853236b504869ebc6b70159afc570e1d5a20641782eaa/pyyaml_env_tag-1.1.tar.gz", hash = "sha256:2eb38b75a2d21ee0475d6d97ec19c63287a7e140231e4214969d0eac923cd7ff", size = 5737, upload-time = "2025-05-13T15:24:01.64Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl", hash = "sha256:17109e1a528561e32f026364712fee1264bc2ea6715120891174ed1b980d2e04", size = 4722, upload-time = "2025-05-13T15:23:59.629Z" }, +] + +[[package]] +name = "rdflib" +version = "7.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyparsing" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ec/1b/4cd9a29841951371304828d13282e27a5f25993702c7c87dcb7e0604bd25/rdflib-7.5.0.tar.gz", hash = "sha256:663083443908b1830e567350d72e74d9948b310f827966358d76eebdc92bf592", size = 4903859, upload-time = "2025-11-28T05:51:54.562Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b9/20/35d2baebacf357b562bd081936b66cd845775442973cb033a377fd639a84/rdflib-7.5.0-py3-none-any.whl", hash = "sha256:b011dfc40d0fc8a44252e906dcd8fc806a7859bc231be190c37e9568a31ac572", size = 587215, upload-time = "2025-11-28T05:51:38.178Z" }, +] + +[[package]] +name = "requests" +version = "2.32.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c9/74/b3ff8e6c8446842c3f5c837e9c3dfcfe2018ea6ecef224c710c85ef728f4/requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf", size = 134517, upload-time = "2025-08-18T20:46:02.573Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6", size = 64738, upload-time = "2025-08-18T20:46:00.542Z" }, +] + +[[package]] +name = "result" +version = "0.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a3/47/2175be65744aa4d8419c27bd3a7a7d65af5bcad7a4dc6a812c00778754f0/result-0.17.0.tar.gz", hash = "sha256:b73da420c0cb1a3bf741dbd41ff96dedafaad6a1b3ef437a9e33e380bb0d91cf", size = 20180, upload-time = "2024-06-02T16:39:54.51Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e2/90/19110ce9374c3db619e2df0816f2c58e4ddc5cdad5f7284cd81d8b30b7cb/result-0.17.0-py3-none-any.whl", hash = "sha256:49fd668b4951ad15800b8ccefd98b6b94effc789607e19c65064b775570933e8", size = 11689, upload-time = "2024-06-02T16:39:52.715Z" }, +] + +[[package]] +name = "s3transfer" +version = "0.16.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "botocore" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/05/04/74127fc843314818edfa81b5540e26dd537353b123a4edc563109d8f17dd/s3transfer-0.16.0.tar.gz", hash = "sha256:8e990f13268025792229cd52fa10cb7163744bf56e719e0b9cb925ab79abf920", size = 153827, upload-time = "2025-12-01T02:30:59.114Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fc/51/727abb13f44c1fcf6d145979e1535a35794db0f6e450a0cb46aa24732fe2/s3transfer-0.16.0-py3-none-any.whl", hash = "sha256:18e25d66fed509e3868dc1572b3f427ff947dd2c56f844a5bf09481ad3f3b2fe", size = 86830, upload-time = "2025-12-01T02:30:57.729Z" }, +] + +[[package]] +name = "setuptools" +version = "80.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/18/5d/3bf57dcd21979b887f014ea83c24ae194cfcd12b9e0fda66b957c69d1fca/setuptools-80.9.0.tar.gz", hash = "sha256:f36b47402ecde768dbfafc46e8e4207b4360c654f1f3bb84475f0a28628fb19c", size = 1319958, upload-time = "2025-05-27T00:56:51.443Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a3/dc/17031897dae0efacfea57dfd3a82fdd2a2aeb58e0ff71b77b87e44edc772/setuptools-80.9.0-py3-none-any.whl", hash = "sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922", size = 1201486, upload-time = "2025-05-27T00:56:49.664Z" }, +] + +[[package]] +name = "six" +version = "1.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" }, +] + +[[package]] +name = "smartypants" +version = "2.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6c/8f/a033f78196d9467b402d100ec40b95166d43fa2642693f23f771473d8195/smartypants-2.0.2.tar.gz", hash = "sha256:39d64ce1d7cc6964b698297bdf391bc12c3251b7f608e6e55d857cd7c5f800c6", size = 16392, upload-time = "2025-06-17T07:59:48.122Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/39/2c/f12558bff677defbfc64bf32441daec245df608dd2d9a12168f1d766ad75/smartypants-2.0.2-py2.py3-none-any.whl", hash = "sha256:9471578606e8ee0740065bf8771f55fec8c83313cb98c5d1c1864ddd389d0f3a", size = 10168, upload-time = "2025-06-17T07:59:46.765Z" }, +] + +[[package]] +name = "smmap" +version = "5.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/44/cd/a040c4b3119bbe532e5b0732286f805445375489fceaec1f48306068ee3b/smmap-5.0.2.tar.gz", hash = "sha256:26ea65a03958fa0c8a1c7e8c7a58fdc77221b8910f6be2131affade476898ad5", size = 22329, upload-time = "2025-01-02T07:14:40.909Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/be/d09147ad1ec7934636ad912901c5fd7667e1c858e19d355237db0d0cd5e4/smmap-5.0.2-py3-none-any.whl", hash = "sha256:b30115f0def7d7531d22a0fb6502488d879e75b260a9db4d0819cfb25403af5e", size = 24303, upload-time = "2025-01-02T07:14:38.724Z" }, +] + +[[package]] +name = "soupsieve" +version = "2.8" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6d/e6/21ccce3262dd4889aa3332e5a119a3491a95e8f60939870a3a035aabac0d/soupsieve-2.8.tar.gz", hash = "sha256:e2dd4a40a628cb5f28f6d4b0db8800b8f581b65bb380b97de22ba5ca8d72572f", size = 103472, upload-time = "2025-08-27T15:39:51.78Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/14/a0/bb38d3b76b8cae341dad93a2dd83ab7462e6dbcdd84d43f54ee60a8dc167/soupsieve-2.8-py3-none-any.whl", hash = "sha256:0cc76456a30e20f5d7f2e14a98a4ae2ee4e5abdc7c5ea0aafe795f344bc7984c", size = 36679, upload-time = "2025-08-27T15:39:50.179Z" }, +] + +[[package]] +name = "sparqlwrapper" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "rdflib" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/4e/cc/453752fffa759ef41a3ceadb3f167e13dae1a74c1db057d9f6a7affa9240/SPARQLWrapper-2.0.0.tar.gz", hash = "sha256:3fed3ebcc77617a4a74d2644b86fd88e0f32e7f7003ac7b2b334c026201731f1", size = 98429, upload-time = "2022-03-13T23:14:00.671Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/31/89/176e3db96e31e795d7dfd91dd67749d3d1f0316bb30c6931a6140e1a0477/SPARQLWrapper-2.0.0-py3-none-any.whl", hash = "sha256:c99a7204fff676ee28e6acef327dc1ff8451c6f7217dcd8d49e8872f324a8a20", size = 28620, upload-time = "2022-03-13T23:13:58.969Z" }, +] + +[[package]] +name = "stringcase" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/1f/1241aa3d66e8dc1612427b17885f5fcd9c9ee3079fc0d28e9a3aeeb36fa3/stringcase-1.2.0.tar.gz", hash = "sha256:48a06980661908efe8d9d34eab2b6c13aefa2163b3ced26972902e3bdfd87008", size = 2958, upload-time = "2017-08-06T01:40:57.021Z" } + +[[package]] +name = "super-collections" +version = "0.6.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "hjson" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e0/de/a0c3d1244912c260638f0f925e190e493ccea37ecaea9bbad7c14413b803/super_collections-0.6.2.tar.gz", hash = "sha256:0c8d8abacd9fad2c7c1c715f036c29f5db213f8cac65f24d45ecba12b4da187a", size = 31315, upload-time = "2025-09-30T00:37:08.067Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/17/43/47c7cf84b3bd74a8631b02d47db356656bb8dff6f2e61a4c749963814d0d/super_collections-0.6.2-py3-none-any.whl", hash = "sha256:291b74d26299e9051d69ad9d89e61b07b6646f86a57a2f5ab3063d206eee9c56", size = 16173, upload-time = "2025-09-30T00:37:07.104Z" }, +] + +[[package]] +name = "termcolor" +version = "3.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/87/56/ab275c2b56a5e2342568838f0d5e3e66a32354adcc159b495e374cda43f5/termcolor-3.2.0.tar.gz", hash = "sha256:610e6456feec42c4bcd28934a8c87a06c3fa28b01561d46aa09a9881b8622c58", size = 14423, upload-time = "2025-10-25T19:11:42.586Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f9/d5/141f53d7c1eb2a80e6d3e9a390228c3222c27705cbe7f048d3623053f3ca/termcolor-3.2.0-py3-none-any.whl", hash = "sha256:a10343879eba4da819353c55cb8049b0933890c2ebf9ad5d3ecd2bb32ea96ea6", size = 7698, upload-time = "2025-10-25T19:11:41.536Z" }, +] + +[[package]] +name = "tinycss2" +version = "1.5.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "webencodings" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a3/ae/2ca4913e5c0f09781d75482874c3a95db9105462a92ddd303c7d285d3df2/tinycss2-1.5.1.tar.gz", hash = "sha256:d339d2b616ba90ccce58da8495a78f46e55d4d25f9fd71dfd526f07e7d53f957", size = 88195, upload-time = "2025-11-23T10:29:10.082Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/60/45/c7b5c3168458db837e8ceab06dc77824e18202679d0463f0e8f002143a97/tinycss2-1.5.1-py3-none-any.whl", hash = "sha256:3415ba0f5839c062696996998176c4a3751d18b7edaaeeb658c9ce21ec150661", size = 28404, upload-time = "2025-11-23T10:29:08.676Z" }, +] + +[[package]] +name = "toml" +version = "0.10.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/be/ba/1f744cdc819428fc6b5084ec34d9b30660f6f9daaf70eead706e3203ec3c/toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f", size = 22253, upload-time = "2020-11-01T01:40:22.204Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/44/6f/7120676b6d73228c96e17f1f794d8ab046fc910d781c8d151120c3f1569e/toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b", size = 16588, upload-time = "2020-11-01T01:40:20.672Z" }, +] + +[[package]] +name = "types-awscrt" +version = "0.29.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bb/68/a580122cf8e8ee1154ee8795241f1b1e097e91050af5e7f5f5c800194f7b/types_awscrt-0.29.1.tar.gz", hash = "sha256:545f100e17d7633aa1791f92a8a4716f8ee1fc7cc9ee98dd31676d6c5e07e733", size = 17787, upload-time = "2025-11-30T07:43:33.014Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a6/0e/69a9ca202a8543146e189962d7069b3ef241d48a544e192856045c0ea792/types_awscrt-0.29.1-py3-none-any.whl", hash = "sha256:f583bef3d42a307b3f3c02ef8d5d49fbec04e02bf3aacd3ada3953213c9150a7", size = 42394, upload-time = "2025-11-30T07:43:31.555Z" }, +] + +[[package]] +name = "types-pytz" +version = "2025.2.0.20251108" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/40/ff/c047ddc68c803b46470a357454ef76f4acd8c1088f5cc4891cdd909bfcf6/types_pytz-2025.2.0.20251108.tar.gz", hash = "sha256:fca87917836ae843f07129567b74c1929f1870610681b4c92cb86a3df5817bdb", size = 10961, upload-time = "2025-11-08T02:55:57.001Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/c1/56ef16bf5dcd255155cc736d276efa6ae0a5c26fd685e28f0412a4013c01/types_pytz-2025.2.0.20251108-py3-none-any.whl", hash = "sha256:0f1c9792cab4eb0e46c52f8845c8f77cf1e313cb3d68bf826aa867fe4717d91c", size = 10116, upload-time = "2025-11-08T02:55:56.194Z" }, +] + +[[package]] +name = "types-s3transfer" +version = "0.15.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/79/bf/b00dcbecb037c4999b83c8109b8096fe78f87f1266cadc4f95d4af196292/types_s3transfer-0.15.0.tar.gz", hash = "sha256:43a523e0c43a88e447dfda5f4f6b63bf3da85316fdd2625f650817f2b170b5f7", size = 14236, upload-time = "2025-11-21T21:16:26.553Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8a/39/39a322d7209cc259e3e27c4d498129e9583a2f3a8aea57eb1a9941cb5e9e/types_s3transfer-0.15.0-py3-none-any.whl", hash = "sha256:1e617b14a9d3ce5be565f4b187fafa1d96075546b52072121f8fda8e0a444aed", size = 19702, upload-time = "2025-11-21T21:16:25.146Z" }, +] + +[[package]] +name = "typing-extensions" +version = "4.15.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466", size = 109391, upload-time = "2025-08-25T13:49:26.313Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614, upload-time = "2025-08-25T13:49:24.86Z" }, +] + +[[package]] +name = "tzdata" +version = "2025.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/95/32/1a225d6164441be760d75c2c42e2780dc0873fe382da3e98a2e1e48361e5/tzdata-2025.2.tar.gz", hash = "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9", size = 196380, upload-time = "2025-03-23T13:54:43.652Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8", size = 347839, upload-time = "2025-03-23T13:54:41.845Z" }, +] + +[[package]] +name = "urllib3" +version = "2.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/15/22/9ee70a2574a4f4599c47dd506532914ce044817c7752a79b6a51286319bc/urllib3-2.5.0.tar.gz", hash = "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760", size = 393185, upload-time = "2025-06-18T14:07:41.644Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc", size = 129795, upload-time = "2025-06-18T14:07:40.39Z" }, +] + +[[package]] +name = "watchdog" +version = "6.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/db/7d/7f3d619e951c88ed75c6037b246ddcf2d322812ee8ea189be89511721d54/watchdog-6.0.0.tar.gz", hash = "sha256:9ddf7c82fda3ae8e24decda1338ede66e1c99883db93711d8fb941eaa2d8c282", size = 131220, upload-time = "2024-11-01T14:07:13.037Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/68/98/b0345cabdce2041a01293ba483333582891a3bd5769b08eceb0d406056ef/watchdog-6.0.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:490ab2ef84f11129844c23fb14ecf30ef3d8a6abafd3754a6f75ca1e6654136c", size = 96480, upload-time = "2024-11-01T14:06:42.952Z" }, + { url = "https://files.pythonhosted.org/packages/85/83/cdf13902c626b28eedef7ec4f10745c52aad8a8fe7eb04ed7b1f111ca20e/watchdog-6.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:76aae96b00ae814b181bb25b1b98076d5fc84e8a53cd8885a318b42b6d3a5134", size = 88451, upload-time = "2024-11-01T14:06:45.084Z" }, + { url = "https://files.pythonhosted.org/packages/fe/c4/225c87bae08c8b9ec99030cd48ae9c4eca050a59bf5c2255853e18c87b50/watchdog-6.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a175f755fc2279e0b7312c0035d52e27211a5bc39719dd529625b1930917345b", size = 89057, upload-time = "2024-11-01T14:06:47.324Z" }, + { url = "https://files.pythonhosted.org/packages/a9/c7/ca4bf3e518cb57a686b2feb4f55a1892fd9a3dd13f470fca14e00f80ea36/watchdog-6.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7607498efa04a3542ae3e05e64da8202e58159aa1fa4acddf7678d34a35d4f13", size = 79079, upload-time = "2024-11-01T14:06:59.472Z" }, + { url = "https://files.pythonhosted.org/packages/5c/51/d46dc9332f9a647593c947b4b88e2381c8dfc0942d15b8edc0310fa4abb1/watchdog-6.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:9041567ee8953024c83343288ccc458fd0a2d811d6a0fd68c4c22609e3490379", size = 79078, upload-time = "2024-11-01T14:07:01.431Z" }, + { url = "https://files.pythonhosted.org/packages/d4/57/04edbf5e169cd318d5f07b4766fee38e825d64b6913ca157ca32d1a42267/watchdog-6.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:82dc3e3143c7e38ec49d61af98d6558288c415eac98486a5c581726e0737c00e", size = 79076, upload-time = "2024-11-01T14:07:02.568Z" }, + { url = "https://files.pythonhosted.org/packages/ab/cc/da8422b300e13cb187d2203f20b9253e91058aaf7db65b74142013478e66/watchdog-6.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:212ac9b8bf1161dc91bd09c048048a95ca3a4c4f5e5d4a7d1b1a7d5752a7f96f", size = 79077, upload-time = "2024-11-01T14:07:03.893Z" }, + { url = "https://files.pythonhosted.org/packages/2c/3b/b8964e04ae1a025c44ba8e4291f86e97fac443bca31de8bd98d3263d2fcf/watchdog-6.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:e3df4cbb9a450c6d49318f6d14f4bbc80d763fa587ba46ec86f99f9e6876bb26", size = 79078, upload-time = "2024-11-01T14:07:05.189Z" }, + { url = "https://files.pythonhosted.org/packages/62/ae/a696eb424bedff7407801c257d4b1afda455fe40821a2be430e173660e81/watchdog-6.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:2cce7cfc2008eb51feb6aab51251fd79b85d9894e98ba847408f662b3395ca3c", size = 79077, upload-time = "2024-11-01T14:07:06.376Z" }, + { url = "https://files.pythonhosted.org/packages/b5/e8/dbf020b4d98251a9860752a094d09a65e1b436ad181faf929983f697048f/watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:20ffe5b202af80ab4266dcd3e91aae72bf2da48c0d33bdb15c66658e685e94e2", size = 79078, upload-time = "2024-11-01T14:07:07.547Z" }, + { url = "https://files.pythonhosted.org/packages/07/f6/d0e5b343768e8bcb4cda79f0f2f55051bf26177ecd5651f84c07567461cf/watchdog-6.0.0-py3-none-win32.whl", hash = "sha256:07df1fdd701c5d4c8e55ef6cf55b8f0120fe1aef7ef39a1c6fc6bc2e606d517a", size = 79065, upload-time = "2024-11-01T14:07:09.525Z" }, + { url = "https://files.pythonhosted.org/packages/db/d9/c495884c6e548fce18a8f40568ff120bc3a4b7b99813081c8ac0c936fa64/watchdog-6.0.0-py3-none-win_amd64.whl", hash = "sha256:cbafb470cf848d93b5d013e2ecb245d4aa1c8fd0504e863ccefa32445359d680", size = 79070, upload-time = "2024-11-01T14:07:10.686Z" }, + { url = "https://files.pythonhosted.org/packages/33/e8/e40370e6d74ddba47f002a32919d91310d6074130fe4e17dabcafc15cbf1/watchdog-6.0.0-py3-none-win_ia64.whl", hash = "sha256:a1914259fa9e1454315171103c6a30961236f508b9b623eae470268bbcc6a22f", size = 79067, upload-time = "2024-11-01T14:07:11.845Z" }, +] + +[[package]] +name = "wcmatch" +version = "10.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "bracex" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/79/3e/c0bdc27cf06f4e47680bd5803a07cb3dfd17de84cde92dd217dcb9e05253/wcmatch-10.1.tar.gz", hash = "sha256:f11f94208c8c8484a16f4f48638a85d771d9513f4ab3f37595978801cb9465af", size = 117421, upload-time = "2025-06-22T19:14:02.49Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/eb/d8/0d1d2e9d3fabcf5d6840362adcf05f8cf3cd06a73358140c3a97189238ae/wcmatch-10.1-py3-none-any.whl", hash = "sha256:5848ace7dbb0476e5e55ab63c6bbd529745089343427caa5537f230cc01beb8a", size = 39854, upload-time = "2025-06-22T19:14:00.978Z" }, +] + +[[package]] +name = "webencodings" +version = "0.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0b/02/ae6ceac1baeda530866a85075641cec12989bd8d31af6d5ab4a3e8c92f47/webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923", size = 9721, upload-time = "2017-04-05T20:21:34.189Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/24/2a3e3df732393fed8b3ebf2ec078f05546de641fe1b667ee316ec1dcf3b7/webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78", size = 11774, upload-time = "2017-04-05T20:21:32.581Z" }, +] From 985c16a4359522df7f420c6f16b5cb6f5a456ac9 Mon Sep 17 00:00:00 2001 From: Jacobus Geluk Date: Mon, 1 Dec 2025 23:00:18 +0000 Subject: [PATCH 24/32] Update asdf action to v3 and improve Makefile asdf detection - Update asdf-vm/actions/install from v2 to v3 - Makefile now checks if asdf is already installed before installing via Homebrew - This avoids duplicate installations and reduces migration warnings in CI --- .github/workflows/docs.yml | 2 +- Makefile | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 7c6f04f3..0a14ddfc 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -39,7 +39,7 @@ jobs: path: .cache - name: Install asdf & tools - uses: asdf-vm/actions/install@v2 + uses: asdf-vm/actions/install@v3 - name: Install all MkDocs dependencies run: | diff --git a/Makefile b/Makefile index 033c553d..1445454e 100644 --- a/Makefile +++ b/Makefile @@ -114,7 +114,9 @@ docs-install-brew-macos: .PHONY: docs-install-asdf docs-install-asdf: docs-install-brew @echo "Install the asdf package manager:" - @brew upgrade asdf 2>/dev/null || brew install asdf + @if ! command -v asdf >/dev/null 2>&1; then \ + brew upgrade asdf 2>/dev/null || brew install asdf; \ + fi @asdf plugin add python 2>/dev/null || true @asdf plugin add nodejs 2>/dev/null || true @asdf plugin add java 2>/dev/null || true From 54fb3a5cbe576bed803effccd91f733805d58a37 Mon Sep 17 00:00:00 2001 From: Jacobus Geluk Date: Mon, 1 Dec 2025 23:02:12 +0000 Subject: [PATCH 25/32] Update asdf action to v4 for asdf 0.16+ support - Upgrade from v3 to v4 which supports asdf >= v0.16.0 - This should eliminate migration notice warnings in CI logs --- .github/workflows/docs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 0a14ddfc..7ce95dd8 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -39,7 +39,7 @@ jobs: path: .cache - name: Install asdf & tools - uses: asdf-vm/actions/install@v3 + uses: asdf-vm/actions/install@v4 - name: Install all MkDocs dependencies run: | From 5eecb181b3a400e787c067009fa235ffda7999f1 Mon Sep 17 00:00:00 2001 From: Jacobus Geluk Date: Mon, 1 Dec 2025 23:03:23 +0000 Subject: [PATCH 26/32] Add comprehensive caching for asdf tools and uv dependencies - Cache asdf installations (~/.asdf/installs, plugins, shims) based on .tool-versions - Cache uv package cache and Python venv based on uv.lock/pyproject.toml - Remove old main-branch-only cache - Caching now works for all branches and PRs to speed up builds --- .github/workflows/docs.yml | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 7ce95dd8..d55bc753 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -32,11 +32,26 @@ jobs: with: fetch-depth: 0 - + name: Cache asdf installations + uses: actions/cache@v4 + with: + path: | + ~/.asdf/installs + ~/.asdf/plugins + ~/.asdf/shims + key: ${{ runner.os }}-asdf-${{ hashFiles('.tool-versions') }} + restore-keys: | + ${{ runner.os }}-asdf- + - + name: Cache uv dependencies uses: actions/cache@v4 - if: ${{ github.ref == 'refs/heads/main' }} with: - key: ${{ github.ref }} - path: .cache + path: | + ~/.cache/uv + .venv + key: ${{ runner.os }}-uv-${{ hashFiles('uv.lock', 'pyproject.toml') }} + restore-keys: | + ${{ runner.os }}-uv- - name: Install asdf & tools uses: asdf-vm/actions/install@v4 From 06d55d8ea29e4104514727071b90b3cf08d0afd0 Mon Sep 17 00:00:00 2001 From: Jacobus Geluk Date: Mon, 1 Dec 2025 23:04:45 +0000 Subject: [PATCH 27/32] Fix labeler.yml configuration format - Convert all labels to use proper match object format with 'any:' and 'changed-files:' - Fix mkdocs-infra label that was causing 'unexpected type' error - Consolidate agnos-ai patterns into single 'any:' block --- .github/labeler.yml | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/.github/labeler.yml b/.github/labeler.yml index 05336212..3264b272 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -1,21 +1,27 @@ mkdocs-infra: - - Makefile - - mkdocs.yml - - docs-overrides/ - - docs/assets/ - - docs/stylesheets/ - - docs/main.py - - '*/**/CNAME' - - .tool-versions - - README.md + - any: + - changed-files: + - Makefile + - mkdocs.yml + - docs-overrides/** + - docs/assets/** + - docs/stylesheets/** + - docs/main.py + - '**/CNAME' + - .tool-versions + - README.md github-actions: - - .github/ + - any: + - changed-files: + - .github/** agnos-ai: - - any: ['agnos-*'] - - any: ['*-agnos/**/*'] - - any: ['*-agnos-ai/**/*'] + - any: + - changed-files: + - 'agnos-*' + - '*-agnos/**/*' + - '*-agnos-ai/**/*' From 6263d6ed71cdbd5b4bd28680066eccb62031135a Mon Sep 17 00:00:00 2001 From: Jacobus Geluk Date: Mon, 1 Dec 2025 23:05:29 +0000 Subject: [PATCH 28/32] Remove non-existent docs/main.py from labeler config - Fixes 'Expected string' YAML validation error - File doesn't exist in the repository --- .github/labeler.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/labeler.yml b/.github/labeler.yml index 3264b272..c1252f85 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -6,7 +6,6 @@ mkdocs-infra: - docs-overrides/** - docs/assets/** - docs/stylesheets/** - - docs/main.py - '**/CNAME' - .tool-versions - README.md From 0716be956b540fd35bdee50af0173d44af474341 Mon Sep 17 00:00:00 2001 From: Jacobus Geluk Date: Mon, 1 Dec 2025 23:07:09 +0000 Subject: [PATCH 29/32] Remove Node.js as it's no longer used - PlantUML requires Java (already in .tool-versions), not Node.js - No npm packages or Node.js tools are used in the project - All dependencies are Python-based --- Makefile | 1 - 1 file changed, 1 deletion(-) diff --git a/Makefile b/Makefile index 1445454e..0f9b9f55 100644 --- a/Makefile +++ b/Makefile @@ -118,7 +118,6 @@ docs-install-asdf: docs-install-brew brew upgrade asdf 2>/dev/null || brew install asdf; \ fi @asdf plugin add python 2>/dev/null || true - @asdf plugin add nodejs 2>/dev/null || true @asdf plugin add java 2>/dev/null || true .PHONY: docs-install-asdf-packages From 19b7a55903bf1c5a7e5aab2de325921119945312 Mon Sep 17 00:00:00 2001 From: Jacobus Geluk Date: Mon, 1 Dec 2025 23:08:21 +0000 Subject: [PATCH 30/32] Remove Java and PlantUML as we use external PlantUML server - PlantUML is configured with render: 'server' using http://www.plantuml.com/plantuml - No local Java or PlantUML binary needed for server-side rendering - This speeds up CI builds by removing unnecessary dependencies --- .tool-versions | 1 - Makefile | 2 -- 2 files changed, 3 deletions(-) diff --git a/.tool-versions b/.tool-versions index cafb9b9b..1b23e696 100644 --- a/.tool-versions +++ b/.tool-versions @@ -1,3 +1,2 @@ python 3.13.1 -nodejs 17.4.0 java openjdk-18 diff --git a/Makefile b/Makefile index 0f9b9f55..2d00e27b 100644 --- a/Makefile +++ b/Makefile @@ -78,7 +78,6 @@ docs-install-brew-packages: @brew upgrade libjpeg 2>/dev/null || brew install libjpeg @brew upgrade libpng 2>/dev/null || brew install libpng @brew upgrade zlib 2>/dev/null || brew install zlib - @brew upgrade plantuml 2>/dev/null || brew install plantuml @brew upgrade graphviz 2>/dev/null || brew install graphviz @brew upgrade uv 2>/dev/null || brew install uv @@ -118,7 +117,6 @@ docs-install-asdf: docs-install-brew brew upgrade asdf 2>/dev/null || brew install asdf; \ fi @asdf plugin add python 2>/dev/null || true - @asdf plugin add java 2>/dev/null || true .PHONY: docs-install-asdf-packages docs-install-asdf-packages: docs-install-asdf From 1ddb67208aa6358b89e965ab46f71c9020d0ec41 Mon Sep 17 00:00:00 2001 From: Jacobus Geluk Date: Mon, 1 Dec 2025 23:08:51 +0000 Subject: [PATCH 31/32] Remove Java from .tool-versions - Already removed from Makefile in previous commit - Completes the removal of Java dependency --- .tool-versions | 1 - 1 file changed, 1 deletion(-) diff --git a/.tool-versions b/.tool-versions index 1b23e696..60d2f02f 100644 --- a/.tool-versions +++ b/.tool-versions @@ -1,2 +1 @@ python 3.13.1 -java openjdk-18 From a6ac05f5ea01fc6cdd70fd7508e077797b0e228d Mon Sep 17 00:00:00 2001 From: Jacobus Geluk Date: Mon, 1 Dec 2025 23:09:57 +0000 Subject: [PATCH 32/32] Fix labeler.yml format to use correct changed-files structure - Use 'any-glob-to-any-file' key with array of patterns - Fixes 'changed-files section must have valid config structure' error --- .github/labeler.yml | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/.github/labeler.yml b/.github/labeler.yml index c1252f85..ae678be8 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -1,26 +1,26 @@ mkdocs-infra: - - any: - - changed-files: - - Makefile - - mkdocs.yml - - docs-overrides/** - - docs/assets/** - - docs/stylesheets/** - - '**/CNAME' - - .tool-versions - - README.md + - changed-files: + any-glob-to-any-file: + - Makefile + - mkdocs.yml + - docs-overrides/** + - docs/assets/** + - docs/stylesheets/** + - '**/CNAME' + - .tool-versions + - README.md github-actions: - - any: - - changed-files: - - .github/** + - changed-files: + any-glob-to-any-file: + - .github/** agnos-ai: - - any: - - changed-files: - - 'agnos-*' - - '*-agnos/**/*' - - '*-agnos-ai/**/*' + - changed-files: + any-glob-to-any-file: + - 'agnos-*' + - '*-agnos/**/*' + - '*-agnos-ai/**/*'