Migrate dependency management from pip to uv

- Add a uv workspace at the repository root covering all packages/kaya-* members
- Replace pip-compile requirements files with a committed uv.lock
- Remove redundant per-package dev extras
- Build and publish artifacts with uv build and uv publish in CI
- Update the README with uv sync/run/build commands
This commit is contained in:
2026-10-21 21:56:08 +08:00
parent ea82ac44e9
commit ec056a15b9
17 changed files with 1814 additions and 409 deletions
+58 -56
View File
@@ -5,7 +5,7 @@ on:
- 'release/*' - 'release/*'
jobs: jobs:
build_pip_package: build_pip_package:
name: "Build Pip package" name: "Build and publish packages"
runs-on: hostinger runs-on: hostinger
timeout-minutes: 30 timeout-minutes: 30
container: container:
@@ -18,12 +18,14 @@ jobs:
fetch-tags: true fetch-tags: true
- uses: actions/setup-python@v6 - uses: actions/setup-python@v6
with: with:
python-version: '3.14.6' python-version-file: '.python-version'
cache: 'pip' - name: Install uv
uses: astral-sh/setup-uv@v10
with:
version: '0.13.4'
enable-cache: true
- name: Install dependencies - name: Install dependencies
run: | run: uv sync --locked
python -m venv .venv
.venv/bin/pip install -r requirements-dev.txt
- name: Check kaya-core - name: Check kaya-core
run: | run: |
.venv/bin/python -m mypy -p kaya.core .venv/bin/python -m mypy -p kaya.core
@@ -66,81 +68,81 @@ jobs:
.venv/bin/python -m unittest discover -s packages/kaya-otel/tests .venv/bin/python -m unittest discover -s packages/kaya-otel/tests
- name: Publish kaya-core artifacts - name: Publish kaya-core artifacts
env: env:
TWINE_REPOSITORY_URL: ${{ vars.PYPI_REGISTRY_URL }} UV_PUBLISH_URL: ${{ vars.PYPI_REGISTRY_URL }}
TWINE_USERNAME: ${{ vars.PUBLISHER_USERNAME }} UV_PUBLISH_USERNAME: ${{ vars.PUBLISHER_USERNAME }}
TWINE_PASSWORD: ${{ secrets.PUBLISHER_TOKEN }} UV_PUBLISH_PASSWORD: ${{ secrets.PUBLISHER_TOKEN }}
run: | run: |
.venv/bin/pyproject-build packages/kaya-core uv build --package kaya-core --out-dir packages/kaya-core/dist --no-sources
.venv/bin/twine upload --repository gitea packages/kaya-core/dist/*.whl packages/kaya-core/dist/*.tar.gz uv publish packages/kaya-core/dist/*.whl packages/kaya-core/dist/*.tar.gz
- name: Publish kaya-rsgi artifacts - name: Publish kaya-rsgi artifacts
env: env:
TWINE_REPOSITORY_URL: ${{ vars.PYPI_REGISTRY_URL }} UV_PUBLISH_URL: ${{ vars.PYPI_REGISTRY_URL }}
TWINE_USERNAME: ${{ vars.PUBLISHER_USERNAME }} UV_PUBLISH_USERNAME: ${{ vars.PUBLISHER_USERNAME }}
TWINE_PASSWORD: ${{ secrets.PUBLISHER_TOKEN }} UV_PUBLISH_PASSWORD: ${{ secrets.PUBLISHER_TOKEN }}
run: | run: |
.venv/bin/pyproject-build packages/kaya-rsgi uv build --package kaya-rsgi --out-dir packages/kaya-rsgi/dist --no-sources
.venv/bin/twine upload --repository gitea packages/kaya-rsgi/dist/*.whl packages/kaya-rsgi/dist/*.tar.gz uv publish packages/kaya-rsgi/dist/*.whl packages/kaya-rsgi/dist/*.tar.gz
- name: Publish kaya-session artifacts - name: Publish kaya-session artifacts
env: env:
TWINE_REPOSITORY_URL: ${{ vars.PYPI_REGISTRY_URL }} UV_PUBLISH_URL: ${{ vars.PYPI_REGISTRY_URL }}
TWINE_USERNAME: ${{ vars.PUBLISHER_USERNAME }} UV_PUBLISH_USERNAME: ${{ vars.PUBLISHER_USERNAME }}
TWINE_PASSWORD: ${{ secrets.PUBLISHER_TOKEN }} UV_PUBLISH_PASSWORD: ${{ secrets.PUBLISHER_TOKEN }}
run: | run: |
.venv/bin/pyproject-build packages/kaya-session uv build --package kaya-session --out-dir packages/kaya-session/dist --no-sources
.venv/bin/twine upload --repository gitea packages/kaya-session/dist/*.whl packages/kaya-session/dist/*.tar.gz uv publish packages/kaya-session/dist/*.whl packages/kaya-session/dist/*.tar.gz
- name: Publish kaya-session-memcache artifacts - name: Publish kaya-session-memcache artifacts
env: env:
TWINE_REPOSITORY_URL: ${{ vars.PYPI_REGISTRY_URL }} UV_PUBLISH_URL: ${{ vars.PYPI_REGISTRY_URL }}
TWINE_USERNAME: ${{ vars.PUBLISHER_USERNAME }} UV_PUBLISH_USERNAME: ${{ vars.PUBLISHER_USERNAME }}
TWINE_PASSWORD: ${{ secrets.PUBLISHER_TOKEN }} UV_PUBLISH_PASSWORD: ${{ secrets.PUBLISHER_TOKEN }}
run: | run: |
.venv/bin/pyproject-build packages/kaya-session-memcache uv build --package kaya-session-memcache --out-dir packages/kaya-session-memcache/dist --no-sources
.venv/bin/twine upload --repository gitea packages/kaya-session-memcache/dist/*.whl packages/kaya-session-memcache/dist/*.tar.gz uv publish packages/kaya-session-memcache/dist/*.whl packages/kaya-session-memcache/dist/*.tar.gz
- name: Publish kaya-session-redis artifacts - name: Publish kaya-session-redis artifacts
env: env:
TWINE_REPOSITORY_URL: ${{ vars.PYPI_REGISTRY_URL }} UV_PUBLISH_URL: ${{ vars.PYPI_REGISTRY_URL }}
TWINE_USERNAME: ${{ vars.PUBLISHER_USERNAME }} UV_PUBLISH_USERNAME: ${{ vars.PUBLISHER_USERNAME }}
TWINE_PASSWORD: ${{ secrets.PUBLISHER_TOKEN }} UV_PUBLISH_PASSWORD: ${{ secrets.PUBLISHER_TOKEN }}
run: | run: |
.venv/bin/pyproject-build packages/kaya-session-redis uv build --package kaya-session-redis --out-dir packages/kaya-session-redis/dist --no-sources
.venv/bin/twine upload --repository gitea packages/kaya-session-redis/dist/*.whl packages/kaya-session-redis/dist/*.tar.gz uv publish packages/kaya-session-redis/dist/*.whl packages/kaya-session-redis/dist/*.tar.gz
- name: Publish kaya-oidc artifacts - name: Publish kaya-oidc artifacts
env: env:
TWINE_REPOSITORY_URL: ${{ vars.PYPI_REGISTRY_URL }} UV_PUBLISH_URL: ${{ vars.PYPI_REGISTRY_URL }}
TWINE_USERNAME: ${{ vars.PUBLISHER_USERNAME }} UV_PUBLISH_USERNAME: ${{ vars.PUBLISHER_USERNAME }}
TWINE_PASSWORD: ${{ secrets.PUBLISHER_TOKEN }} UV_PUBLISH_PASSWORD: ${{ secrets.PUBLISHER_TOKEN }}
run: | run: |
.venv/bin/pyproject-build packages/kaya-oidc uv build --package kaya-oidc --out-dir packages/kaya-oidc/dist --no-sources
.venv/bin/twine upload --repository gitea packages/kaya-oidc/dist/*.whl packages/kaya-oidc/dist/*.tar.gz uv publish packages/kaya-oidc/dist/*.whl packages/kaya-oidc/dist/*.tar.gz
- name: Publish kaya-openapi artifacts - name: Publish kaya-openapi artifacts
env: env:
TWINE_REPOSITORY_URL: ${{ vars.PYPI_REGISTRY_URL }} UV_PUBLISH_URL: ${{ vars.PYPI_REGISTRY_URL }}
TWINE_USERNAME: ${{ vars.PUBLISHER_USERNAME }} UV_PUBLISH_USERNAME: ${{ vars.PUBLISHER_USERNAME }}
TWINE_PASSWORD: ${{ secrets.PUBLISHER_TOKEN }} UV_PUBLISH_PASSWORD: ${{ secrets.PUBLISHER_TOKEN }}
run: | run: |
.venv/bin/pyproject-build packages/kaya-openapi uv build --package kaya-openapi --out-dir packages/kaya-openapi/dist --no-sources
.venv/bin/twine upload --repository gitea packages/kaya-openapi/dist/*.whl packages/kaya-openapi/dist/*.tar.gz uv publish packages/kaya-openapi/dist/*.whl packages/kaya-openapi/dist/*.tar.gz
- name: Publish kaya-cors artifacts - name: Publish kaya-cors artifacts
env: env:
TWINE_REPOSITORY_URL: ${{ vars.PYPI_REGISTRY_URL }} UV_PUBLISH_URL: ${{ vars.PYPI_REGISTRY_URL }}
TWINE_USERNAME: ${{ vars.PUBLISHER_USERNAME }} UV_PUBLISH_USERNAME: ${{ vars.PUBLISHER_USERNAME }}
TWINE_PASSWORD: ${{ secrets.PUBLISHER_TOKEN }} UV_PUBLISH_PASSWORD: ${{ secrets.PUBLISHER_TOKEN }}
run: | run: |
.venv/bin/pyproject-build packages/kaya-cors uv build --package kaya-cors --out-dir packages/kaya-cors/dist --no-sources
.venv/bin/twine upload --repository gitea packages/kaya-cors/dist/*.whl packages/kaya-cors/dist/*.tar.gz uv publish packages/kaya-cors/dist/*.whl packages/kaya-cors/dist/*.tar.gz
- name: Publish kaya-forwarded artifacts - name: Publish kaya-forwarded artifacts
env: env:
TWINE_REPOSITORY_URL: ${{ vars.PYPI_REGISTRY_URL }} UV_PUBLISH_URL: ${{ vars.PYPI_REGISTRY_URL }}
TWINE_USERNAME: ${{ vars.PUBLISHER_USERNAME }} UV_PUBLISH_USERNAME: ${{ vars.PUBLISHER_USERNAME }}
TWINE_PASSWORD: ${{ secrets.PUBLISHER_TOKEN }} UV_PUBLISH_PASSWORD: ${{ secrets.PUBLISHER_TOKEN }}
run: | run: |
.venv/bin/pyproject-build packages/kaya-forwarded uv build --package kaya-forwarded --out-dir packages/kaya-forwarded/dist --no-sources
.venv/bin/twine upload --repository gitea packages/kaya-forwarded/dist/*.whl packages/kaya-forwarded/dist/*.tar.gz uv publish packages/kaya-forwarded/dist/*.whl packages/kaya-forwarded/dist/*.tar.gz
- name: Publish kaya-otel artifacts - name: Publish kaya-otel artifacts
env: env:
TWINE_REPOSITORY_URL: ${{ vars.PYPI_REGISTRY_URL }} UV_PUBLISH_URL: ${{ vars.PYPI_REGISTRY_URL }}
TWINE_USERNAME: ${{ vars.PUBLISHER_USERNAME }} UV_PUBLISH_USERNAME: ${{ vars.PUBLISHER_USERNAME }}
TWINE_PASSWORD: ${{ secrets.PUBLISHER_TOKEN }} UV_PUBLISH_PASSWORD: ${{ secrets.PUBLISHER_TOKEN }}
run: | run: |
.venv/bin/pyproject-build packages/kaya-otel uv build --package kaya-otel --out-dir packages/kaya-otel/dist --no-sources
.venv/bin/twine upload --repository gitea packages/kaya-otel/dist/*.whl packages/kaya-otel/dist/*.tar.gz uv publish packages/kaya-otel/dist/*.whl packages/kaya-otel/dist/*.tar.gz
+1
View File
@@ -0,0 +1 @@
3.14.6
+35 -39
View File
@@ -17,69 +17,65 @@ This repository is a monorepo for the Kaya framework. The code is split into ind
- **kaya-forwarded** — trusted-proxy `Forwarded`/`X-Forwarded-*` client address resolution (`packages/kaya-forwarded/`) - **kaya-forwarded** — trusted-proxy `Forwarded`/`X-Forwarded-*` client address resolution (`packages/kaya-forwarded/`)
- **kaya-otel** — OpenTelemetry tracing and metrics (`packages/kaya-otel/`) - **kaya-otel** — OpenTelemetry tracing and metrics (`packages/kaya-otel/`)
Additional `kaya-*` packages can be added as new directories under `packages/`. Additional `kaya-*` packages can be added as new directories under `packages/`. When adding a new package, also add it to the root `pyproject.toml` dependencies and `[tool.uv.sources]` so `uv sync` installs it.
## Build & run locally ## Build & run locally
Install dev dependencies: This project uses [uv](https://docs.astral.sh/uv/) for dependency management. From the repository root:
```bash ```bash
pip install --index-url https://gitea.woggioni.net/api/packages/woggioni/pypi/simple --extra-index-url https://pypi.org/simple -r requirements-dev.txt uv sync
``` ```
Install the packages in development mode: This creates `.venv`, installs all workspace packages in editable mode, and installs the dev dependency group from `uv.lock`. Use `uv lock` after changing dependencies, and commit the updated `uv.lock`.
```bash
pip install -e packages/kaya-core -e packages/kaya-rsgi -e packages/kaya-session -e packages/kaya-session-redis -e packages/kaya-session-memcache -e packages/kaya-oidc -e packages/kaya-openapi -e packages/kaya-cors -e packages/kaya-forwarded -e packages/kaya-otel
```
Run the example: Run the example:
```bash ```bash
python example/hello.py uv run python example/hello.py
``` ```
## Tests ## Tests
```bash ```bash
python -m unittest discover -s packages/kaya-core/tests uv run python -m unittest discover -s packages/kaya-core/tests
python -m unittest discover -s packages/kaya-rsgi/tests uv run python -m unittest discover -s packages/kaya-rsgi/tests
python -m unittest discover -s packages/kaya-session/tests uv run python -m unittest discover -s packages/kaya-session/tests
python -m unittest discover -s packages/kaya-session-redis/tests uv run python -m unittest discover -s packages/kaya-session-redis/tests
python -m unittest discover -s packages/kaya-session-memcache/tests uv run python -m unittest discover -s packages/kaya-session-memcache/tests
python -m unittest discover -s packages/kaya-oidc/tests uv run python -m unittest discover -s packages/kaya-oidc/tests
python -m unittest discover -s packages/kaya-openapi/tests uv run python -m unittest discover -s packages/kaya-openapi/tests
python -m unittest discover -s packages/kaya-cors/tests uv run python -m unittest discover -s packages/kaya-cors/tests
python -m unittest discover -s packages/kaya-forwarded/tests uv run python -m unittest discover -s packages/kaya-forwarded/tests
python -m unittest discover -s packages/kaya-otel/tests uv run python -m unittest discover -s packages/kaya-otel/tests
``` ```
## Static analysis ## Static analysis
```bash ```bash
mypy -p kaya.core uv run mypy -p kaya.core
mypy -p kaya.rsgi uv run mypy -p kaya.rsgi
mypy -p kaya.session uv run mypy -p kaya.session
mypy -p kaya.session.redis uv run mypy -p kaya.session.redis
mypy -p kaya.session.memcache uv run mypy -p kaya.session.memcache
mypy -p kaya.oidc uv run mypy -p kaya.oidc
mypy -p kaya.openapi uv run mypy -p kaya.openapi
mypy -p kaya.cors uv run mypy -p kaya.cors
mypy -p kaya.forwarded uv run mypy -p kaya.forwarded
mypy -p kaya.otel uv run mypy -p kaya.otel
``` ```
## Building packages ## Building packages
```bash ```bash
python -m build packages/kaya-core uv build --package kaya-core --out-dir packages/kaya-core/dist
python -m build packages/kaya-rsgi uv build --package kaya-rsgi --out-dir packages/kaya-rsgi/dist
python -m build packages/kaya-session uv build --package kaya-session --out-dir packages/kaya-session/dist
python -m build packages/kaya-session-redis uv build --package kaya-session-redis --out-dir packages/kaya-session-redis/dist
python -m build packages/kaya-session-memcache uv build --package kaya-session-memcache --out-dir packages/kaya-session-memcache/dist
python -m build packages/kaya-oidc uv build --package kaya-oidc --out-dir packages/kaya-oidc/dist
python -m build packages/kaya-openapi uv build --package kaya-openapi --out-dir packages/kaya-openapi/dist
python -m build packages/kaya-cors uv build --package kaya-cors --out-dir packages/kaya-cors/dist
python -m build packages/kaya-forwarded uv build --package kaya-forwarded --out-dir packages/kaya-forwarded/dist
python -m build packages/kaya-otel uv build --package kaya-otel --out-dir packages/kaya-otel/dist
``` ```
-5
View File
@@ -26,11 +26,6 @@ dependencies = [
"typing-extensions", "typing-extensions",
] ]
[project.optional-dependencies]
dev = [
"build", "mypy", "ipdb", "twine", "httpx", "httpx-ws"
]
[project.urls] [project.urls]
"Homepage" = "https://github.com/woggioni/kaya" "Homepage" = "https://github.com/woggioni/kaya"
"Bug Tracker" = "https://github.com/woggioni/kaya/issues" "Bug Tracker" = "https://github.com/woggioni/kaya/issues"
-5
View File
@@ -25,11 +25,6 @@ dependencies = [
"kaya-core", "kaya-core",
] ]
[project.optional-dependencies]
dev = [
"build", "mypy", "ipdb", "twine", "httpx", "httpx-ws", "kaya-rsgi"
]
[project.urls] [project.urls]
"Homepage" = "https://github.com/woggioni/kaya" "Homepage" = "https://github.com/woggioni/kaya"
"Bug Tracker" = "https://github.com/woggioni/kaya/issues" "Bug Tracker" = "https://github.com/woggioni/kaya/issues"
-5
View File
@@ -25,11 +25,6 @@ dependencies = [
"kaya-core", "kaya-core",
] ]
[project.optional-dependencies]
dev = [
"build", "mypy", "ipdb", "twine", "httpx", "httpx-ws", "kaya-rsgi"
]
[project.urls] [project.urls]
"Homepage" = "https://github.com/woggioni/kaya" "Homepage" = "https://github.com/woggioni/kaya"
"Bug Tracker" = "https://github.com/woggioni/kaya/issues" "Bug Tracker" = "https://github.com/woggioni/kaya/issues"
-5
View File
@@ -28,11 +28,6 @@ dependencies = [
"PyJWT[crypto]", "PyJWT[crypto]",
] ]
[project.optional-dependencies]
dev = [
"build", "mypy", "ipdb", "twine", "httpx", "httpx-ws"
]
[project.urls] [project.urls]
"Homepage" = "https://github.com/woggioni/kaya" "Homepage" = "https://github.com/woggioni/kaya"
"Bug Tracker" = "https://github.com/woggioni/kaya/issues" "Bug Tracker" = "https://github.com/woggioni/kaya/issues"
-5
View File
@@ -25,11 +25,6 @@ dependencies = [
"kaya-core", "kaya-core",
] ]
[project.optional-dependencies]
dev = [
"build", "mypy", "ipdb", "twine", "httpx", "httpx-ws"
]
[project.urls] [project.urls]
"Homepage" = "https://github.com/woggioni/kaya" "Homepage" = "https://github.com/woggioni/kaya"
"Bug Tracker" = "https://github.com/woggioni/kaya/issues" "Bug Tracker" = "https://github.com/woggioni/kaya/issues"
-5
View File
@@ -27,11 +27,6 @@ dependencies = [
"opentelemetry-exporter-otlp-proto-http", "opentelemetry-exporter-otlp-proto-http",
] ]
[project.optional-dependencies]
dev = [
"build", "mypy", "ipdb", "twine", "httpx", "httpx-ws", "kaya-rsgi"
]
[project.urls] [project.urls]
"Homepage" = "https://github.com/woggioni/kaya" "Homepage" = "https://github.com/woggioni/kaya"
"Bug Tracker" = "https://github.com/woggioni/kaya/issues" "Bug Tracker" = "https://github.com/woggioni/kaya/issues"
-5
View File
@@ -27,11 +27,6 @@ dependencies = [
"pwo", "pwo",
] ]
[project.optional-dependencies]
dev = [
"build", "mypy", "ipdb", "twine"
]
[project.urls] [project.urls]
"Homepage" = "https://github.com/woggioni/kaya" "Homepage" = "https://github.com/woggioni/kaya"
"Bug Tracker" = "https://github.com/woggioni/kaya/issues" "Bug Tracker" = "https://github.com/woggioni/kaya/issues"
@@ -26,11 +26,6 @@ dependencies = [
"aiomcache>=0.8", "aiomcache>=0.8",
] ]
[project.optional-dependencies]
dev = [
"build", "mypy", "ipdb", "twine"
]
[project.urls] [project.urls]
"Homepage" = "https://github.com/woggioni/kaya" "Homepage" = "https://github.com/woggioni/kaya"
"Bug Tracker" = "https://github.com/woggioni/kaya/issues" "Bug Tracker" = "https://github.com/woggioni/kaya/issues"
@@ -26,11 +26,6 @@ dependencies = [
"redis>=5.0", "redis>=5.0",
] ]
[project.optional-dependencies]
dev = [
"build", "mypy", "ipdb", "twine", "fakeredis"
]
[project.urls] [project.urls]
"Homepage" = "https://github.com/woggioni/kaya" "Homepage" = "https://github.com/woggioni/kaya"
"Bug Tracker" = "https://github.com/woggioni/kaya/issues" "Bug Tracker" = "https://github.com/woggioni/kaya/issues"
-5
View File
@@ -26,11 +26,6 @@ dependencies = [
"pwo", "pwo",
] ]
[project.optional-dependencies]
dev = [
"build", "mypy", "ipdb", "twine", "httpx", "httpx-ws"
]
[project.urls] [project.urls]
"Homepage" = "https://github.com/woggioni/kaya" "Homepage" = "https://github.com/woggioni/kaya"
"Bug Tracker" = "https://github.com/woggioni/kaya/issues" "Bug Tracker" = "https://github.com/woggioni/kaya/issues"
+51
View File
@@ -0,0 +1,51 @@
[project]
name = "kaya"
version = "0.0.0"
description = "Development workspace for the Kaya lightweight ASGI web framework"
requires-python = ">=3.10"
dependencies = [
"kaya-core",
"kaya-rsgi",
"kaya-session",
"kaya-session-redis",
"kaya-session-memcache",
"kaya-oidc",
"kaya-openapi",
"kaya-cors",
"kaya-forwarded",
"kaya-otel",
]
[dependency-groups]
dev = [
"fakeredis",
"mypy",
"ipdb",
"httpx",
"httpx-ws",
]
[tool.uv]
package = false
required-version = ">=0.13"
[tool.uv.workspace]
members = ["packages/*"]
[tool.uv.sources]
kaya-core = { workspace = true }
kaya-rsgi = { workspace = true }
kaya-session = { workspace = true }
kaya-session-redis = { workspace = true }
kaya-session-memcache = { workspace = true }
kaya-oidc = { workspace = true }
kaya-openapi = { workspace = true }
kaya-cors = { workspace = true }
kaya-forwarded = { workspace = true }
kaya-otel = { workspace = true }
pwo = { index = "gitea" }
[[tool.uv.index]]
name = "gitea"
url = "https://gitea.woggioni.net/api/packages/woggioni/pypi/simple"
explicit = true
-17
View File
@@ -1,17 +0,0 @@
kaya-core @ file:./packages/kaya-core
kaya-rsgi @ file:./packages/kaya-rsgi
kaya-session @ file:./packages/kaya-session
kaya-session-redis @ file:./packages/kaya-session-redis
kaya-session-memcache @ file:./packages/kaya-session-memcache
kaya-oidc @ file:./packages/kaya-oidc
kaya-openapi @ file:./packages/kaya-openapi
kaya-cors @ file:./packages/kaya-cors
kaya-forwarded @ file:./packages/kaya-forwarded
kaya-otel @ file:./packages/kaya-otel
build
fakeredis
mypy
ipdb
twine
httpx
httpx-ws
-247
View File
@@ -1,247 +0,0 @@
#
# This file is autogenerated by pip-compile with Python 3.14
# by the following command:
#
# pip-compile --allow-unsafe --extra-index-url=https://pypi.org/simple --index-url=https://gitea.woggioni.net/api/packages/woggioni/pypi/simple --output-file=requirements-dev.txt requirements-dev.in
#
--index-url https://gitea.woggioni.net/api/packages/woggioni/pypi/simple
--extra-index-url https://pypi.org/simple
aiomcache==0.8.2
# via kaya-session-memcache
anyio==4.14.2
# via
# httpx
# httpx-ws
ast-serialize==0.6.0
# via mypy
asttokens==3.0.2
# via stack-data
build==1.5.0
# via -r requirements-dev.in
certifi==2026.6.17
# via
# httpcore
# httpx
# requests
cffi==2.1.0
# via cryptography
charset-normalizer==3.4.9
# via requests
click==8.4.2
# via granian
cryptography==49.0.0
# via
# pyjwt
# secretstorage
decorator==5.3.1
# via
# ipdb
# ipython
docutils==0.23
# via readme-renderer
executing==2.2.1
# via stack-data
fakeredis==2.36.2
# via -r requirements-dev.in
googleapis-common-protos==1.75.3
# via opentelemetry-exporter-otlp-proto-http
granian==2.7.9
# via kaya-rsgi
h11==0.16.0
# via
# httpcore
# wsproto
httpcore==1.0.9
# via
# httpx
# httpx-ws
httpx==0.28.1
# via
# -r requirements-dev.in
# httpx-ws
# kaya-oidc
httpx-ws==0.9.0
# via -r requirements-dev.in
id==1.6.1
# via twine
idna==3.18
# via
# anyio
# httpx
# requests
ipdb==0.13.13
# via -r requirements-dev.in
ipython==9.15.0
# via ipdb
ipython-pygments-lexers==1.1.1
# via ipython
jaraco-classes==3.4.0
# via keyring
jaraco-context==6.1.2
# via keyring
jaraco-functools==4.6.0
# via keyring
jedi==0.20.0
# via ipython
jeepney==0.9.0
# via
# keyring
# secretstorage
file:./packages/kaya-core
# via
# -r requirements-dev.in
# kaya-cors
# kaya-forwarded
# kaya-oidc
# kaya-openapi
# kaya-otel
# kaya-rsgi
# kaya-session
file:./packages/kaya-cors
# via -r requirements-dev.in
file:./packages/kaya-forwarded
# via -r requirements-dev.in
file:./packages/kaya-oidc
# via -r requirements-dev.in
file:./packages/kaya-openapi
# via -r requirements-dev.in
file:./packages/kaya-otel
# via -r requirements-dev.in
file:./packages/kaya-rsgi
# via -r requirements-dev.in
file:./packages/kaya-session
# via
# -r requirements-dev.in
# kaya-oidc
# kaya-session-memcache
# kaya-session-redis
file:./packages/kaya-session-memcache
# via -r requirements-dev.in
file:./packages/kaya-session-redis
# via -r requirements-dev.in
keyring==25.7.0
# via twine
librt==0.13.0
# via mypy
markdown-it-py==4.2.0
# via rich
matplotlib-inline==0.2.2
# via ipython
mdurl==0.1.2
# via markdown-it-py
more-itertools==11.1.0
# via
# jaraco-classes
# jaraco-functools
mypy==2.3.0
# via -r requirements-dev.in
mypy-extensions==1.1.0
# via mypy
nh3==0.3.6
# via readme-renderer
opentelemetry-api==1.44.0
# via
# opentelemetry-exporter-otlp-proto-http
# opentelemetry-sdk
# opentelemetry-semantic-conventions
opentelemetry-exporter-otlp-proto-common==1.44.0
# via opentelemetry-exporter-otlp-proto-http
opentelemetry-exporter-otlp-proto-http==1.44.0
# via kaya-otel
opentelemetry-proto==1.44.0
# via
# opentelemetry-exporter-otlp-proto-common
# opentelemetry-exporter-otlp-proto-http
opentelemetry-sdk==1.44.0
# via
# kaya-otel
# opentelemetry-exporter-otlp-proto-http
opentelemetry-semantic-conventions==0.65b0
# via opentelemetry-sdk
packaging==26.2
# via
# build
# twine
parso==0.8.7
# via jedi
pathspec==1.1.1
# via mypy
pexpect==4.9.0
# via ipython
prompt-toolkit==3.0.52
# via ipython
protobuf==7.36.2
# via
# googleapis-common-protos
# opentelemetry-proto
psutil==7.2.2
# via ipython
ptyprocess==0.7.0
# via pexpect
pure-eval==0.2.3
# via stack-data
pwo==0.1.2
# via
# kaya-core
# kaya-rsgi
# kaya-session
pycparser==3.0
# via cffi
pygments==2.20.0
# via
# ipython
# ipython-pygments-lexers
# readme-renderer
# rich
pyjwt[crypto]==2.13.0
# via kaya-oidc
pyproject-hooks==1.2.0
# via build
readme-renderer==45.0
# via twine
redis==8.0.1
# via
# fakeredis
# kaya-session-redis
requests==2.34.2
# via
# opentelemetry-exporter-otlp-proto-http
# requests-toolbelt
# twine
requests-toolbelt==1.0.0
# via twine
rfc3986==2.0.0
# via twine
rich==15.0.0
# via twine
secretstorage==3.5.0
# via keyring
sortedcontainers==2.4.0
# via fakeredis
stack-data==0.6.3
# via ipython
traitlets==5.15.1
# via
# ipython
# matplotlib-inline
twine==6.2.0
# via -r requirements-dev.in
typing-extensions==4.16.0
# via
# kaya-core
# mypy
# opentelemetry-api
# opentelemetry-exporter-otlp-proto-http
# opentelemetry-sdk
# opentelemetry-semantic-conventions
# pwo
urllib3==2.7.0
# via
# id
# requests
# twine
wcwidth==0.8.2
# via prompt-toolkit
wsproto==1.3.2
# via httpx-ws
Generated
+1669
View File
File diff suppressed because it is too large Load Diff