From d8495dc8787276bf5c7aa26bf21ea05500c73779 Mon Sep 17 00:00:00 2001 From: phil Date: Wed, 28 May 2025 16:37:10 +0000 Subject: [PATCH 01/20] Update README.md --- README.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/README.md b/README.md index 4cb60ad..afc61cd 100644 --- a/README.md +++ b/README.md @@ -13,3 +13,26 @@ It has 4 standard entry points, defined in `pyproject.toml`: It has a Forgejo CI build action, defined in `.forgejo/actions/build.yaml`. +## Usage + +```fish +set NAME knoc_foo +set DNAME (echo $NAME | tr "_" "-") +``` + +or with bash: +```bash +NAME=knoc_foo +DNAME=$(echo $NAME | tr "_" "-") +``` + +Then: +```fish +git clone https://code.philo.ydns.eu/K-Net/knoc-plugin-template.git $NAME +cd $NAME +rm -rf .git +mv src/knoc_plugin_template src/$NAME +sed "s/knoc_plugin_template/$NAME/" -i pyproject.toml +sed "s/knoc-plugin-template/$DNAME/" -i pyproject.toml + +``` From 1e51db31702157d33ffae6b92f836e5d6dadb6cc Mon Sep 17 00:00:00 2001 From: phil Date: Wed, 28 May 2025 16:45:19 +0000 Subject: [PATCH 02/20] Update README.md --- README.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index afc61cd..a34efe7 100644 --- a/README.md +++ b/README.md @@ -28,11 +28,14 @@ DNAME=$(echo $NAME | tr "_" "-") Then: ```fish -git clone https://code.philo.ydns.eu/K-Net/knoc-plugin-template.git $NAME -cd $NAME +git clone https://code.philo.ydns.eu/K-Net/knoc-plugin-template.git $DNAME +cd $DNAME rm -rf .git mv src/knoc_plugin_template src/$NAME sed "s/knoc_plugin_template/$NAME/" -i pyproject.toml sed "s/knoc-plugin-template/$DNAME/" -i pyproject.toml - +sed "s/knoc_plugin_template/$NAME/" -i src/$NAME/api.py +sed "s/knoc_plugin_template/$NAME/" -i src/$NAME/cli.py +sed "s/knoc_plugin_template/$NAME/" -i src/$NAME/settings.py +sed "s/knoc_plugin_template/$NAME/" -i src/$NAME/workflows.py ``` From e8d64c3b80307b3e3d81ad33c555fd03f73902ff Mon Sep 17 00:00:00 2001 From: phil Date: Wed, 28 May 2025 17:01:04 +0000 Subject: [PATCH 03/20] Update README.md --- README.md | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index a34efe7..65b2e28 100644 --- a/README.md +++ b/README.md @@ -15,14 +15,18 @@ It has a Forgejo CI build action, defined in `.forgejo/actions/build.yaml`. ## Usage +Just replace `foo` by the name of the plugin below: + ```fish -set NAME knoc_foo +set NAME foo +set PNAME knoc_$NAME set DNAME (echo $NAME | tr "_" "-") ``` or with bash: ```bash NAME=knoc_foo +PNAME=knoc_$NAME DNAME=$(echo $NAME | tr "_" "-") ``` @@ -32,10 +36,10 @@ git clone https://code.philo.ydns.eu/K-Net/knoc-plugin-template.git $DNAME cd $DNAME rm -rf .git mv src/knoc_plugin_template src/$NAME -sed "s/knoc_plugin_template/$NAME/" -i pyproject.toml +sed "s/plugin_template/$NAME/" -i pyproject.toml sed "s/knoc-plugin-template/$DNAME/" -i pyproject.toml -sed "s/knoc_plugin_template/$NAME/" -i src/$NAME/api.py -sed "s/knoc_plugin_template/$NAME/" -i src/$NAME/cli.py -sed "s/knoc_plugin_template/$NAME/" -i src/$NAME/settings.py -sed "s/knoc_plugin_template/$NAME/" -i src/$NAME/workflows.py +sed "s/plugin_template/$NAME/" -i src/$NAME/api.py +sed "s/plugin_template/$NAME/" -i src/$NAME/cli.py +sed "s/plugin_template/$NAME/" -i src/$NAME/settings.py +sed "s/plugin_template/$NAME/" -i src/$NAME/workflows.py ``` From 21a08142cf29d2e3206ba77e1d4ae657c21bc509 Mon Sep 17 00:00:00 2001 From: phil Date: Wed, 28 May 2025 17:01:23 +0000 Subject: [PATCH 04/20] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 65b2e28..86f587d 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ set DNAME (echo $NAME | tr "_" "-") or with bash: ```bash -NAME=knoc_foo +NAME=foo PNAME=knoc_$NAME DNAME=$(echo $NAME | tr "_" "-") ``` From a9bc70650179daff2562565ffe83e48da5d88112 Mon Sep 17 00:00:00 2001 From: phil Date: Wed, 28 May 2025 17:03:52 +0000 Subject: [PATCH 05/20] Update README.md --- README.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 86f587d..4c21162 100644 --- a/README.md +++ b/README.md @@ -38,8 +38,9 @@ rm -rf .git mv src/knoc_plugin_template src/$NAME sed "s/plugin_template/$NAME/" -i pyproject.toml sed "s/knoc-plugin-template/$DNAME/" -i pyproject.toml -sed "s/plugin_template/$NAME/" -i src/$NAME/api.py -sed "s/plugin_template/$NAME/" -i src/$NAME/cli.py -sed "s/plugin_template/$NAME/" -i src/$NAME/settings.py -sed "s/plugin_template/$NAME/" -i src/$NAME/workflows.py +sed "s/plugin_template/$NAME/" -i src/$PNAME/api.py +sed "s/plugin_template/$NAME/" -i src/$PNAME/cli.py +sed "s/plugin_template/$NAME/" -i src/$PNAME/settings.py +sed "s/plugin_template/$NAME/" -i src/$PNAME/workflows.py +uv venv ``` From a8a649964d925d16a9bca4b113989a6d9c40cba9 Mon Sep 17 00:00:00 2001 From: phil Date: Wed, 28 May 2025 17:11:44 +0000 Subject: [PATCH 06/20] Update README.md --- README.md | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 4c21162..e4ec856 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,9 @@ It has a Forgejo CI build action, defined in `.forgejo/actions/build.yaml`. ## Usage -Just replace `foo` by the name of the plugin below: +Just replace `foo` by the name of the plugin below. + +With `fish`: ```fish set NAME foo @@ -43,4 +45,25 @@ sed "s/plugin_template/$NAME/" -i src/$PNAME/cli.py sed "s/plugin_template/$NAME/" -i src/$PNAME/settings.py sed "s/plugin_template/$NAME/" -i src/$PNAME/workflows.py uv venv +git init ``` + +Then, with `fish`: +```fish +. .venv/bin/activate.fish +uv sync +``` + +Or `bash`: +```bash +. .venv/bin/activate +uv sync +``` + +The package is ready. + +In a *knoc* development environment: +```fish +uv pip install -e ../$DNAME +knoc # Should display the new plugin's CLI tool +``` \ No newline at end of file From 8eb40f6080a36a49f5b39bb47f4ca6a90969342b Mon Sep 17 00:00:00 2001 From: phil Date: Wed, 28 May 2025 17:13:26 +0000 Subject: [PATCH 07/20] Update README.md --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e4ec856..75e8e6f 100644 --- a/README.md +++ b/README.md @@ -60,10 +60,12 @@ Or `bash`: uv sync ``` -The package is ready. +=> The package is ready. In a *knoc* development environment: ```fish uv pip install -e ../$DNAME knoc # Should display the new plugin's CLI tool -``` \ No newline at end of file +``` + +Finally, set the git upstream, edit, commit, tag, push. \ No newline at end of file From e44445abbd371ab16a72fc7e0aa0ae67921fdca7 Mon Sep 17 00:00:00 2001 From: phil Date: Wed, 28 May 2025 17:14:51 +0000 Subject: [PATCH 08/20] Update README.md --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 75e8e6f..176112d 100644 --- a/README.md +++ b/README.md @@ -68,4 +68,6 @@ uv pip install -e ../$DNAME knoc # Should display the new plugin's CLI tool ``` -Finally, set the git upstream, edit, commit, tag, push. \ No newline at end of file +Finally, set the git upstream, edit, commit, tag, push. + +To add the plugin in a production image, add the name to the `PLUGIN` variable of the CI build tool, and deploy. \ No newline at end of file From dfc088718a0b79bdf2924738a483c8329a32e26e Mon Sep 17 00:00:00 2001 From: phil Date: Wed, 28 May 2025 17:22:08 +0000 Subject: [PATCH 09/20] Update README.md --- README.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 176112d..51537fd 100644 --- a/README.md +++ b/README.md @@ -68,6 +68,14 @@ uv pip install -e ../$DNAME knoc # Should display the new plugin's CLI tool ``` -Finally, set the git upstream, edit, commit, tag, push. +Finally, create a repo with the same name in the central repo (*forgejo*) and the git upstream. + +*Forgejo* inits repo with a branch `main` to it might be useful to run: + +```fish +git branch -m master main +``` + +, edit, commit, tag, push. To add the plugin in a production image, add the name to the `PLUGIN` variable of the CI build tool, and deploy. \ No newline at end of file From 71a7eeafaef0152da7e47636badd5de05603035b Mon Sep 17 00:00:00 2001 From: phil Date: Wed, 28 May 2025 19:45:06 +0200 Subject: [PATCH 10/20] Update REAMDE --- README.md | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 51537fd..7ab13a8 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ It has 4 standard entry points, defined in `pyproject.toml`: ## CI -It has a Forgejo CI build action, defined in `.forgejo/actions/build.yaml`. +It has a *Forgejo* CI build action, defined in `.forgejo/actions/build.yaml`. ## Usage @@ -26,6 +26,7 @@ set DNAME (echo $NAME | tr "_" "-") ``` or with bash: + ```bash NAME=foo PNAME=knoc_$NAME @@ -33,6 +34,7 @@ DNAME=$(echo $NAME | tr "_" "-") ``` Then: + ```fish git clone https://code.philo.ydns.eu/K-Net/knoc-plugin-template.git $DNAME cd $DNAME @@ -45,37 +47,44 @@ sed "s/plugin_template/$NAME/" -i src/$PNAME/cli.py sed "s/plugin_template/$NAME/" -i src/$PNAME/settings.py sed "s/plugin_template/$NAME/" -i src/$PNAME/workflows.py uv venv -git init +git init # Forgejo inits repo with a branch `main`, so it might be a good idea to stick wit this convention +git branch -m master main ``` Then, with `fish`: + ```fish . .venv/bin/activate.fish uv sync ``` Or `bash`: + ```bash . .venv/bin/activate uv sync +git add --all +git commit -m "Initial commit" ``` => The package is ready. In a *knoc* development environment: + ```fish uv pip install -e ../$DNAME knoc # Should display the new plugin's CLI tool ``` -Finally, create a repo with the same name in the central repo (*forgejo*) and the git upstream. +## Develop -*Forgejo* inits repo with a branch `main` to it might be useful to run: +* Edit +*`git commit` +*`git tag` (for versioning: `git tag -a v0.1.2 -m "..."`) +* `git push` -```fish -git branch -m master main -``` +## Deploy -, edit, commit, tag, push. +To add the plugin in a production image, add the name to the `PLUGIN` variable +of the CI build tool, and deploy. -To add the plugin in a production image, add the name to the `PLUGIN` variable of the CI build tool, and deploy. \ No newline at end of file From 6c32d5ffee37f23e2386a7d756026110badf4cd7 Mon Sep 17 00:00:00 2001 From: phil Date: Wed, 28 May 2025 19:56:10 +0200 Subject: [PATCH 11/20] Rename settings --- pyproject.toml | 2 +- src/knoc_plugin_template/settings.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index e5e12cc..79b1be5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -29,7 +29,7 @@ source = "uv-dynamic-versioning" style = "semver" [project.entry-points."knoc.settings"] -plugin_template = "knoc_plugin_template.settings:PluginTemplateSettings" +plugin_template = "knoc_plugin_template.settings:Settings" [project.entry-points."knoc.api"] plugin_template = "knoc_plugin_template.api:app" diff --git a/src/knoc_plugin_template/settings.py b/src/knoc_plugin_template/settings.py index 96d17b1..3061868 100644 --- a/src/knoc_plugin_template/settings.py +++ b/src/knoc_plugin_template/settings.py @@ -1,5 +1,5 @@ from pydantic import BaseModel -class PluginTemplateSettings(BaseModel): +class Settings(BaseModel): setting: str | None = None From 224cbb57ffb70e9aea4ef2e5a358af15adecff18 Mon Sep 17 00:00:00 2001 From: MAY Phillipe Date: Sat, 31 May 2025 02:49:22 +0000 Subject: [PATCH 12/20] Add license --- LICENSE | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..67d701f --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2025 Phillipe May + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. From 7c5fa454953a9509a3fef752bd4ad0af8472ba30 Mon Sep 17 00:00:00 2001 From: phil Date: Thu, 19 Jun 2025 15:49:55 +0200 Subject: [PATCH 13/20] Add standalone cli, comment the plugins --- pyproject.toml | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 79b1be5..85c1188 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -12,6 +12,9 @@ url = "https://code.philo.ydns.eu/api/packages/philorg/pypi/simple/" [[tool.uv.index]] url = "https://code.philo.ydns.eu/api/packages/K-Net/pypi/simple/" +[project.scripts] +knoc-plugin-template = "knoc_plugin_template.cli:app" + [build-system] requires = ["hatchling", "uv-dynamic-versioning"] build-backend = "hatchling.build" @@ -28,14 +31,15 @@ source = "uv-dynamic-versioning" [tool.uv-dynamic-versioning] style = "semver" +## Knonc entry points - uncomment and rename for your needs [project.entry-points."knoc.settings"] -plugin_template = "knoc_plugin_template.settings:Settings" +#plugin_template = "knoc_plugin_template.settings:Settings" [project.entry-points."knoc.api"] -plugin_template = "knoc_plugin_template.api:app" +#plugin_template = "knoc_plugin_template.api:app" [project.entry-points."knoc.cli"] -plugin_template = "knoc_plugin_template.cli:app" +#plugin_template = "knoc_plugin_template.cli:app" [project.entry-points."knoc.workflow"] -plugin_template = "knoc_plugin_template.workflows:do_nothing_wf" +#plugin_template = "knoc_plugin_template.workflows:do_nothing_wf" From b1bd86962fa2aa3a502a3a31383ef71f19717560 Mon Sep 17 00:00:00 2001 From: phil Date: Thu, 19 Jun 2025 15:50:45 +0200 Subject: [PATCH 14/20] Update import for Knoc update --- src/knoc_plugin_template/api.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/knoc_plugin_template/api.py b/src/knoc_plugin_template/api.py index 4303319..14a1678 100644 --- a/src/knoc_plugin_template/api.py +++ b/src/knoc_plugin_template/api.py @@ -16,8 +16,7 @@ from sqlmodel.ext.asyncio.session import AsyncSession from hatchet_sdk.runnables.types import EmptyModel from knoc.settings import settings -from knoc.workflows import all_wfs -from knoc.workflows.utils import ImportReport +from knoc.utils import ImportReport from knoc.db import engine, aio_sql_to_df, get_session from knoc_plugin_template.workflows import SimpleOutput, do_nothing_wf @@ -29,8 +28,8 @@ app = FastAPI() @app.get("/") -async def template_api_home() -> HTMLResponse: - return HTMLResponse("

