toolframe-auth 0.3.0__tar.gz → 0.3.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. {toolframe_auth-0.3.0 → toolframe_auth-0.3.2}/.github/workflows/ci.yml +2 -2
  2. toolframe_auth-0.3.2/.github/workflows/compatibility.yml +85 -0
  3. {toolframe_auth-0.3.0 → toolframe_auth-0.3.2}/.github/workflows/publish.yml +6 -20
  4. {toolframe_auth-0.3.0 → toolframe_auth-0.3.2}/PKG-INFO +9 -6
  5. {toolframe_auth-0.3.0 → toolframe_auth-0.3.2}/README.md +7 -4
  6. {toolframe_auth-0.3.0 → toolframe_auth-0.3.2}/docs/ci.md +6 -7
  7. {toolframe_auth-0.3.0 → toolframe_auth-0.3.2}/docs/releasing.md +12 -11
  8. {toolframe_auth-0.3.0 → toolframe_auth-0.3.2}/pyproject.toml +3 -3
  9. {toolframe_auth-0.3.0 → toolframe_auth-0.3.2}/scripts/ci.py +3 -3
  10. {toolframe_auth-0.3.0 → toolframe_auth-0.3.2}/uv.lock +4 -3
  11. {toolframe_auth-0.3.0 → toolframe_auth-0.3.2}/.github/workflows/quality.yml +0 -0
  12. {toolframe_auth-0.3.0 → toolframe_auth-0.3.2}/.gitignore +0 -0
  13. {toolframe_auth-0.3.0 → toolframe_auth-0.3.2}/.pre-commit-config.yaml +0 -0
  14. {toolframe_auth-0.3.0 → toolframe_auth-0.3.2}/CONTRIBUTING.md +0 -0
  15. {toolframe_auth-0.3.0 → toolframe_auth-0.3.2}/LICENSE +0 -0
  16. {toolframe_auth-0.3.0 → toolframe_auth-0.3.2}/NOTICE +0 -0
  17. {toolframe_auth-0.3.0 → toolframe_auth-0.3.2}/cchk.toml +0 -0
  18. {toolframe_auth-0.3.0 → toolframe_auth-0.3.2}/scripts/check_branch_name.py +0 -0
  19. {toolframe_auth-0.3.0 → toolframe_auth-0.3.2}/src/toolframe_auth/__init__.py +0 -0
  20. {toolframe_auth-0.3.0 → toolframe_auth-0.3.2}/src/toolframe_auth/crypto.py +0 -0
  21. {toolframe_auth-0.3.0 → toolframe_auth-0.3.2}/src/toolframe_auth/identities.py +0 -0
  22. {toolframe_auth-0.3.0 → toolframe_auth-0.3.2}/src/toolframe_auth/migrations/v1.postgresql.sql +0 -0
  23. {toolframe_auth-0.3.0 → toolframe_auth-0.3.2}/src/toolframe_auth/migrations/v2.postgresql.sql +0 -0
  24. {toolframe_auth-0.3.0 → toolframe_auth-0.3.2}/src/toolframe_auth/plugin.py +0 -0
  25. {toolframe_auth-0.3.0 → toolframe_auth-0.3.2}/tests/test_auth.py +0 -0
  26. {toolframe_auth-0.3.0 → toolframe_auth-0.3.2}/tests/test_identities.py +0 -0
@@ -38,7 +38,7 @@ jobs:
38
38
  uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
39
39
  with:
40
40
  repository: ${{ vars.TOOLFRAME_REPOSITORY_OWNER || github.repository_owner }}/toolframe-sdk
41
- ref: 2cd153ec36c585a9adb5ad566effc2985d9e222d
41
+ ref: 539ced4dbdf9e303ec0f0205a35d65287a480b2a
42
42
  path: toolframe-sdk
43
43
  token: ${{ secrets.TOOLFRAME_READ_TOKEN || secrets.TOOLFRAME_DEPENDENCIES_TOKEN || github.token }}
44
44
  persist-credentials: false
@@ -47,7 +47,7 @@ jobs:
47
47
  uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
48
48
  with:
49
49
  repository: ${{ vars.TOOLFRAME_REPOSITORY_OWNER || github.repository_owner }}/toolframe-sql-sqlite
