diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml
index 35912b19..6979da49 100644
--- a/.github/workflows/pages.yml
+++ b/.github/workflows/pages.yml
@@ -6,7 +6,7 @@ name: pages
on:
push:
- branches: [develop]
+ branches: [main]
paths:
- statemachine/io/schemas/statechart.schema.json
- .github/workflows/pages.yml
diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml
index 6f6dfe0c..c834215a 100644
--- a/.github/workflows/python-package.yml
+++ b/.github/workflows/python-package.yml
@@ -5,9 +5,9 @@ name: Python checks
on:
push:
- branches: [ "develop" ]
+ branches: [ "main", "release/**" ]
pull_request:
- branches: [ "develop" ]
+ branches: [ "main" ]
permissions:
contents: read
@@ -22,7 +22,6 @@ jobs:
steps:
- uses: actions/checkout@v7
- - run: git fetch origin develop
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v7
with:
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index c571da18..10d8c899 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -13,8 +13,6 @@ jobs:
steps:
- uses: actions/checkout@v7
- - run: git fetch origin develop
-
- name: Setup Python
uses: actions/setup-python@v7
with:
diff --git a/AGENTS.md b/AGENTS.md
index fc4db48a..12450a24 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -303,9 +303,9 @@ enforced, so when you add or change native vocabulary:
## Git workflow
-- Main branch: `develop`
-- PRs target `develop`
-- Releases are tagged as `v*.*.*`
+- Trunk based development: `main` is the only long-lived branch, PRs target `main`
+- Releases are tags `vX.Y.Z` on `main`; the `latest` tag moves to every release
+- Hotfixes: `release/X.Y.x` branch cut from the tag, fixes cherry-picked from `main`
- Signed commits preferred (`git commit -s`)
- Use [Conventional Commits](https://www.conventionalcommits.org/) messages
(e.g., `feat:`, `fix:`, `refactor:`, `test:`, `docs:`, `chore:`, `perf:`)
diff --git a/README.md b/README.md
index cbde0bcb..a8242a55 100644
--- a/README.md
+++ b/README.md
@@ -3,15 +3,15 @@
[](https://pypi.python.org/pypi/python-statemachine)
[](https://pepy.tech/project/python-statemachine)
[](https://pypi.python.org/pypi/python-statemachine)
-[](https://codecov.io/gh/fgmacedo/python-statemachine)
+[](https://codecov.io/gh/fgmacedo/python-statemachine)
[](https://python-statemachine.readthedocs.io/en/latest/?badge=latest)
-[](https://github.com/fgmacedo/python-statemachine/compare/main...develop)
+[](https://github.com/fgmacedo/python-statemachine/compare/latest...main)
Expressive [statecharts](https://statecharts.dev/) and [FSMs](https://en.wikipedia.org/wiki/Finite-state_machine) for modern Python.
-
+
@@ -94,7 +94,7 @@ Generate a diagram or get a text representation with f-strings:
sm._graph().write_png("traffic_light.png")
```
-
+
Parameters are injected into callbacks automatically — the library inspects the
signature and provides only the arguments each callback needs:
diff --git a/docs/conf.py b/docs/conf.py
index 59e518b5..f3999bf0 100755
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -174,7 +174,7 @@
"navigation_with_keys": True,
"top_of_page_buttons": ["view", "edit"],
"source_repository": "https://github.com/fgmacedo/python-statemachine/",
- # "source_branch": "develop",
+ # "source_branch": "main",
"source_directory": "docs/",
}
@@ -271,7 +271,7 @@
"display_github": True, # Integrate GitHub
"github_user": "fgmacedo", # Username
"github_repo": "python-statemachine", # Repo name
- "github_version": "develop", # Version
+ "github_version": "main", # Version
"conf_py_path": "/docs/", # Path in the checkout to the docs root
}
diff --git a/docs/contributing.md b/docs/contributing.md
index e9137887..b8844b89 100644
--- a/docs/contributing.md
+++ b/docs/contributing.md
@@ -104,9 +104,11 @@ Ready to contribute? Here's how to set up `python-statemachine` for local develo
pre-commit install
-3. Create a branch for local development:
+3. Create a branch for local development, starting from an up-to-date `main`:
- git checkout -b
+ git switch main
+ git pull --ff-only origin main
+ git switch -c
4. Make changes to the code.
@@ -144,8 +146,9 @@ Ready to contribute? Here's how to set up `python-statemachine` for local develo
git commit -s -m "Your detailed description of your changes."
git push origin name-of-your-bugfix-or-feature
-1. Create a pull request on the original repository for your changes to be reviewed and potentially
-merged. Be sure to follow the project's code of conduct and contributing guidelines.
+1. Create a pull request on the original repository, targeting the `main` branch, for your
+changes to be reviewed and potentially merged. Be sure to follow the project's code of conduct
+and contributing guidelines.
1. Use `exit` to leave the virtual environment.
@@ -162,44 +165,34 @@ Before you submit a pull request, check that it meets these guidelines:
## Releasing a New Version
-This project uses [git-flow](https://github.com/nvie/gitflow) for release management and
-publishes to PyPI automatically via GitHub Actions when a version tag is pushed.
+This project follows [trunk based development](https://trunkbaseddevelopment.com/): `main` is
+the only long-lived branch and every release is a tag on it. Pushing a `vX.Y.Z` tag triggers
+the GitHub Actions workflow that publishes to PyPI.
### Prerequisites
-- You must be on the `develop` branch with a clean working tree.
-- `git-flow` must be installed and initialized:
+- You must be on the `main` branch with a clean working tree, up to date with `origin/main`:
```shell
- brew install git-flow # macOS
- git flow init # use main for production, develop for next release
+ git switch main
+ git pull --ff-only origin main
```
-- All changes intended for the release must already be merged into `develop`.
+- All changes intended for the release must already be merged into `main`.
### Step-by-step release process
The following steps use version `X.Y.Z` as a placeholder. Replace it with the actual version
number (e.g., `2.6.0`).
-#### 1. Start the release branch
-
-```shell
-git checkout develop
-git pull origin develop
-git flow release start X.Y.Z
-```
-
-This creates and switches to a `release/X.Y.Z` branch based on `develop`.
-
-#### 2. Bump the version number
+#### 1. Bump the version number
Update the version string in **both** files:
- `pyproject.toml` — the `version` field under `[project]`
- `statemachine/__init__.py` — the `__version__` variable
-#### 3. Update translations
+#### 2. Update translations
Extract new translatable strings, merge them into all existing `.po` files, translate the
new entries, and compile:
@@ -218,7 +211,7 @@ language (error messages will appear translated instead of in English). Delete t
verifying translations work: `rm -f statemachine/locale/*/LC_MESSAGES/statemachine.mo`
```
-#### 4. Write release notes
+#### 3. Write release notes
Create `docs/releases/X.Y.Z.md` documenting all changes since the previous release. Include
sections for new features, bugfixes, performance improvements, and miscellaneous changes.
@@ -230,7 +223,7 @@ major version section).
Update any related documentation pages (e.g., if a bugfix adds a new behavior that users
should know about).
-#### 5. Run linters and tests
+#### 4. Run linters and tests
```shell
uv run ruff check .
@@ -241,7 +234,7 @@ uv run pytest -n auto
All checks must pass before committing.
-#### 6. Commit
+#### 5. Commit
Stage all changed files and commit. The pre-commit hooks will run ruff, mypy, and pytest
automatically.
@@ -251,33 +244,25 @@ git add
git commit -m "chore: prepare release X.Y.Z"
```
-#### 7. Finish the release
-
-```shell
-git flow release finish X.Y.Z -m "vX.Y.Z"
-```
+#### 6. Tag the release
-This will:
-- Merge `release/X.Y.Z` into `main`
-- Create an annotated tag `X.Y.Z` on `main`
-- Merge `main` back into `develop`
-- Delete the `release/X.Y.Z` branch
+Create an annotated `vX.Y.Z` tag and move the `latest` tag to the same commit:
-```{note}
-If tagging fails (e.g., GPG or editor issues), create the tag manually and re-run:
-`git tag -a X.Y.Z -m "vX.Y.Z"` then `git flow release finish X.Y.Z -m "vX.Y.Z"`.
+```shell
+git tag -a vX.Y.Z -m "vX.Y.Z"
+git tag -f latest
```
-#### 8. Update the `latest` tag and push
+#### 7. Push
```shell
-git tag latest -f
-git push origin main develop --tags -f
+git push origin main vX.Y.Z
+git push -f origin latest
```
-Force-pushing tags is needed to move the `latest` tag.
+Force-pushing is needed only to move the `latest` tag.
-#### 9. Verify the release
+#### 8. Verify the release
The tag push triggers the `release` GitHub Actions workflow (`.github/workflows/release.yml`),
which will:
@@ -290,7 +275,7 @@ which will:
Monitor the workflow run at `https://github.com/fgmacedo/python-statemachine/actions` to
confirm the release was published successfully.
-#### 10. Publish the GitHub release
+#### 9. Publish the GitHub release
Create the GitHub release from the freshly pushed tag using the release notes file as the
body. Two adjustments are needed when going from MyST/Sphinx markdown to GitHub-flavored
@@ -312,9 +297,43 @@ Then create the release. Use the converted notes as the body:
gh release create vX.Y.Z \
--title "vX.Y.Z" \
--notes-file /tmp/release-X.Y.Z-notes.md \
- --target main \
--verify-tag
```
Confirm the rendered release at
`https://github.com/fgmacedo/python-statemachine/releases/tag/vX.Y.Z`.
+
+### Hotfix releases
+
+Use a hotfix release when `main` already has unreleased changes that must not ship yet, but a
+fix needs to reach users of the last release. If `main` is releasable as is, just cut a
+regular release from it.
+
+1. Land the fix on `main` first, through a regular pull request with tests.
+
+1. Create the release branch from the released tag (or reuse it if it already exists):
+
+ git switch -c release/X.Y.x vX.Y.Z
+
+1. Cherry-pick the fix commits from `main`, keeping a reference to their origin:
+
+ git cherry-pick -x
+
+1. On the release branch, bump the patch version and write the release notes, then commit
+ `chore: prepare release X.Y.Z` exactly as in the regular process.
+
+1. Tag and push. Pushing the branch runs the `Python checks` workflow before you tag; move
+ `latest` only if this is the highest version released so far:
+
+ git push -u origin release/X.Y.x
+ git tag -a vX.Y.Z -m "vX.Y.Z"
+ git push origin vX.Y.Z
+ git tag -f latest && git push -f origin latest
+
+1. Publish the GitHub release as in the regular process.
+
+1. Cherry-pick the `chore: prepare release X.Y.Z` commit back into `main` so the version and
+ release notes stay in sync. A conflict only happens if `main` was already bumped; keep
+ `main`'s version and take the release notes.
+
+The release branch can be deleted once the tag exists; the tag keeps the commits reachable.
diff --git a/docs/installation.md b/docs/installation.md
index 8d08ab2d..e5069b1c 100644
--- a/docs/installation.md
+++ b/docs/installation.md
@@ -45,7 +45,7 @@ The sources for Python State Machine can be downloaded from the [Github repo](ht
You can either clone the public repository:
```shell
-git clone git://github.com/fgmacedo/python-statemachine
+git clone https://github.com/fgmacedo/python-statemachine.git
```
Or download the `tarball`:
diff --git a/uv.lock b/uv.lock
index 2c0969e5..2a258f07 100644
--- a/uv.lock
+++ b/uv.lock
@@ -8,6 +8,10 @@ resolution-markers = [
"python_full_version < '3.11'",
]
+[options]
+exclude-newer = "0001-01-01T00:00:00Z" # This has no effect and is included for backwards compatibility when using relative exclude-newer values.
+exclude-newer-span = "P7D"
+
[[package]]
name = "accessible-pygments"
version = "0.0.5"
@@ -509,9 +513,9 @@ resolution-markers = [
"python_full_version < '3.11'",
]
dependencies = [
- { name = "asgiref", marker = "python_full_version < '3.12'" },
- { name = "sqlparse", marker = "python_full_version < '3.12'" },
- { name = "tzdata", marker = "python_full_version < '3.12' and sys_platform == 'win32'" },
+ { name = "asgiref" },
+ { name = "sqlparse" },
+ { name = "tzdata", marker = "sys_platform == 'win32'" },
]
sdist = { url = "https://files.pythonhosted.org/packages/d5/d8/43e9d000519adceb189620b6869ff88031e046df91c2e9da72f8f6918399/django-5.2.17.tar.gz", hash = "sha256:9d4d93be539a18ab80d058eb515900e10951e04c537c5a6b394fc49528d3251f", size = 10889740, upload-time = "2026-08-04T15:04:03.173Z" }
wheels = [
@@ -527,9 +531,9 @@ resolution-markers = [
"python_full_version >= '3.12' and python_full_version < '3.15'",
]
dependencies = [
- { name = "asgiref", marker = "python_full_version >= '3.12'" },
- { name = "sqlparse", marker = "python_full_version >= '3.12'" },
- { name = "tzdata", marker = "python_full_version >= '3.12' and sys_platform == 'win32'" },
+ { name = "asgiref" },
+ { name = "sqlparse" },
+ { name = "tzdata", marker = "sys_platform == 'win32'" },
]
sdist = { url = "https://files.pythonhosted.org/packages/f8/d4/8314b5bdef20832f0ac6ae3b3e4d4924e4759fa3b4af27609dd747e7a6be/django-6.1.1.tar.gz", hash = "sha256:7ab93536d8e677aa14554c56426290c69480bf2ee68d7513d4a22f57d6bfeb84", size = 11284905, upload-time = "2026-09-02T17:20:45.621Z" }
wheels = [
@@ -567,7 +571,7 @@ name = "exceptiongroup"
version = "1.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "typing-extensions", marker = "python_full_version < '3.11'" },
+ { name = "typing-extensions" },
]
sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371, upload-time = "2025-11-21T23:01:54.787Z" }
wheels = [
@@ -833,7 +837,7 @@ resolution-markers = [
"python_full_version < '3.11'",
]
dependencies = [
- { name = "mdurl", marker = "python_full_version < '3.11'" },
+ { name = "mdurl" },
]
sdist = { url = "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", size = 74596, upload-time = "2023-06-03T06:41:14.443Z" }
wheels = [
@@ -850,7 +854,7 @@ resolution-markers = [
"python_full_version == '3.11.*'",
]
dependencies = [
- { name = "mdurl", marker = "python_full_version >= '3.11'" },
+ { name = "mdurl" },
]
sdist = { url = "https://files.pythonhosted.org/packages/06/ff/7841249c247aa650a76b9ee4bbaeae59370dc8bfd2f6c01f3630c35eb134/markdown_it_py-4.2.0.tar.gz", hash = "sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49", size = 82454, upload-time = "2026-05-07T12:08:28.36Z" }
wheels = [
@@ -1048,12 +1052,12 @@ resolution-markers = [
"python_full_version < '3.11'",
]
dependencies = [
- { name = "docutils", version = "0.21.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" },
- { name = "jinja2", marker = "python_full_version < '3.11'" },
- { name = "markdown-it-py", version = "3.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" },
- { name = "mdit-py-plugins", marker = "python_full_version < '3.11'" },
- { name = "pyyaml", marker = "python_full_version < '3.11'" },
- { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" },
+ { name = "docutils", version = "0.21.2", source = { registry = "https://pypi.org/simple" } },
+ { name = "jinja2" },
+ { name = "markdown-it-py", version = "3.0.0", source = { registry = "https://pypi.org/simple" } },
+ { name = "mdit-py-plugins" },
+ { name = "pyyaml" },
+ { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" } },
]
sdist = { url = "https://files.pythonhosted.org/packages/66/a5/9626ba4f73555b3735ad86247a8077d4603aa8628537687c839ab08bfe44/myst_parser-4.0.1.tar.gz", hash = "sha256:5cfea715e4f3574138aecbf7d54132296bfd72bb614d31168f48c477a830a7c4", size = 93985, upload-time = "2025-02-12T10:53:03.833Z" }
wheels = [
@@ -1070,12 +1074,12 @@ resolution-markers = [
"python_full_version == '3.11.*'",
]
dependencies = [
- { name = "docutils", version = "0.22.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" },
- { name = "jinja2", marker = "python_full_version >= '3.11'" },
- { name = "markdown-it-py", version = "4.2.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" },
- { name = "mdit-py-plugins", marker = "python_full_version >= '3.11'" },
- { name = "pyyaml", marker = "python_full_version >= '3.11'" },
- { name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" },
+ { name = "docutils", version = "0.22.4", source = { registry = "https://pypi.org/simple" } },
+ { name = "jinja2" },
+ { name = "markdown-it-py", version = "4.2.0", source = { registry = "https://pypi.org/simple" } },
+ { name = "mdit-py-plugins" },
+ { name = "pyyaml" },
+ { name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" },
{ name = "sphinx", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" },
]
sdist = { url = "https://files.pythonhosted.org/packages/21/dc/603751677fff302f34396e206b610f556a59d7fe58b9a2145f54e96b48e8/myst_parser-5.1.0.tar.gz", hash = "sha256:ab69322dc6719dcc7f296479dbb70181b66df6ed315064f92dbc85c0e1bf2f02", size = 101182, upload-time = "2026-05-13T09:38:19.361Z" }
@@ -1964,23 +1968,23 @@ resolution-markers = [
"python_full_version < '3.11'",
]
dependencies = [
- { name = "alabaster", marker = "python_full_version < '3.11'" },
- { name = "babel", marker = "python_full_version < '3.11'" },
- { name = "colorama", marker = "python_full_version < '3.11' and sys_platform == 'win32'" },
- { name = "docutils", version = "0.21.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" },
- { name = "imagesize", marker = "python_full_version < '3.11'" },
- { name = "jinja2", marker = "python_full_version < '3.11'" },
- { name = "packaging", marker = "python_full_version < '3.11'" },
- { name = "pygments", marker = "python_full_version < '3.11'" },
- { name = "requests", marker = "python_full_version < '3.11'" },
- { name = "snowballstemmer", marker = "python_full_version < '3.11'" },
- { name = "sphinxcontrib-applehelp", marker = "python_full_version < '3.11'" },
- { name = "sphinxcontrib-devhelp", marker = "python_full_version < '3.11'" },
- { name = "sphinxcontrib-htmlhelp", marker = "python_full_version < '3.11'" },
- { name = "sphinxcontrib-jsmath", marker = "python_full_version < '3.11'" },
- { name = "sphinxcontrib-qthelp", marker = "python_full_version < '3.11'" },
- { name = "sphinxcontrib-serializinghtml", marker = "python_full_version < '3.11'" },
- { name = "tomli", marker = "python_full_version < '3.11'" },
+ { name = "alabaster" },
+ { name = "babel" },
+ { name = "colorama", marker = "sys_platform == 'win32'" },
+ { name = "docutils", version = "0.21.2", source = { registry = "https://pypi.org/simple" } },
+ { name = "imagesize" },
+ { name = "jinja2" },
+ { name = "packaging" },
+ { name = "pygments" },
+ { name = "requests" },
+ { name = "snowballstemmer" },
+ { name = "sphinxcontrib-applehelp" },
+ { name = "sphinxcontrib-devhelp" },
+ { name = "sphinxcontrib-htmlhelp" },
+ { name = "sphinxcontrib-jsmath" },
+ { name = "sphinxcontrib-qthelp" },
+ { name = "sphinxcontrib-serializinghtml" },
+ { name = "tomli" },
]
sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/be0b61178fe2cdcb67e2a92fc9ebb488e3c51c4f74a36a7824c0adf23425/sphinx-8.1.3.tar.gz", hash = "sha256:43c1911eecb0d3e161ad78611bc905d1ad0e523e4ddc202a58a821773dc4c927", size = 8184611, upload-time = "2024-10-13T20:27:13.93Z" }
wheels = [
@@ -1995,23 +1999,23 @@ resolution-markers = [
"python_full_version == '3.11.*'",
]
dependencies = [
- { name = "alabaster", marker = "python_full_version == '3.11.*'" },
- { name = "babel", marker = "python_full_version == '3.11.*'" },
- { name = "colorama", marker = "python_full_version == '3.11.*' and sys_platform == 'win32'" },
- { name = "docutils", version = "0.22.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" },
- { name = "imagesize", marker = "python_full_version == '3.11.*'" },
- { name = "jinja2", marker = "python_full_version == '3.11.*'" },
- { name = "packaging", marker = "python_full_version == '3.11.*'" },
- { name = "pygments", marker = "python_full_version == '3.11.*'" },
- { name = "requests", marker = "python_full_version == '3.11.*'" },
- { name = "roman-numerals", marker = "python_full_version == '3.11.*'" },
- { name = "snowballstemmer", marker = "python_full_version == '3.11.*'" },
- { name = "sphinxcontrib-applehelp", marker = "python_full_version == '3.11.*'" },
- { name = "sphinxcontrib-devhelp", marker = "python_full_version == '3.11.*'" },
- { name = "sphinxcontrib-htmlhelp", marker = "python_full_version == '3.11.*'" },
- { name = "sphinxcontrib-jsmath", marker = "python_full_version == '3.11.*'" },
- { name = "sphinxcontrib-qthelp", marker = "python_full_version == '3.11.*'" },
- { name = "sphinxcontrib-serializinghtml", marker = "python_full_version == '3.11.*'" },
+ { name = "alabaster" },
+ { name = "babel" },
+ { name = "colorama", marker = "sys_platform == 'win32'" },
+ { name = "docutils", version = "0.22.4", source = { registry = "https://pypi.org/simple" } },
+ { name = "imagesize" },
+ { name = "jinja2" },
+ { name = "packaging" },
+ { name = "pygments" },
+ { name = "requests" },
+ { name = "roman-numerals" },
+ { name = "snowballstemmer" },
+ { name = "sphinxcontrib-applehelp" },
+ { name = "sphinxcontrib-devhelp" },
+ { name = "sphinxcontrib-htmlhelp" },
+ { name = "sphinxcontrib-jsmath" },
+ { name = "sphinxcontrib-qthelp" },
+ { name = "sphinxcontrib-serializinghtml" },
]
sdist = { url = "https://files.pythonhosted.org/packages/42/50/a8c6ccc36d5eacdfd7913ddccd15a9cee03ecafc5ee2bc40e1f168d85022/sphinx-9.0.4.tar.gz", hash = "sha256:594ef59d042972abbc581d8baa577404abe4e6c3b04ef61bd7fc2acbd51f3fa3", size = 8710502, upload-time = "2025-12-04T07:45:27.343Z" }
wheels = [
@@ -2027,23 +2031,23 @@ resolution-markers = [
"python_full_version >= '3.12' and python_full_version < '3.15'",
]
dependencies = [
- { name = "alabaster", marker = "python_full_version >= '3.12'" },
- { name = "babel", marker = "python_full_version >= '3.12'" },
- { name = "colorama", marker = "python_full_version >= '3.12' and sys_platform == 'win32'" },
- { name = "docutils", version = "0.22.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" },
- { name = "imagesize", marker = "python_full_version >= '3.12'" },
- { name = "jinja2", marker = "python_full_version >= '3.12'" },
- { name = "packaging", marker = "python_full_version >= '3.12'" },
- { name = "pygments", marker = "python_full_version >= '3.12'" },
- { name = "requests", marker = "python_full_version >= '3.12'" },
- { name = "roman-numerals", marker = "python_full_version >= '3.12'" },
- { name = "snowballstemmer", marker = "python_full_version >= '3.12'" },
- { name = "sphinxcontrib-applehelp", marker = "python_full_version >= '3.12'" },
- { name = "sphinxcontrib-devhelp", marker = "python_full_version >= '3.12'" },
- { name = "sphinxcontrib-htmlhelp", marker = "python_full_version >= '3.12'" },
- { name = "sphinxcontrib-jsmath", marker = "python_full_version >= '3.12'" },
- { name = "sphinxcontrib-qthelp", marker = "python_full_version >= '3.12'" },
- { name = "sphinxcontrib-serializinghtml", marker = "python_full_version >= '3.12'" },
+ { name = "alabaster" },
+ { name = "babel" },
+ { name = "colorama", marker = "sys_platform == 'win32'" },
+ { name = "docutils", version = "0.22.4", source = { registry = "https://pypi.org/simple" } },
+ { name = "imagesize" },
+ { name = "jinja2" },
+ { name = "packaging" },
+ { name = "pygments" },
+ { name = "requests" },
+ { name = "roman-numerals" },
+ { name = "snowballstemmer" },
+ { name = "sphinxcontrib-applehelp" },
+ { name = "sphinxcontrib-devhelp" },
+ { name = "sphinxcontrib-htmlhelp" },
+ { name = "sphinxcontrib-jsmath" },
+ { name = "sphinxcontrib-qthelp" },
+ { name = "sphinxcontrib-serializinghtml" },
]
sdist = { url = "https://files.pythonhosted.org/packages/cd/bd/f08eb0f4eed5c83f1ba2a3bd18f7745a2b1525fad70660a1c00224ec468a/sphinx-9.1.0.tar.gz", hash = "sha256:7741722357dd75f8190766926071fed3bdc211c74dd2d7d4df5404da95930ddb", size = 8718324, upload-time = "2025-12-31T15:09:27.646Z" }
wheels = [
@@ -2058,12 +2062,12 @@ resolution-markers = [
"python_full_version < '3.11'",
]
dependencies = [
- { name = "colorama", marker = "python_full_version < '3.11'" },
- { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" },
- { name = "starlette", marker = "python_full_version < '3.11'" },
- { name = "uvicorn", marker = "python_full_version < '3.11'" },
- { name = "watchfiles", marker = "python_full_version < '3.11'" },
- { name = "websockets", version = "16.1.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" },
+ { name = "colorama" },
+ { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" } },
+ { name = "starlette" },
+ { name = "uvicorn" },
+ { name = "watchfiles" },
+ { name = "websockets", version = "16.1.1", source = { registry = "https://pypi.org/simple" } },
]
sdist = { url = "https://files.pythonhosted.org/packages/a5/2c/155e1de2c1ba96a72e5dba152c509a8b41e047ee5c2def9e9f0d812f8be7/sphinx_autobuild-2024.10.3.tar.gz", hash = "sha256:248150f8f333e825107b6d4b86113ab28fa51750e5f9ae63b59dc339be951fb1", size = 14023, upload-time = "2024-10-02T23:15:30.172Z" }
wheels = [
@@ -2080,13 +2084,13 @@ resolution-markers = [
"python_full_version == '3.11.*'",
]
dependencies = [
- { name = "colorama", marker = "python_full_version >= '3.11'" },
- { name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" },
+ { name = "colorama" },
+ { name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" },
{ name = "sphinx", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" },
- { name = "starlette", marker = "python_full_version >= '3.11'" },
- { name = "uvicorn", marker = "python_full_version >= '3.11'" },
- { name = "watchfiles", marker = "python_full_version >= '3.11'" },
- { name = "websockets", version = "17.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" },
+ { name = "starlette" },
+ { name = "uvicorn" },
+ { name = "watchfiles" },
+ { name = "websockets", version = "17.1", source = { registry = "https://pypi.org/simple" } },
]
sdist = { url = "https://files.pythonhosted.org/packages/e0/3c/a59a3a453d4133777f7ed2e83c80b7dc817d43c74b74298ca0af869662ad/sphinx_autobuild-2025.8.25.tar.gz", hash = "sha256:9cf5aab32853c8c31af572e4fecdc09c997e2b8be5a07daf2a389e270e85b213", size = 15200, upload-time = "2025-08-25T18:44:55.436Z" }
wheels = [