From f8a2cf0c3d42d5518e516e875e5342b865cef6fd Mon Sep 17 00:00:00 2001 From: Robert Helewka Date: Sat, 23 May 2026 06:11:05 -0400 Subject: [PATCH] docs: add Sphinx documentation build and deploy workflow - Add Gitea Actions workflow to build and deploy docs on push to main - Generate Sphinx reference documentation for all apps and modules - Deploy versioned and latest docs via rsync over SSH --- .gitea/workflows/docs.yml | 102 ++++ docs/Makefile | 22 + docs/Pattern_Sphinx-Documentation_V1-00.md | 521 ++++++++++++++++++ docs/regenerate_docs.sh | 42 ++ docs/source/_static/.gitkeep | 0 docs/source/conf.py | 97 ++++ docs/source/index.rst | 17 + docs/source/reference/apps/index.rst | 10 + .../reference/apps/library/library.admin.rst | 7 + .../reference/apps/library/library.api.rst | 18 + .../apps/library/library.api.serializers.rst | 7 + .../apps/library/library.api.urls.rst | 7 + .../apps/library/library.api.views.rst | 7 + .../apps/library/library.api.workspaces.rst | 7 + .../reference/apps/library/library.apps.rst | 7 + .../apps/library/library.content_types.rst | 7 + .../reference/apps/library/library.forms.rst | 7 + ...y.management.commands.embed_collection.rst | 7 + ...library.management.commands.embed_item.rst | 7 + ...y.management.commands.embedding_status.rst | 7 + ...management.commands.load_library_types.rst | 7 + .../library/library.management.commands.rst | 21 + .../library.management.commands.search.rst | 7 + ...brary.management.commands.search_stats.rst | 7 + ...anagement.commands.setup_neo4j_indexes.rst | 7 + .../apps/library/library.management.rst | 15 + .../apps/library/library.metrics.rst | 7 + .../reference/apps/library/library.models.rst | 7 + .../source/reference/apps/library/library.rst | 34 ++ .../apps/library/library.services.chunker.rst | 7 + .../library/library.services.concepts.rst | 7 + .../library/library.services.daedalus_s3.rst | 7 + .../library.services.embedding_client.rst | 7 + .../apps/library/library.services.fusion.rst | 7 + .../apps/library/library.services.parsers.rst | 7 + .../library/library.services.pipeline.rst | 7 + .../library/library.services.reranker.rst | 7 + .../apps/library/library.services.rst | 25 + .../apps/library/library.services.search.rst | 7 + .../library/library.services.text_utils.rst | 7 + .../apps/library/library.services.vision.rst | 7 + .../reference/apps/library/library.tasks.rst | 7 + .../reference/apps/library/library.urls.rst | 7 + .../reference/apps/library/library.utils.rst | 7 + .../reference/apps/library/library.views.rst | 7 + .../source/reference/apps/library/modules.rst | 7 + .../apps/llm_manager/llm_manager.admin.rst | 7 + .../apps/llm_manager/llm_manager.api.rst | 17 + .../llm_manager.api.serializers.rst | 7 + .../apps/llm_manager/llm_manager.api.urls.rst | 7 + .../llm_manager/llm_manager.api.views.rst | 7 + .../apps/llm_manager/llm_manager.apps.rst | 7 + .../llm_manager/llm_manager.encryption.rst | 7 + .../apps/llm_manager/llm_manager.forms.rst | 7 + ...ement.commands.load_default_llm_models.rst | 7 + .../llm_manager.management.commands.rst | 15 + .../llm_manager/llm_manager.management.rst | 15 + .../apps/llm_manager/llm_manager.models.rst | 7 + .../apps/llm_manager/llm_manager.rst | 32 ++ .../apps/llm_manager/llm_manager.services.rst | 7 + .../apps/llm_manager/llm_manager.tasks.rst | 7 + .../apps/llm_manager/llm_manager.urls.rst | 7 + .../apps/llm_manager/llm_manager.views.rst | 7 + .../reference/apps/llm_manager/modules.rst | 7 + .../apps/mcp_server/mcp_server.admin.rst | 7 + .../apps/mcp_server/mcp_server.api.rst | 17 + .../mcp_server/mcp_server.api.serializers.rst | 7 + .../apps/mcp_server/mcp_server.api.teams.rst | 7 + .../apps/mcp_server/mcp_server.api.urls.rst | 7 + .../apps/mcp_server/mcp_server.apps.rst | 7 + .../apps/mcp_server/mcp_server.auth.rst | 7 + .../apps/mcp_server/mcp_server.context.rst | 7 + .../apps/mcp_server/mcp_server.forms.rst | 7 + ....commands.backfill_library_memberships.rst | 7 + ...r.management.commands.create_mcp_token.rst | 7 + .../mcp_server.management.commands.rst | 17 + ...r.management.commands.seed_signing_key.rst | 7 + .../apps/mcp_server/mcp_server.management.rst | 15 + .../apps/mcp_server/mcp_server.metrics.rst | 7 + .../apps/mcp_server/mcp_server.models.rst | 7 + .../reference/apps/mcp_server/mcp_server.rst | 35 ++ .../apps/mcp_server/mcp_server.server.rst | 7 + .../apps/mcp_server/mcp_server.teams.rst | 7 + .../mcp_server/mcp_server.tools.discovery.rst | 7 + .../mcp_server/mcp_server.tools.health.rst | 7 + .../apps/mcp_server/mcp_server.tools.rst | 17 + .../mcp_server/mcp_server.tools.search.rst | 7 + .../apps/mcp_server/mcp_server.urls.rst | 7 + .../apps/mcp_server/mcp_server.views.rst | 7 + .../reference/apps/mcp_server/modules.rst | 7 + docs/source/reference/apps/themis/modules.rst | 7 + .../reference/apps/themis/themis.adapters.rst | 7 + .../reference/apps/themis/themis.admin.rst | 7 + .../reference/apps/themis/themis.api.rst | 17 + .../apps/themis/themis.api.serializers.rst | 7 + .../reference/apps/themis/themis.api.urls.rst | 7 + .../apps/themis/themis.api.views.rst | 7 + .../reference/apps/themis/themis.apps.rst | 7 + .../apps/themis/themis.context_processors.rst | 7 + .../apps/themis/themis.encryption.rst | 7 + .../reference/apps/themis/themis.forms.rst | 7 + .../apps/themis/themis.middleware.rst | 7 + .../reference/apps/themis/themis.models.rst | 7 + .../apps/themis/themis.notifications.rst | 7 + docs/source/reference/apps/themis/themis.rst | 38 ++ .../reference/apps/themis/themis.signals.rst | 7 + .../apps/themis/themis.ssl_patch.rst | 7 + .../apps/themis/themis.templatetags.rst | 15 + .../themis.templatetags.themis_tags.rst | 7 + .../reference/apps/themis/themis.urls.rst | 7 + .../reference/apps/themis/themis.utils.rst | 7 + .../reference/apps/themis/themis.views.rst | 7 + .../reference/apps/themis/themis.widgets.rst | 7 + pyproject.toml | 9 +- 114 files changed, 1797 insertions(+), 2 deletions(-) create mode 100644 .gitea/workflows/docs.yml create mode 100644 docs/Makefile create mode 100644 docs/Pattern_Sphinx-Documentation_V1-00.md create mode 100755 docs/regenerate_docs.sh create mode 100644 docs/source/_static/.gitkeep create mode 100644 docs/source/conf.py create mode 100644 docs/source/index.rst create mode 100644 docs/source/reference/apps/index.rst create mode 100644 docs/source/reference/apps/library/library.admin.rst create mode 100644 docs/source/reference/apps/library/library.api.rst create mode 100644 docs/source/reference/apps/library/library.api.serializers.rst create mode 100644 docs/source/reference/apps/library/library.api.urls.rst create mode 100644 docs/source/reference/apps/library/library.api.views.rst create mode 100644 docs/source/reference/apps/library/library.api.workspaces.rst create mode 100644 docs/source/reference/apps/library/library.apps.rst create mode 100644 docs/source/reference/apps/library/library.content_types.rst create mode 100644 docs/source/reference/apps/library/library.forms.rst create mode 100644 docs/source/reference/apps/library/library.management.commands.embed_collection.rst create mode 100644 docs/source/reference/apps/library/library.management.commands.embed_item.rst create mode 100644 docs/source/reference/apps/library/library.management.commands.embedding_status.rst create mode 100644 docs/source/reference/apps/library/library.management.commands.load_library_types.rst create mode 100644 docs/source/reference/apps/library/library.management.commands.rst create mode 100644 docs/source/reference/apps/library/library.management.commands.search.rst create mode 100644 docs/source/reference/apps/library/library.management.commands.search_stats.rst create mode 100644 docs/source/reference/apps/library/library.management.commands.setup_neo4j_indexes.rst create mode 100644 docs/source/reference/apps/library/library.management.rst create mode 100644 docs/source/reference/apps/library/library.metrics.rst create mode 100644 docs/source/reference/apps/library/library.models.rst create mode 100644 docs/source/reference/apps/library/library.rst create mode 100644 docs/source/reference/apps/library/library.services.chunker.rst create mode 100644 docs/source/reference/apps/library/library.services.concepts.rst create mode 100644 docs/source/reference/apps/library/library.services.daedalus_s3.rst create mode 100644 docs/source/reference/apps/library/library.services.embedding_client.rst create mode 100644 docs/source/reference/apps/library/library.services.fusion.rst create mode 100644 docs/source/reference/apps/library/library.services.parsers.rst create mode 100644 docs/source/reference/apps/library/library.services.pipeline.rst create mode 100644 docs/source/reference/apps/library/library.services.reranker.rst create mode 100644 docs/source/reference/apps/library/library.services.rst create mode 100644 docs/source/reference/apps/library/library.services.search.rst create mode 100644 docs/source/reference/apps/library/library.services.text_utils.rst create mode 100644 docs/source/reference/apps/library/library.services.vision.rst create mode 100644 docs/source/reference/apps/library/library.tasks.rst create mode 100644 docs/source/reference/apps/library/library.urls.rst create mode 100644 docs/source/reference/apps/library/library.utils.rst create mode 100644 docs/source/reference/apps/library/library.views.rst create mode 100644 docs/source/reference/apps/library/modules.rst create mode 100644 docs/source/reference/apps/llm_manager/llm_manager.admin.rst create mode 100644 docs/source/reference/apps/llm_manager/llm_manager.api.rst create mode 100644 docs/source/reference/apps/llm_manager/llm_manager.api.serializers.rst create mode 100644 docs/source/reference/apps/llm_manager/llm_manager.api.urls.rst create mode 100644 docs/source/reference/apps/llm_manager/llm_manager.api.views.rst create mode 100644 docs/source/reference/apps/llm_manager/llm_manager.apps.rst create mode 100644 docs/source/reference/apps/llm_manager/llm_manager.encryption.rst create mode 100644 docs/source/reference/apps/llm_manager/llm_manager.forms.rst create mode 100644 docs/source/reference/apps/llm_manager/llm_manager.management.commands.load_default_llm_models.rst create mode 100644 docs/source/reference/apps/llm_manager/llm_manager.management.commands.rst create mode 100644 docs/source/reference/apps/llm_manager/llm_manager.management.rst create mode 100644 docs/source/reference/apps/llm_manager/llm_manager.models.rst create mode 100644 docs/source/reference/apps/llm_manager/llm_manager.rst create mode 100644 docs/source/reference/apps/llm_manager/llm_manager.services.rst create mode 100644 docs/source/reference/apps/llm_manager/llm_manager.tasks.rst create mode 100644 docs/source/reference/apps/llm_manager/llm_manager.urls.rst create mode 100644 docs/source/reference/apps/llm_manager/llm_manager.views.rst create mode 100644 docs/source/reference/apps/llm_manager/modules.rst create mode 100644 docs/source/reference/apps/mcp_server/mcp_server.admin.rst create mode 100644 docs/source/reference/apps/mcp_server/mcp_server.api.rst create mode 100644 docs/source/reference/apps/mcp_server/mcp_server.api.serializers.rst create mode 100644 docs/source/reference/apps/mcp_server/mcp_server.api.teams.rst create mode 100644 docs/source/reference/apps/mcp_server/mcp_server.api.urls.rst create mode 100644 docs/source/reference/apps/mcp_server/mcp_server.apps.rst create mode 100644 docs/source/reference/apps/mcp_server/mcp_server.auth.rst create mode 100644 docs/source/reference/apps/mcp_server/mcp_server.context.rst create mode 100644 docs/source/reference/apps/mcp_server/mcp_server.forms.rst create mode 100644 docs/source/reference/apps/mcp_server/mcp_server.management.commands.backfill_library_memberships.rst create mode 100644 docs/source/reference/apps/mcp_server/mcp_server.management.commands.create_mcp_token.rst create mode 100644 docs/source/reference/apps/mcp_server/mcp_server.management.commands.rst create mode 100644 docs/source/reference/apps/mcp_server/mcp_server.management.commands.seed_signing_key.rst create mode 100644 docs/source/reference/apps/mcp_server/mcp_server.management.rst create mode 100644 docs/source/reference/apps/mcp_server/mcp_server.metrics.rst create mode 100644 docs/source/reference/apps/mcp_server/mcp_server.models.rst create mode 100644 docs/source/reference/apps/mcp_server/mcp_server.rst create mode 100644 docs/source/reference/apps/mcp_server/mcp_server.server.rst create mode 100644 docs/source/reference/apps/mcp_server/mcp_server.teams.rst create mode 100644 docs/source/reference/apps/mcp_server/mcp_server.tools.discovery.rst create mode 100644 docs/source/reference/apps/mcp_server/mcp_server.tools.health.rst create mode 100644 docs/source/reference/apps/mcp_server/mcp_server.tools.rst create mode 100644 docs/source/reference/apps/mcp_server/mcp_server.tools.search.rst create mode 100644 docs/source/reference/apps/mcp_server/mcp_server.urls.rst create mode 100644 docs/source/reference/apps/mcp_server/mcp_server.views.rst create mode 100644 docs/source/reference/apps/mcp_server/modules.rst create mode 100644 docs/source/reference/apps/themis/modules.rst create mode 100644 docs/source/reference/apps/themis/themis.adapters.rst create mode 100644 docs/source/reference/apps/themis/themis.admin.rst create mode 100644 docs/source/reference/apps/themis/themis.api.rst create mode 100644 docs/source/reference/apps/themis/themis.api.serializers.rst create mode 100644 docs/source/reference/apps/themis/themis.api.urls.rst create mode 100644 docs/source/reference/apps/themis/themis.api.views.rst create mode 100644 docs/source/reference/apps/themis/themis.apps.rst create mode 100644 docs/source/reference/apps/themis/themis.context_processors.rst create mode 100644 docs/source/reference/apps/themis/themis.encryption.rst create mode 100644 docs/source/reference/apps/themis/themis.forms.rst create mode 100644 docs/source/reference/apps/themis/themis.middleware.rst create mode 100644 docs/source/reference/apps/themis/themis.models.rst create mode 100644 docs/source/reference/apps/themis/themis.notifications.rst create mode 100644 docs/source/reference/apps/themis/themis.rst create mode 100644 docs/source/reference/apps/themis/themis.signals.rst create mode 100644 docs/source/reference/apps/themis/themis.ssl_patch.rst create mode 100644 docs/source/reference/apps/themis/themis.templatetags.rst create mode 100644 docs/source/reference/apps/themis/themis.templatetags.themis_tags.rst create mode 100644 docs/source/reference/apps/themis/themis.urls.rst create mode 100644 docs/source/reference/apps/themis/themis.utils.rst create mode 100644 docs/source/reference/apps/themis/themis.views.rst create mode 100644 docs/source/reference/apps/themis/themis.widgets.rst diff --git a/.gitea/workflows/docs.yml b/.gitea/workflows/docs.yml new file mode 100644 index 0000000..218a527 --- /dev/null +++ b/.gitea/workflows/docs.yml @@ -0,0 +1,102 @@ +name: Build & Deploy Docs + +on: + push: + branches: [main] + paths: + - 'mnemosyne/**' + - 'docs/**' + - 'pyproject.toml' + - '.gitea/workflows/docs.yml' + +jobs: + build-and-deploy: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: '3.12' + + - name: Install package + docs deps + run: | + pip install --upgrade pip + pip install -e ".[docs]" + + - name: Read version from pyproject.toml + id: version + run: | + VERSION=$(python -c "import tomllib; print(tomllib.load(open('pyproject.toml','rb'))['project']['version'])") + echo "version=$VERSION" >> "$GITHUB_OUTPUT" + + # ─── Failure-debug trio (REQUIRED) ───────────────────────────────── + - name: Build HTML + id: build_html + run: | + cd docs + ./regenerate_docs.sh + continue-on-error: true + + - name: Print Sphinx error log on failure + if: steps.build_html.outcome == 'failure' + run: | + echo "=== Sphinx error log ===" + cat /tmp/sphinx-err-*.log 2>/dev/null || echo "(no sphinx error log found)" + + - name: Fail if build failed + if: steps.build_html.outcome == 'failure' + run: exit 1 + # ─────────────────────────────────────────────────────────────────── + + - name: Install rsync + openssh + run: | + apt-get update + apt-get install -y --no-install-recommends rsync openssh-client + + - name: Configure SSH + run: | + mkdir -p ~/.ssh + printf '%s\n' "${{ secrets.DOCS_DEPLOY_KEY }}" > ~/.ssh/id_ed25519 + chmod 600 ~/.ssh/id_ed25519 + ssh-keyscan -p ${{ vars.DOCS_HOST_PORT }} ${{ vars.DOCS_HOST }} >> ~/.ssh/known_hosts + + - name: Test SSH connectivity + run: | + ssh -o BatchMode=yes -o ConnectTimeout=10 \ + -p ${{ vars.DOCS_HOST_PORT }} -i ~/.ssh/id_ed25519 \ + git@${{ vars.DOCS_HOST }} "id && echo 'SSH OK'" + + - name: Rsync to versioned path + run: | + rsync -av --delete \ + -e "ssh -p ${{ vars.DOCS_HOST_PORT }} -i ~/.ssh/id_ed25519" \ + docs/_build/html/ \ + git@${{ vars.DOCS_HOST }}:/var/www/docs/mnemosyne/${{ steps.version.outputs.version }}/ + + - name: Rsync to latest + run: | + rsync -av --delete \ + -e "ssh -p ${{ vars.DOCS_HOST_PORT }} -i ~/.ssh/id_ed25519" \ + docs/_build/html/ \ + git@${{ vars.DOCS_HOST }}:/var/www/docs/mnemosyne/latest/ + + - name: Regenerate versions index + run: | + ssh -p ${{ vars.DOCS_HOST_PORT }} -i ~/.ssh/id_ed25519 git@${{ vars.DOCS_HOST }} \ + 'python3 - <Mnemosyne Docs", + "