Plugin template home

") +async def template_api_home(): + return {} @app.get("/run_wf") From e0339c940d06b6c49e265f6115622eb87fb25b71 Mon Sep 17 00:00:00 2001 From: phil Date: Thu, 19 Jun 2025 15:51:09 +0200 Subject: [PATCH 15/20] Split processing in separate file --- src/knoc_plugin_template/process.py | 13 +++++++++++++ src/knoc_plugin_template/workflows.py | 20 +++++++++----------- 2 files changed, 22 insertions(+), 11 deletions(-) create mode 100644 src/knoc_plugin_template/process.py diff --git a/src/knoc_plugin_template/process.py b/src/knoc_plugin_template/process.py new file mode 100644 index 0000000..c657348 --- /dev/null +++ b/src/knoc_plugin_template/process.py @@ -0,0 +1,13 @@ +from datetime import datetime + +from pydantic import BaseModel + +from knoc_plugin_template import __version__ + + +class SimpleOutput(BaseModel): + message: str + + +async def plugin_template_process() -> SimpleOutput: + return SimpleOutput(message=f"Foo v{__version__} at {datetime.now()}") diff --git a/src/knoc_plugin_template/workflows.py b/src/knoc_plugin_template/workflows.py index 3a0920f..c47b767 100644 --- a/src/knoc_plugin_template/workflows.py +++ b/src/knoc_plugin_template/workflows.py @@ -1,15 +1,9 @@ -from datetime import datetime -from pydantic import BaseModel - from hatchet_sdk import Context, EmptyModel -from knoc_plugin_template import __version__ -from knoc.settings import settings from knoc.hatchet_client import hatchet - - -class SimpleOutput(BaseModel): - message: str +from pandas._libs.lib import is_np_dtype +from knoc_plugin_template import __version__ +from knoc_plugin_template.process import plugin_template_process, SimpleOutput do_nothing_wf = hatchet.workflow( @@ -18,7 +12,11 @@ do_nothing_wf = hatchet.workflow( ) -@do_nothing_wf.task() +@hatchet.task(input_validator=EmptyModel) async def do_nothing(input: EmptyModel, ctx: Context) -> SimpleOutput: + """A template for Do nothing""" ctx.log("Just a workflow template") - return SimpleOutput(message=f"Foo v{__version__} at {datetime.now()}") + return await plugin_template_process() + + +do_nothing_wf.add_task(do_nothing) From 33a4ad3ad04260deb395f3675d8e234e9ad14db8 Mon Sep 17 00:00:00 2001 From: phil Date: Thu, 26 Jun 2025 18:23:41 +0200 Subject: [PATCH 16/20] CI: switch to woodpecker --- .forgejo/workflows/build.yaml | 48 ----------------------------------- .woodpecker/build.yaml | 39 ++++++++++++++++++++++++++++ .woodpecker/test.yaml | 21 +++++++++++++++ 3 files changed, 60 insertions(+), 48 deletions(-) delete mode 100644 .forgejo/workflows/build.yaml create mode 100644 .woodpecker/build.yaml create mode 100644 .woodpecker/test.yaml diff --git a/.forgejo/workflows/build.yaml b/.forgejo/workflows/build.yaml deleted file mode 100644 index 1b98290..0000000 --- a/.forgejo/workflows/build.yaml +++ /dev/null @@ -1,48 +0,0 @@ -on: - push: - workflow_dispatch: - inputs: - verbose: - description: "Verbose" - required: false - default: false - type: boolean - -jobs: - build: - runs-on: container - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Install the latest version of uv - uses: astral-sh/setup-uv@v4 - with: - version: "0.7.6" - - - name: Install - run: uv sync - - - name: Get version - run: echo "VERSION=$(.venv/bin/dunamai from any --style semver)" >> $GITHUB_ENV - - - name: Version - run: echo $VERSION - - - name: Get distance from tag - run: echo "DISTANCE=$(.venv/bin/dunamai from any --format '{distance}')" >> $GITHUB_ENV - - - name: Distance - run: echo $DISTANCE - - - name: Build wheel - if: env.DISTANCE == '0' - run: uv build --wheel - - - name: Publish Python package (home) - if: env.DISTANCE == '0' - env: - LOCAL_PYPI_TOKEN: ${{ secrets.LOCAL_PYPI_TOKEN }} - run: uv publish --publish-url https://code.philo.ydns.eu/api/packages/K-Net/pypi --token $LOCAL_PYPI_TOKEN - continue-on-error: true diff --git a/.woodpecker/build.yaml b/.woodpecker/build.yaml new file mode 100644 index 0000000..5d11a5f --- /dev/null +++ b/.woodpecker/build.yaml @@ -0,0 +1,39 @@ +when: + - event: manual + - event: tag + +#depends_on: + #- test + +steps: + python_sync: + image: code.philo.ydns.eu/philorg/uv + volumes: + - uv-cache:/uv-cache + environment: + UV_CACHE_DIR: /uv-cache + UV_LINK_MODE: copy + commands: + - uv sync + + python_build: + image: code.philo.ydns.eu/philorg/uv + volumes: + - uv-cache:/uv-cache + environment: + UV_CACHE_DIR: /uv-cache + UV_LINK_MODE: copy + commands: + - uv build --wheel + - uv cache prune --ci + + python_publish: + image: code.philo.ydns.eu/philorg/uv + environment: + OWNER: K-Net + REGISTRY_URL: https://code.philo.ydns.eu + REGISTRY_TOKEN: + from_secret: registry_token + commands: + - uv publish --publish-url $REGISTRY_URL/api/packages/$OWNER/pypi --token $REGISTRY_TOKEN dist/*.whl + failure: ignore diff --git a/.woodpecker/test.yaml b/.woodpecker/test.yaml new file mode 100644 index 0000000..6326edc --- /dev/null +++ b/.woodpecker/test.yaml @@ -0,0 +1,21 @@ +when: + - event: push + branch: main + - event: manual + - event: tag + +steps: + sync: + image: code.philo.ydns.eu/philorg/uv + volumes: + - uv-cache:/uv-cache + environment: + UV_CACHE_DIR: /uv-cache + UV_LINK_MODE: copy + commands: + - uv sync + + test: + image: ghcr.io/astral-sh/uv:python3.13-alpine + commands: + - .venv/bin/pytest -s tests/basic.py From 97be62e2d717ad172e47cb427081d935c1c83c24 Mon Sep 17 00:00:00 2001 From: phil Date: Fri, 27 Jun 2025 13:30:36 +0200 Subject: [PATCH 17/20] Smoke test --- .woodpecker/build.yaml | 4 +-- pyproject.toml | 6 +++- src/knoc_plugin_template/__init__.py | 2 +- tests/basic.py | 8 +++++ uv.lock | 48 ++++++++++++++++++++++++++++ 5 files changed, 64 insertions(+), 4 deletions(-) create mode 100644 tests/basic.py diff --git a/.woodpecker/build.yaml b/.woodpecker/build.yaml index 5d11a5f..09e5776 100644 --- a/.woodpecker/build.yaml +++ b/.woodpecker/build.yaml @@ -2,8 +2,8 @@ when: - event: manual - event: tag -#depends_on: - #- test +depends_on: + - test steps: python_sync: diff --git a/pyproject.toml b/pyproject.toml index 85c1188..074e067 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -20,7 +20,11 @@ requires = ["hatchling", "uv-dynamic-versioning"] build-backend = "hatchling.build" [dependency-groups] -dev = ["dunamai>=1.24.1", "ipdb>=0.13.13"] +dev = [ + "dunamai>=1.24.1", + "ipdb>=0.13.13", + "pytest-asyncio>=1.0.0", +] [tool.hatch.build.targets.wheel] packages = ["src/knoc_plugin_template"] diff --git a/src/knoc_plugin_template/__init__.py b/src/knoc_plugin_template/__init__.py index 6da5d7b..0409a5d 100644 --- a/src/knoc_plugin_template/__init__.py +++ b/src/knoc_plugin_template/__init__.py @@ -4,7 +4,7 @@ try: from dunamai import Version, Style __version__ = Version.from_git().serialize(style=Style.SemVer, dirty=True) -except ImportError: +except (ImportError, RuntimeError): # __name__ can be used if the package name is the same # as the directory. Otherwise, specify it explicitely. __version__ = importlib.metadata.version(__name__) diff --git a/tests/basic.py b/tests/basic.py new file mode 100644 index 0000000..a38a07d --- /dev/null +++ b/tests/basic.py @@ -0,0 +1,8 @@ +import pytest + +from knoc import __version__ + + +@pytest.mark.asyncio +async def test_version(): + assert __version__ is not None diff --git a/uv.lock b/uv.lock index 29ee4a8..1f7f672 100644 --- a/uv.lock +++ b/uv.lock @@ -426,6 +426,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442, upload-time = "2024-09-15T18:07:37.964Z" }, ] +[[package]] +name = "iniconfig" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f2/97/ebf4da567aa6827c909642694d71c9fcf53e5b504f2d96afea02718862f3/iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", size = 4793, upload-time = "2025-03-19T20:09:59.721Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760", size = 6050, upload-time = "2025-03-19T20:10:01.071Z" }, +] + [[package]] name = "ipdb" version = "0.13.13" @@ -531,6 +540,7 @@ dependencies = [ dev = [ { name = "dunamai" }, { name = "ipdb" }, + { name = "pytest-asyncio" }, ] [package.metadata] @@ -540,6 +550,7 @@ requires-dist = [{ name = "knoc", specifier = ">=0.1.22" }] dev = [ { name = "dunamai", specifier = ">=1.24.1" }, { name = "ipdb", specifier = ">=0.13.13" }, + { name = "pytest-asyncio", specifier = ">=1.0.0" }, ] [[package]] @@ -714,6 +725,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", size = 63772, upload-time = "2023-11-25T06:56:14.81Z" }, ] +[[package]] +name = "pluggy" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, +] + [[package]] name = "prometheus-client" version = "0.21.1" @@ -942,6 +962,34 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/61/ad/689f02752eeec26aed679477e80e632ef1b682313be70793d798c1d5fc8f/PyJWT-2.10.1-py3-none-any.whl", hash = "sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb", size = 22997, upload-time = "2024-11-28T03:43:27.893Z" }, ] +[[package]] +name = "pytest" +version = "8.4.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "iniconfig" }, + { name = "packaging" }, + { name = "pluggy" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/08/ba/45911d754e8eba3d5a841a5ce61a65a685ff1798421ac054f85aa8747dfb/pytest-8.4.1.tar.gz", hash = "sha256:7c67fd69174877359ed9371ec3af8a3d2b04741818c51e5e99cc1742251fa93c", size = 1517714, upload-time = "2025-06-18T05:48:06.109Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/29/16/c8a903f4c4dffe7a12843191437d7cd8e32751d5de349d45d3fe69544e87/pytest-8.4.1-py3-none-any.whl", hash = "sha256:539c70ba6fcead8e78eebbf1115e8b589e7565830d7d006a8723f19ac8a0afb7", size = 365474, upload-time = "2025-06-18T05:48:03.955Z" }, +] + +[[package]] +name = "pytest-asyncio" +version = "1.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pytest" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d0/d4/14f53324cb1a6381bef29d698987625d80052bb33932d8e7cbf9b337b17c/pytest_asyncio-1.0.0.tar.gz", hash = "sha256:d15463d13f4456e1ead2594520216b225a16f781e144f8fdf6c5bb4667c48b3f", size = 46960, upload-time = "2025-05-26T04:54:40.484Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/30/05/ce271016e351fddc8399e546f6e23761967ee09c8c568bbfbecb0c150171/pytest_asyncio-1.0.0-py3-none-any.whl", hash = "sha256:4f024da9f1ef945e680dc68610b52550e36590a67fd31bb3b4943979a1f90ef3", size = 15976, upload-time = "2025-05-26T04:54:39.035Z" }, +] + [[package]] name = "python-dateutil" version = "2.9.0.post0" From 0b1ba23b9d23ba92fe37f52054f54071ded50434 Mon Sep 17 00:00:00 2001 From: phil Date: Fri, 27 Jun 2025 14:03:26 +0200 Subject: [PATCH 18/20] Bump knoc --- pyproject.toml | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 074e067..d5984c7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ dynamic = ["version"] description = "Plugin template for Knoc" readme = "README.md" requires-python = ">=3.13" -dependencies = ["knoc>=0.1.22"] +dependencies = ["knoc>=0.1.56"] [[tool.uv.index]] url = "https://code.philo.ydns.eu/api/packages/philorg/pypi/simple/" @@ -20,11 +20,7 @@ requires = ["hatchling", "uv-dynamic-versioning"] build-backend = "hatchling.build" [dependency-groups] -dev = [ - "dunamai>=1.24.1", - "ipdb>=0.13.13", - "pytest-asyncio>=1.0.0", -] +dev = ["dunamai>=1.24.1", "ipdb>=0.13.13", "pytest-asyncio>=1.0.0"] [tool.hatch.build.targets.wheel] packages = ["src/knoc_plugin_template"] From db05f870ff156b0de02fd2bbf0e1bdd0e8c807d9 Mon Sep 17 00:00:00 2001 From: phil Date: Fri, 27 Jun 2025 12:06:29 +0000 Subject: [PATCH 19/20] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 7ab13a8..eb5ab8b 100644 --- a/README.md +++ b/README.md @@ -88,3 +88,4 @@ knoc # Should display the new plugin's CLI tool To add the plugin in a production image, add the name to the `PLUGIN` variable of the CI build tool, and deploy. +[![status-badge](https://code.philo.ydns.eu/woodpecker/api/badges/7/status.svg)](https://code.philo.ydns.eu/woodpecker/repos/7) \ No newline at end of file From a08ce2771a5f47e7dedc3b54ded560620e4a3b4f Mon Sep 17 00:00:00 2001 From: phil Date: Sun, 29 Jun 2025 04:26:24 +0200 Subject: [PATCH 20/20] Set owner --- .woodpecker/build.yaml | 2 +- README.md | 5 +- pyproject.toml | 2 +- uv.lock | 179 +++++++++++++---------------------------- 4 files changed, 62 insertions(+), 126 deletions(-) diff --git a/.woodpecker/build.yaml b/.woodpecker/build.yaml index 09e5776..eb175b0 100644 --- a/.woodpecker/build.yaml +++ b/.woodpecker/build.yaml @@ -30,7 +30,7 @@ steps: python_publish: image: code.philo.ydns.eu/philorg/uv environment: - OWNER: K-Net + OWNER: philorg REGISTRY_URL: https://code.philo.ydns.eu REGISTRY_TOKEN: from_secret: registry_token diff --git a/README.md b/README.md index eb5ab8b..468a336 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,7 @@ DNAME=$(echo $NAME | tr "_" "-") Then: ```fish -git clone https://code.philo.ydns.eu/K-Net/knoc-plugin-template.git $DNAME +git clone https://code.philo.ydns.eu/philorg/knoc-plugin-template.git $DNAME cd $DNAME rm -rf .git mv src/knoc_plugin_template src/$NAME @@ -88,4 +88,5 @@ knoc # Should display the new plugin's CLI tool To add the plugin in a production image, add the name to the `PLUGIN` variable of the CI build tool, and deploy. -[![status-badge](https://code.philo.ydns.eu/woodpecker/api/badges/7/status.svg)](https://code.philo.ydns.eu/woodpecker/repos/7) \ No newline at end of file +[![status-badge](https://code.philo.ydns.eu/woodpecker/api/badges/7/status.svg)](https://code.philo.ydns.eu/woodpecker/repos/7) + diff --git a/pyproject.toml b/pyproject.toml index d5984c7..36ce4a8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,7 +10,7 @@ dependencies = ["knoc>=0.1.56"] url = "https://code.philo.ydns.eu/api/packages/philorg/pypi/simple/" [[tool.uv.index]] -url = "https://code.philo.ydns.eu/api/packages/K-Net/pypi/simple/" +url = "https://code.philo.ydns.eu/api/packages/philorg/pypi/simple/" [project.scripts] knoc-plugin-template = "knoc_plugin_template.cli:app" diff --git a/uv.lock b/uv.lock index 1f7f672..78766ae 100644 --- a/uv.lock +++ b/uv.lock @@ -121,19 +121,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/77/06/bb80f5f86020c4551da315d78b3ab75e8228f89f0162f2c3a819e407941a/attrs-25.3.0-py3-none-any.whl", hash = "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3", size = 63815, upload-time = "2025-03-13T11:10:21.14Z" }, ] -[[package]] -name = "beautifulsoup4" -version = "4.13.4" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "soupsieve" }, - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/d8/e4/0c4c39e18fd76d6a628d4dd8da40543d136ce2d1752bd6eeeab0791f4d6b/beautifulsoup4-4.13.4.tar.gz", hash = "sha256:dbb3c4e1ceae6aefebdaf2423247260cd062430a410e38c66f2baa50a8437195", size = 621067, upload-time = "2025-04-15T17:05:13.836Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/50/cd/30110dc0ffcf3b131156077b90e9f60ed75711223f306da4db08eff8403b/beautifulsoup4-4.13.4-py3-none-any.whl", hash = "sha256:9bbbb14bfde9d79f38b8cd5f8c7c85f4b8f2523190ebed90e950a8dea4cb1c4b", size = 187285, upload-time = "2025-04-15T17:05:12.221Z" }, -] - [[package]] name = "cel-python" version = "0.2.0" @@ -151,15 +138,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/18/28/08871462a0347b3e707658a8308be6f979167488a2196f93b402c2ea7170/cel_python-0.2.0-py3-none-any.whl", hash = "sha256:478ff73def7b39d51e6982f95d937a57c2b088c491c578fe5cecdbd79f476f60", size = 71337, upload-time = "2025-02-14T11:42:19.996Z" }, ] -[[package]] -name = "certifi" -version = "2025.4.26" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e8/9e/c05b3920a3b7d20d3d3310465f50348e5b3694f4f88c6daf736eef3024c4/certifi-2025.4.26.tar.gz", hash = "sha256:0a816057ea3cdefcef70270d2c515e4506bbc954f417fa5ade2021213bb8f0c6", size = 160705, upload-time = "2025-04-26T02:12:29.51Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/4a/7e/3db2bd1b1f9e95f7cddca6d6e75e2f2bd9f51b1246e546d88addca0106bd/certifi-2025.4.26-py3-none-any.whl", hash = "sha256:30350364dfe371162649852c63336a15c70c6510c2ad5015b21c2345311805f3", size = 159618, upload-time = "2025-04-26T02:12:27.662Z" }, -] - [[package]] name = "click" version = "8.2.1" @@ -235,16 +213,16 @@ wheels = [ [[package]] name = "fastapi" -version = "0.115.12" +version = "0.115.14" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pydantic" }, { name = "starlette" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f4/55/ae499352d82338331ca1e28c7f4a63bfd09479b16395dce38cf50a39e2c2/fastapi-0.115.12.tar.gz", hash = "sha256:1e2c2a2646905f9e83d32f04a3f86aff4a286669c6c950ca95b5fd68c2602681", size = 295236, upload-time = "2025-03-23T22:55:43.822Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ca/53/8c38a874844a8b0fa10dd8adf3836ac154082cf88d3f22b544e9ceea0a15/fastapi-0.115.14.tar.gz", hash = "sha256:b1de15cdc1c499a4da47914db35d0e4ef8f1ce62b624e94e0e5824421df99739", size = 296263, upload-time = "2025-06-26T15:29:08.21Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/50/b3/b51f09c2ba432a576fe63758bddc81f78f0c6309d9e5c10d194313bf021e/fastapi-0.115.12-py3-none-any.whl", hash = "sha256:e94613d6c05e27be7ffebdd6ea5f388112e5e430c8f7d6494a9d1d88d43e814d", size = 95164, upload-time = "2025-03-23T22:55:42.101Z" }, + { url = "https://files.pythonhosted.org/packages/53/50/b1222562c6d270fea83e9c9075b8e8600b8479150a18e4516a6138b980d1/fastapi-0.115.14-py3-none-any.whl", hash = "sha256:6c0c8bf9420bd58f565e585036d971872472b4f7d3f6c73b698e10cffdefb3ca", size = 95514, upload-time = "2025-06-26T15:29:06.49Z" }, ] [[package]] @@ -367,7 +345,7 @@ wheels = [ [[package]] name = "hatchet-sdk" -version = "1.10.3" +version = "1.14.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "aiohttp" }, @@ -384,37 +362,9 @@ dependencies = [ { name = "tenacity" }, { name = "urllib3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/0f/fb/5766f3ebe0445f7c1b0aac70eeff5232d673c3c47080e90213dd1ad4af09/hatchet_sdk-1.10.3.tar.gz", hash = "sha256:6f335dea328c5981c2bac9d19d5cc581b294f45863286710bacd111c806fa972", size = 335817, upload-time = "2025-05-27T18:16:47.926Z" } +sdist = { url = "https://files.pythonhosted.org/packages/bf/b8/b16b78017c175223dffe7a668268381ad5343266800240b30951bf109e76/hatchet_sdk-1.14.0.tar.gz", hash = "sha256:a3890f2c204c8ead19513e0aadf5af7a4de7ee9c7f0ccb65045f16add9b2ea1d", size = 327964, upload-time = "2025-06-26T21:52:44.555Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/02/1a/112cd2c63b44ff213028811e7b286262c9e8fa920c180f08fa97b4c6cff3/hatchet_sdk-1.10.3-py3-none-any.whl", hash = "sha256:62aa93e31fe286f03e761dd73997144afd49f4ab9fcab9f4301a74587aea3213", size = 817133, upload-time = "2025-05-27T18:16:45.423Z" }, -] - -[[package]] -name = "httpcore" -version = "1.0.9" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "certifi" }, - { name = "h11" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8", size = 85484, upload-time = "2025-04-24T22:06:22.219Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55", size = 78784, upload-time = "2025-04-24T22:06:20.566Z" }, -] - -[[package]] -name = "httpx" -version = "0.28.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "anyio" }, - { name = "certifi" }, - { name = "httpcore" }, - { name = "idna" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406, upload-time = "2024-12-06T15:37:23.222Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517, upload-time = "2024-12-06T15:37:21.509Z" }, + { url = "https://files.pythonhosted.org/packages/51/98/ef2a0d7f8725e444cd1aaff01fb3d8a8d51ae3737e9f553355dc827454b6/hatchet_sdk-1.14.0-py3-none-any.whl", hash = "sha256:28d42165dc1da7a723f743d2486ac042c15c9e586aa7b8fa25a6706f0f5145f7", size = 807416, upload-time = "2025-06-26T21:52:40.877Z" }, ] [[package]] @@ -504,15 +454,11 @@ wheels = [ [[package]] name = "knoc" -version = "0.1.22" -source = { registry = "https://code.philo.ydns.eu/api/packages/K-Net/pypi/simple/" } +version = "0.1.58" +source = { registry = "https://code.philo.ydns.eu/api/packages/philorg/pypi/simple/" } dependencies = [ - { name = "beautifulsoup4" }, - { name = "dunamai" }, { name = "fastapi" }, { name = "hatchet-sdk" }, - { name = "httpx" }, - { name = "orjson" }, { name = "pandas" }, { name = "psycopg", extra = ["binary"] }, { name = "psycopg2-binary" }, @@ -524,9 +470,10 @@ dependencies = [ { name = "sqlmodel" }, { name = "typer-slim" }, { name = "uvicorn" }, + { name = "websockets" }, ] wheels = [ - { url = "https://code.philo.ydns.eu/api/packages/K-Net/pypi/files/knoc/0.1.22/knoc-0.1.22-py3-none-any.whl", hash = "sha256:1fcf2ec75ba4a0a4f3433439ecab1f7c35dea85eecb297ce84dac3f7bc4f77c1" }, + { url = "https://code.philo.ydns.eu/api/packages/philorg/pypi/files/knoc/0.1.58/knoc-0.1.58-py3-none-any.whl", hash = "sha256:90b5aedde3337299bcc46d2c98ae17d6ed17964ba9e6b868c699c29900ed6123" }, ] [[package]] @@ -544,7 +491,7 @@ dev = [ ] [package.metadata] -requires-dist = [{ name = "knoc", specifier = ">=0.1.22" }] +requires-dist = [{ name = "knoc", specifier = ">=0.1.56" }] [package.metadata.requires-dev] dev = [ @@ -645,29 +592,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/67/0e/35082d13c09c02c011cf21570543d202ad929d961c02a147493cb0c2bdf5/numpy-2.2.6-cp313-cp313t-win_amd64.whl", hash = "sha256:6031dd6dfecc0cf9f668681a37648373bddd6421fff6c66ec1624eed0180ee06", size = 12771374, upload-time = "2025-05-17T21:43:35.479Z" }, ] -[[package]] -name = "orjson" -version = "3.10.18" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/81/0b/fea456a3ffe74e70ba30e01ec183a9b26bec4d497f61dcfce1b601059c60/orjson-3.10.18.tar.gz", hash = "sha256:e8da3947d92123eda795b68228cafe2724815621fe35e8e320a9e9593a4bcd53", size = 5422810, upload-time = "2025-04-29T23:30:08.423Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/04/f0/8aedb6574b68096f3be8f74c0b56d36fd94bcf47e6c7ed47a7bd1474aaa8/orjson-3.10.18-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:69c34b9441b863175cc6a01f2935de994025e773f814412030f269da4f7be147", size = 249087, upload-time = "2025-04-29T23:29:19.083Z" }, - { url = "https://files.pythonhosted.org/packages/bc/f7/7118f965541aeac6844fcb18d6988e111ac0d349c9b80cda53583e758908/orjson-3.10.18-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:1ebeda919725f9dbdb269f59bc94f861afbe2a27dce5608cdba2d92772364d1c", size = 133273, upload-time = "2025-04-29T23:29:20.602Z" }, - { url = "https://files.pythonhosted.org/packages/fb/d9/839637cc06eaf528dd8127b36004247bf56e064501f68df9ee6fd56a88ee/orjson-3.10.18-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5adf5f4eed520a4959d29ea80192fa626ab9a20b2ea13f8f6dc58644f6927103", size = 136779, upload-time = "2025-04-29T23:29:22.062Z" }, - { url = "https://files.pythonhosted.org/packages/2b/6d/f226ecfef31a1f0e7d6bf9a31a0bbaf384c7cbe3fce49cc9c2acc51f902a/orjson-3.10.18-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7592bb48a214e18cd670974f289520f12b7aed1fa0b2e2616b8ed9e069e08595", size = 132811, upload-time = "2025-04-29T23:29:23.602Z" }, - { url = "https://files.pythonhosted.org/packages/73/2d/371513d04143c85b681cf8f3bce743656eb5b640cb1f461dad750ac4b4d4/orjson-3.10.18-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f872bef9f042734110642b7a11937440797ace8c87527de25e0c53558b579ccc", size = 137018, upload-time = "2025-04-29T23:29:25.094Z" }, - { url = "https://files.pythonhosted.org/packages/69/cb/a4d37a30507b7a59bdc484e4a3253c8141bf756d4e13fcc1da760a0b00cb/orjson-3.10.18-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0315317601149c244cb3ecef246ef5861a64824ccbcb8018d32c66a60a84ffbc", size = 138368, upload-time = "2025-04-29T23:29:26.609Z" }, - { url = "https://files.pythonhosted.org/packages/1e/ae/cd10883c48d912d216d541eb3db8b2433415fde67f620afe6f311f5cd2ca/orjson-3.10.18-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0da26957e77e9e55a6c2ce2e7182a36a6f6b180ab7189315cb0995ec362e049", size = 142840, upload-time = "2025-04-29T23:29:28.153Z" }, - { url = "https://files.pythonhosted.org/packages/6d/4c/2bda09855c6b5f2c055034c9eda1529967b042ff8d81a05005115c4e6772/orjson-3.10.18-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb70d489bc79b7519e5803e2cc4c72343c9dc1154258adf2f8925d0b60da7c58", size = 133135, upload-time = "2025-04-29T23:29:29.726Z" }, - { url = "https://files.pythonhosted.org/packages/13/4a/35971fd809a8896731930a80dfff0b8ff48eeb5d8b57bb4d0d525160017f/orjson-3.10.18-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e9e86a6af31b92299b00736c89caf63816f70a4001e750bda179e15564d7a034", size = 134810, upload-time = "2025-04-29T23:29:31.269Z" }, - { url = "https://files.pythonhosted.org/packages/99/70/0fa9e6310cda98365629182486ff37a1c6578e34c33992df271a476ea1cd/orjson-3.10.18-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:c382a5c0b5931a5fc5405053d36c1ce3fd561694738626c77ae0b1dfc0242ca1", size = 413491, upload-time = "2025-04-29T23:29:33.315Z" }, - { url = "https://files.pythonhosted.org/packages/32/cb/990a0e88498babddb74fb97855ae4fbd22a82960e9b06eab5775cac435da/orjson-3.10.18-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:8e4b2ae732431127171b875cb2668f883e1234711d3c147ffd69fe5be51a8012", size = 153277, upload-time = "2025-04-29T23:29:34.946Z" }, - { url = "https://files.pythonhosted.org/packages/92/44/473248c3305bf782a384ed50dd8bc2d3cde1543d107138fd99b707480ca1/orjson-3.10.18-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2d808e34ddb24fc29a4d4041dcfafbae13e129c93509b847b14432717d94b44f", size = 137367, upload-time = "2025-04-29T23:29:36.52Z" }, - { url = "https://files.pythonhosted.org/packages/ad/fd/7f1d3edd4ffcd944a6a40e9f88af2197b619c931ac4d3cfba4798d4d3815/orjson-3.10.18-cp313-cp313-win32.whl", hash = "sha256:ad8eacbb5d904d5591f27dee4031e2c1db43d559edb8f91778efd642d70e6bea", size = 142687, upload-time = "2025-04-29T23:29:38.292Z" }, - { url = "https://files.pythonhosted.org/packages/4b/03/c75c6ad46be41c16f4cfe0352a2d1450546f3c09ad2c9d341110cd87b025/orjson-3.10.18-cp313-cp313-win_amd64.whl", hash = "sha256:aed411bcb68bf62e85588f2a7e03a6082cc42e5a2796e06e72a962d7c6310b52", size = 134794, upload-time = "2025-04-29T23:29:40.349Z" }, - { url = "https://files.pythonhosted.org/packages/c2/28/f53038a5a72cc4fd0b56c1eafb4ef64aec9685460d5ac34de98ca78b6e29/orjson-3.10.18-cp313-cp313-win_arm64.whl", hash = "sha256:f54c1385a0e6aba2f15a40d703b858bedad36ded0491e55d35d905b2c34a4cc3", size = 131186, upload-time = "2025-04-29T23:29:41.922Z" }, -] - [[package]] name = "packaging" version = "25.0" @@ -679,7 +603,7 @@ wheels = [ [[package]] name = "pandas" -version = "2.2.3" +version = "2.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, @@ -687,21 +611,21 @@ dependencies = [ { name = "pytz" }, { name = "tzdata" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/9c/d6/9f8431bacc2e19dca897724cd097b1bb224a6ad5433784a44b587c7c13af/pandas-2.2.3.tar.gz", hash = "sha256:4f18ba62b61d7e192368b84517265a99b4d7ee8912f8708660fb4a366cc82667", size = 4399213, upload-time = "2024-09-20T13:10:04.827Z" } +sdist = { url = "https://files.pythonhosted.org/packages/72/51/48f713c4c728d7c55ef7444ba5ea027c26998d96d1a40953b346438602fc/pandas-2.3.0.tar.gz", hash = "sha256:34600ab34ebf1131a7613a260a61dbe8b62c188ec0ea4c296da7c9a06b004133", size = 4484490, upload-time = "2025-06-05T03:27:54.133Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/64/22/3b8f4e0ed70644e85cfdcd57454686b9057c6c38d2f74fe4b8bc2527214a/pandas-2.2.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f00d1345d84d8c86a63e476bb4955e46458b304b9575dcf71102b5c705320015", size = 12477643, upload-time = "2024-09-20T13:09:25.522Z" }, - { url = "https://files.pythonhosted.org/packages/e4/93/b3f5d1838500e22c8d793625da672f3eec046b1a99257666c94446969282/pandas-2.2.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3508d914817e153ad359d7e069d752cdd736a247c322d932eb89e6bc84217f28", size = 11281573, upload-time = "2024-09-20T13:09:28.012Z" }, - { url = "https://files.pythonhosted.org/packages/f5/94/6c79b07f0e5aab1dcfa35a75f4817f5c4f677931d4234afcd75f0e6a66ca/pandas-2.2.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:22a9d949bfc9a502d320aa04e5d02feab689d61da4e7764b62c30b991c42c5f0", size = 15196085, upload-time = "2024-09-20T19:02:10.451Z" }, - { url = "https://files.pythonhosted.org/packages/e8/31/aa8da88ca0eadbabd0a639788a6da13bb2ff6edbbb9f29aa786450a30a91/pandas-2.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3a255b2c19987fbbe62a9dfd6cff7ff2aa9ccab3fc75218fd4b7530f01efa24", size = 12711809, upload-time = "2024-09-20T13:09:30.814Z" }, - { url = "https://files.pythonhosted.org/packages/ee/7c/c6dbdb0cb2a4344cacfb8de1c5808ca885b2e4dcfde8008266608f9372af/pandas-2.2.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:800250ecdadb6d9c78eae4990da62743b857b470883fa27f652db8bdde7f6659", size = 16356316, upload-time = "2024-09-20T19:02:13.825Z" }, - { url = "https://files.pythonhosted.org/packages/57/b7/8b757e7d92023b832869fa8881a992696a0bfe2e26f72c9ae9f255988d42/pandas-2.2.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6374c452ff3ec675a8f46fd9ab25c4ad0ba590b71cf0656f8b6daa5202bca3fb", size = 14022055, upload-time = "2024-09-20T13:09:33.462Z" }, - { url = "https://files.pythonhosted.org/packages/3b/bc/4b18e2b8c002572c5a441a64826252ce5da2aa738855747247a971988043/pandas-2.2.3-cp313-cp313-win_amd64.whl", hash = "sha256:61c5ad4043f791b61dd4752191d9f07f0ae412515d59ba8f005832a532f8736d", size = 11481175, upload-time = "2024-09-20T13:09:35.871Z" }, - { url = "https://files.pythonhosted.org/packages/76/a3/a5d88146815e972d40d19247b2c162e88213ef51c7c25993942c39dbf41d/pandas-2.2.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3b71f27954685ee685317063bf13c7709a7ba74fc996b84fc6821c59b0f06468", size = 12615650, upload-time = "2024-09-20T13:09:38.685Z" }, - { url = "https://files.pythonhosted.org/packages/9c/8c/f0fd18f6140ddafc0c24122c8a964e48294acc579d47def376fef12bcb4a/pandas-2.2.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:38cf8125c40dae9d5acc10fa66af8ea6fdf760b2714ee482ca691fc66e6fcb18", size = 11290177, upload-time = "2024-09-20T13:09:41.141Z" }, - { url = "https://files.pythonhosted.org/packages/ed/f9/e995754eab9c0f14c6777401f7eece0943840b7a9fc932221c19d1abee9f/pandas-2.2.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ba96630bc17c875161df3818780af30e43be9b166ce51c9a18c1feae342906c2", size = 14651526, upload-time = "2024-09-20T19:02:16.905Z" }, - { url = "https://files.pythonhosted.org/packages/25/b0/98d6ae2e1abac4f35230aa756005e8654649d305df9a28b16b9ae4353bff/pandas-2.2.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1db71525a1538b30142094edb9adc10be3f3e176748cd7acc2240c2f2e5aa3a4", size = 11871013, upload-time = "2024-09-20T13:09:44.39Z" }, - { url = "https://files.pythonhosted.org/packages/cc/57/0f72a10f9db6a4628744c8e8f0df4e6e21de01212c7c981d31e50ffc8328/pandas-2.2.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:15c0e1e02e93116177d29ff83e8b1619c93ddc9c49083f237d4312337a61165d", size = 15711620, upload-time = "2024-09-20T19:02:20.639Z" }, - { url = "https://files.pythonhosted.org/packages/ab/5f/b38085618b950b79d2d9164a711c52b10aefc0ae6833b96f626b7021b2ed/pandas-2.2.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ad5b65698ab28ed8d7f18790a0dc58005c7629f227be9ecc1072aa74c0c1d43a", size = 13098436, upload-time = "2024-09-20T13:09:48.112Z" }, + { url = "https://files.pythonhosted.org/packages/d3/57/5cb75a56a4842bbd0511c3d1c79186d8315b82dac802118322b2de1194fe/pandas-2.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2c7e2fc25f89a49a11599ec1e76821322439d90820108309bf42130d2f36c983", size = 11518913, upload-time = "2025-06-05T03:27:02.757Z" }, + { url = "https://files.pythonhosted.org/packages/05/01/0c8785610e465e4948a01a059562176e4c8088aa257e2e074db868f86d4e/pandas-2.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c6da97aeb6a6d233fb6b17986234cc723b396b50a3c6804776351994f2a658fd", size = 10655249, upload-time = "2025-06-05T16:50:20.17Z" }, + { url = "https://files.pythonhosted.org/packages/e8/6a/47fd7517cd8abe72a58706aab2b99e9438360d36dcdb052cf917b7bf3bdc/pandas-2.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb32dc743b52467d488e7a7c8039b821da2826a9ba4f85b89ea95274f863280f", size = 11328359, upload-time = "2025-06-05T03:27:06.431Z" }, + { url = "https://files.pythonhosted.org/packages/2a/b3/463bfe819ed60fb7e7ddffb4ae2ee04b887b3444feee6c19437b8f834837/pandas-2.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:213cd63c43263dbb522c1f8a7c9d072e25900f6975596f883f4bebd77295d4f3", size = 12024789, upload-time = "2025-06-05T03:27:09.875Z" }, + { url = "https://files.pythonhosted.org/packages/04/0c/e0704ccdb0ac40aeb3434d1c641c43d05f75c92e67525df39575ace35468/pandas-2.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1d2b33e68d0ce64e26a4acc2e72d747292084f4e8db4c847c6f5f6cbe56ed6d8", size = 12480734, upload-time = "2025-06-06T00:00:22.246Z" }, + { url = "https://files.pythonhosted.org/packages/e9/df/815d6583967001153bb27f5cf075653d69d51ad887ebbf4cfe1173a1ac58/pandas-2.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:430a63bae10b5086995db1b02694996336e5a8ac9a96b4200572b413dfdfccb9", size = 13223381, upload-time = "2025-06-05T03:27:15.641Z" }, + { url = "https://files.pythonhosted.org/packages/79/88/ca5973ed07b7f484c493e941dbff990861ca55291ff7ac67c815ce347395/pandas-2.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:4930255e28ff5545e2ca404637bcc56f031893142773b3468dc021c6c32a1390", size = 10970135, upload-time = "2025-06-05T03:27:24.131Z" }, + { url = "https://files.pythonhosted.org/packages/24/fb/0994c14d1f7909ce83f0b1fb27958135513c4f3f2528bde216180aa73bfc/pandas-2.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:f925f1ef673b4bd0271b1809b72b3270384f2b7d9d14a189b12b7fc02574d575", size = 12141356, upload-time = "2025-06-05T03:27:34.547Z" }, + { url = "https://files.pythonhosted.org/packages/9d/a2/9b903e5962134497ac4f8a96f862ee3081cb2506f69f8e4778ce3d9c9d82/pandas-2.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e78ad363ddb873a631e92a3c063ade1ecfb34cae71e9a2be6ad100f875ac1042", size = 11474674, upload-time = "2025-06-05T03:27:39.448Z" }, + { url = "https://files.pythonhosted.org/packages/81/3a/3806d041bce032f8de44380f866059437fb79e36d6b22c82c187e65f765b/pandas-2.3.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:951805d146922aed8357e4cc5671b8b0b9be1027f0619cea132a9f3f65f2f09c", size = 11439876, upload-time = "2025-06-05T03:27:43.652Z" }, + { url = "https://files.pythonhosted.org/packages/15/aa/3fc3181d12b95da71f5c2537c3e3b3af6ab3a8c392ab41ebb766e0929bc6/pandas-2.3.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a881bc1309f3fce34696d07b00f13335c41f5f5a8770a33b09ebe23261cfc67", size = 11966182, upload-time = "2025-06-05T03:27:47.652Z" }, + { url = "https://files.pythonhosted.org/packages/37/e7/e12f2d9b0a2c4a2cc86e2aabff7ccfd24f03e597d770abfa2acd313ee46b/pandas-2.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:e1991bbb96f4050b09b5f811253c4f3cf05ee89a589379aa36cd623f21a31d6f", size = 12547686, upload-time = "2025-06-06T00:00:26.142Z" }, + { url = "https://files.pythonhosted.org/packages/39/c2/646d2e93e0af70f4e5359d870a63584dacbc324b54d73e6b3267920ff117/pandas-2.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:bb3be958022198531eb7ec2008cfc78c5b1eed51af8600c6c5d9160d89d8d249", size = 13231847, upload-time = "2025-06-05T03:27:51.465Z" }, ] [[package]] @@ -798,16 +722,16 @@ wheels = [ [[package]] name = "protobuf" -version = "5.29.4" +version = "5.29.5" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/17/7d/b9dca7365f0e2c4fa7c193ff795427cfa6290147e5185ab11ece280a18e7/protobuf-5.29.4.tar.gz", hash = "sha256:4f1dfcd7997b31ef8f53ec82781ff434a28bf71d9102ddde14d076adcfc78c99", size = 424902, upload-time = "2025-03-19T21:23:24.25Z" } +sdist = { url = "https://files.pythonhosted.org/packages/43/29/d09e70352e4e88c9c7a198d5645d7277811448d76c23b00345670f7c8a38/protobuf-5.29.5.tar.gz", hash = "sha256:bc1463bafd4b0929216c35f437a8e28731a2b7fe3d98bb77a600efced5a15c84", size = 425226, upload-time = "2025-05-28T23:51:59.82Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9a/b2/043a1a1a20edd134563699b0e91862726a0dc9146c090743b6c44d798e75/protobuf-5.29.4-cp310-abi3-win32.whl", hash = "sha256:13eb236f8eb9ec34e63fc8b1d6efd2777d062fa6aaa68268fb67cf77f6839ad7", size = 422709, upload-time = "2025-03-19T21:23:08.293Z" }, - { url = "https://files.pythonhosted.org/packages/79/fc/2474b59570daa818de6124c0a15741ee3e5d6302e9d6ce0bdfd12e98119f/protobuf-5.29.4-cp310-abi3-win_amd64.whl", hash = "sha256:bcefcdf3976233f8a502d265eb65ea740c989bacc6c30a58290ed0e519eb4b8d", size = 434506, upload-time = "2025-03-19T21:23:11.253Z" }, - { url = "https://files.pythonhosted.org/packages/46/de/7c126bbb06aa0f8a7b38aaf8bd746c514d70e6a2a3f6dd460b3b7aad7aae/protobuf-5.29.4-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:307ecba1d852ec237e9ba668e087326a67564ef83e45a0189a772ede9e854dd0", size = 417826, upload-time = "2025-03-19T21:23:13.132Z" }, - { url = "https://files.pythonhosted.org/packages/a2/b5/bade14ae31ba871a139aa45e7a8183d869efe87c34a4850c87b936963261/protobuf-5.29.4-cp38-abi3-manylinux2014_aarch64.whl", hash = "sha256:aec4962f9ea93c431d5714ed1be1c93f13e1a8618e70035ba2b0564d9e633f2e", size = 319574, upload-time = "2025-03-19T21:23:14.531Z" }, - { url = "https://files.pythonhosted.org/packages/46/88/b01ed2291aae68b708f7d334288ad5fb3e7aa769a9c309c91a0d55cb91b0/protobuf-5.29.4-cp38-abi3-manylinux2014_x86_64.whl", hash = "sha256:d7d3f7d1d5a66ed4942d4fefb12ac4b14a29028b209d4bfb25c68ae172059922", size = 319672, upload-time = "2025-03-19T21:23:15.839Z" }, - { url = "https://files.pythonhosted.org/packages/12/fb/a586e0c973c95502e054ac5f81f88394f24ccc7982dac19c515acd9e2c93/protobuf-5.29.4-py3-none-any.whl", hash = "sha256:3fde11b505e1597f71b875ef2fc52062b6a9740e5f7c8997ce878b6009145862", size = 172551, upload-time = "2025-03-19T21:23:22.682Z" }, + { url = "https://files.pythonhosted.org/packages/5f/11/6e40e9fc5bba02988a214c07cf324595789ca7820160bfd1f8be96e48539/protobuf-5.29.5-cp310-abi3-win32.whl", hash = "sha256:3f1c6468a2cfd102ff4703976138844f78ebd1fb45f49011afc5139e9e283079", size = 422963, upload-time = "2025-05-28T23:51:41.204Z" }, + { url = "https://files.pythonhosted.org/packages/81/7f/73cefb093e1a2a7c3ffd839e6f9fcafb7a427d300c7f8aef9c64405d8ac6/protobuf-5.29.5-cp310-abi3-win_amd64.whl", hash = "sha256:3f76e3a3675b4a4d867b52e4a5f5b78a2ef9565549d4037e06cf7b0942b1d3fc", size = 434818, upload-time = "2025-05-28T23:51:44.297Z" }, + { url = "https://files.pythonhosted.org/packages/dd/73/10e1661c21f139f2c6ad9b23040ff36fee624310dc28fba20d33fdae124c/protobuf-5.29.5-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e38c5add5a311f2a6eb0340716ef9b039c1dfa428b28f25a7838ac329204a671", size = 418091, upload-time = "2025-05-28T23:51:45.907Z" }, + { url = "https://files.pythonhosted.org/packages/6c/04/98f6f8cf5b07ab1294c13f34b4e69b3722bb609c5b701d6c169828f9f8aa/protobuf-5.29.5-cp38-abi3-manylinux2014_aarch64.whl", hash = "sha256:fa18533a299d7ab6c55a238bf8629311439995f2e7eca5caaff08663606e9015", size = 319824, upload-time = "2025-05-28T23:51:47.545Z" }, + { url = "https://files.pythonhosted.org/packages/85/e4/07c80521879c2d15f321465ac24c70efe2381378c00bf5e56a0f4fbac8cd/protobuf-5.29.5-cp38-abi3-manylinux2014_x86_64.whl", hash = "sha256:63848923da3325e1bf7e9003d680ce6e14b07e55d0473253a690c3a8b8fd6e61", size = 319942, upload-time = "2025-05-28T23:51:49.11Z" }, + { url = "https://files.pythonhosted.org/packages/7e/cc/7e77861000a0691aeea8f4566e5d3aa716f2b1dece4a24439437e41d3d25/protobuf-5.29.5-py3-none-any.whl", hash = "sha256:6cf42630262c59b2d8de33954443d94b746c952b01434fc58a417fdbd2e84bd5", size = 172823, upload-time = "2025-05-28T23:51:58.157Z" }, ] [[package]] @@ -1082,15 +1006,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235, upload-time = "2024-02-25T23:20:01.196Z" }, ] -[[package]] -name = "soupsieve" -version = "2.7" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/3f/f4/4a80cd6ef364b2e8b65b15816a843c0980f7a5a2b4dc701fc574952aa19f/soupsieve-2.7.tar.gz", hash = "sha256:ad282f9b6926286d2ead4750552c8a6142bc4c783fd66b0293547c8fe6ae126a", size = 103418, upload-time = "2025-04-20T18:50:08.518Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e7/9c/0e6afc12c269578be5c0c1c9f4b49a8d32770a080260c333ac04cc1c832d/soupsieve-2.7-py3-none-any.whl", hash = "sha256:6e60cc5c1ffaf1cebcc12e8188320b72071e922c2e897f737cadce79ad5d30c4", size = 36677, upload-time = "2025-04-20T18:50:07.196Z" }, -] - [[package]] name = "sqlalchemy" version = "2.0.41" @@ -1246,15 +1161,15 @@ wheels = [ [[package]] name = "uvicorn" -version = "0.34.2" +version = "0.35.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "click" }, { name = "h11" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a6/ae/9bbb19b9e1c450cf9ecaef06463e40234d98d95bf572fab11b4f19ae5ded/uvicorn-0.34.2.tar.gz", hash = "sha256:0e929828f6186353a80b58ea719861d2629d766293b6d19baf086ba31d4f3328", size = 76815, upload-time = "2025-04-19T06:02:50.101Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5e/42/e0e305207bb88c6b8d3061399c6a961ffe5fbb7e2aa63c9234df7259e9cd/uvicorn-0.35.0.tar.gz", hash = "sha256:bc662f087f7cf2ce11a1d7fd70b90c9f98ef2e2831556dd078d131b96cc94a01", size = 78473, upload-time = "2025-06-28T16:15:46.058Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b1/4b/4cef6ce21a2aaca9d852a6e84ef4f135d99fcd74fa75105e2fc0c8308acd/uvicorn-0.34.2-py3-none-any.whl", hash = "sha256:deb49af569084536d269fe0a6d67e3754f104cf03aba7c11c40f01aadf33c403", size = 62483, upload-time = "2025-04-19T06:02:48.42Z" }, + { url = "https://files.pythonhosted.org/packages/d2/e2/dc81b1bd1dcfe91735810265e9d26bc8ec5da45b4c0f6237e286819194c3/uvicorn-0.35.0-py3-none-any.whl", hash = "sha256:197535216b25ff9b785e29a0b79199f55222193d47f820816e7da751e9bc8d4a", size = 66406, upload-time = "2025-06-28T16:15:44.816Z" }, ] [[package]] @@ -1266,6 +1181,26 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/fd/84/fd2ba7aafacbad3c4201d395674fc6348826569da3c0937e75505ead3528/wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859", size = 34166, upload-time = "2024-01-06T02:10:55.763Z" }, ] +[[package]] +name = "websockets" +version = "15.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/21/e6/26d09fab466b7ca9c7737474c52be4f76a40301b08362eb2dbc19dcc16c1/websockets-15.0.1.tar.gz", hash = "sha256:82544de02076bafba038ce055ee6412d68da13ab47f0c60cab827346de828dee", size = 177016, upload-time = "2025-03-05T20:03:41.606Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/9f/51f0cf64471a9d2b4d0fc6c534f323b664e7095640c34562f5182e5a7195/websockets-15.0.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ee443ef070bb3b6ed74514f5efaa37a252af57c90eb33b956d35c8e9c10a1931", size = 175440, upload-time = "2025-03-05T20:02:36.695Z" }, + { url = "https://files.pythonhosted.org/packages/8a/05/aa116ec9943c718905997412c5989f7ed671bc0188ee2ba89520e8765d7b/websockets-15.0.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5a939de6b7b4e18ca683218320fc67ea886038265fd1ed30173f5ce3f8e85675", size = 173098, upload-time = "2025-03-05T20:02:37.985Z" }, + { url = "https://files.pythonhosted.org/packages/ff/0b/33cef55ff24f2d92924923c99926dcce78e7bd922d649467f0eda8368923/websockets-15.0.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:746ee8dba912cd6fc889a8147168991d50ed70447bf18bcda7039f7d2e3d9151", size = 173329, upload-time = "2025-03-05T20:02:39.298Z" }, + { url = "https://files.pythonhosted.org/packages/31/1d/063b25dcc01faa8fada1469bdf769de3768b7044eac9d41f734fd7b6ad6d/websockets-15.0.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:595b6c3969023ecf9041b2936ac3827e4623bfa3ccf007575f04c5a6aa318c22", size = 183111, upload-time = "2025-03-05T20:02:40.595Z" }, + { url = "https://files.pythonhosted.org/packages/93/53/9a87ee494a51bf63e4ec9241c1ccc4f7c2f45fff85d5bde2ff74fcb68b9e/websockets-15.0.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c714d2fc58b5ca3e285461a4cc0c9a66bd0e24c5da9911e30158286c9b5be7f", size = 182054, upload-time = "2025-03-05T20:02:41.926Z" }, + { url = "https://files.pythonhosted.org/packages/ff/b2/83a6ddf56cdcbad4e3d841fcc55d6ba7d19aeb89c50f24dd7e859ec0805f/websockets-15.0.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f3c1e2ab208db911594ae5b4f79addeb3501604a165019dd221c0bdcabe4db8", size = 182496, upload-time = "2025-03-05T20:02:43.304Z" }, + { url = "https://files.pythonhosted.org/packages/98/41/e7038944ed0abf34c45aa4635ba28136f06052e08fc2168520bb8b25149f/websockets-15.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:229cf1d3ca6c1804400b0a9790dc66528e08a6a1feec0d5040e8b9eb14422375", size = 182829, upload-time = "2025-03-05T20:02:48.812Z" }, + { url = "https://files.pythonhosted.org/packages/e0/17/de15b6158680c7623c6ef0db361da965ab25d813ae54fcfeae2e5b9ef910/websockets-15.0.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:756c56e867a90fb00177d530dca4b097dd753cde348448a1012ed6c5131f8b7d", size = 182217, upload-time = "2025-03-05T20:02:50.14Z" }, + { url = "https://files.pythonhosted.org/packages/33/2b/1f168cb6041853eef0362fb9554c3824367c5560cbdaad89ac40f8c2edfc/websockets-15.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:558d023b3df0bffe50a04e710bc87742de35060580a293c2a984299ed83bc4e4", size = 182195, upload-time = "2025-03-05T20:02:51.561Z" }, + { url = "https://files.pythonhosted.org/packages/86/eb/20b6cdf273913d0ad05a6a14aed4b9a85591c18a987a3d47f20fa13dcc47/websockets-15.0.1-cp313-cp313-win32.whl", hash = "sha256:ba9e56e8ceeeedb2e080147ba85ffcd5cd0711b89576b83784d8605a7df455fa", size = 176393, upload-time = "2025-03-05T20:02:53.814Z" }, + { url = "https://files.pythonhosted.org/packages/1b/6c/c65773d6cab416a64d191d6ee8a8b1c68a09970ea6909d16965d26bfed1e/websockets-15.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:e09473f095a819042ecb2ab9465aee615bd9c2028e4ef7d933600a8401c79561", size = 176837, upload-time = "2025-03-05T20:02:55.237Z" }, + { url = "https://files.pythonhosted.org/packages/fa/a8/5b41e0da817d64113292ab1f8247140aac61cbf6cfd085d6a0fa77f4984f/websockets-15.0.1-py3-none-any.whl", hash = "sha256:f7a866fbc1e97b5c617ee4116daaa09b722101d4a3c170c787450ba409f9736f", size = 169743, upload-time = "2025-03-05T20:03:39.41Z" }, +] + [[package]] name = "yarl" version = "1.20.0"