50
- ref: a2764f83840fb8ad71d7eaf138c7e09799ce19bd
50
+ ref: d4f3fcf9d8145fd0dab3d57aad8a452fb5aa527b
51
51
  path: toolframe-sql-sqlite
52
52
  token: ${{ secrets.TOOLFRAME_READ_TOKEN || secrets.TOOLFRAME_DEPENDENCIES_TOKEN || github.token }}
53
53
  persist-credentials: false
@@ -0,0 +1,85 @@
1
+ name: SDK compatibility
2
+
3
+ on:
4
+ pull_request:
5
+ push:
6
+ branches: [main]
7
+ schedule:
8
+ - cron: '17 4 * * *'
9
+ workflow_dispatch:
10
+ workflow_call:
11
+
12
+ permissions:
13
+ contents: read
14
+
15
+ jobs:
16
+ wheel:
17
+ name: Build the shared plugin wheel
18
+ runs-on: ubuntu-24.04
19
+ timeout-minutes: 10
20
+ steps:
21
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
22
+ with:
23
+ persist-credentials: false
24
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
25
+ with:
26
+ python-version: '3.14.7'
27
+ - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
28
+ with:
29
+ version: '0.12.8'
30
+ enable-cache: false
31
+ - run: uv build --no-sources --wheel --out-dir build/compatibility-wheel
32
+ - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
33
+ with:
34
+ name: compatibility-wheel
35
+ path: build/compatibility-wheel/*.whl
36
+ if-no-files-found: error
37
+ retention-days: 7
38
+
39
+ compatibility:
40
+ name: SDK ${{ matrix.sdk }}
41
+ needs: wheel
42
+ runs-on: ubuntu-24.04
43
+ timeout-minutes: 20
44
+ strategy:
45
+ fail-fast: false
46
+ matrix:
47
+ sdk: [minimum, latest]
48
+ steps:
49
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
50
+ with:
51
+ persist-credentials: false
52
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
53
+ with:
54
+ python-version: '3.14.7'
55
+ - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
56
+ with:
57
+ version: '0.12.8'
58
+ enable-cache: false
59
+ - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
60
+ with:
61
+ name: compatibility-wheel
62
+ path: build/compatibility-wheel
63
+ - name: Select the unchanged wheel
64
+ id: wheels
65
+ shell: bash
66
+ run: |
67
+ plugin=(build/compatibility-wheel/toolframe_auth-*.whl)
68
+ test "${#plugin[@]}" = 1
69
+ echo "plugin=${plugin[0]}" >> "$GITHUB_OUTPUT"
70
+ - name: Verify installed wheel and package tests
71
+ uses: toolframe/toolframe-sdk/.github/actions/plugin-compatibility@2e2a3d79f35fbdb04249e8351fe9c75fc2164269
72
+ with:
73
+ mode: ${{ matrix.sdk }}
74
+ wheel: ${{ steps.wheels.outputs.plugin }}
75
+ output: build/compatibility-${{ matrix.sdk }}
76
+ - name: Retain compatibility evidence
77
+ if: always()
78
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
79
+ with:
80
+ name: compatibility-${{ matrix.sdk }}
81
+ path: |
82
+ build/compatibility-${{ matrix.sdk }}/report.json
83
+ build/compatibility-${{ matrix.sdk }}/pytest.xml
84
+ if-no-files-found: warn
85
+ retention-days: 14
@@ -2,21 +2,12 @@ name: Publish Python package
2
2
 
3
3
  on:
4
4
  workflow_dispatch:
5
- inputs:
6
- repository:
7
- description: Package index (run this workflow on a v<project.version> tag)
8
- type: choice
9
- options:
10
- - testpypi
11
- - pypi
12
- default: testpypi
13
- required: true
14
5
 
15
6
  permissions:
16
7
  contents: read
17
8
 
18
9
  concurrency:
19
- group: publish-${{ github.repository }}-${{ github.ref }}-${{ inputs.repository }}
10
+ group: publish-${{ github.repository }}-${{ github.ref }}-pypi
20
11
  cancel-in-progress: false
21
12
 
22
13
  jobs:
@@ -26,12 +17,15 @@ jobs:
26
17
  with:
27
18
  release-ref: ${{ github.ref }}
28
19
 
20
+ compatibility:
21
+ uses: ./.github/workflows/compatibility.yml
22
+
29
23
  publish:
30
- needs: validate
24
+ needs: [validate, compatibility]
31
25
  runs-on: ubuntu-24.04
32
26
  timeout-minutes: 10
33
27
  environment:
34
- name: ${{ inputs.repository }}
28
+ name: pypi
35
29
  permissions:
36
30
  id-token: write
37
31
  steps:
@@ -41,15 +35,7 @@ jobs:
41
35
  name: toolframe-auth-dist
42
36
  path: dist
43
37
 
44
- - name: Publish to TestPyPI
45
- if: inputs.repository == 'testpypi'
46
- uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2
47
- with:
48
- repository-url: https://test.pypi.org/legacy/
49
- packages-dir: dist/
50
-
51
38
  - name: Publish to PyPI
52
- if: inputs.repository == 'pypi'
53
39
  uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2
54
40
  with:
55
41
  packages-dir: dist/
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: toolframe-auth
3
- Version: 0.3.0
3
+ Version: 0.3.2
4
4
  Summary: Managed access passwords and sessions for Toolframe
5
5
  Project-URL: Homepage, https://github.com/toolframe/toolframe-auth
6
6
  Project-URL: Repository, https://github.com/toolframe/toolframe-auth
@@ -11,21 +11,21 @@ License-Expression: Apache-2.0
11
11
  License-File: LICENSE
12
12
  License-File: NOTICE
13
13
  Requires-Python: >=3.14
14
- Requires-Dist: toolframe-sdk==0.4.0
14
+ Requires-Dist: toolframe-sdk<1,>=0.4.0
15
15
  Description-Content-Type: text/markdown
16
16
 
17
17
  # Toolframe Auth
18
18
 
19
19
  Authentication and grant decisions for access passwords, federated users and
20
20
  revocable agent delegation. This provider owns `auth`'s managed SQL store; it never opens
21
- database files itself. It requires SDK 0.4.0 and `toolframe.sql`.
21
+ database files itself. It requires SDK 0.4 and `toolframe.sql`.
22
22
 
23
23
  ## Install
24
24
 
25
25
  With a running Toolframe application and an active SQL storage provider:
26
26
 
27
27
  ```sh
28
- toolframe --home APP plugin add pypi:toolframe-auth==0.3.0 --enable
28
+ toolframe --home APP plugin add pypi:toolframe-auth==0.3.2 --enable
29
29
  ```
30
30
 
31
31
  The [Entry Register template](https://github.com/toolframe/toolframe-core#readme)
@@ -107,7 +107,7 @@ uv build --wheel
107
107
 
108
108
  For the same isolated lint, tests, distribution and wheel-install checks used by
109
109
  GitHub Actions, run `python3.14 scripts/ci.py`. See [CI and publishing](docs/ci.md)
110
- for pinned sibling sources, local requirements and TestPyPI/PyPI setup.
110
+ for pinned sibling sources, local requirements and PyPI setup.
111
111
 
112
112
  Core owns access policy. Its compatible OIDC integration supports
113
113
  `access.failure_mode = "closed"` for protected deployments; the default preserves
@@ -122,10 +122,13 @@ Licensed under the Apache License, Version 2.0. See [LICENSE](LICENSE) and [NOTI
122
122
 
123
123
  ## PostgreSQL storage
124
124
 
125
- Version 0.2 requires SDK 0.3 and declares PostgreSQL migration SQL alongside the
125
+ Version 0.3 requires SDK 0.4 and declares PostgreSQL migration SQL alongside the
126
126
  unchanged SQLite history. Provision this plugin’s stable store owner with the
127
127
  PostgreSQL provider before enabling it. The application still runs one Core;
128
128
  retain its private keys and configuration with the application home. Existing
129
129
  SQLite records are not imported automatically.
130
130
 
131
131
  For development hooks and contribution rules, see [Contributing](CONTRIBUTING.md).
132
+
133
+ Plugin dependencies allow compatible SDK 0.x updates from the declared minimum.
134
+ See the [SDK compatibility policy](https://github.com/toolframe/toolframe-sdk/blob/main/docs/compatibility.md) for API guarantees and minimum/latest verification.
@@ -2,14 +2,14 @@
2
2
 
3
3
  Authentication and grant decisions for access passwords, federated users and
4
4
  revocable agent delegation. This provider owns `auth`'s managed SQL store; it never opens
5
- database files itself. It requires SDK 0.4.0 and `toolframe.sql`.
5
+ database files itself. It requires SDK 0.4 and `toolframe.sql`.
6
6
 
7
7
  ## Install
8
8
 
9
9
  With a running Toolframe application and an active SQL storage provider:
10
10
 
11
11
  ```sh
12
- toolframe --home APP plugin add pypi:toolframe-auth==0.3.0 --enable
12
+ toolframe --home APP plugin add pypi:toolframe-auth==0.3.2 --enable
13
13
  ```
14
14
 
15
15
  The [Entry Register template](https://github.com/toolframe/toolframe-core#readme)
@@ -91,7 +91,7 @@ uv build --wheel
91
91
 
92
92
  For the same isolated lint, tests, distribution and wheel-install checks used by
93
93
  GitHub Actions, run `python3.14 scripts/ci.py`. See [CI and publishing](docs/ci.md)
94
- for pinned sibling sources, local requirements and TestPyPI/PyPI setup.
94
+ for pinned sibling sources, local requirements and PyPI setup.
95
95
 
96
96
  Core owns access policy. Its compatible OIDC integration supports
97
97
  `access.failure_mode = "closed"` for protected deployments; the default preserves
@@ -106,10 +106,13 @@ Licensed under the Apache License, Version 2.0. See [LICENSE](LICENSE) and [NOTI
106
106
 
107
107
  ## PostgreSQL storage
108
108
 
109
- Version 0.2 requires SDK 0.3 and declares PostgreSQL migration SQL alongside the
109
+ Version 0.3 requires SDK 0.4 and declares PostgreSQL migration SQL alongside the
110
110
  unchanged SQLite history. Provision this plugin’s stable store owner with the
111
111
  PostgreSQL provider before enabling it. The application still runs one Core;
112
112
  retain its private keys and configuration with the application home. Existing
113
113
  SQLite records are not imported automatically.
114
114
 
115
115
  For development hooks and contribution rules, see [Contributing](CONTRIBUTING.md).
116
+
117
+ Plugin dependencies allow compatible SDK 0.x updates from the declared minimum.
118
+ See the [SDK compatibility policy](https://github.com/toolframe/toolframe-sdk/blob/main/docs/compatibility.md) for API guarantees and minimum/latest verification.
@@ -14,8 +14,8 @@ never used or modified.
14
14
 
15
15
  | Repository | Required commit |
16
16
  | --- | --- |
17
- | `toolframe-sdk` | `2cd153ec36c585a9adb5ad566effc2985d9e222d` |
18
- | `toolframe-sql-sqlite` | `a2764f83840fb8ad71d7eaf138c7e09799ce19bd` |
17
+ | `toolframe-sdk` | `539ced4dbdf9e303ec0f0205a35d65287a480b2a` |
18
+ | `toolframe-sql-sqlite` | `d4f3fcf9d8145fd0dab3d57aad8a452fb5aa527b` |
19
19
 
20
20
  By default, both repositories are siblings of this checkout. Use `--sdk-repo`
21
21
  and `--storage-repo` to point to other local clones. Internet access is required
@@ -68,14 +68,13 @@ the default `GITHUB_TOKEN` cannot read another private repository. Fork pull
68
68
  requests cannot access that secret and require publicly readable dependencies
69
69
  to pass. Checkout credentials are not persisted.
70
70
 
71
- `publish.yml` supports manual dispatch only, with `testpypi` as the default and
72
- `pypi` as the other selection. Run it on an existing tag named exactly
73
- `v<project.version>` (currently `v0.1.1`). A branch ref or mismatched tag fails
74
- the version gate. The reusable CI workflow validates the selected `github.sha`,
71
+ `publish.yml` publishes to PyPI on manual dispatch only. Run it on an existing
72
+ tag named exactly `v<project.version>`. A branch ref or mismatched tag fails the
73
+ version gate. The reusable CI workflow validates the selected `github.sha`,
75
74
  and publishing downloads only that run's validated artifact. The publishing
76
75
  job has a 10-minute timeout and is the only job with `id-token: write`. It does
77
76
  not rebuild the distributions. Duplicate uploads fail; existing files are not
78
- silently skipped. Publish runs for the same tag and index are serialized without
77
+ silently skipped. Publish runs for the same tag are serialized without
79
78
  cancelling an in-progress run.
80
79
 
81
80
  ## Publication
@@ -1,6 +1,6 @@
1
1
  # Releasing toolframe-auth
2
2
 
3
- The distribution name is `toolframe-auth`; its current version is `0.2.0`.
3
+ The distribution name is `toolframe-auth`. The version is defined in `pyproject.toml`.
4
4
  Release tags must exactly match `v<project.version>`. Ordinary CI never uploads
5
5
  packages. The manual `publish.yml` workflow reruns validation and publishes only
6
6
  artifacts produced by that successful run.
@@ -10,13 +10,14 @@ artifacts produced by that successful run.
10
10
  Run the repository's existing validation workflow; its local commands and
11
11
  integration coverage are described in [CI](ci.md).
12
12
 
13
- Publish `toolframe-sdk==0.4.0` first. The coordinated order and native CLI channels are documented in
13
+ Publish any newly required SDK version before the plugin. Compatible Core or SDK
14
+ updates alone do not require a plugin release. The coordinated order and native CLI channels are documented in
14
15
  [Toolframe's release guide](https://github.com/toolframe/toolframe-core/blob/main/docs/releasing.md).
15
16
 
16
17
  ## Trusted Publishers
17
18
 
18
- Create GitHub environments named `testpypi` and `pypi`. On each corresponding
19
- package index, configure a normal or pending Trusted Publisher with these values:
19
+ Create a GitHub environment named `pypi`. On PyPI, configure a normal or
20
+ pending Trusted Publisher with these values:
20
21
 
21
22
  | Field | Value |
22
23
  | --- | --- |
@@ -24,7 +25,7 @@ package index, configure a normal or pending Trusted Publisher with these values
24
25
  | GitHub owner | `toolframe` |
25
26
  | GitHub repository | `toolframe-auth` |
26
27
  | Workflow filename | `publish.yml` |
27
- | Environment | `testpypi` or `pypi`, matching the index |
28
+ | Environment | `pypi` |
28
29
 
29
30
  If publishing from another owner, use that actual owner in the publisher binding.
30
31
  Follow [PyPI's Trusted Publishing guide](https://docs.pypi.org/trusted-publishers/using-a-publisher/).
@@ -40,7 +41,7 @@ sibling owner where the workflow exposes that variable.
40
41
  ## Publish and verify
41
42
 
42
43
  After the release commit and matching tag are available remotely, manually run
43
- `publish.yml` at `v0.2.0`, selecting `testpypi` first and then `pypi`.
44
+ `publish.yml` at the matching `v<project.version>` tag to publish to PyPI.
44
45
  A branch or mismatched tag is rejected. Downloaded files are the artifacts from
45
46
  that run; the publishing job does not rebuild them. Published files cannot be
46
47
  replaced under the same version.
@@ -49,11 +50,11 @@ After PyPI publication, verify a clean installation:
49
50
 
50
51
  ```sh
51
52
  uv venv --python 3.14.7 build/consumer
52
- uv pip install --python build/consumer/bin/python 'toolframe-auth==0.3.0'
53
+ uv pip install --python build/consumer/bin/python 'toolframe-auth==0.3.2'
53
54
  uv pip check --python build/consumer/bin/python
54
55
  ```
55
56
 
56
- TestPyPI does not mirror dependencies. Test the specific artifact against an
57
- explicit dependency source; a local or TestPyPI check alone does not demonstrate
58
- that production PyPI resolution works. Keep logs, hashes and exact revisions in
59
- CI artifacts or ignored local evidence directories.
57
+ Test the specific artifact with dependencies from PyPI. Local artifact checks
58
+ alone do not demonstrate that the published package resolves correctly from
59
+ PyPI. Keep logs, hashes and exact revisions in CI artifacts or ignored local
60
+ evidence directories.
@@ -4,14 +4,14 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "toolframe-auth"
7
- version = "0.3.0"
7
+ version = "0.3.2"
8
8
  description = "Managed access passwords and sessions for Toolframe"
9
9
  readme = "README.md"
10
10
  license = "Apache-2.0"
11
11
  license-files = ["LICENSE", "NOTICE"]
12
12
  authors = [{ name = "byfb", email = "62798989+byfb@users.noreply.github.com" }]
13
13
  requires-python = ">=3.14"
14
- dependencies = ["toolframe-sdk==0.4.0"]
14
+ dependencies = ["toolframe-sdk<1,>=0.4.0"]
15
15
 
16
16
  [project.urls]
17
17
  Homepage = "https://github.com/toolframe/toolframe-auth"
@@ -23,7 +23,7 @@ Issues = "https://github.com/toolframe/toolframe-auth/issues"
23
23
  auth = "toolframe_auth.plugin:plugin"
24
24
 
25
25
  [dependency-groups]
26
- dev = ["pytest>=8,<10", "pytest-asyncio>=1,<2", "ruff>=0.12,<1", "toolframe-sql-sqlite==0.4.0"]
26
+ dev = ["pytest>=8,<10", "pytest-asyncio>=1,<2", "ruff>=0.12,<1", "toolframe-sql-sqlite>=0.4.1,<0.5"]
27
27
 
28
28
  [tool.uv.sources]
29
29
  toolframe-sdk = { path = "../toolframe-sdk", editable = true }
@@ -16,8 +16,8 @@ from pathlib import Path
16
16
 
17
17
  ROOT = Path(__file__).resolve().parents[1]
18
18
  DEPENDENCIES = {
19
- "toolframe-sdk": "2cd153ec36c585a9adb5ad566effc2985d9e222d",
20
- "toolframe-sql-sqlite": "a2764f83840fb8ad71d7eaf138c7e09799ce19bd",
19
+ "toolframe-sdk": "539ced4dbdf9e303ec0f0205a35d65287a480b2a",
20
+ "toolframe-sql-sqlite": "d4f3fcf9d8145fd0dab3d57aad8a452fb5aa527b",
21
21
  }
22
22
 
23
23
 
@@ -229,7 +229,7 @@ from toolframe_auth.crypto import new_verifier, verifier
229
229
  location = pathlib.Path(toolframe_auth.__file__).resolve()
230
230
  assert location.is_relative_to(pathlib.Path(sys.prefix).resolve())
231
231
  assert metadata.version("toolframe-auth") == sys.argv[1]
232
- assert metadata.version("toolframe-sdk") == "0.4.0"
232
+ assert metadata.version("toolframe-sdk") == "0.4.1"
233
233
  entry_point, = metadata.distribution("toolframe-auth").entry_points
234
234
  assert entry_point.group == "toolframe.plugins" and entry_point.name == "auth"
235
235
  assert entry_point.load() is plugin
@@ -282,7 +282,7 @@ wheels = [
282
282
 
283
283
  [[package]]
284
284
  name = "toolframe-auth"
285
- version = "0.3.0"
285
+ version = "0.3.2"
286
286
  source = { editable = "." }
287
287
  dependencies = [
288
288
  { name = "toolframe-sdk" },
@@ -309,7 +309,7 @@ dev = [
309
309
 
310
310
  [[package]]
311
311
  name = "toolframe-sdk"
312
- version = "0.4.0"
312
+ version = "0.4.1"
313
313
  source = { editable = "../toolframe-sdk" }
314
314
  dependencies = [
315
315
  { name = "jsonschema" },
@@ -332,11 +332,12 @@ dev = [
332
332
  { name = "pytest", specifier = ">=8,<10" },
333
333
  { name = "pytest-asyncio", specifier = ">=1,<2" },
334
334
  { name = "ruff", specifier = ">=0.12,<1" },
335
+ { name = "tomlkit", specifier = ">=0.13,<1" },
335
336
  ]
336
337
 
337
338
  [[package]]
338
339
  name = "toolframe-sql-sqlite"
339
- version = "0.4.0"
340
+ version = "0.4.1"
340
341
  source = { editable = "../toolframe-sql-sqlite" }
341
342
  dependencies = [
342
343
  { name = "toolframe-sdk" },
File without changes
File without changes
File without changes