Mnemosyne Documentation

") + (root / "index.html").write_text("\n".join(html)) + PY' diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 0000000..3caf719 --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,22 @@ +# Minimal Sphinx Makefile. +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +SOURCEDIR = source +BUILDDIR = _build + +.PHONY: help clean html livehtml Makefile + +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +clean: + rm -rf $(BUILDDIR) $(SOURCEDIR)/reference/apps + +html: + @$(SPHINXBUILD) -M html "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +livehtml: + sphinx-autobuild "$(SOURCEDIR)" "$(BUILDDIR)/html" $(SPHINXOPTS) $(O) + +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/Pattern_Sphinx-Documentation_V1-00.md b/docs/Pattern_Sphinx-Documentation_V1-00.md new file mode 100644 index 0000000..cf51bca --- /dev/null +++ b/docs/Pattern_Sphinx-Documentation_V1-00.md @@ -0,0 +1,521 @@ +# Sphinx Documentation Pattern v1.0.0 + +Standardizes how Django projects build, configure, and deploy Sphinx documentation under a single `settings.py` — using the `TESTING` env-var flag to relax required-secret checks so docs build cleanly in CI without a real `.env`. + +## 🐾 Red Panda Approval™ + +This pattern follows Red Panda Approval standards. + +--- + +## Why a Pattern, Not a Shared Implementation + +Every Django project has its own: + +- **Required env vars** — one project needs `MCP_JWT_SECRET`, another needs `SLACK_TOKEN`, a third needs neither. +- **App layout** — `apps/` vs. top-level packages; some projects ship one app, others fifteen. +- **Autodoc-poisoning attributes** — DRF projects have class-level `queryset = Model.objects.filter(...)`; pure-Django projects may not. +- **Deploy target** — different hosts, ports, paths, and SSH key names per environment. + +A shared library can't paper over those differences. Instead, this pattern defines: + +- **Required interface** — the four files every project must have. +- **Recommended behaviours** — what most projects should include. +- **Extension guidelines** — what to add or skip per project. +- **Standard Sphinx extension set** — for consistency across projects. + +--- + +## Required Interface + +The non-negotiable minimum every Django project must provide. + +### 1. `settings.py` — TESTING-gated safe defaults + +Every required env var (those without a `default=`) must have a `TESTING`-mode fallback. Read `TESTING` **first**, then branch every required `env('X')` call: + +```python +# Test mode flag — read first so it can relax required-env-var checks below. +TESTING = env.bool('TESTING', default=False) + +DEBUG = env.bool('DEBUG', default=False) + +# In TESTING mode (unit tests, docs build) required keys fall back to safe +# dummies so the settings module imports without a real .env. In production +# they remain required — missing values fail loud. +if TESTING: + SECRET_KEY = env('SECRET_KEY', default='testing-insecure-key') + ALLOWED_HOSTS = env.list('ALLOWED_HOSTS', default=['testserver', 'localhost', '127.0.0.1']) + CSRF_TRUSTED_ORIGINS = env.list('CSRF_TRUSTED_ORIGINS', default=['http://localhost']) + # ...any other required secrets get a 'testing-insecure-*' default here +else: + SECRET_KEY = env('SECRET_KEY') + ALLOWED_HOSTS = env.list('ALLOWED_HOSTS') + CSRF_TRUSTED_ORIGINS = env.list('CSRF_TRUSTED_ORIGINS') + # ...and the production no-default form here +``` + +Rule: **every** required env var read in `settings.py` (anything that uses `env('X')` without `default=`) gets paired branches like above. Production fails loud on missing; TESTING falls back. + +### 2. Database choice gated on `TESTING` + +```python +if TESTING: + # Test/docs build: in-memory SQLite. No real DB needed. + DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': ':memory:', + } + } +elif env('APP_DB_NAME', default=None): + # Production: PostgreSQL (or whatever the project uses) + DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.postgresql', + 'NAME': env('APP_DB_NAME'), + 'USER': env('APP_DB_USER'), + 'PASSWORD': env('APP_DB_PASSWORD'), + 'HOST': env('DB_HOST'), + 'PORT': env('DB_PORT'), + } + } +else: + # Local development: SQLite file + DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': BASE_DIR / 'db.sqlite3', + } + } +``` + +### 3. `docs/source/conf.py` — boot Django in TESTING mode + neuter QuerySet repr + +```python +import os +import sys + +import django + +# Adjust this path to point at your Django package directory. +sys.path.insert(0, os.path.abspath('../../')) + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', '.settings') + +# Load real .env if present (local dev). In CI there is none and that's fine. +_repo_root = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..')) +_env_file = os.path.join(_repo_root, '.env') +if os.path.exists(_env_file): + with open(_env_file) as _f: + for _line in _f: + _line = _line.strip() + if not _line or _line.startswith('#') or '=' not in _line: + continue + _key, _val = _line.split('=', 1) + os.environ.setdefault(_key.strip(), _val.strip()) + +# Force TESTING mode so settings.py uses its safe dummy defaults and the +# in-memory SQLite database. The docs build never serves traffic or touches +# real data, so the production "fail loud on missing secret" contract does +# not apply here. +os.environ['TESTING'] = 'true' + +django.setup() + +# Sphinx 9 autodoc calls repr() on every class attribute it documents. +# Django's QuerySet.__repr__ executes a SELECT against the database — which +# documentation has no business doing. Intercept object_description so +# QuerySet instances render as a static string instead. +from django.db.models.query import QuerySet # noqa: E402 +import sphinx.util.inspect as _sphinx_inspect # noqa: E402 + +_orig_object_description = _sphinx_inspect.object_description + + +def _safe_object_description(obj, *args, **kwargs): + if isinstance(obj, QuerySet): + return f'' + return _orig_object_description(obj, *args, **kwargs) + + +_sphinx_inspect.object_description = _safe_object_description + +# ── Sphinx configuration below ──────────────────────────────────────────── +project = '' +copyright = ', ' +author = '' +release = '1.0' + +extensions = [ + 'sphinx.ext.autodoc', + 'sphinx.ext.viewcode', + 'sphinx.ext.napoleon', + 'sphinx.ext.intersphinx', + 'sphinx_autodoc_typehints', + 'sphinxcontrib.httpdomain', + 'sphinxcontrib.mermaid', + 'myst_parser', +] + +source_suffix = {'.rst': 'restructuredtext', '.md': 'markdown'} + +myst_enable_extensions = ['colon_fence', 'deflist', 'tasklist', 'attrs_inline'] +myst_heading_anchors = 4 + +autodoc_default_options = { + 'members': True, + 'member-order': 'bysource', + 'special-members': '__init__', + 'undoc-members': True, + 'exclude-members': '__weakref__', +} +autodoc_inherit_docstrings = False +napoleon_use_ivar = True + +html_theme = 'sphinx_rtd_theme' +html_static_path = ['_static'] +html_theme_options = { + 'navigation_depth': 4, + 'collapse_navigation': False, + 'sticky_navigation': True, + 'includehidden': True, + 'titles_only': False, +} +``` + +### 4. `.gitea/workflows/docs.yml` — build + failure-debug + deploy + +The failure-debug trio (`continue-on-error` + log dump + explicit fail) is **required** — without it, the Sphinx `ValueError` traceback in `/tmp/sphinx-err-*.log` is invisible in the Gitea UI and the build is effectively undiagnosable. + +```yaml +name: Build & Deploy Docs + +on: + push: + branches: [main] + paths: + - '/**' + - 'docs/**' + - 'pyproject.toml' + - '.gitea/workflows/docs.yml' + +jobs: + build-and-deploy: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: '3.11' + + - name: Install package + docs deps + run: | + pip install --upgrade pip + pip install -e ".[docs]" + + - name: Read version from pyproject.toml + id: version + run: | + VERSION=$(python -c "import tomllib; print(tomllib.load(open('pyproject.toml','rb'))['project']['version'])") + echo "version=$VERSION" >> "$GITHUB_OUTPUT" + + # ─── Failure-debug trio (REQUIRED) ───────────────────────────────── + - name: Build HTML + id: build_html + run: | + cd docs + ./regenerate_docs.sh + continue-on-error: true + + - name: Print Sphinx error log on failure + if: steps.build_html.outcome == 'failure' + run: | + echo "=== Sphinx error log ===" + cat /tmp/sphinx-err-*.log 2>/dev/null || echo "(no sphinx error log found)" + + - name: Fail if build failed + if: steps.build_html.outcome == 'failure' + run: exit 1 + # ─────────────────────────────────────────────────────────────────── + + - name: Install rsync + openssh + run: | + apt-get update + apt-get install -y --no-install-recommends rsync openssh-client + + - name: Configure SSH + run: | + mkdir -p ~/.ssh + printf '%s\n' "${{ secrets.DOCS_DEPLOY_KEY }}" > ~/.ssh/id_ed25519 + chmod 600 ~/.ssh/id_ed25519 + ssh-keyscan -p ${{ vars.DOCS_HOST_PORT }} ${{ vars.DOCS_HOST }} >> ~/.ssh/known_hosts + + - name: Test SSH connectivity + run: | + ssh -o BatchMode=yes -o ConnectTimeout=10 \ + -p ${{ vars.DOCS_HOST_PORT }} -i ~/.ssh/id_ed25519 \ + git@${{ vars.DOCS_HOST }} "id && echo 'SSH OK'" + + - name: Rsync to versioned path + run: | + rsync -av --delete \ + -e "ssh -p ${{ vars.DOCS_HOST_PORT }} -i ~/.ssh/id_ed25519" \ + docs/_build/html/ \ + git@${{ vars.DOCS_HOST }}:/var/www/docs//${{ steps.version.outputs.version }}/ + + - name: Rsync to latest + run: | + rsync -av --delete \ + -e "ssh -p ${{ vars.DOCS_HOST_PORT }} -i ~/.ssh/id_ed25519" \ + docs/_build/html/ \ + git@${{ vars.DOCS_HOST }}:/var/www/docs//latest/ + + - name: Regenerate versions index + run: | + ssh -p ${{ vars.DOCS_HOST_PORT }} -i ~/.ssh/id_ed25519 git@${{ vars.DOCS_HOST }} \ + 'python3 - <") + versions = sorted( + (p.name for p in root.iterdir() if p.is_dir()), + reverse=True, + ) + html = ["<Project> Docs", + "

