Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 47 additions & 0 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
name: Deploy docs

on:
push:
branches: [main]

permissions:
contents: read
pages: write
id-token: write

concurrency:
group: pages
cancel-in-progress: true

jobs:
build:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

- uses: actions/setup-python@v5
with:
python-version: "3.12"

- name: Install project + docs deps
run: |
pip install -e .[docs]

- name: Build docs
run: make docs

- uses: actions/upload-pages-artifact@v3
with:
path: docs/_build/html

deploy:
needs: build
runs-on: ubuntu-latest
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}

steps:
- id: deployment
uses: actions/deploy-pages@v4
13 changes: 11 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,8 +1,17 @@
PYTHON ?= python3

.PHONY: clean format format-check typecheck typecheck_pyright lint test test_fastfail audit
.PHONY: docs docs-live docs-clean clean format format-check typecheck typecheck_pyright lint test test_fastfail audit

clean:
docs:
$(PYTHON) -m sphinx -b html -W --keep-going docs docs/_build/html

docs-live:
sphinx-autobuild docs docs/_build/html

docs-clean:
rm -rf docs/_build docs/reference/autoapi

clean: docs-clean
find . -name "*.pyc" -print0 | xargs -0 rm -f
find . -name "*~" -print0 | xargs -0 rm -f
find . -name "__pycache__" -print0 | xargs -0 rm -rf
Expand Down
43 changes: 43 additions & 0 deletions docs/conf.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
import os
import sys
from datetime import date

sys.path.insert(0, os.path.abspath("../src"))

project = "httk-web"
author = "The httk-web AUTHORS"
copyright = f"{date.today().year}, {author}"

extensions = [
"sphinx.ext.autodoc",
"sphinx.ext.autosummary",
"sphinx.ext.napoleon",
"sphinx.ext.viewcode",
"sphinx.ext.intersphinx",
"sphinx_copybutton",
]

templates_path = ["_templates"]
exclude_patterns = ["_build"]

autosummary_generate = True

autodoc_default_options = {
"members": True,
"member-order": "bysource",
"undoc-members": False,
"show-inheritance": True,
}

html_theme = "furo"
html_theme_options = {
"sidebar_hide_name": False,
"navigation_with_keys": True,
}

intersphinx_mapping = {
"python": ("https://docs.python.org/3", None),
}

copybutton_prompt_text = r">>> |\.\.\. |\$ "
copybutton_prompt_is_regexp = True
101 changes: 101 additions & 0 deletions docs/how_it_works.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
How It Works
============

Current
-------

The default mode is the current, modern ``httk-web`` workflow.

Directory layout
^^^^^^^^^^^^^^^^

A site source directory is expected to contain:

- ``content/``: page sources (``.md``, ``.rst``, ``.html``)
- ``templates/``: Jinja2 templates (for example ``default.html.j2`` and ``base_default.html.j2``)
- ``static/``: static files copied as-is in publish mode
- ``functions/``: optional Python modules exposing ``execute(...)``

Runtime flow
^^^^^^^^^^^^

1. Route resolution maps a URL path to a content page or static file.
2. Content rendering extracts metadata and body HTML.
3. Function injection evaluates ``*-function`` metadata entries when query/post constraints are satisfied.
4. Template rendering produces final HTML through Jinja2.
5. ASGI serving returns responses, or static publishing writes ``.html`` output files.

Public API
^^^^^^^^^^

The main API surface is:

- ``httk.web.create_asgi_app(...)``
- ``httk.web.serve(...)``
- ``httk.web.publish(...)``

Example usage
^^^^^^^^^^^^^

Serve dynamically:

.. code-block:: python

from httk.web import serve
serve("src", port=8080)

Publish statically:

.. code-block:: python

from httk.web import publish
publish("src", "public", "http://127.0.0.1/")

Examples
^^^^^^^^

Modern examples live under ``examples/modern``:

- ``minimal``
- ``rst_site``
- ``blog``
- ``search_app``

Legacy
------

``httk-web`` also supports a compatibility mode for legacy site structures and templates.

Enable compatibility mode
^^^^^^^^^^^^^^^^^^^^^^^^^

Use ``compatibility_mode=True`` in API calls:

.. code-block:: python

from httk.web import serve
serve("src", compatibility_mode=True)

Compatibility behaviors
^^^^^^^^^^^^^^^^^^^^^^^

When compatibility mode is enabled, ``httk-web`` additionally supports:

- ``.httkweb`` content and ``.httkweb.html`` template resolution
- legacy formatter constructs used by old templates (for example repeat/call/if forms)
- loading global metadata from ``config.*`` (or another name via ``config_name``)
- running ``functions/init.py`` at engine startup
- ``_functions/`` directory fallback when ``functions/`` is not present

Examples
^^^^^^^^

Migrated legacy examples are available under ``examples/legacy``:

- ``static_simple``
- ``hello_world_app``
- ``rst_templator``
- ``blog``
- ``search_app``

For legacy examples that use optional old ``httk`` subsystems, availability depends on those dependencies.
17 changes: 17 additions & 0 deletions docs/index.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
httk-web
========

``httk-web`` provides web serving and static publishing functionality for ``httk`` v2.

Quick links
-----------

- :doc:`how_it_works`
- :doc:`reference`

.. toctree::
:maxdepth: 2
:caption: Documentation

how_it_works
reference
18 changes: 18 additions & 0 deletions docs/reference.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
Reference
=========

Public API
----------

.. automodule:: httk.web.api
:members:
:undoc-members:
:show-inheritance:

Convenience Exports
-------------------

.. automodule:: httk.web
:members:
:undoc-members:
:show-inheritance:
10 changes: 10 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,16 @@ dev = [
"pyright",
"mypy"
]
docs = [
"sphinx",
"furo",
"myst-parser",
"myst-nb",
"sphinx-autodoc-typehints",
"sphinx-copybutton",
"sphinx-autoapi"
]


[tool.setuptools]
package-dir = {"" = "src"}
Expand Down
Loading