Documentation

    "] + for v in versions: + html.append(f"
  • {v}
  • ") + html.append("
") + (root / "index.html").write_text("\n".join(html)) + PY' +``` + +Required Gitea secrets/variables: + +- `secrets.DOCS_DEPLOY_KEY` — SSH private key authorised on the deploy host. +- `vars.DOCS_HOST` — deploy host (e.g. `docs.example.com`). +- `vars.DOCS_HOST_PORT` — SSH port (typically `22`). + +--- + +## Standard Sphinx Extensions + +Use this exact extension set for consistency across projects: + +```python +extensions = [ + 'sphinx.ext.autodoc', # Pull docs from Python docstrings + 'sphinx.ext.viewcode', # "[source]" links to highlighted source + 'sphinx.ext.napoleon', # Google / NumPy style docstring support + 'sphinx.ext.intersphinx', # Cross-link to other projects' Sphinx docs + 'sphinx_autodoc_typehints', # Render PEP 484 type hints in docs + 'sphinxcontrib.httpdomain', # ".. http:get::" etc. for REST APIs + 'sphinxcontrib.mermaid', # Mermaid diagrams in Markdown / RST + 'myst_parser', # Markdown source files alongside RST +] +``` + +And the matching `pyproject.toml` extras group: + +```toml +[project.optional-dependencies] +docs = [ + "sphinx", + "sphinx-rtd-theme", + "sphinx-autodoc-typehints", + "sphinx-autobuild", + "sphinxcontrib-httpdomain", + "sphinxcontrib-mermaid", + "myst-parser", +] +``` + +--- + +## Recommended Behaviours + +Behaviours that most projects should include but are not strictly required: + +- **Live rebuild during authoring** — `make livehtml` (via `sphinx-autobuild`) for hot-reload editing. +- **One-shot regen script** — `docs/regenerate_docs.sh` runs `make clean`, `sphinx-apidoc` over every app, then `make html`. Drives both local development and the CI pipeline. +- **Mermaid for diagrams** — text-based, diffable, lives in the `.md` / `.rst` source. Avoid binary diagram assets. +- **Static images in `source/_static/`** — referenced with relative paths. +- **Hand-written prose in Markdown (MyST)** alongside autogenerated reference docs in RST. The two coexist via `myst_parser` + `source_suffix`. +- **Project root `CLAUDE.md` (or equivalent) names docs as the single source of truth** — discourage parallel READMEs that drift. + +--- + +## Pattern Variant 1: DRF / QuerySet Autodoc Poisoning + +**Problem.** Sphinx 9 autodoc renders class attributes by calling `repr()` on the live object. Django's `QuerySet.__repr__` triggers `_fetch_all()`, which opens a database connection and runs a `SELECT`. For DRF viewsets like: + +```python +class CurrencyViewSet(viewsets.ReadOnlyModelViewSet): + queryset = Currency.objects.filter(is_active=True) # ← autodoc tries to execute this + serializer_class = CurrencySerializer +``` + +…the docs build crashes with `psycopg.OperationalError: failed to resolve host 'postgres'` (or whatever DB hostname is configured), even in TESTING mode where the in-memory SQLite has no tables. + +**Solution.** Monkey-patch `sphinx.util.inspect.object_description` in `conf.py` to short-circuit QuerySets before `repr()` is called: + +```python +from django.db.models.query import QuerySet +import sphinx.util.inspect as _sphinx_inspect + +_orig_object_description = _sphinx_inspect.object_description + + +def _safe_object_description(obj, *args, **kwargs): + if isinstance(obj, QuerySet): + return f'' + return _orig_object_description(obj, *args, **kwargs) + + +_sphinx_inspect.object_description = _safe_object_description +``` + +This must run **after** `django.setup()` (so `QuerySet` can be imported) but **before** Sphinx starts processing documents. + +--- + +## Pattern Variant 2: Settings-Driven TESTING Mode + +**Problem.** Docs build needs to import `settings.py` but has no real `.env` in CI. Production-mode `env('SECRET_KEY')` calls (no default) raise `ImproperlyConfigured` and the build crashes before Sphinx even starts. + +**Solution.** Read `TESTING` first in `settings.py`, then gate every required `env('X')` behind it: + +```python +TESTING = env.bool('TESTING', default=False) +if TESTING: + SECRET_KEY = env('SECRET_KEY', default='testing-insecure-key') +else: + SECRET_KEY = env('SECRET_KEY') +``` + +`conf.py` flips the switch: + +```python +os.environ['TESTING'] = 'true' +django.setup() +``` + +**Bonus.** This also fixes a latent bug where `python manage.py test` would fail in any environment without `.env`. The same defaults that unblock the docs build now unblock the test suite — one mechanism, two payoffs. + +--- + +## Pattern Variant 3: Gitea Actions Deploy Workflow + +The workflow has four logical phases: + +1. **Setup** — checkout, Python, `pip install -e ".[docs]"`, read version from `pyproject.toml`. +2. **Build with failure visibility** — the three-step trio shown above. The `continue-on-error: true` on the build step plus `if: steps.build_html.outcome == 'failure'` on the log-dump and fail steps ensures the Sphinx traceback reaches the Gitea log even when the build crashes. +3. **SSH setup** — write the deploy key to `~/.ssh/id_ed25519`, scan the host into `known_hosts`, verify connectivity. +4. **Deploy** — rsync to `/var/www/docs///`, rsync to `…/latest/`, regenerate the versions index page on the remote host via a heredoc Python script. + +The deploy host is expected to serve `/var/www/docs/` over HTTPS via nginx or similar. Each pushed version gets its own directory; `latest/` is a copy of the most recent build. The versions index lists every directory alphabetically. + +--- + +## Domain Extension Examples + +### Project without DRF / class-level QuerySets + +If your project has no `queryset = Model.objects.filter(...)` attributes at module load time, the `_safe_object_description` monkey-patch is unnecessary. You can omit it. The `TESTING=true` switch is still required because settings.py still has required env vars. + +### Project with extra required secrets + +Add each extra key to the TESTING branch in `settings.py`: + +```python +if TESTING: + SECRET_KEY = env('SECRET_KEY', default='testing-insecure-key') + SLACK_TOKEN = env('SLACK_TOKEN', default='testing-insecure-slack') + STRIPE_API_KEY = env('STRIPE_API_KEY', default='testing-insecure-stripe') +else: + SECRET_KEY = env('SECRET_KEY') + SLACK_TOKEN = env('SLACK_TOKEN') + STRIPE_API_KEY = env('STRIPE_API_KEY') +``` + +No changes needed to `conf.py` — the single `TESTING=true` flip covers them all. + +### Project on a non-Postgres database (MySQL, MariaDB) + +No special handling needed. The `if TESTING:` branch in `settings.py` switches to in-memory SQLite regardless of what production uses. The MySQL driver is never imported during a docs build. + +--- + +## Anti-Patterns + +- ❌ **Don't load `.env.example` as a runtime fallback.** It's a documentation file with placeholder values like `DB_HOST=postgres` — those placeholders will poison the docs build by making `settings.py` believe Postgres is available. +- ❌ **Don't override `settings.DATABASES` after `django.setup()`.** Django's `ConnectionHandler.databases` is a `@cached_property` populated during app loading; mutating `settings.DATABASES` afterwards has no effect. +- ❌ **Don't add a separate `settings_docs.py`.** Env-var toggles are the project convention. A separate settings module fragments the config surface and forces every dev to remember which settings file applies in which context. +- ❌ **Don't hand-edit `docs/source/reference/apps/`.** That tree is regenerated by `sphinx-apidoc` on every CI run. Hand-edits get overwritten. +- ❌ **Don't suppress build errors in CI without dumping `/tmp/sphinx-err-*.log` first.** Sphinx writes its full traceback there and nowhere else; without the dump, the Gitea UI shows a one-line `ValueError` with no useful context. +- ❌ **Don't use `os.environ.setdefault('TESTING', 'true')` in `conf.py`.** A user with `TESTING=false` in their local `.env` will see the setdefault skipped and hit production-mode behaviour during docs build. Use plain `os.environ['TESTING'] = 'true'` so it always wins. + +--- + +## Settings + +Document the `TESTING` env var contract: + +```python +# settings.py +TESTING = env.bool('TESTING', default=False) +# When true, gates safe-default branches for: +# - Required secrets (SECRET_KEY and any other env('X') with no default) +# - Required lists (ALLOWED_HOSTS, CSRF_TRUSTED_ORIGINS) +# - DATABASES → in-memory SQLite +# - CACHES → dummy backend +# - DRF throttling → disabled +# - MIGRATION_MODULES → disabled (no DB schema) +# - PASSWORD_HASHERS → fast hashers +# - LOGGING → minimal +# +# Set true for: pytest, manage.py test, docs build. +# Set false (or unset) for: production, local dev with real services. +``` + +--- + +## Testing + +Two verification recipes every project should run before pushing. + +### 1. Local build with real `.env` + +```bash +cd docs +make clean && make html +``` + +Expected: `build succeeded.` with zero warnings. Open `_build/html/index.html` to spot-check rendering. + +### 2. CI simulation (no `.env`) + +```bash +mv .env .env.bak +cd docs && make clean && make html +cd .. && mv .env.bak .env +``` + +Expected: `build succeeded.` again. Settings.py uses TESTING-mode dummies; the in-memory SQLite has no tables but autodoc never queries it because the monkey-patch short-circuits QuerySet repr(). + +### 3. Latent test-suite bug check + +```bash +mv .env .env.bak +python manage.py test --keepdb 2>&1 | head -5 +mv .env.bak .env +``` + +Expected: tests start running normally (not `ImproperlyConfigured: Set the SECRET_KEY environment variable`). This confirms the TESTING-mode defaults are wired into `settings.py` correctly — the docs build and the test suite share the same fallback mechanism. + +### 4. CI dry-run (Gitea Actions) + +Push to a feature branch. The workflow's failure-debug trio means any crash surfaces with a full traceback in the Gitea Actions log. Read the trace, fix the cause, push again. diff --git a/docs/regenerate_docs.sh b/docs/regenerate_docs.sh new file mode 100755 index 0000000..04938b8 --- /dev/null +++ b/docs/regenerate_docs.sh @@ -0,0 +1,42 @@ +#!/usr/bin/env bash +# Regenerate Sphinx API reference for every Mnemosyne app, then build HTML. +# Drives both local development and the CI pipeline. +set -euo pipefail + +cd "$(dirname "$0")" + +APPS=(themis library llm_manager mcp_server) +SOURCE_REF=source/reference/apps +PACKAGE_ROOT=../mnemosyne + +make clean + +mkdir -p "$SOURCE_REF" + +# Per-app subdir so each app gets its own modules.rst (sphinx-apidoc +# overwrites the file otherwise, leaving only the last app in the index). +for app in "${APPS[@]}"; do + sphinx-apidoc \ + --force \ + --separate \ + --module-first \ + --output-dir "$SOURCE_REF/$app" \ + "$PACKAGE_ROOT/$app" \ + "$PACKAGE_ROOT/$app/migrations" \ + "$PACKAGE_ROOT/$app/tests" +done + +# Write a top-level apps.rst that toctree's every app's modules.rst. +{ + echo "Applications" + echo "============" + echo + echo ".. toctree::" + echo " :maxdepth: 2" + echo + for app in "${APPS[@]}"; do + echo " $app/modules" + done +} > "$SOURCE_REF/index.rst" + +make html diff --git a/docs/source/_static/.gitkeep b/docs/source/_static/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/docs/source/conf.py b/docs/source/conf.py new file mode 100644 index 0000000..c123867 --- /dev/null +++ b/docs/source/conf.py @@ -0,0 +1,97 @@ +import os +import sys +import tomllib + +# The Django package lives at /mnemosyne//. Adding the +# outer mnemosyne/ directory to sys.path lets autodoc resolve every app +# (themis, library, llm_manager, mcp_server) and the project settings module. +sys.path.insert(0, os.path.abspath('../../mnemosyne')) + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mnemosyne.settings') + +# Load real .env if present (local dev). In CI there is none and that's fine — +# settings.py provides a default for every env var it reads, so the import +# succeeds either way. +_repo_root = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..')) +_env_file = os.path.join(_repo_root, 'mnemosyne', '.env') +if os.path.exists(_env_file): + with open(_env_file) as _f: + for _line in _f: + _line = _line.strip() + if not _line or _line.startswith('#') or '=' not in _line: + continue + _key, _val = _line.split('=', 1) + os.environ.setdefault(_key.strip(), _val.strip()) + +import django # noqa: E402 + +django.setup() + +# Sphinx autodoc calls repr() on every class attribute it documents. Django's +# QuerySet.__repr__ executes a SELECT against the database — which doc builds +# have no business doing. Intercept object_description so QuerySet instances +# render as a static string instead. Mnemosyne's themis app has at least one +# DRF viewset with a class-level queryset attribute, so this matters. +from django.db.models.query import QuerySet # noqa: E402 +import sphinx.util.inspect as _sphinx_inspect # noqa: E402 + +_orig_object_description = _sphinx_inspect.object_description + + +def _safe_object_description(obj, *args, **kwargs): + if isinstance(obj, QuerySet): + return f'' + return _orig_object_description(obj, *args, **kwargs) + + +_sphinx_inspect.object_description = _safe_object_description + +# ── Sphinx configuration ────────────────────────────────────────────────── +project = 'Mnemosyne' +copyright = '2026, Mnemosyne Team' +author = 'Mnemosyne Team' + +with open(os.path.join(_repo_root, 'pyproject.toml'), 'rb') as _f: + release = tomllib.load(_f)['project']['version'] + +extensions = [ + 'sphinx.ext.autodoc', + 'sphinx.ext.viewcode', + 'sphinx.ext.napoleon', + 'sphinx.ext.intersphinx', + 'sphinx_autodoc_typehints', + 'sphinxcontrib.httpdomain', + 'sphinxcontrib.mermaid', + 'myst_parser', +] + +source_suffix = {'.rst': 'restructuredtext', '.md': 'markdown'} + +myst_enable_extensions = ['colon_fence', 'deflist', 'tasklist', 'attrs_inline'] +myst_heading_anchors = 4 + +autodoc_default_options = { + 'members': True, + 'member-order': 'bysource', + 'special-members': '__init__', + 'undoc-members': True, + 'exclude-members': '__weakref__', +} +autodoc_inherit_docstrings = False +napoleon_use_ivar = True + +intersphinx_mapping = { + 'python': ('https://docs.python.org/3', None), + 'django': ('https://docs.djangoproject.com/en/stable/', + 'https://docs.djangoproject.com/en/stable/_objects/'), +} + +html_theme = 'sphinx_rtd_theme' +html_static_path = ['_static'] +html_theme_options = { + 'navigation_depth': 4, + 'collapse_navigation': False, + 'sticky_navigation': True, + 'includehidden': True, + 'titles_only': False, +} diff --git a/docs/source/index.rst b/docs/source/index.rst new file mode 100644 index 0000000..937259f --- /dev/null +++ b/docs/source/index.rst @@ -0,0 +1,17 @@ +Mnemosyne Documentation +======================= + +Content-type-aware, multimodal personal knowledge management system. + +.. toctree:: + :maxdepth: 2 + :caption: API Reference + + reference/apps/index + +Indices +------- + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/docs/source/reference/apps/index.rst b/docs/source/reference/apps/index.rst new file mode 100644 index 0000000..a4446f3 --- /dev/null +++ b/docs/source/reference/apps/index.rst @@ -0,0 +1,10 @@ +Applications +============ + +.. toctree:: + :maxdepth: 2 + + themis/modules + library/modules + llm_manager/modules + mcp_server/modules diff --git a/docs/source/reference/apps/library/library.admin.rst b/docs/source/reference/apps/library/library.admin.rst new file mode 100644 index 0000000..478223f --- /dev/null +++ b/docs/source/reference/apps/library/library.admin.rst @@ -0,0 +1,7 @@ +library.admin module +==================== + +.. automodule:: library.admin + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/library/library.api.rst b/docs/source/reference/apps/library/library.api.rst new file mode 100644 index 0000000..363c124 --- /dev/null +++ b/docs/source/reference/apps/library/library.api.rst @@ -0,0 +1,18 @@ +library.api package +=================== + +.. automodule:: library.api + :members: + :show-inheritance: + :undoc-members: + +Submodules +---------- + +.. toctree:: + :maxdepth: 4 + + library.api.serializers + library.api.urls + library.api.views + library.api.workspaces diff --git a/docs/source/reference/apps/library/library.api.serializers.rst b/docs/source/reference/apps/library/library.api.serializers.rst new file mode 100644 index 0000000..309e5e6 --- /dev/null +++ b/docs/source/reference/apps/library/library.api.serializers.rst @@ -0,0 +1,7 @@ +library.api.serializers module +============================== + +.. automodule:: library.api.serializers + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/library/library.api.urls.rst b/docs/source/reference/apps/library/library.api.urls.rst new file mode 100644 index 0000000..31c768b --- /dev/null +++ b/docs/source/reference/apps/library/library.api.urls.rst @@ -0,0 +1,7 @@ +library.api.urls module +======================= + +.. automodule:: library.api.urls + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/library/library.api.views.rst b/docs/source/reference/apps/library/library.api.views.rst new file mode 100644 index 0000000..c501fd6 --- /dev/null +++ b/docs/source/reference/apps/library/library.api.views.rst @@ -0,0 +1,7 @@ +library.api.views module +======================== + +.. automodule:: library.api.views + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/library/library.api.workspaces.rst b/docs/source/reference/apps/library/library.api.workspaces.rst new file mode 100644 index 0000000..939c2bd --- /dev/null +++ b/docs/source/reference/apps/library/library.api.workspaces.rst @@ -0,0 +1,7 @@ +library.api.workspaces module +============================= + +.. automodule:: library.api.workspaces + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/library/library.apps.rst b/docs/source/reference/apps/library/library.apps.rst new file mode 100644 index 0000000..5ec9cb7 --- /dev/null +++ b/docs/source/reference/apps/library/library.apps.rst @@ -0,0 +1,7 @@ +library.apps module +=================== + +.. automodule:: library.apps + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/library/library.content_types.rst b/docs/source/reference/apps/library/library.content_types.rst new file mode 100644 index 0000000..e710c4a --- /dev/null +++ b/docs/source/reference/apps/library/library.content_types.rst @@ -0,0 +1,7 @@ +library.content\_types module +============================= + +.. automodule:: library.content_types + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/library/library.forms.rst b/docs/source/reference/apps/library/library.forms.rst new file mode 100644 index 0000000..45f36e7 --- /dev/null +++ b/docs/source/reference/apps/library/library.forms.rst @@ -0,0 +1,7 @@ +library.forms module +==================== + +.. automodule:: library.forms + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/library/library.management.commands.embed_collection.rst b/docs/source/reference/apps/library/library.management.commands.embed_collection.rst new file mode 100644 index 0000000..b725e2e --- /dev/null +++ b/docs/source/reference/apps/library/library.management.commands.embed_collection.rst @@ -0,0 +1,7 @@ +library.management.commands.embed\_collection module +==================================================== + +.. automodule:: library.management.commands.embed_collection + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/library/library.management.commands.embed_item.rst b/docs/source/reference/apps/library/library.management.commands.embed_item.rst new file mode 100644 index 0000000..6e6fac5 --- /dev/null +++ b/docs/source/reference/apps/library/library.management.commands.embed_item.rst @@ -0,0 +1,7 @@ +library.management.commands.embed\_item module +============================================== + +.. automodule:: library.management.commands.embed_item + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/library/library.management.commands.embedding_status.rst b/docs/source/reference/apps/library/library.management.commands.embedding_status.rst new file mode 100644 index 0000000..dd94da8 --- /dev/null +++ b/docs/source/reference/apps/library/library.management.commands.embedding_status.rst @@ -0,0 +1,7 @@ +library.management.commands.embedding\_status module +==================================================== + +.. automodule:: library.management.commands.embedding_status + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/library/library.management.commands.load_library_types.rst b/docs/source/reference/apps/library/library.management.commands.load_library_types.rst new file mode 100644 index 0000000..8ddbe98 --- /dev/null +++ b/docs/source/reference/apps/library/library.management.commands.load_library_types.rst @@ -0,0 +1,7 @@ +library.management.commands.load\_library\_types module +======================================================= + +.. automodule:: library.management.commands.load_library_types + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/library/library.management.commands.rst b/docs/source/reference/apps/library/library.management.commands.rst new file mode 100644 index 0000000..1eb81ac --- /dev/null +++ b/docs/source/reference/apps/library/library.management.commands.rst @@ -0,0 +1,21 @@ +library.management.commands package +=================================== + +.. automodule:: library.management.commands + :members: + :show-inheritance: + :undoc-members: + +Submodules +---------- + +.. toctree:: + :maxdepth: 4 + + library.management.commands.embed_collection + library.management.commands.embed_item + library.management.commands.embedding_status + library.management.commands.load_library_types + library.management.commands.search + library.management.commands.search_stats + library.management.commands.setup_neo4j_indexes diff --git a/docs/source/reference/apps/library/library.management.commands.search.rst b/docs/source/reference/apps/library/library.management.commands.search.rst new file mode 100644 index 0000000..443cad9 --- /dev/null +++ b/docs/source/reference/apps/library/library.management.commands.search.rst @@ -0,0 +1,7 @@ +library.management.commands.search module +========================================= + +.. automodule:: library.management.commands.search + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/library/library.management.commands.search_stats.rst b/docs/source/reference/apps/library/library.management.commands.search_stats.rst new file mode 100644 index 0000000..4beb25f --- /dev/null +++ b/docs/source/reference/apps/library/library.management.commands.search_stats.rst @@ -0,0 +1,7 @@ +library.management.commands.search\_stats module +================================================ + +.. automodule:: library.management.commands.search_stats + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/library/library.management.commands.setup_neo4j_indexes.rst b/docs/source/reference/apps/library/library.management.commands.setup_neo4j_indexes.rst new file mode 100644 index 0000000..741e83f --- /dev/null +++ b/docs/source/reference/apps/library/library.management.commands.setup_neo4j_indexes.rst @@ -0,0 +1,7 @@ +library.management.commands.setup\_neo4j\_indexes module +======================================================== + +.. automodule:: library.management.commands.setup_neo4j_indexes + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/library/library.management.rst b/docs/source/reference/apps/library/library.management.rst new file mode 100644 index 0000000..63f0008 --- /dev/null +++ b/docs/source/reference/apps/library/library.management.rst @@ -0,0 +1,15 @@ +library.management package +========================== + +.. automodule:: library.management + :members: + :show-inheritance: + :undoc-members: + +Subpackages +----------- + +.. toctree:: + :maxdepth: 4 + + library.management.commands diff --git a/docs/source/reference/apps/library/library.metrics.rst b/docs/source/reference/apps/library/library.metrics.rst new file mode 100644 index 0000000..8d561a7 --- /dev/null +++ b/docs/source/reference/apps/library/library.metrics.rst @@ -0,0 +1,7 @@ +library.metrics module +====================== + +.. automodule:: library.metrics + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/library/library.models.rst b/docs/source/reference/apps/library/library.models.rst new file mode 100644 index 0000000..6ab348c --- /dev/null +++ b/docs/source/reference/apps/library/library.models.rst @@ -0,0 +1,7 @@ +library.models module +===================== + +.. automodule:: library.models + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/library/library.rst b/docs/source/reference/apps/library/library.rst new file mode 100644 index 0000000..4e8b5c6 --- /dev/null +++ b/docs/source/reference/apps/library/library.rst @@ -0,0 +1,34 @@ +library package +=============== + +.. automodule:: library + :members: + :show-inheritance: + :undoc-members: + +Subpackages +----------- + +.. toctree:: + :maxdepth: 4 + + library.api + library.management + library.services + +Submodules +---------- + +.. toctree:: + :maxdepth: 4 + + library.admin + library.apps + library.content_types + library.forms + library.metrics + library.models + library.tasks + library.urls + library.utils + library.views diff --git a/docs/source/reference/apps/library/library.services.chunker.rst b/docs/source/reference/apps/library/library.services.chunker.rst new file mode 100644 index 0000000..863a56d --- /dev/null +++ b/docs/source/reference/apps/library/library.services.chunker.rst @@ -0,0 +1,7 @@ +library.services.chunker module +=============================== + +.. automodule:: library.services.chunker + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/library/library.services.concepts.rst b/docs/source/reference/apps/library/library.services.concepts.rst new file mode 100644 index 0000000..395cc0e --- /dev/null +++ b/docs/source/reference/apps/library/library.services.concepts.rst @@ -0,0 +1,7 @@ +library.services.concepts module +================================ + +.. automodule:: library.services.concepts + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/library/library.services.daedalus_s3.rst b/docs/source/reference/apps/library/library.services.daedalus_s3.rst new file mode 100644 index 0000000..98a671f --- /dev/null +++ b/docs/source/reference/apps/library/library.services.daedalus_s3.rst @@ -0,0 +1,7 @@ +library.services.daedalus\_s3 module +==================================== + +.. automodule:: library.services.daedalus_s3 + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/library/library.services.embedding_client.rst b/docs/source/reference/apps/library/library.services.embedding_client.rst new file mode 100644 index 0000000..faa48c9 --- /dev/null +++ b/docs/source/reference/apps/library/library.services.embedding_client.rst @@ -0,0 +1,7 @@ +library.services.embedding\_client module +========================================= + +.. automodule:: library.services.embedding_client + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/library/library.services.fusion.rst b/docs/source/reference/apps/library/library.services.fusion.rst new file mode 100644 index 0000000..4b0f24f --- /dev/null +++ b/docs/source/reference/apps/library/library.services.fusion.rst @@ -0,0 +1,7 @@ +library.services.fusion module +============================== + +.. automodule:: library.services.fusion + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/library/library.services.parsers.rst b/docs/source/reference/apps/library/library.services.parsers.rst new file mode 100644 index 0000000..42e4f57 --- /dev/null +++ b/docs/source/reference/apps/library/library.services.parsers.rst @@ -0,0 +1,7 @@ +library.services.parsers module +=============================== + +.. automodule:: library.services.parsers + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/library/library.services.pipeline.rst b/docs/source/reference/apps/library/library.services.pipeline.rst new file mode 100644 index 0000000..1b89598 --- /dev/null +++ b/docs/source/reference/apps/library/library.services.pipeline.rst @@ -0,0 +1,7 @@ +library.services.pipeline module +================================ + +.. automodule:: library.services.pipeline + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/library/library.services.reranker.rst b/docs/source/reference/apps/library/library.services.reranker.rst new file mode 100644 index 0000000..69de4df --- /dev/null +++ b/docs/source/reference/apps/library/library.services.reranker.rst @@ -0,0 +1,7 @@ +library.services.reranker module +================================ + +.. automodule:: library.services.reranker + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/library/library.services.rst b/docs/source/reference/apps/library/library.services.rst new file mode 100644 index 0000000..892a956 --- /dev/null +++ b/docs/source/reference/apps/library/library.services.rst @@ -0,0 +1,25 @@ +library.services package +======================== + +.. automodule:: library.services + :members: + :show-inheritance: + :undoc-members: + +Submodules +---------- + +.. toctree:: + :maxdepth: 4 + + library.services.chunker + library.services.concepts + library.services.daedalus_s3 + library.services.embedding_client + library.services.fusion + library.services.parsers + library.services.pipeline + library.services.reranker + library.services.search + library.services.text_utils + library.services.vision diff --git a/docs/source/reference/apps/library/library.services.search.rst b/docs/source/reference/apps/library/library.services.search.rst new file mode 100644 index 0000000..aa614a8 --- /dev/null +++ b/docs/source/reference/apps/library/library.services.search.rst @@ -0,0 +1,7 @@ +library.services.search module +============================== + +.. automodule:: library.services.search + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/library/library.services.text_utils.rst b/docs/source/reference/apps/library/library.services.text_utils.rst new file mode 100644 index 0000000..9ddaf08 --- /dev/null +++ b/docs/source/reference/apps/library/library.services.text_utils.rst @@ -0,0 +1,7 @@ +library.services.text\_utils module +=================================== + +.. automodule:: library.services.text_utils + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/library/library.services.vision.rst b/docs/source/reference/apps/library/library.services.vision.rst new file mode 100644 index 0000000..75992a4 --- /dev/null +++ b/docs/source/reference/apps/library/library.services.vision.rst @@ -0,0 +1,7 @@ +library.services.vision module +============================== + +.. automodule:: library.services.vision + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/library/library.tasks.rst b/docs/source/reference/apps/library/library.tasks.rst new file mode 100644 index 0000000..5b86fd5 --- /dev/null +++ b/docs/source/reference/apps/library/library.tasks.rst @@ -0,0 +1,7 @@ +library.tasks module +==================== + +.. automodule:: library.tasks + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/library/library.urls.rst b/docs/source/reference/apps/library/library.urls.rst new file mode 100644 index 0000000..1834a14 --- /dev/null +++ b/docs/source/reference/apps/library/library.urls.rst @@ -0,0 +1,7 @@ +library.urls module +=================== + +.. automodule:: library.urls + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/library/library.utils.rst b/docs/source/reference/apps/library/library.utils.rst new file mode 100644 index 0000000..4cd033c --- /dev/null +++ b/docs/source/reference/apps/library/library.utils.rst @@ -0,0 +1,7 @@ +library.utils module +==================== + +.. automodule:: library.utils + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/library/library.views.rst b/docs/source/reference/apps/library/library.views.rst new file mode 100644 index 0000000..054ae4e --- /dev/null +++ b/docs/source/reference/apps/library/library.views.rst @@ -0,0 +1,7 @@ +library.views module +==================== + +.. automodule:: library.views + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/library/modules.rst b/docs/source/reference/apps/library/modules.rst new file mode 100644 index 0000000..fe35eae --- /dev/null +++ b/docs/source/reference/apps/library/modules.rst @@ -0,0 +1,7 @@ +library +======= + +.. toctree:: + :maxdepth: 4 + + library diff --git a/docs/source/reference/apps/llm_manager/llm_manager.admin.rst b/docs/source/reference/apps/llm_manager/llm_manager.admin.rst new file mode 100644 index 0000000..b74e858 --- /dev/null +++ b/docs/source/reference/apps/llm_manager/llm_manager.admin.rst @@ -0,0 +1,7 @@ +llm\_manager.admin module +========================= + +.. automodule:: llm_manager.admin + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/llm_manager/llm_manager.api.rst b/docs/source/reference/apps/llm_manager/llm_manager.api.rst new file mode 100644 index 0000000..f9ae52a --- /dev/null +++ b/docs/source/reference/apps/llm_manager/llm_manager.api.rst @@ -0,0 +1,17 @@ +llm\_manager.api package +======================== + +.. automodule:: llm_manager.api + :members: + :show-inheritance: + :undoc-members: + +Submodules +---------- + +.. toctree:: + :maxdepth: 4 + + llm_manager.api.serializers + llm_manager.api.urls + llm_manager.api.views diff --git a/docs/source/reference/apps/llm_manager/llm_manager.api.serializers.rst b/docs/source/reference/apps/llm_manager/llm_manager.api.serializers.rst new file mode 100644 index 0000000..1b91efe --- /dev/null +++ b/docs/source/reference/apps/llm_manager/llm_manager.api.serializers.rst @@ -0,0 +1,7 @@ +llm\_manager.api.serializers module +=================================== + +.. automodule:: llm_manager.api.serializers + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/llm_manager/llm_manager.api.urls.rst b/docs/source/reference/apps/llm_manager/llm_manager.api.urls.rst new file mode 100644 index 0000000..13c745b --- /dev/null +++ b/docs/source/reference/apps/llm_manager/llm_manager.api.urls.rst @@ -0,0 +1,7 @@ +llm\_manager.api.urls module +============================ + +.. automodule:: llm_manager.api.urls + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/llm_manager/llm_manager.api.views.rst b/docs/source/reference/apps/llm_manager/llm_manager.api.views.rst new file mode 100644 index 0000000..6a14ec9 --- /dev/null +++ b/docs/source/reference/apps/llm_manager/llm_manager.api.views.rst @@ -0,0 +1,7 @@ +llm\_manager.api.views module +============================= + +.. automodule:: llm_manager.api.views + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/llm_manager/llm_manager.apps.rst b/docs/source/reference/apps/llm_manager/llm_manager.apps.rst new file mode 100644 index 0000000..598fe8b --- /dev/null +++ b/docs/source/reference/apps/llm_manager/llm_manager.apps.rst @@ -0,0 +1,7 @@ +llm\_manager.apps module +======================== + +.. automodule:: llm_manager.apps + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/llm_manager/llm_manager.encryption.rst b/docs/source/reference/apps/llm_manager/llm_manager.encryption.rst new file mode 100644 index 0000000..a8b0fe6 --- /dev/null +++ b/docs/source/reference/apps/llm_manager/llm_manager.encryption.rst @@ -0,0 +1,7 @@ +llm\_manager.encryption module +============================== + +.. automodule:: llm_manager.encryption + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/llm_manager/llm_manager.forms.rst b/docs/source/reference/apps/llm_manager/llm_manager.forms.rst new file mode 100644 index 0000000..5983291 --- /dev/null +++ b/docs/source/reference/apps/llm_manager/llm_manager.forms.rst @@ -0,0 +1,7 @@ +llm\_manager.forms module +========================= + +.. automodule:: llm_manager.forms + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/llm_manager/llm_manager.management.commands.load_default_llm_models.rst b/docs/source/reference/apps/llm_manager/llm_manager.management.commands.load_default_llm_models.rst new file mode 100644 index 0000000..5835df5 --- /dev/null +++ b/docs/source/reference/apps/llm_manager/llm_manager.management.commands.load_default_llm_models.rst @@ -0,0 +1,7 @@ +llm\_manager.management.commands.load\_default\_llm\_models module +================================================================== + +.. automodule:: llm_manager.management.commands.load_default_llm_models + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/llm_manager/llm_manager.management.commands.rst b/docs/source/reference/apps/llm_manager/llm_manager.management.commands.rst new file mode 100644 index 0000000..2e6027c --- /dev/null +++ b/docs/source/reference/apps/llm_manager/llm_manager.management.commands.rst @@ -0,0 +1,15 @@ +llm\_manager.management.commands package +======================================== + +.. automodule:: llm_manager.management.commands + :members: + :show-inheritance: + :undoc-members: + +Submodules +---------- + +.. toctree:: + :maxdepth: 4 + + llm_manager.management.commands.load_default_llm_models diff --git a/docs/source/reference/apps/llm_manager/llm_manager.management.rst b/docs/source/reference/apps/llm_manager/llm_manager.management.rst new file mode 100644 index 0000000..35a7d2f --- /dev/null +++ b/docs/source/reference/apps/llm_manager/llm_manager.management.rst @@ -0,0 +1,15 @@ +llm\_manager.management package +=============================== + +.. automodule:: llm_manager.management + :members: + :show-inheritance: + :undoc-members: + +Subpackages +----------- + +.. toctree:: + :maxdepth: 4 + + llm_manager.management.commands diff --git a/docs/source/reference/apps/llm_manager/llm_manager.models.rst b/docs/source/reference/apps/llm_manager/llm_manager.models.rst new file mode 100644 index 0000000..2d50d3c --- /dev/null +++ b/docs/source/reference/apps/llm_manager/llm_manager.models.rst @@ -0,0 +1,7 @@ +llm\_manager.models module +========================== + +.. automodule:: llm_manager.models + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/llm_manager/llm_manager.rst b/docs/source/reference/apps/llm_manager/llm_manager.rst new file mode 100644 index 0000000..f8f00d3 --- /dev/null +++ b/docs/source/reference/apps/llm_manager/llm_manager.rst @@ -0,0 +1,32 @@ +llm\_manager package +==================== + +.. automodule:: llm_manager + :members: + :show-inheritance: + :undoc-members: + +Subpackages +----------- + +.. toctree:: + :maxdepth: 4 + + llm_manager.api + llm_manager.management + +Submodules +---------- + +.. toctree:: + :maxdepth: 4 + + llm_manager.admin + llm_manager.apps + llm_manager.encryption + llm_manager.forms + llm_manager.models + llm_manager.services + llm_manager.tasks + llm_manager.urls + llm_manager.views diff --git a/docs/source/reference/apps/llm_manager/llm_manager.services.rst b/docs/source/reference/apps/llm_manager/llm_manager.services.rst new file mode 100644 index 0000000..688768e --- /dev/null +++ b/docs/source/reference/apps/llm_manager/llm_manager.services.rst @@ -0,0 +1,7 @@ +llm\_manager.services module +============================ + +.. automodule:: llm_manager.services + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/llm_manager/llm_manager.tasks.rst b/docs/source/reference/apps/llm_manager/llm_manager.tasks.rst new file mode 100644 index 0000000..483232c --- /dev/null +++ b/docs/source/reference/apps/llm_manager/llm_manager.tasks.rst @@ -0,0 +1,7 @@ +llm\_manager.tasks module +========================= + +.. automodule:: llm_manager.tasks + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/llm_manager/llm_manager.urls.rst b/docs/source/reference/apps/llm_manager/llm_manager.urls.rst new file mode 100644 index 0000000..839981b --- /dev/null +++ b/docs/source/reference/apps/llm_manager/llm_manager.urls.rst @@ -0,0 +1,7 @@ +llm\_manager.urls module +======================== + +.. automodule:: llm_manager.urls + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/llm_manager/llm_manager.views.rst b/docs/source/reference/apps/llm_manager/llm_manager.views.rst new file mode 100644 index 0000000..dd3b4ed --- /dev/null +++ b/docs/source/reference/apps/llm_manager/llm_manager.views.rst @@ -0,0 +1,7 @@ +llm\_manager.views module +========================= + +.. automodule:: llm_manager.views + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/llm_manager/modules.rst b/docs/source/reference/apps/llm_manager/modules.rst new file mode 100644 index 0000000..ba2be3f --- /dev/null +++ b/docs/source/reference/apps/llm_manager/modules.rst @@ -0,0 +1,7 @@ +llm_manager +=========== + +.. toctree:: + :maxdepth: 4 + + llm_manager diff --git a/docs/source/reference/apps/mcp_server/mcp_server.admin.rst b/docs/source/reference/apps/mcp_server/mcp_server.admin.rst new file mode 100644 index 0000000..864e209 --- /dev/null +++ b/docs/source/reference/apps/mcp_server/mcp_server.admin.rst @@ -0,0 +1,7 @@ +mcp\_server.admin module +======================== + +.. automodule:: mcp_server.admin + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/mcp_server/mcp_server.api.rst b/docs/source/reference/apps/mcp_server/mcp_server.api.rst new file mode 100644 index 0000000..225e311 --- /dev/null +++ b/docs/source/reference/apps/mcp_server/mcp_server.api.rst @@ -0,0 +1,17 @@ +mcp\_server.api package +======================= + +.. automodule:: mcp_server.api + :members: + :show-inheritance: + :undoc-members: + +Submodules +---------- + +.. toctree:: + :maxdepth: 4 + + mcp_server.api.serializers + mcp_server.api.teams + mcp_server.api.urls diff --git a/docs/source/reference/apps/mcp_server/mcp_server.api.serializers.rst b/docs/source/reference/apps/mcp_server/mcp_server.api.serializers.rst new file mode 100644 index 0000000..7be264b --- /dev/null +++ b/docs/source/reference/apps/mcp_server/mcp_server.api.serializers.rst @@ -0,0 +1,7 @@ +mcp\_server.api.serializers module +================================== + +.. automodule:: mcp_server.api.serializers + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/mcp_server/mcp_server.api.teams.rst b/docs/source/reference/apps/mcp_server/mcp_server.api.teams.rst new file mode 100644 index 0000000..41d0cbd --- /dev/null +++ b/docs/source/reference/apps/mcp_server/mcp_server.api.teams.rst @@ -0,0 +1,7 @@ +mcp\_server.api.teams module +============================ + +.. automodule:: mcp_server.api.teams + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/mcp_server/mcp_server.api.urls.rst b/docs/source/reference/apps/mcp_server/mcp_server.api.urls.rst new file mode 100644 index 0000000..3fbb331 --- /dev/null +++ b/docs/source/reference/apps/mcp_server/mcp_server.api.urls.rst @@ -0,0 +1,7 @@ +mcp\_server.api.urls module +=========================== + +.. automodule:: mcp_server.api.urls + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/mcp_server/mcp_server.apps.rst b/docs/source/reference/apps/mcp_server/mcp_server.apps.rst new file mode 100644 index 0000000..f96779e --- /dev/null +++ b/docs/source/reference/apps/mcp_server/mcp_server.apps.rst @@ -0,0 +1,7 @@ +mcp\_server.apps module +======================= + +.. automodule:: mcp_server.apps + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/mcp_server/mcp_server.auth.rst b/docs/source/reference/apps/mcp_server/mcp_server.auth.rst new file mode 100644 index 0000000..a84b349 --- /dev/null +++ b/docs/source/reference/apps/mcp_server/mcp_server.auth.rst @@ -0,0 +1,7 @@ +mcp\_server.auth module +======================= + +.. automodule:: mcp_server.auth + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/mcp_server/mcp_server.context.rst b/docs/source/reference/apps/mcp_server/mcp_server.context.rst new file mode 100644 index 0000000..1d8bd25 --- /dev/null +++ b/docs/source/reference/apps/mcp_server/mcp_server.context.rst @@ -0,0 +1,7 @@ +mcp\_server.context module +========================== + +.. automodule:: mcp_server.context + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/mcp_server/mcp_server.forms.rst b/docs/source/reference/apps/mcp_server/mcp_server.forms.rst new file mode 100644 index 0000000..a0ac4ff --- /dev/null +++ b/docs/source/reference/apps/mcp_server/mcp_server.forms.rst @@ -0,0 +1,7 @@ +mcp\_server.forms module +======================== + +.. automodule:: mcp_server.forms + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/mcp_server/mcp_server.management.commands.backfill_library_memberships.rst b/docs/source/reference/apps/mcp_server/mcp_server.management.commands.backfill_library_memberships.rst new file mode 100644 index 0000000..6145797 --- /dev/null +++ b/docs/source/reference/apps/mcp_server/mcp_server.management.commands.backfill_library_memberships.rst @@ -0,0 +1,7 @@ +mcp\_server.management.commands.backfill\_library\_memberships module +===================================================================== + +.. automodule:: mcp_server.management.commands.backfill_library_memberships + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/mcp_server/mcp_server.management.commands.create_mcp_token.rst b/docs/source/reference/apps/mcp_server/mcp_server.management.commands.create_mcp_token.rst new file mode 100644 index 0000000..268bafc --- /dev/null +++ b/docs/source/reference/apps/mcp_server/mcp_server.management.commands.create_mcp_token.rst @@ -0,0 +1,7 @@ +mcp\_server.management.commands.create\_mcp\_token module +========================================================= + +.. automodule:: mcp_server.management.commands.create_mcp_token + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/mcp_server/mcp_server.management.commands.rst b/docs/source/reference/apps/mcp_server/mcp_server.management.commands.rst new file mode 100644 index 0000000..392b6c2 --- /dev/null +++ b/docs/source/reference/apps/mcp_server/mcp_server.management.commands.rst @@ -0,0 +1,17 @@ +mcp\_server.management.commands package +======================================= + +.. automodule:: mcp_server.management.commands + :members: + :show-inheritance: + :undoc-members: + +Submodules +---------- + +.. toctree:: + :maxdepth: 4 + + mcp_server.management.commands.backfill_library_memberships + mcp_server.management.commands.create_mcp_token + mcp_server.management.commands.seed_signing_key diff --git a/docs/source/reference/apps/mcp_server/mcp_server.management.commands.seed_signing_key.rst b/docs/source/reference/apps/mcp_server/mcp_server.management.commands.seed_signing_key.rst new file mode 100644 index 0000000..a6b2327 --- /dev/null +++ b/docs/source/reference/apps/mcp_server/mcp_server.management.commands.seed_signing_key.rst @@ -0,0 +1,7 @@ +mcp\_server.management.commands.seed\_signing\_key module +========================================================= + +.. automodule:: mcp_server.management.commands.seed_signing_key + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/mcp_server/mcp_server.management.rst b/docs/source/reference/apps/mcp_server/mcp_server.management.rst new file mode 100644 index 0000000..5eaca74 --- /dev/null +++ b/docs/source/reference/apps/mcp_server/mcp_server.management.rst @@ -0,0 +1,15 @@ +mcp\_server.management package +============================== + +.. automodule:: mcp_server.management + :members: + :show-inheritance: + :undoc-members: + +Subpackages +----------- + +.. toctree:: + :maxdepth: 4 + + mcp_server.management.commands diff --git a/docs/source/reference/apps/mcp_server/mcp_server.metrics.rst b/docs/source/reference/apps/mcp_server/mcp_server.metrics.rst new file mode 100644 index 0000000..a636b82 --- /dev/null +++ b/docs/source/reference/apps/mcp_server/mcp_server.metrics.rst @@ -0,0 +1,7 @@ +mcp\_server.metrics module +========================== + +.. automodule:: mcp_server.metrics + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/mcp_server/mcp_server.models.rst b/docs/source/reference/apps/mcp_server/mcp_server.models.rst new file mode 100644 index 0000000..855bc63 --- /dev/null +++ b/docs/source/reference/apps/mcp_server/mcp_server.models.rst @@ -0,0 +1,7 @@ +mcp\_server.models module +========================= + +.. automodule:: mcp_server.models + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/mcp_server/mcp_server.rst b/docs/source/reference/apps/mcp_server/mcp_server.rst new file mode 100644 index 0000000..54a5f2e --- /dev/null +++ b/docs/source/reference/apps/mcp_server/mcp_server.rst @@ -0,0 +1,35 @@ +mcp\_server package +=================== + +.. automodule:: mcp_server + :members: + :show-inheritance: + :undoc-members: + +Subpackages +----------- + +.. toctree:: + :maxdepth: 4 + + mcp_server.api + mcp_server.management + mcp_server.tools + +Submodules +---------- + +.. toctree:: + :maxdepth: 4 + + mcp_server.admin + mcp_server.apps + mcp_server.auth + mcp_server.context + mcp_server.forms + mcp_server.metrics + mcp_server.models + mcp_server.server + mcp_server.teams + mcp_server.urls + mcp_server.views diff --git a/docs/source/reference/apps/mcp_server/mcp_server.server.rst b/docs/source/reference/apps/mcp_server/mcp_server.server.rst new file mode 100644 index 0000000..aa317be --- /dev/null +++ b/docs/source/reference/apps/mcp_server/mcp_server.server.rst @@ -0,0 +1,7 @@ +mcp\_server.server module +========================= + +.. automodule:: mcp_server.server + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/mcp_server/mcp_server.teams.rst b/docs/source/reference/apps/mcp_server/mcp_server.teams.rst new file mode 100644 index 0000000..b965ce3 --- /dev/null +++ b/docs/source/reference/apps/mcp_server/mcp_server.teams.rst @@ -0,0 +1,7 @@ +mcp\_server.teams module +======================== + +.. automodule:: mcp_server.teams + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/mcp_server/mcp_server.tools.discovery.rst b/docs/source/reference/apps/mcp_server/mcp_server.tools.discovery.rst new file mode 100644 index 0000000..e460274 --- /dev/null +++ b/docs/source/reference/apps/mcp_server/mcp_server.tools.discovery.rst @@ -0,0 +1,7 @@ +mcp\_server.tools.discovery module +================================== + +.. automodule:: mcp_server.tools.discovery + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/mcp_server/mcp_server.tools.health.rst b/docs/source/reference/apps/mcp_server/mcp_server.tools.health.rst new file mode 100644 index 0000000..beef27d --- /dev/null +++ b/docs/source/reference/apps/mcp_server/mcp_server.tools.health.rst @@ -0,0 +1,7 @@ +mcp\_server.tools.health module +=============================== + +.. automodule:: mcp_server.tools.health + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/mcp_server/mcp_server.tools.rst b/docs/source/reference/apps/mcp_server/mcp_server.tools.rst new file mode 100644 index 0000000..420ad95 --- /dev/null +++ b/docs/source/reference/apps/mcp_server/mcp_server.tools.rst @@ -0,0 +1,17 @@ +mcp\_server.tools package +========================= + +.. automodule:: mcp_server.tools + :members: + :show-inheritance: + :undoc-members: + +Submodules +---------- + +.. toctree:: + :maxdepth: 4 + + mcp_server.tools.discovery + mcp_server.tools.health + mcp_server.tools.search diff --git a/docs/source/reference/apps/mcp_server/mcp_server.tools.search.rst b/docs/source/reference/apps/mcp_server/mcp_server.tools.search.rst new file mode 100644 index 0000000..6131d21 --- /dev/null +++ b/docs/source/reference/apps/mcp_server/mcp_server.tools.search.rst @@ -0,0 +1,7 @@ +mcp\_server.tools.search module +=============================== + +.. automodule:: mcp_server.tools.search + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/mcp_server/mcp_server.urls.rst b/docs/source/reference/apps/mcp_server/mcp_server.urls.rst new file mode 100644 index 0000000..0ae18a6 --- /dev/null +++ b/docs/source/reference/apps/mcp_server/mcp_server.urls.rst @@ -0,0 +1,7 @@ +mcp\_server.urls module +======================= + +.. automodule:: mcp_server.urls + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/mcp_server/mcp_server.views.rst b/docs/source/reference/apps/mcp_server/mcp_server.views.rst new file mode 100644 index 0000000..0f2086c --- /dev/null +++ b/docs/source/reference/apps/mcp_server/mcp_server.views.rst @@ -0,0 +1,7 @@ +mcp\_server.views module +======================== + +.. automodule:: mcp_server.views + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/mcp_server/modules.rst b/docs/source/reference/apps/mcp_server/modules.rst new file mode 100644 index 0000000..c4ef701 --- /dev/null +++ b/docs/source/reference/apps/mcp_server/modules.rst @@ -0,0 +1,7 @@ +mcp_server +========== + +.. toctree:: + :maxdepth: 4 + + mcp_server diff --git a/docs/source/reference/apps/themis/modules.rst b/docs/source/reference/apps/themis/modules.rst new file mode 100644 index 0000000..4e015b4 --- /dev/null +++ b/docs/source/reference/apps/themis/modules.rst @@ -0,0 +1,7 @@ +themis +====== + +.. toctree:: + :maxdepth: 4 + + themis diff --git a/docs/source/reference/apps/themis/themis.adapters.rst b/docs/source/reference/apps/themis/themis.adapters.rst new file mode 100644 index 0000000..6f36811 --- /dev/null +++ b/docs/source/reference/apps/themis/themis.adapters.rst @@ -0,0 +1,7 @@ +themis.adapters module +====================== + +.. automodule:: themis.adapters + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/themis/themis.admin.rst b/docs/source/reference/apps/themis/themis.admin.rst new file mode 100644 index 0000000..d40cf6e --- /dev/null +++ b/docs/source/reference/apps/themis/themis.admin.rst @@ -0,0 +1,7 @@ +themis.admin module +=================== + +.. automodule:: themis.admin + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/themis/themis.api.rst b/docs/source/reference/apps/themis/themis.api.rst new file mode 100644 index 0000000..631d895 --- /dev/null +++ b/docs/source/reference/apps/themis/themis.api.rst @@ -0,0 +1,17 @@ +themis.api package +================== + +.. automodule:: themis.api + :members: + :show-inheritance: + :undoc-members: + +Submodules +---------- + +.. toctree:: + :maxdepth: 4 + + themis.api.serializers + themis.api.urls + themis.api.views diff --git a/docs/source/reference/apps/themis/themis.api.serializers.rst b/docs/source/reference/apps/themis/themis.api.serializers.rst new file mode 100644 index 0000000..936a5cd --- /dev/null +++ b/docs/source/reference/apps/themis/themis.api.serializers.rst @@ -0,0 +1,7 @@ +themis.api.serializers module +============================= + +.. automodule:: themis.api.serializers + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/themis/themis.api.urls.rst b/docs/source/reference/apps/themis/themis.api.urls.rst new file mode 100644 index 0000000..9737ae7 --- /dev/null +++ b/docs/source/reference/apps/themis/themis.api.urls.rst @@ -0,0 +1,7 @@ +themis.api.urls module +====================== + +.. automodule:: themis.api.urls + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/themis/themis.api.views.rst b/docs/source/reference/apps/themis/themis.api.views.rst new file mode 100644 index 0000000..bec92f2 --- /dev/null +++ b/docs/source/reference/apps/themis/themis.api.views.rst @@ -0,0 +1,7 @@ +themis.api.views module +======================= + +.. automodule:: themis.api.views + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/themis/themis.apps.rst b/docs/source/reference/apps/themis/themis.apps.rst new file mode 100644 index 0000000..7ca14c6 --- /dev/null +++ b/docs/source/reference/apps/themis/themis.apps.rst @@ -0,0 +1,7 @@ +themis.apps module +================== + +.. automodule:: themis.apps + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/themis/themis.context_processors.rst b/docs/source/reference/apps/themis/themis.context_processors.rst new file mode 100644 index 0000000..266542e --- /dev/null +++ b/docs/source/reference/apps/themis/themis.context_processors.rst @@ -0,0 +1,7 @@ +themis.context\_processors module +================================= + +.. automodule:: themis.context_processors + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/themis/themis.encryption.rst b/docs/source/reference/apps/themis/themis.encryption.rst new file mode 100644 index 0000000..c6efbf6 --- /dev/null +++ b/docs/source/reference/apps/themis/themis.encryption.rst @@ -0,0 +1,7 @@ +themis.encryption module +======================== + +.. automodule:: themis.encryption + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/themis/themis.forms.rst b/docs/source/reference/apps/themis/themis.forms.rst new file mode 100644 index 0000000..aab4cf1 --- /dev/null +++ b/docs/source/reference/apps/themis/themis.forms.rst @@ -0,0 +1,7 @@ +themis.forms module +=================== + +.. automodule:: themis.forms + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/themis/themis.middleware.rst b/docs/source/reference/apps/themis/themis.middleware.rst new file mode 100644 index 0000000..e1d8abf --- /dev/null +++ b/docs/source/reference/apps/themis/themis.middleware.rst @@ -0,0 +1,7 @@ +themis.middleware module +======================== + +.. automodule:: themis.middleware + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/themis/themis.models.rst b/docs/source/reference/apps/themis/themis.models.rst new file mode 100644 index 0000000..a25100f --- /dev/null +++ b/docs/source/reference/apps/themis/themis.models.rst @@ -0,0 +1,7 @@ +themis.models module +==================== + +.. automodule:: themis.models + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/themis/themis.notifications.rst b/docs/source/reference/apps/themis/themis.notifications.rst new file mode 100644 index 0000000..6e5a85b --- /dev/null +++ b/docs/source/reference/apps/themis/themis.notifications.rst @@ -0,0 +1,7 @@ +themis.notifications module +=========================== + +.. automodule:: themis.notifications + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/themis/themis.rst b/docs/source/reference/apps/themis/themis.rst new file mode 100644 index 0000000..36d42a9 --- /dev/null +++ b/docs/source/reference/apps/themis/themis.rst @@ -0,0 +1,38 @@ +themis package +============== + +.. automodule:: themis + :members: + :show-inheritance: + :undoc-members: + +Subpackages +----------- + +.. toctree:: + :maxdepth: 4 + + themis.api + themis.templatetags + +Submodules +---------- + +.. toctree:: + :maxdepth: 4 + + themis.adapters + themis.admin + themis.apps + themis.context_processors + themis.encryption + themis.forms + themis.middleware + themis.models + themis.notifications + themis.signals + themis.ssl_patch + themis.urls + themis.utils + themis.views + themis.widgets diff --git a/docs/source/reference/apps/themis/themis.signals.rst b/docs/source/reference/apps/themis/themis.signals.rst new file mode 100644 index 0000000..21aa7e9 --- /dev/null +++ b/docs/source/reference/apps/themis/themis.signals.rst @@ -0,0 +1,7 @@ +themis.signals module +===================== + +.. automodule:: themis.signals + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/themis/themis.ssl_patch.rst b/docs/source/reference/apps/themis/themis.ssl_patch.rst new file mode 100644 index 0000000..7b5ad3d --- /dev/null +++ b/docs/source/reference/apps/themis/themis.ssl_patch.rst @@ -0,0 +1,7 @@ +themis.ssl\_patch module +======================== + +.. automodule:: themis.ssl_patch + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/themis/themis.templatetags.rst b/docs/source/reference/apps/themis/themis.templatetags.rst new file mode 100644 index 0000000..27529d6 --- /dev/null +++ b/docs/source/reference/apps/themis/themis.templatetags.rst @@ -0,0 +1,15 @@ +themis.templatetags package +=========================== + +.. automodule:: themis.templatetags + :members: + :show-inheritance: + :undoc-members: + +Submodules +---------- + +.. toctree:: + :maxdepth: 4 + + themis.templatetags.themis_tags diff --git a/docs/source/reference/apps/themis/themis.templatetags.themis_tags.rst b/docs/source/reference/apps/themis/themis.templatetags.themis_tags.rst new file mode 100644 index 0000000..45504c8 --- /dev/null +++ b/docs/source/reference/apps/themis/themis.templatetags.themis_tags.rst @@ -0,0 +1,7 @@ +themis.templatetags.themis\_tags module +======================================= + +.. automodule:: themis.templatetags.themis_tags + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/themis/themis.urls.rst b/docs/source/reference/apps/themis/themis.urls.rst new file mode 100644 index 0000000..ba9f61d --- /dev/null +++ b/docs/source/reference/apps/themis/themis.urls.rst @@ -0,0 +1,7 @@ +themis.urls module +================== + +.. automodule:: themis.urls + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/themis/themis.utils.rst b/docs/source/reference/apps/themis/themis.utils.rst new file mode 100644 index 0000000..32db2a6 --- /dev/null +++ b/docs/source/reference/apps/themis/themis.utils.rst @@ -0,0 +1,7 @@ +themis.utils module +=================== + +.. automodule:: themis.utils + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/themis/themis.views.rst b/docs/source/reference/apps/themis/themis.views.rst new file mode 100644 index 0000000..22cf106 --- /dev/null +++ b/docs/source/reference/apps/themis/themis.views.rst @@ -0,0 +1,7 @@ +themis.views module +=================== + +.. automodule:: themis.views + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/source/reference/apps/themis/themis.widgets.rst b/docs/source/reference/apps/themis/themis.widgets.rst new file mode 100644 index 0000000..15ccedc --- /dev/null +++ b/docs/source/reference/apps/themis/themis.widgets.rst @@ -0,0 +1,7 @@ +themis.widgets module +===================== + +.. automodule:: themis.widgets + :members: + :show-inheritance: + :undoc-members: diff --git a/pyproject.toml b/pyproject.toml index c97a8d4..3bc3559 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -53,8 +53,13 @@ lint = [ "ruff>=0.6,<1.0", ] docs = [ - "mkdocs>=1.6,<2.0", - "mkdocs-material>=9.5,<10.0", + "sphinx>=8.0,<10.0", + "sphinx-rtd-theme>=3.0,<4.0", + "sphinx-autodoc-typehints>=2.0,<4.0", + "sphinx-autobuild>=2024.0,<2026.0", + "sphinxcontrib-httpdomain>=1.8,<2.0", + "sphinxcontrib-mermaid>=1.0,<2.0", + "myst-parser>=4.0,<5.0", ] [build-system]