From fd0f09e569f82e5cc2b8d2655b604514d282409e Mon Sep 17 00:00:00 2001 From: jason810496 <810496@email.wlsh.tyc.edu.tw> Date: Tue, 23 Jan 2024 02:22:34 +0800 Subject: [PATCH 01/44] hotfix : bandit action version --- .github/workflows/bandit-action.yaml | 2 +- ci/setup/cloudrun/setup.sh | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 ci/setup/cloudrun/setup.sh diff --git a/.github/workflows/bandit-action.yaml b/.github/workflows/bandit-action.yaml index 6dde2ef..c49d956 100644 --- a/.github/workflows/bandit-action.yaml +++ b/.github/workflows/bandit-action.yaml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Bandit Test - uses: mdegis/bandit-action@v1 + uses: mdegis/bandit-action@v1.0.1 with: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} path: "." diff --git a/ci/setup/cloudrun/setup.sh b/ci/setup/cloudrun/setup.sh new file mode 100644 index 0000000..d4ecf9b --- /dev/null +++ b/ci/setup/cloudrun/setup.sh @@ -0,0 +1,8 @@ +# setup cloud run +# Usage: setup.sh + +set -e +PROJECT_ID=$1 +SERVICE_ACCOUNT_NAME=$2 +WORKLOAD_IDENTITY_POOL_NAME=$3 +GITHUB_REPO=$4 \ No newline at end of file From 00f95b27850057eda2252059f59570b5a09d8eb1 Mon Sep 17 00:00:00 2001 From: jason810496 <810496@email.wlsh.tyc.edu.tw> Date: Tue, 23 Jan 2024 12:28:01 +0800 Subject: [PATCH 02/44] add : consumer setup --- .gitignore | 2 ++ consumer/Dockerfile | 0 consumer/src/main.py | 0 consumer/test/test.py | 0 4 files changed, 2 insertions(+) create mode 100644 consumer/Dockerfile create mode 100644 consumer/src/main.py create mode 100644 consumer/test/test.py diff --git a/.gitignore b/.gitignore index 68bc17f..a68cd8e 100644 --- a/.gitignore +++ b/.gitignore @@ -158,3 +158,5 @@ cython_debug/ # and can be added to the global gitignore or merged into this file. For a more nuclear # option (not recommended) you can uncomment the following to ignore the entire idea folder. #.idea/ + +.env/* \ No newline at end of file diff --git a/consumer/Dockerfile b/consumer/Dockerfile new file mode 100644 index 0000000..e69de29 diff --git a/consumer/src/main.py b/consumer/src/main.py new file mode 100644 index 0000000..e69de29 diff --git a/consumer/test/test.py b/consumer/test/test.py new file mode 100644 index 0000000..e69de29 From 23f6ece364eee86de31b580e01d685072c1afd3d Mon Sep 17 00:00:00 2001 From: jason810496 <810496@email.wlsh.tyc.edu.tw> Date: Tue, 23 Jan 2024 12:36:46 +0800 Subject: [PATCH 03/44] ci : add public docker image build --- .github/workflows/consumer-docker.yaml | 43 ++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 .github/workflows/consumer-docker.yaml diff --git a/.github/workflows/consumer-docker.yaml b/.github/workflows/consumer-docker.yaml new file mode 100644 index 0000000..f17abaa --- /dev/null +++ b/.github/workflows/consumer-docker.yaml @@ -0,0 +1,43 @@ +name: Consumer CI + +on: + push: + branches: [main, dev, feature/consumer] + pull_request: + branches: [main, dev] + +env: + IMAGE_NAME: tsmc-hackathon-2024-consumer + DOCKER_FILE_PATH: ./backend-mock/Dockerfile + +jobs: + docker: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + - name: Set up containerd + uses: crazy-max/ghaction-setup-containerd@v3 + - name: Login to DockerHub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + - name: Build Docker image + uses: docker/build-push-action@v4 + with: + context: . + file: ${{ env.DOCKER_FILE_PATH }} + platforms: linux/amd64,linux/arm64 + tags: docker.io/${{ secrets.DOCKER_USERNAME }}/${{ env.IMAGE_NAME }}:latest + outputs: type=oci,dest=/tmp/image.tar + - name: Import image in containerd + run: | + sudo ctr i import --base-name docker.io/${{ secrets.DOCKER_USERNAME }}/${{ env.IMAGE_NAME }}:latest --digests --all-platforms /tmp/image.tar + - name: Push image to containerd + run: | + sudo ctr i push --user "${{ secrets.DOCKER_USERNAME }}:${{ secrets.DOCKER_PASSWORD }}" docker.io/${{ secrets.DOCKER_USERNAME }}/${{ env.IMAGE_NAME }}:latest \ No newline at end of file From 419a368aa195e82ff79b246259a57dae36e99f5d Mon Sep 17 00:00:00 2001 From: jason810496 <810496@email.wlsh.tyc.edu.tw> Date: Tue, 23 Jan 2024 12:53:38 +0800 Subject: [PATCH 04/44] fix : build context --- .github/workflows/consumer-docker.yaml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/consumer-docker.yaml b/.github/workflows/consumer-docker.yaml index f17abaa..6cd8045 100644 --- a/.github/workflows/consumer-docker.yaml +++ b/.github/workflows/consumer-docker.yaml @@ -8,7 +8,8 @@ on: env: IMAGE_NAME: tsmc-hackathon-2024-consumer - DOCKER_FILE_PATH: ./backend-mock/Dockerfile + DOCKER_FILE_PATH: ./backend-mock # '.' for root directory + DOCKER_FILE_NAME: Dockerfile # change to your Dockerfile name jobs: docker: @@ -30,8 +31,8 @@ jobs: - name: Build Docker image uses: docker/build-push-action@v4 with: - context: . - file: ${{ env.DOCKER_FILE_PATH }} + context: ${{ env.DOCKER_FILE_PATH }} + file: ${{ env.DOCKER_FILE_NAME }} platforms: linux/amd64,linux/arm64 tags: docker.io/${{ secrets.DOCKER_USERNAME }}/${{ env.IMAGE_NAME }}:latest outputs: type=oci,dest=/tmp/image.tar From 11139c1e9211af119c52354a52da27f435569ec8 Mon Sep 17 00:00:00 2001 From: jason810496 <810496@email.wlsh.tyc.edu.tw> Date: Tue, 23 Jan 2024 12:55:59 +0800 Subject: [PATCH 05/44] fix : docker file context --- .github/workflows/consumer-docker.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/consumer-docker.yaml b/.github/workflows/consumer-docker.yaml index 6cd8045..e4515a8 100644 --- a/.github/workflows/consumer-docker.yaml +++ b/.github/workflows/consumer-docker.yaml @@ -32,7 +32,7 @@ jobs: uses: docker/build-push-action@v4 with: context: ${{ env.DOCKER_FILE_PATH }} - file: ${{ env.DOCKER_FILE_NAME }} + # file: ${{ env.DOCKER_FILE_NAME }} platforms: linux/amd64,linux/arm64 tags: docker.io/${{ secrets.DOCKER_USERNAME }}/${{ env.IMAGE_NAME }}:latest outputs: type=oci,dest=/tmp/image.tar From 50fe37a4d63df647df72727f14972ccb3968e3a2 Mon Sep 17 00:00:00 2001 From: jason810496 <810496@email.wlsh.tyc.edu.tw> Date: Tue, 23 Jan 2024 13:30:07 +0800 Subject: [PATCH 06/44] add : initial consumer structure --- consumer/src/{main.py => __init__.py} | 0 consumer/src/api/__init__.py | 0 consumer/src/api/full.py | 5 +++ consumer/src/api/health.py | 10 +++++ consumer/src/api/state.py | 5 +++ consumer/src/api/status.py | 5 +++ consumer/src/app.py | 57 +++++++++++++++++++++++++++ consumer/src/run.py | 35 ++++++++++++++++ consumer/src/services/cpu.py | 0 consumer/src/services/mock.py | 0 consumer/src/services/ram.py | 0 consumer/src/services/statistics.py | 0 12 files changed, 117 insertions(+) rename consumer/src/{main.py => __init__.py} (100%) create mode 100644 consumer/src/api/__init__.py create mode 100644 consumer/src/api/full.py create mode 100644 consumer/src/api/health.py create mode 100644 consumer/src/api/state.py create mode 100644 consumer/src/api/status.py create mode 100644 consumer/src/app.py create mode 100644 consumer/src/run.py create mode 100644 consumer/src/services/cpu.py create mode 100644 consumer/src/services/mock.py create mode 100644 consumer/src/services/ram.py create mode 100644 consumer/src/services/statistics.py diff --git a/consumer/src/main.py b/consumer/src/__init__.py similarity index 100% rename from consumer/src/main.py rename to consumer/src/__init__.py diff --git a/consumer/src/api/__init__.py b/consumer/src/api/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/consumer/src/api/full.py b/consumer/src/api/full.py new file mode 100644 index 0000000..44f0306 --- /dev/null +++ b/consumer/src/api/full.py @@ -0,0 +1,5 @@ +from fastapi import APIRouter, Depends, HTTPException, status +from typing import List + + +router = APIRouter(prefix="/full", tags=["full"] ) diff --git a/consumer/src/api/health.py b/consumer/src/api/health.py new file mode 100644 index 0000000..571715e --- /dev/null +++ b/consumer/src/api/health.py @@ -0,0 +1,10 @@ +from fastapi import APIRouter, Depends, HTTPException, status +from typing import List + + +router = APIRouter(prefix="", tags=["Full"] ) + + +@router.get("/", status_code=status.HTTP_200_OK) +async def health(): + return {"hello": "world"} \ No newline at end of file diff --git a/consumer/src/api/state.py b/consumer/src/api/state.py new file mode 100644 index 0000000..1bbf947 --- /dev/null +++ b/consumer/src/api/state.py @@ -0,0 +1,5 @@ +from fastapi import APIRouter, Depends, HTTPException, status +from typing import List + + +router = APIRouter(prefix="/state", tags=["full"] ) diff --git a/consumer/src/api/status.py b/consumer/src/api/status.py new file mode 100644 index 0000000..d603fcb --- /dev/null +++ b/consumer/src/api/status.py @@ -0,0 +1,5 @@ +from fastapi import APIRouter, Depends, HTTPException, status +from typing import List + + +router = APIRouter(prefix="/status", tags=["full"] ) diff --git a/consumer/src/app.py b/consumer/src/app.py new file mode 100644 index 0000000..595667a --- /dev/null +++ b/consumer/src/app.py @@ -0,0 +1,57 @@ +from fastapi import FastAPI +from fastapi.middleware import Middleware +from starlette.middleware.cors import CORSMiddleware + +# for logging middleware +import logging +from fastapi import Request +import time + +from api.full import router as full_router +from api.health import router as health_router +from api.state import router as state_router +from api.status import router as status_router + + +middlewares = [ + Middleware( + CORSMiddleware, + allow_origins=["*"], + allow_credentials=True, + allow_methods=["*"], + allow_headers=["*"], + ), +] + +app = FastAPI( + docs_url="/api/docs", + openapi_url="/api/openapi.json", + redoc_url='/api/redoc', + middleware=middlewares, +) + + +app.include_router(health_router, prefix="") +app.include_router(full_router, prefix="/api") +app.include_router(status_router, prefix="/api") +app.include_router(state_router, prefix="/api") + + +# add logger middleware + + + +logger = logging.getLogger(__name__) +logger.setLevel(logging.DEBUG) + + +@app.middleware("http") +async def add_process_time_header(request: Request, call_next: callable): + start_time = time.time() + response = await call_next(request) + process_time = time.time() - start_time + formatted_process_time = "{0:.4f}".format(process_time) + logger.info(f"{request.method} {request.url} {formatted_process_time}s") + response.headers["X-Process-Time"] = formatted_process_time + + return response \ No newline at end of file diff --git a/consumer/src/run.py b/consumer/src/run.py new file mode 100644 index 0000000..c4c4d37 --- /dev/null +++ b/consumer/src/run.py @@ -0,0 +1,35 @@ +import argparse +import os + +from dotenv import load_dotenv +import uvicorn + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="Run the server in different modes.") + + app_mode = parser.add_argument_group( + title="App Mode", description="Run the server in different modes." + ) + app_mode.add_argument( + "--prod", action="store_true", help="Run the server in production mode." + ) + app_mode.add_argument( + "--dev", action="store_true", help="Run the server in development mode." + ) + app_mode.add_argument( + "--k8s", action="store_true", help="Run the server in k8s environment." + ) + + args = parser.parse_args() + + if args.dev: + # for development mode + load_dotenv(".env/dev.env") + + + uvicorn.run( + "app:app", + host="0.0.0.0", + port=int(os.getenv("PORT")), + reload=bool(os.getenv("RELOAD")), + ) diff --git a/consumer/src/services/cpu.py b/consumer/src/services/cpu.py new file mode 100644 index 0000000..e69de29 diff --git a/consumer/src/services/mock.py b/consumer/src/services/mock.py new file mode 100644 index 0000000..e69de29 diff --git a/consumer/src/services/ram.py b/consumer/src/services/ram.py new file mode 100644 index 0000000..e69de29 diff --git a/consumer/src/services/statistics.py b/consumer/src/services/statistics.py new file mode 100644 index 0000000..e69de29 From 3632d99a31c550297e36bbc073bbfdd2ad47697e Mon Sep 17 00:00:00 2001 From: jason810496 <810496@email.wlsh.tyc.edu.tw> Date: Tue, 23 Jan 2024 14:01:02 +0800 Subject: [PATCH 07/44] add : lock save counters --- consumer/src/state/instance.py | 5 +++ consumer/src/state/models.py | 80 ++++++++++++++++++++++++++++++++++ 2 files changed, 85 insertions(+) create mode 100644 consumer/src/state/instance.py create mode 100644 consumer/src/state/models.py diff --git a/consumer/src/state/instance.py b/consumer/src/state/instance.py new file mode 100644 index 0000000..e2f7568 --- /dev/null +++ b/consumer/src/state/instance.py @@ -0,0 +1,5 @@ +from .models import CounterModel , TotalQueryCountModel , AvgExecutionTimeModel + +Counter = CounterModel(0) +TotalQueryCount = TotalQueryCountModel(0) +AvgExecutionTime = AvgExecutionTimeModel(0.0) diff --git a/consumer/src/state/models.py b/consumer/src/state/models.py new file mode 100644 index 0000000..323c594 --- /dev/null +++ b/consumer/src/state/models.py @@ -0,0 +1,80 @@ +import threading + +''' +- Counter +- Total Query Count +- Avg Execution Time +''' + + +class CounterModel: + ''' + remain query count + ''' + + def __init__(self, count): + self.count = count + self.lock = threading.Lock() + + def get_count(self): + with self.lock: + return self.count + + def set_count(self, count): + with self.lock: + self.count = count + + def decrease(self, cnt:int): + with self.lock: + self.count -= cnt + + def increase(self, cnt:int): + with self.lock: + self.count += cnt + + +class TotalQueryCountModel: + ''' + total query count + ''' + + def __init__(self, count): + self.count = count + self.lock = threading.Lock() + + def get_count(self): + with self.lock: + return self.count + + def set_count(self, count): + with self.lock: + self.count = count + + def increase(self, cnt:int): + with self.lock: + self.count += cnt + + +class AvgExecutionTimeModel: + ''' + average execution time + ''' + + def __init__(self, avg_time): + self.avg_time = avg_time + self.lock = threading.Lock() + + def get_avg_time(self): + with self.lock: + return self.avg_time + + def set_avg_time(self, avg_time): + with self.lock: + self.avg_time = avg_time + + def add_time(self, time_add:float, last_cnt:float): + ''' + avg_time = (avg_time * cnt + time_add) / (cnt + 1) + ''' + with self.lock: + self.avg_time = (self.avg_time * last_cnt + time_add) / (last_cnt + 1) \ No newline at end of file From 97e34bfe0c55d3872cc91fd2562b01345ae1b3b6 Mon Sep 17 00:00:00 2001 From: peterxcli Date: Tue, 23 Jan 2024 14:42:31 +0800 Subject: [PATCH 08/44] chore: add google-cloud-run dependency --- poetry.lock | 439 +++++++++++++++++++++++++++++++++++++++++++++++-- pyproject.toml | 1 + 2 files changed, 428 insertions(+), 12 deletions(-) diff --git a/poetry.lock b/poetry.lock index 040315c..02b2d0f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,26 @@ -# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. + +[[package]] +name = "cachetools" +version = "5.3.2" +description = "Extensible memoizing collections and decorators" +optional = false +python-versions = ">=3.7" +files = [ + {file = "cachetools-5.3.2-py3-none-any.whl", hash = "sha256:861f35a13a451f94e301ce2bec7cac63e881232ccce7ed67fab9b5df4d3beaa1"}, + {file = "cachetools-5.3.2.tar.gz", hash = "sha256:086ee420196f7b2ab9ca2db2520aca326318b68fe5ba8bc4d49cca91add450f2"}, +] + +[[package]] +name = "certifi" +version = "2023.11.17" +description = "Python package for providing Mozilla's CA Bundle." +optional = false +python-versions = ">=3.6" +files = [ + {file = "certifi-2023.11.17-py3-none-any.whl", hash = "sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474"}, + {file = "certifi-2023.11.17.tar.gz", hash = "sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1"}, +] [[package]] name = "cfgv" @@ -11,6 +33,105 @@ files = [ {file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"}, ] +[[package]] +name = "charset-normalizer" +version = "3.3.2" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, + {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, +] + [[package]] name = "distlib" version = "0.3.8" @@ -38,6 +159,186 @@ docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1 testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"] typing = ["typing-extensions (>=4.8)"] +[[package]] +name = "google-api-core" +version = "2.15.0" +description = "Google API client core library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "google-api-core-2.15.0.tar.gz", hash = "sha256:abc978a72658f14a2df1e5e12532effe40f94f868f6e23d95133bd6abcca35ca"}, + {file = "google_api_core-2.15.0-py3-none-any.whl", hash = "sha256:2aa56d2be495551e66bbff7f729b790546f87d5c90e74781aa77233bcb395a8a"}, +] + +[package.dependencies] +google-auth = ">=2.14.1,<3.0.dev0" +googleapis-common-protos = ">=1.56.2,<2.0.dev0" +grpcio = {version = ">=1.49.1,<2.0dev", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""} +grpcio-status = {version = ">=1.49.1,<2.0.dev0", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""} +protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0.dev0" +requests = ">=2.18.0,<3.0.0.dev0" + +[package.extras] +grpc = ["grpcio (>=1.33.2,<2.0dev)", "grpcio (>=1.49.1,<2.0dev)", "grpcio-status (>=1.33.2,<2.0.dev0)", "grpcio-status (>=1.49.1,<2.0.dev0)"] +grpcgcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] +grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] + +[[package]] +name = "google-auth" +version = "2.26.2" +description = "Google Authentication Library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "google-auth-2.26.2.tar.gz", hash = "sha256:97327dbbf58cccb58fc5a1712bba403ae76668e64814eb30f7316f7e27126b81"}, + {file = "google_auth-2.26.2-py2.py3-none-any.whl", hash = "sha256:3f445c8ce9b61ed6459aad86d8ccdba4a9afed841b2d1451a11ef4db08957424"}, +] + +[package.dependencies] +cachetools = ">=2.0.0,<6.0" +pyasn1-modules = ">=0.2.1" +rsa = ">=3.1.4,<5" + +[package.extras] +aiohttp = ["aiohttp (>=3.6.2,<4.0.0.dev0)", "requests (>=2.20.0,<3.0.0.dev0)"] +enterprise-cert = ["cryptography (==36.0.2)", "pyopenssl (==22.0.0)"] +pyopenssl = ["cryptography (>=38.0.3)", "pyopenssl (>=20.0.0)"] +reauth = ["pyu2f (>=0.1.5)"] +requests = ["requests (>=2.20.0,<3.0.0.dev0)"] + +[[package]] +name = "google-cloud-run" +version = "0.10.1" +description = "Google Cloud Run API client library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "google-cloud-run-0.10.1.tar.gz", hash = "sha256:fe7db10c5948147d4f19c379c13625d78998aaf891ff176f96e24c7c576894da"}, + {file = "google_cloud_run-0.10.1-py2.py3-none-any.whl", hash = "sha256:71d4c74e65e58333e2e488031edcb55e462ce0b6c2faaac3846f0dfa804b7649"}, +] + +[package.dependencies] +google-api-core = {version = ">=1.34.0,<2.0.dev0 || >=2.11.dev0,<3.0.0dev", extras = ["grpc"]} +grpc-google-iam-v1 = ">=0.12.4,<1.0.0dev" +proto-plus = ">=1.22.3,<2.0.0dev" +protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev" + +[[package]] +name = "googleapis-common-protos" +version = "1.62.0" +description = "Common protobufs used in Google APIs" +optional = false +python-versions = ">=3.7" +files = [ + {file = "googleapis-common-protos-1.62.0.tar.gz", hash = "sha256:83f0ece9f94e5672cced82f592d2a5edf527a96ed1794f0bab36d5735c996277"}, + {file = "googleapis_common_protos-1.62.0-py2.py3-none-any.whl", hash = "sha256:4750113612205514f9f6aa4cb00d523a94f3e8c06c5ad2fee466387dc4875f07"}, +] + +[package.dependencies] +grpcio = {version = ">=1.44.0,<2.0.0.dev0", optional = true, markers = "extra == \"grpc\""} +protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0.dev0" + +[package.extras] +grpc = ["grpcio (>=1.44.0,<2.0.0.dev0)"] + +[[package]] +name = "grpc-google-iam-v1" +version = "0.13.0" +description = "IAM API client library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "grpc-google-iam-v1-0.13.0.tar.gz", hash = "sha256:fad318608b9e093258fbf12529180f400d1c44453698a33509cc6ecf005b294e"}, + {file = "grpc_google_iam_v1-0.13.0-py2.py3-none-any.whl", hash = "sha256:53902e2af7de8df8c1bd91373d9be55b0743ec267a7428ea638db3775becae89"}, +] + +[package.dependencies] +googleapis-common-protos = {version = ">=1.56.0,<2.0.0dev", extras = ["grpc"]} +grpcio = ">=1.44.0,<2.0.0dev" +protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev" + +[[package]] +name = "grpcio" +version = "1.60.0" +description = "HTTP/2-based RPC framework" +optional = false +python-versions = ">=3.7" +files = [ + {file = "grpcio-1.60.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:d020cfa595d1f8f5c6b343530cd3ca16ae5aefdd1e832b777f9f0eb105f5b139"}, + {file = "grpcio-1.60.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:b98f43fcdb16172dec5f4b49f2fece4b16a99fd284d81c6bbac1b3b69fcbe0ff"}, + {file = "grpcio-1.60.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:20e7a4f7ded59097c84059d28230907cd97130fa74f4a8bfd1d8e5ba18c81491"}, + {file = "grpcio-1.60.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:452ca5b4afed30e7274445dd9b441a35ece656ec1600b77fff8c216fdf07df43"}, + {file = "grpcio-1.60.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:43e636dc2ce9ece583b3e2ca41df5c983f4302eabc6d5f9cd04f0562ee8ec1ae"}, + {file = "grpcio-1.60.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6e306b97966369b889985a562ede9d99180def39ad42c8014628dd3cc343f508"}, + {file = "grpcio-1.60.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f897c3b127532e6befdcf961c415c97f320d45614daf84deba0a54e64ea2457b"}, + {file = "grpcio-1.60.0-cp310-cp310-win32.whl", hash = "sha256:b87efe4a380887425bb15f220079aa8336276398dc33fce38c64d278164f963d"}, + {file = "grpcio-1.60.0-cp310-cp310-win_amd64.whl", hash = "sha256:a9c7b71211f066908e518a2ef7a5e211670761651039f0d6a80d8d40054047df"}, + {file = "grpcio-1.60.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:fb464479934778d7cc5baf463d959d361954d6533ad34c3a4f1d267e86ee25fd"}, + {file = "grpcio-1.60.0-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:4b44d7e39964e808b071714666a812049765b26b3ea48c4434a3b317bac82f14"}, + {file = "grpcio-1.60.0-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:90bdd76b3f04bdb21de5398b8a7c629676c81dfac290f5f19883857e9371d28c"}, + {file = "grpcio-1.60.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:91229d7203f1ef0ab420c9b53fe2ca5c1fbeb34f69b3bc1b5089466237a4a134"}, + {file = "grpcio-1.60.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b36a2c6d4920ba88fa98075fdd58ff94ebeb8acc1215ae07d01a418af4c0253"}, + {file = "grpcio-1.60.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:297eef542156d6b15174a1231c2493ea9ea54af8d016b8ca7d5d9cc65cfcc444"}, + {file = "grpcio-1.60.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:87c9224acba0ad8bacddf427a1c2772e17ce50b3042a789547af27099c5f751d"}, + {file = "grpcio-1.60.0-cp311-cp311-win32.whl", hash = "sha256:95ae3e8e2c1b9bf671817f86f155c5da7d49a2289c5cf27a319458c3e025c320"}, + {file = "grpcio-1.60.0-cp311-cp311-win_amd64.whl", hash = "sha256:467a7d31554892eed2aa6c2d47ded1079fc40ea0b9601d9f79204afa8902274b"}, + {file = "grpcio-1.60.0-cp312-cp312-linux_armv7l.whl", hash = "sha256:a7152fa6e597c20cb97923407cf0934e14224af42c2b8d915f48bc3ad2d9ac18"}, + {file = "grpcio-1.60.0-cp312-cp312-macosx_10_10_universal2.whl", hash = "sha256:7db16dd4ea1b05ada504f08d0dca1cd9b926bed3770f50e715d087c6f00ad748"}, + {file = "grpcio-1.60.0-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:b0571a5aef36ba9177e262dc88a9240c866d903a62799e44fd4aae3f9a2ec17e"}, + {file = "grpcio-1.60.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6fd9584bf1bccdfff1512719316efa77be235469e1e3295dce64538c4773840b"}, + {file = "grpcio-1.60.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d6a478581b1a1a8fdf3318ecb5f4d0cda41cacdffe2b527c23707c9c1b8fdb55"}, + {file = "grpcio-1.60.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:77c8a317f0fd5a0a2be8ed5cbe5341537d5c00bb79b3bb27ba7c5378ba77dbca"}, + {file = "grpcio-1.60.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1c30bb23a41df95109db130a6cc1b974844300ae2e5d68dd4947aacba5985aa5"}, + {file = "grpcio-1.60.0-cp312-cp312-win32.whl", hash = "sha256:2aef56e85901c2397bd557c5ba514f84de1f0ae5dd132f5d5fed042858115951"}, + {file = "grpcio-1.60.0-cp312-cp312-win_amd64.whl", hash = "sha256:e381fe0c2aa6c03b056ad8f52f8efca7be29fb4d9ae2f8873520843b6039612a"}, + {file = "grpcio-1.60.0-cp37-cp37m-linux_armv7l.whl", hash = "sha256:92f88ca1b956eb8427a11bb8b4a0c0b2b03377235fc5102cb05e533b8693a415"}, + {file = "grpcio-1.60.0-cp37-cp37m-macosx_10_10_universal2.whl", hash = "sha256:e278eafb406f7e1b1b637c2cf51d3ad45883bb5bd1ca56bc05e4fc135dfdaa65"}, + {file = "grpcio-1.60.0-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:a48edde788b99214613e440fce495bbe2b1e142a7f214cce9e0832146c41e324"}, + {file = "grpcio-1.60.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:de2ad69c9a094bf37c1102b5744c9aec6cf74d2b635558b779085d0263166454"}, + {file = "grpcio-1.60.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:073f959c6f570797272f4ee9464a9997eaf1e98c27cb680225b82b53390d61e6"}, + {file = "grpcio-1.60.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c826f93050c73e7769806f92e601e0efdb83ec8d7c76ddf45d514fee54e8e619"}, + {file = "grpcio-1.60.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:9e30be89a75ee66aec7f9e60086fadb37ff8c0ba49a022887c28c134341f7179"}, + {file = "grpcio-1.60.0-cp37-cp37m-win_amd64.whl", hash = "sha256:b0fb2d4801546598ac5cd18e3ec79c1a9af8b8f2a86283c55a5337c5aeca4b1b"}, + {file = "grpcio-1.60.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:9073513ec380434eb8d21970e1ab3161041de121f4018bbed3146839451a6d8e"}, + {file = "grpcio-1.60.0-cp38-cp38-macosx_10_10_universal2.whl", hash = "sha256:74d7d9fa97809c5b892449b28a65ec2bfa458a4735ddad46074f9f7d9550ad13"}, + {file = "grpcio-1.60.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:1434ca77d6fed4ea312901122dc8da6c4389738bf5788f43efb19a838ac03ead"}, + {file = "grpcio-1.60.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e61e76020e0c332a98290323ecfec721c9544f5b739fab925b6e8cbe1944cf19"}, + {file = "grpcio-1.60.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675997222f2e2f22928fbba640824aebd43791116034f62006e19730715166c0"}, + {file = "grpcio-1.60.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5208a57eae445ae84a219dfd8b56e04313445d146873117b5fa75f3245bc1390"}, + {file = "grpcio-1.60.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:428d699c8553c27e98f4d29fdc0f0edc50e9a8a7590bfd294d2edb0da7be3629"}, + {file = "grpcio-1.60.0-cp38-cp38-win32.whl", hash = "sha256:83f2292ae292ed5a47cdcb9821039ca8e88902923198f2193f13959360c01860"}, + {file = "grpcio-1.60.0-cp38-cp38-win_amd64.whl", hash = "sha256:705a68a973c4c76db5d369ed573fec3367d7d196673fa86614b33d8c8e9ebb08"}, + {file = "grpcio-1.60.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:c193109ca4070cdcaa6eff00fdb5a56233dc7610216d58fb81638f89f02e4968"}, + {file = "grpcio-1.60.0-cp39-cp39-macosx_10_10_universal2.whl", hash = "sha256:676e4a44e740deaba0f4d95ba1d8c5c89a2fcc43d02c39f69450b1fa19d39590"}, + {file = "grpcio-1.60.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:5ff21e000ff2f658430bde5288cb1ac440ff15c0d7d18b5fb222f941b46cb0d2"}, + {file = "grpcio-1.60.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c86343cf9ff7b2514dd229bdd88ebba760bd8973dac192ae687ff75e39ebfab"}, + {file = "grpcio-1.60.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0fd3b3968ffe7643144580f260f04d39d869fcc2cddb745deef078b09fd2b328"}, + {file = "grpcio-1.60.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:30943b9530fe3620e3b195c03130396cd0ee3a0d10a66c1bee715d1819001eaf"}, + {file = "grpcio-1.60.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b10241250cb77657ab315270b064a6c7f1add58af94befa20687e7c8d8603ae6"}, + {file = "grpcio-1.60.0-cp39-cp39-win32.whl", hash = "sha256:79a050889eb8d57a93ed21d9585bb63fca881666fc709f5d9f7f9372f5e7fd03"}, + {file = "grpcio-1.60.0-cp39-cp39-win_amd64.whl", hash = "sha256:8a97a681e82bc11a42d4372fe57898d270a2707f36c45c6676e49ce0d5c41353"}, + {file = "grpcio-1.60.0.tar.gz", hash = "sha256:2199165a1affb666aa24adf0c97436686d0a61bc5fc113c037701fb7c7fceb96"}, +] + +[package.extras] +protobuf = ["grpcio-tools (>=1.60.0)"] + +[[package]] +name = "grpcio-status" +version = "1.60.0" +description = "Status proto mapping for gRPC" +optional = false +python-versions = ">=3.6" +files = [ + {file = "grpcio-status-1.60.0.tar.gz", hash = "sha256:f10e0b6db3adc0fdc244b71962814ee982996ef06186446b5695b9fa635aa1ab"}, + {file = "grpcio_status-1.60.0-py3-none-any.whl", hash = "sha256:7d383fa36e59c1e61d380d91350badd4d12ac56e4de2c2b831b050362c3c572e"}, +] + +[package.dependencies] +googleapis-common-protos = ">=1.5.5" +grpcio = ">=1.60.0" +protobuf = ">=4.21.6" + [[package]] name = "identify" version = "2.5.33" @@ -52,6 +353,17 @@ files = [ [package.extras] license = ["ukkonen"] +[[package]] +name = "idna" +version = "3.6" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.5" +files = [ + {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"}, + {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"}, +] + [[package]] name = "nodeenv" version = "1.8.0" @@ -99,6 +411,68 @@ nodeenv = ">=0.11.1" pyyaml = ">=5.1" virtualenv = ">=20.10.0" +[[package]] +name = "proto-plus" +version = "1.23.0" +description = "Beautiful, Pythonic protocol buffers." +optional = false +python-versions = ">=3.6" +files = [ + {file = "proto-plus-1.23.0.tar.gz", hash = "sha256:89075171ef11988b3fa157f5dbd8b9cf09d65fffee97e29ce403cd8defba19d2"}, + {file = "proto_plus-1.23.0-py3-none-any.whl", hash = "sha256:a829c79e619e1cf632de091013a4173deed13a55f326ef84f05af6f50ff4c82c"}, +] + +[package.dependencies] +protobuf = ">=3.19.0,<5.0.0dev" + +[package.extras] +testing = ["google-api-core[grpc] (>=1.31.5)"] + +[[package]] +name = "protobuf" +version = "4.25.2" +description = "" +optional = false +python-versions = ">=3.8" +files = [ + {file = "protobuf-4.25.2-cp310-abi3-win32.whl", hash = "sha256:b50c949608682b12efb0b2717f53256f03636af5f60ac0c1d900df6213910fd6"}, + {file = "protobuf-4.25.2-cp310-abi3-win_amd64.whl", hash = "sha256:8f62574857ee1de9f770baf04dde4165e30b15ad97ba03ceac65f760ff018ac9"}, + {file = "protobuf-4.25.2-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:2db9f8fa64fbdcdc93767d3cf81e0f2aef176284071507e3ede160811502fd3d"}, + {file = "protobuf-4.25.2-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:10894a2885b7175d3984f2be8d9850712c57d5e7587a2410720af8be56cdaf62"}, + {file = "protobuf-4.25.2-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:fc381d1dd0516343f1440019cedf08a7405f791cd49eef4ae1ea06520bc1c020"}, + {file = "protobuf-4.25.2-cp38-cp38-win32.whl", hash = "sha256:33a1aeef4b1927431d1be780e87b641e322b88d654203a9e9d93f218ee359e61"}, + {file = "protobuf-4.25.2-cp38-cp38-win_amd64.whl", hash = "sha256:47f3de503fe7c1245f6f03bea7e8d3ec11c6c4a2ea9ef910e3221c8a15516d62"}, + {file = "protobuf-4.25.2-cp39-cp39-win32.whl", hash = "sha256:5e5c933b4c30a988b52e0b7c02641760a5ba046edc5e43d3b94a74c9fc57c1b3"}, + {file = "protobuf-4.25.2-cp39-cp39-win_amd64.whl", hash = "sha256:d66a769b8d687df9024f2985d5137a337f957a0916cf5464d1513eee96a63ff0"}, + {file = "protobuf-4.25.2-py3-none-any.whl", hash = "sha256:a8b7a98d4ce823303145bf3c1a8bdb0f2f4642a414b196f04ad9853ed0c8f830"}, + {file = "protobuf-4.25.2.tar.gz", hash = "sha256:fe599e175cb347efc8ee524bcd4b902d11f7262c0e569ececcb89995c15f0a5e"}, +] + +[[package]] +name = "pyasn1" +version = "0.5.1" +description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +files = [ + {file = "pyasn1-0.5.1-py2.py3-none-any.whl", hash = "sha256:4439847c58d40b1d0a573d07e3856e95333f1976294494c325775aeca506eb58"}, + {file = "pyasn1-0.5.1.tar.gz", hash = "sha256:6d391a96e59b23130a5cfa74d6fd7f388dbbe26cc8f1edf39fdddf08d9d6676c"}, +] + +[[package]] +name = "pyasn1-modules" +version = "0.3.0" +description = "A collection of ASN.1-based protocols modules" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +files = [ + {file = "pyasn1_modules-0.3.0-py2.py3-none-any.whl", hash = "sha256:d3ccd6ed470d9ffbc716be08bd90efbd44d0734bc9303818f7336070984a162d"}, + {file = "pyasn1_modules-0.3.0.tar.gz", hash = "sha256:5bd01446b736eb9d31512a30d46c1ac3395d676c6f3cafa4c03eb54b9925631c"}, +] + +[package.dependencies] +pyasn1 = ">=0.4.6,<0.6.0" + [[package]] name = "pyyaml" version = "6.0.1" @@ -111,7 +485,6 @@ files = [ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, - {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, @@ -119,15 +492,8 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, - {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, - {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, - {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, - {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, @@ -144,7 +510,6 @@ files = [ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, - {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, @@ -152,12 +517,46 @@ files = [ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, - {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, ] +[[package]] +name = "requests" +version = "2.31.0" +description = "Python HTTP for Humans." +optional = false +python-versions = ">=3.7" +files = [ + {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, + {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "rsa" +version = "4.9" +description = "Pure-Python RSA implementation" +optional = false +python-versions = ">=3.6,<4" +files = [ + {file = "rsa-4.9-py3-none-any.whl", hash = "sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7"}, + {file = "rsa-4.9.tar.gz", hash = "sha256:e38464a49c6c85d7f1351b0126661487a7e0a14a50f1675ec50eb34d4f20ef21"}, +] + +[package.dependencies] +pyasn1 = ">=0.1.3" + [[package]] name = "ruff" version = "0.1.14" @@ -200,6 +599,22 @@ docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] +[[package]] +name = "urllib3" +version = "2.1.0" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=3.8" +files = [ + {file = "urllib3-2.1.0-py3-none-any.whl", hash = "sha256:55901e917a5896a349ff771be919f8bd99aff50b79fe58fec595eb37bbc56bb3"}, + {file = "urllib3-2.1.0.tar.gz", hash = "sha256:df7aa8afb0148fa78488e7899b2c59b5f4ffcfa82e6c54ccb9dd37c1d7b52d54"}, +] + +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] + [[package]] name = "virtualenv" version = "20.25.0" @@ -223,4 +638,4 @@ test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess [metadata] lock-version = "2.0" python-versions = "^3.11" -content-hash = "929137524b095c4c397b340f7b2cf5cb807a6525a8a250dd483ec4298adbd053" +content-hash = "9e55cbb7d536c5b31f7f6ef02826b59ae2a648f5d7079e74b332a1ed5eeaf7a7" diff --git a/pyproject.toml b/pyproject.toml index 4e6f565..8719314 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,6 +9,7 @@ readme = "README.md" python = "^3.11" pre-commit = "^3.6.0" ruff = "^0.1.14" +google-cloud-run = "^0.10.1" [build-system] From 3cebd28d870d118b8f9d4ea6a77b63201bd074a9 Mon Sep 17 00:00:00 2001 From: peterxcli Date: Tue, 23 Jan 2024 14:42:40 +0800 Subject: [PATCH 09/44] docs: add README.md for Cloud Run Monitor System --- monitor/README.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 monitor/README.md diff --git a/monitor/README.md b/monitor/README.md new file mode 100644 index 0000000..1ee5bab --- /dev/null +++ b/monitor/README.md @@ -0,0 +1,16 @@ +# Cloud Run Monitor System + +## Reference + +### Cloud Run API + +- [sdk pipy](https://pypi.org/project/google-cloud-run/) +- [github](https://github.com/googleapis/google-cloud-python/tree/main/packages/google-cloud-run) +- [gcloud commad list](https://cloud.google.com/sdk/gcloud/reference/run) +- [gcloud update reference](https://cloud.google.com/sdk/gcloud/reference/run/services/update) +- python call `gcloud run service update` directly + +### Cloud Run Log and Metrics Retrieve API + +- [cloud run metrics api](https://cloud.google.com/monitoring/api/metrics_gcp#gcp-run) +- [cloud run log api](https://cloud.google.com/run/docs/logging) From 85a15b6435c335c42a16553ad403157cb8830540 Mon Sep 17 00:00:00 2001 From: peterxcli Date: Tue, 23 Jan 2024 14:42:55 +0800 Subject: [PATCH 10/44] feat: add CloudRunManager class for managing Cloud Run instances --- monitor/auto_scaling/cloud_run_api.py | 92 +++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 monitor/auto_scaling/cloud_run_api.py diff --git a/monitor/auto_scaling/cloud_run_api.py b/monitor/auto_scaling/cloud_run_api.py new file mode 100644 index 0000000..1d1e08a --- /dev/null +++ b/monitor/auto_scaling/cloud_run_api.py @@ -0,0 +1,92 @@ +from google.cloud import run_v2 + + +class CloudRunManager: + def __init__(self, client: run_v2.ServicesClient): + self.client = client + + def adjust_cpu_ram(self, instance_id, cpu=None, ram=None): + """ + Adjusts the CPU and RAM of a cloud instance. + + :param instance_id: ID of the instance to adjust. + :param cpu: New CPU configuration. + :param ram: New RAM configuration. + """ + # https://github.com/googleapis/google-cloud-python/blob/main/packages/google-cloud-run/google/cloud/run_v2/types/service.py#L502 + # https://github.com/googleapis/google-cloud-python/blob/main/packages/google-cloud-run/google/cloud/run_v2/types/revision_template.py#L144 + # https://github.com/googleapis/google-cloud-python/blob/main/packages/google-cloud-run/google/cloud/run_v2/types/k8s_min.py#L164 + request = run_v2.UpdateServiceRequest( + service=run_v2.Service( + name=instance_id, + template=run_v2.RevisionTemplate( + containers=[ + run_v2.Container( + resources=run_v2.ResourceRequirements( + limits={"cpu": cpu, "memory": ram} + ) + ) + ] + ), + ) + ) + + operation = self.client.update_service(request=request) + + response = operation.result() # Blocks until operation is complete + return response + + def adjust_instance_count(self, instance_id, new_count): + """ + Adjusts the number of running instances. + + :param new_count: The target number of instances. + """ + # https://github.com/googleapis/google-cloud-python/blob/main/packages/google-cloud-run/google/cloud/run_v2/types/service.py#L502 + # https://github.com/googleapis/google-cloud-python/blob/main/packages/google-cloud-run/google/cloud/run_v2/types/revision_template.py#L33 + # https://github.com/googleapis/google-cloud-python/blob/313f5672c1d16681dd4db2c4a995c5668259ea7d/packages/google-cloud-run/google/cloud/run_v2/types/vendor_settings.py#L213 + request = run_v2.UpdateServiceRequest( + service=run_v2.Service( + name=instance_id, + template=run_v2.RevisionTemplate( + scale=run_v2.RevisionScaling( + min_instance_count=new_count, max_instance_count=new_count + ) + ), + ) + ) + + operation = self.client.update_service(request=request) + + response = operation.result() # Blocks until operation is complete + return response + + def deploy_image(self, drone_id, image): + """ + Deploys a new image to a cloud run. + + :param image: The new image to deploy. + """ + request = run_v2.UpdateServiceRequest( + service=run_v2.Service( + name=drone_id, + template=run_v2.RevisionTemplate( + containers=[ + run_v2.Container( + image=image, + ) + ] + ), + ) + ) + + operation = self.client.update_service(request=request) + + response = operation.result() # Blocks until operation is complete + return response + + +# Example usage +# adjust_cpu_ram('instance123', cpu='2 vCPUs', ram='4 GB') +# adjust_instance_count(5) +# deploy_image('new_image_version') From e79f076224669a615951e41a3402cd7eff707ef7 Mon Sep 17 00:00:00 2001 From: jason810496 <810496@email.wlsh.tyc.edu.tw> Date: Tue, 23 Jan 2024 14:58:06 +0800 Subject: [PATCH 11/44] feat : add all routes --- consumer/src/api/full.py | 20 ++++++++++++++- consumer/src/api/health.py | 4 +-- consumer/src/api/state.py | 20 ++++++++++++++- consumer/src/api/status.py | 50 +++++++++++++++++++++++++++++++++++++- consumer/src/app.py | 7 +++--- consumer/src/run.py | 1 - 6 files changed, 92 insertions(+), 10 deletions(-) diff --git a/consumer/src/api/full.py b/consumer/src/api/full.py index 44f0306..d55920a 100644 --- a/consumer/src/api/full.py +++ b/consumer/src/api/full.py @@ -2,4 +2,22 @@ from typing import List -router = APIRouter(prefix="/full", tags=["full"] ) +router = APIRouter( + prefix="/full", + tags=["Full"], +) + + +@router.get("/cpu/duration/{duration}", status_code=status.HTTP_200_OK) +async def full_cpu(cpu_rate: int, duration: int): + return {"cpu_rate": cpu_rate, "duration": duration} + + +@router.get("/mem/duration/{duration}", status_code=status.HTTP_200_OK) +async def full_cpu(mem_rate: int, duration: int): + return {"mem_rate": mem_rate, "duration": duration} + + +@router.get("/enque/{num}", status_code=status.HTTP_200_OK) +async def enque(num: int): + return {"num": num} diff --git a/consumer/src/api/health.py b/consumer/src/api/health.py index 571715e..3885f48 100644 --- a/consumer/src/api/health.py +++ b/consumer/src/api/health.py @@ -2,9 +2,9 @@ from typing import List -router = APIRouter(prefix="", tags=["Full"] ) +router = APIRouter(prefix="", tags=["Health"] ) @router.get("/", status_code=status.HTTP_200_OK) async def health(): - return {"hello": "world"} \ No newline at end of file + return {"hello": "world"} diff --git a/consumer/src/api/state.py b/consumer/src/api/state.py index 1bbf947..388153d 100644 --- a/consumer/src/api/state.py +++ b/consumer/src/api/state.py @@ -2,4 +2,22 @@ from typing import List -router = APIRouter(prefix="/state", tags=["full"] ) +router = APIRouter( + prefix="/state", + tags=["State"], +) + + +@router.get("/cpu/{rate}/duration/{duration}", status_code=status.HTTP_200_OK) +async def state_cpu(rate: str, duration: int): + return {"state": rate, "duration": duration} + + +@router.get("/mem/{rate}/duration/{duration}", status_code=status.HTTP_200_OK) +async def state_mem(rate: str, duration: int): + return {"state": rate, "duration": duration} + + +@router.get("/sleep/{duration}", status_code=status.HTTP_200_OK) +async def state_sleep(duration: int): + return {"state": "sleep", "duration": duration} diff --git a/consumer/src/api/status.py b/consumer/src/api/status.py index d603fcb..b6bcaa5 100644 --- a/consumer/src/api/status.py +++ b/consumer/src/api/status.py @@ -1,5 +1,53 @@ from fastapi import APIRouter, Depends, HTTPException, status from typing import List +# services +from services.statistics import ( + get_cpu_percent, + get_cpu_usage, + get_mem_percent, + get_mem_usage, + get_remain_count, + get_avg_exe_time, +) -router = APIRouter(prefix="/status", tags=["full"] ) +# schemas +from schema.statistics import HardwareResponse + + +router = APIRouter( + prefix="/status", tags=["Status"] +) + + +@router.get("/cpu", status_code=status.HTTP_200_OK, response_model=HardwareResponse) +async def status_cpu(): + """ + - percent: cpu usage percentage + - usage: cpu usage percentage + """ + return HardwareResponse(percent=get_cpu_percent(), usage=get_cpu_usage()) + + +@router.get("/mem", status_code=status.HTTP_200_OK, response_model=HardwareResponse) +async def status_mem(): + """ + - percent: memory usage percentage + - usage: memory usage in **GB** + """ + return HardwareResponse(percent=get_mem_percent(), usage=get_mem_usage()) + + +@router.get("/remain_count", status_code=status.HTTP_200_OK,response_model=int) +async def remain_count(): + return get_remain_count() + + +@router.get("/avg_exe_time", status_code=status.HTTP_200_OK ,response_model=float) +async def avg_exe_time(): + return get_avg_exe_time() + + +@router.get("/log", status_code=status.HTTP_200_OK) +async def log(): + return {"log": "log"} diff --git a/consumer/src/app.py b/consumer/src/app.py index 595667a..d023bd5 100644 --- a/consumer/src/app.py +++ b/consumer/src/app.py @@ -26,21 +26,20 @@ app = FastAPI( docs_url="/api/docs", openapi_url="/api/openapi.json", - redoc_url='/api/redoc', + redoc_url="/api/redoc", middleware=middlewares, ) app.include_router(health_router, prefix="") app.include_router(full_router, prefix="/api") -app.include_router(status_router, prefix="/api") app.include_router(state_router, prefix="/api") +app.include_router(status_router, prefix="/api") # add logger middleware - logger = logging.getLogger(__name__) logger.setLevel(logging.DEBUG) @@ -54,4 +53,4 @@ async def add_process_time_header(request: Request, call_next: callable): logger.info(f"{request.method} {request.url} {formatted_process_time}s") response.headers["X-Process-Time"] = formatted_process_time - return response \ No newline at end of file + return response diff --git a/consumer/src/run.py b/consumer/src/run.py index c4c4d37..b98e949 100644 --- a/consumer/src/run.py +++ b/consumer/src/run.py @@ -26,7 +26,6 @@ # for development mode load_dotenv(".env/dev.env") - uvicorn.run( "app:app", host="0.0.0.0", From 21c648851539942b67b8eb66e1ba329a84a35fe0 Mon Sep 17 00:00:00 2001 From: jason810496 <810496@email.wlsh.tyc.edu.tw> Date: Tue, 23 Jan 2024 14:58:31 +0800 Subject: [PATCH 12/44] feat : add statistics services --- consumer/src/schema/statistics.py | 6 +++++ consumer/src/services/statistics.py | 34 +++++++++++++++++++++++++++ consumer/src/state/instance.py | 2 +- consumer/src/state/models.py | 36 ++++++++++++++--------------- 4 files changed, 59 insertions(+), 19 deletions(-) create mode 100644 consumer/src/schema/statistics.py diff --git a/consumer/src/schema/statistics.py b/consumer/src/schema/statistics.py new file mode 100644 index 0000000..7de4178 --- /dev/null +++ b/consumer/src/schema/statistics.py @@ -0,0 +1,6 @@ +from pydantic import BaseModel + + +class HardwareResponse(BaseModel): + percent: float + usage: float diff --git a/consumer/src/services/statistics.py b/consumer/src/services/statistics.py index e69de29..f376ec7 100644 --- a/consumer/src/services/statistics.py +++ b/consumer/src/services/statistics.py @@ -0,0 +1,34 @@ +import os +import psutil + +from state.instance import Counter, AvgExecutionTime + + +def get_cpu_percent(): + # 1 second interval + return psutil.cpu_percent(1) + + +def get_cpu_usage(): + load1, load5, load15 = psutil.getloadavg() + cpu_usage = (load15 / os.cpu_count()) * 100 + return cpu_usage + + +def get_mem_percent(): + return psutil.virtual_memory().percent + + +def get_mem_usage(): + """ + return memory usage in GB + """ + return psutil.virtual_memory().used / (1024.0**3) + + +def get_remain_count(): + return Counter.get_count() + + +def get_avg_exe_time(): + return AvgExecutionTime.get_avg_time() diff --git a/consumer/src/state/instance.py b/consumer/src/state/instance.py index e2f7568..84b2505 100644 --- a/consumer/src/state/instance.py +++ b/consumer/src/state/instance.py @@ -1,4 +1,4 @@ -from .models import CounterModel , TotalQueryCountModel , AvgExecutionTimeModel +from .models import CounterModel, TotalQueryCountModel, AvgExecutionTimeModel Counter = CounterModel(0) TotalQueryCount = TotalQueryCountModel(0) diff --git a/consumer/src/state/models.py b/consumer/src/state/models.py index 323c594..205a108 100644 --- a/consumer/src/state/models.py +++ b/consumer/src/state/models.py @@ -1,16 +1,16 @@ import threading -''' +""" - Counter - Total Query Count - Avg Execution Time -''' +""" class CounterModel: - ''' + """ remain query count - ''' + """ def __init__(self, count): self.count = count @@ -19,24 +19,24 @@ def __init__(self, count): def get_count(self): with self.lock: return self.count - + def set_count(self, count): with self.lock: self.count = count - def decrease(self, cnt:int): + def decrease(self, cnt: int): with self.lock: self.count -= cnt - def increase(self, cnt:int): + def increase(self, cnt: int): with self.lock: self.count += cnt class TotalQueryCountModel: - ''' + """ total query count - ''' + """ def __init__(self, count): self.count = count @@ -45,20 +45,20 @@ def __init__(self, count): def get_count(self): with self.lock: return self.count - + def set_count(self, count): with self.lock: self.count = count - def increase(self, cnt:int): + def increase(self, cnt: int): with self.lock: self.count += cnt class AvgExecutionTimeModel: - ''' + """ average execution time - ''' + """ def __init__(self, avg_time): self.avg_time = avg_time @@ -67,14 +67,14 @@ def __init__(self, avg_time): def get_avg_time(self): with self.lock: return self.avg_time - + def set_avg_time(self, avg_time): with self.lock: self.avg_time = avg_time - def add_time(self, time_add:float, last_cnt:float): - ''' + def add_time(self, time_add: float, last_cnt: float): + """ avg_time = (avg_time * cnt + time_add) / (cnt + 1) - ''' + """ with self.lock: - self.avg_time = (self.avg_time * last_cnt + time_add) / (last_cnt + 1) \ No newline at end of file + self.avg_time = (self.avg_time * last_cnt + time_add) / (last_cnt + 1) From a77191f3c653c88113ba31ff395eb69f8afc51dc Mon Sep 17 00:00:00 2001 From: jason810496 <810496@email.wlsh.tyc.edu.tw> Date: Tue, 23 Jan 2024 16:10:44 +0800 Subject: [PATCH 13/44] feat : add normal behavior controller --- consumer/src/api/job.py | 55 ++++++++++++++++++++++++++ consumer/src/services/job.py | 71 ++++++++++++++++++++++++++++++++++ consumer/src/services/mock.py | 0 consumer/src/state/instance.py | 10 ++++- consumer/src/state/models.py | 38 ++++++++++++++++++ 5 files changed, 173 insertions(+), 1 deletion(-) create mode 100644 consumer/src/api/job.py create mode 100644 consumer/src/services/job.py delete mode 100644 consumer/src/services/mock.py diff --git a/consumer/src/api/job.py b/consumer/src/api/job.py new file mode 100644 index 0000000..ed69ca5 --- /dev/null +++ b/consumer/src/api/job.py @@ -0,0 +1,55 @@ +from fastapi import APIRouter, Depends, HTTPException, status, BackgroundTasks +from typing import List +from fastapi.responses import JSONResponse + +from services.job import mock_behavior, BackgoundJobClass +from state.instance import BackgroundJobSaver + +router = APIRouter(prefix="/job", tags=["Job"]) + + +@router.get("/start", status_code=201) +async def start_normal_behavior(): + print(BackgroundJobSaver.get_instance()) + + if BackgroundJobSaver.get_instance() is None: + bg_job = BackgoundJobClass() + print(bg_job) + BackgroundJobSaver.set_instance(bg_job) + return JSONResponse( + status_code=201, content={"message": "Background job started."} + ) + + return JSONResponse( + status_code=409, content={"message": "Background job already running."} + ) + + +@router.get("/stop", status_code=status.HTTP_200_OK) +async def stop_normal_behavior(): + bg_job = BackgroundJobSaver.get_instance() + if bg_job is not None: + if not bg_job.task.done(): + bg_job.task.cancel() + BackgroundJobSaver.set_instance(None) + return JSONResponse( + status_code=200, content={"message": "Background job stopped."} + ) + + return JSONResponse( + status_code=404, content={"message": "No background job running."} + ) + + +@router.get("/status", status_code=status.HTTP_200_OK) +async def status_normal_behavior(): + bg_job = BackgroundJobSaver.get_instance() + + return JSONResponse( + status_code=200, + content={ + "bg_job_class": str(bg_job), + "bg_job_task": str(bg_job.task) if bg_job is not None else None, + "running": bg_job is not None, + }, + ) diff --git a/consumer/src/services/job.py b/consumer/src/services/job.py new file mode 100644 index 0000000..79d55d1 --- /dev/null +++ b/consumer/src/services/job.py @@ -0,0 +1,71 @@ +import random +import time +import threading +import asyncio + +from state.instance import Sleep, Counter, TotalQueryCount, AvgExecutionTime + +from contextlib import asynccontextmanager +from fastapi import FastAPI, BackgroundTasks + + +def check_enque(): + return random.randint(0, 1) + + +def get_enque_num(): + return random.randint(1, 100) + + +def enqueue(num: int): + Counter.increase(num) + TotalQueryCount.increase(num) + AvgExecutionTime.add_time(random.randint(1, 100), TotalQueryCount.get_count()) + + +def mock_behavior(): + while True: + if Sleep.check_sleep_time(): + sleep = Sleep.ack_sleep_time() + print(f"sleep {sleep} seconds") + time.sleep(sleep) + continue + + if check_enque(): + current_enque_num = get_enque_num() + print(f"enque {current_enque_num}") + enqueue(current_enque_num) + time.sleep(0.1) + else: + print("no consume") + + +@asynccontextmanager +async def backgound_mock_behavior(app: FastAPI, background_tasks: BackgroundTasks): + print("start background task") + background_tasks.add_task(mock_behavior) + yield + + print("stop background task") + + +# never stop +async def background_task_exec(*args, **kwargs): + while True: + if Sleep.check_sleep_time(): + sleep = Sleep.ack_sleep_time() + print(f"sleep {sleep} seconds") + await asyncio.sleep(sleep) + + if check_enque(): + current_enque_num = get_enque_num() + print(f"enque {current_enque_num}") + enqueue(current_enque_num) + await asyncio.sleep(0.1) + else: + print("no consume") + + +class BackgoundJobClass: + def __init__(self, *args, **kwargs) -> None: + self.task = asyncio.create_task(background_task_exec(*args, **kwargs)) diff --git a/consumer/src/services/mock.py b/consumer/src/services/mock.py deleted file mode 100644 index e69de29..0000000 diff --git a/consumer/src/state/instance.py b/consumer/src/state/instance.py index 84b2505..0cd82b8 100644 --- a/consumer/src/state/instance.py +++ b/consumer/src/state/instance.py @@ -1,5 +1,13 @@ -from .models import CounterModel, TotalQueryCountModel, AvgExecutionTimeModel +from .models import ( + CounterModel, + TotalQueryCountModel, + AvgExecutionTimeModel, + SleepModel, + BackgroudJobModel, +) Counter = CounterModel(0) TotalQueryCount = TotalQueryCountModel(0) AvgExecutionTime = AvgExecutionTimeModel(0.0) +Sleep = SleepModel(0.0) +BackgroundJobSaver = BackgroudJobModel() diff --git a/consumer/src/state/models.py b/consumer/src/state/models.py index 205a108..a9e6677 100644 --- a/consumer/src/state/models.py +++ b/consumer/src/state/models.py @@ -78,3 +78,41 @@ def add_time(self, time_add: float, last_cnt: float): """ with self.lock: self.avg_time = (self.avg_time * last_cnt + time_add) / (last_cnt + 1) + + +class SleepModel: + """ + - set sleep time + """ + + def __init__(self, sleep_time): + self.sleep_time = sleep_time + self.lock = threading.Lock() + + def check_sleep_time(self) -> bool: + with self.lock: + return self.sleep_time > 0 + + def ack_sleep_time(self): + with self.lock: + sleep = self.sleep_time + self.sleep_time = 0 + return sleep + + def set_sleep_time(self, sleep_time): + with self.lock: + self.sleep_time = sleep_time + + +class BackgroudJobModel: + def __init__(self): + self.job_class_instance = None + self.lock = threading.Lock() + + def set_instance(self, instance): + with self.lock: + self.job_class_instance = instance + + def get_instance(self): + with self.lock: + return self.job_class_instance From 46dff87167dc4bf8ce695da2022d0213ca31868a Mon Sep 17 00:00:00 2001 From: jason810496 <810496@email.wlsh.tyc.edu.tw> Date: Tue, 23 Jan 2024 16:27:32 +0800 Subject: [PATCH 14/44] refactor : rm unused code for job service --- consumer/src/api/health.py | 6 ++-- consumer/src/api/job.py | 14 ++++----- consumer/src/api/status.py | 8 ++--- consumer/src/app.py | 21 ++++++++----- consumer/src/services/job.py | 57 +++++++++++++++--------------------- 5 files changed, 46 insertions(+), 60 deletions(-) diff --git a/consumer/src/api/health.py b/consumer/src/api/health.py index 3885f48..4ad16d3 100644 --- a/consumer/src/api/health.py +++ b/consumer/src/api/health.py @@ -1,8 +1,6 @@ -from fastapi import APIRouter, Depends, HTTPException, status -from typing import List +from fastapi import APIRouter, status - -router = APIRouter(prefix="", tags=["Health"] ) +router = APIRouter(prefix="", tags=["Health"]) @router.get("/", status_code=status.HTTP_200_OK) diff --git a/consumer/src/api/job.py b/consumer/src/api/job.py index ed69ca5..1e32494 100644 --- a/consumer/src/api/job.py +++ b/consumer/src/api/job.py @@ -1,8 +1,7 @@ -from fastapi import APIRouter, Depends, HTTPException, status, BackgroundTasks -from typing import List +from fastapi import APIRouter, status from fastapi.responses import JSONResponse -from services.job import mock_behavior, BackgoundJobClass +from services.job import MockBehaviorBackgroundClass from state.instance import BackgroundJobSaver router = APIRouter(prefix="/job", tags=["Job"]) @@ -10,11 +9,8 @@ @router.get("/start", status_code=201) async def start_normal_behavior(): - print(BackgroundJobSaver.get_instance()) - if BackgroundJobSaver.get_instance() is None: - bg_job = BackgoundJobClass() - print(bg_job) + bg_job = MockBehaviorBackgroundClass() BackgroundJobSaver.set_instance(bg_job) return JSONResponse( status_code=201, content={"message": "Background job started."} @@ -27,7 +23,7 @@ async def start_normal_behavior(): @router.get("/stop", status_code=status.HTTP_200_OK) async def stop_normal_behavior(): - bg_job = BackgroundJobSaver.get_instance() + bg_job: MockBehaviorBackgroundClass = BackgroundJobSaver.get_instance() if bg_job is not None: if not bg_job.task.done(): bg_job.task.cancel() @@ -43,7 +39,7 @@ async def stop_normal_behavior(): @router.get("/status", status_code=status.HTTP_200_OK) async def status_normal_behavior(): - bg_job = BackgroundJobSaver.get_instance() + bg_job: MockBehaviorBackgroundClass = BackgroundJobSaver.get_instance() return JSONResponse( status_code=200, diff --git a/consumer/src/api/status.py b/consumer/src/api/status.py index b6bcaa5..9795382 100644 --- a/consumer/src/api/status.py +++ b/consumer/src/api/status.py @@ -15,9 +15,7 @@ from schema.statistics import HardwareResponse -router = APIRouter( - prefix="/status", tags=["Status"] -) +router = APIRouter(prefix="/status", tags=["Status"]) @router.get("/cpu", status_code=status.HTTP_200_OK, response_model=HardwareResponse) @@ -38,12 +36,12 @@ async def status_mem(): return HardwareResponse(percent=get_mem_percent(), usage=get_mem_usage()) -@router.get("/remain_count", status_code=status.HTTP_200_OK,response_model=int) +@router.get("/remain_count", status_code=status.HTTP_200_OK, response_model=int) async def remain_count(): return get_remain_count() -@router.get("/avg_exe_time", status_code=status.HTTP_200_OK ,response_model=float) +@router.get("/avg_exe_time", status_code=status.HTTP_200_OK, response_model=float) async def avg_exe_time(): return get_avg_exe_time() diff --git a/consumer/src/app.py b/consumer/src/app.py index d023bd5..0988c83 100644 --- a/consumer/src/app.py +++ b/consumer/src/app.py @@ -11,6 +11,10 @@ from api.health import router as health_router from api.state import router as state_router from api.status import router as status_router +from api.job import router as job_router + +# backgound livespan task +# from services.job import backgound_mock_behavior middlewares = [ @@ -28,18 +32,12 @@ openapi_url="/api/openapi.json", redoc_url="/api/redoc", middleware=middlewares, + # lifespan=backgound_mock_behavior, ) -app.include_router(health_router, prefix="") -app.include_router(full_router, prefix="/api") -app.include_router(state_router, prefix="/api") -app.include_router(status_router, prefix="/api") - - # add logger middleware - logger = logging.getLogger(__name__) logger.setLevel(logging.DEBUG) @@ -52,5 +50,12 @@ async def add_process_time_header(request: Request, call_next: callable): formatted_process_time = "{0:.4f}".format(process_time) logger.info(f"{request.method} {request.url} {formatted_process_time}s") response.headers["X-Process-Time"] = formatted_process_time - return response + + +# include routers +app.include_router(health_router, prefix="") +app.include_router(full_router, prefix="/api") +app.include_router(state_router, prefix="/api") +app.include_router(status_router, prefix="/api") +app.include_router(job_router, prefix="/api") diff --git a/consumer/src/services/job.py b/consumer/src/services/job.py index 79d55d1..af21d93 100644 --- a/consumer/src/services/job.py +++ b/consumer/src/services/job.py @@ -1,56 +1,34 @@ import random -import time -import threading import asyncio from state.instance import Sleep, Counter, TotalQueryCount, AvgExecutionTime -from contextlib import asynccontextmanager -from fastapi import FastAPI, BackgroundTasks - def check_enque(): return random.randint(0, 1) +def check_deque(): + return random.randint(0, 1) + def get_enque_num(): return random.randint(1, 100) +def get_deque_num(): + return random.randint(1, 100) + def enqueue(num: int): Counter.increase(num) TotalQueryCount.increase(num) AvgExecutionTime.add_time(random.randint(1, 100), TotalQueryCount.get_count()) - -def mock_behavior(): - while True: - if Sleep.check_sleep_time(): - sleep = Sleep.ack_sleep_time() - print(f"sleep {sleep} seconds") - time.sleep(sleep) - continue - - if check_enque(): - current_enque_num = get_enque_num() - print(f"enque {current_enque_num}") - enqueue(current_enque_num) - time.sleep(0.1) - else: - print("no consume") - - -@asynccontextmanager -async def backgound_mock_behavior(app: FastAPI, background_tasks: BackgroundTasks): - print("start background task") - background_tasks.add_task(mock_behavior) - yield - - print("stop background task") +def dequeue(num: int): + Counter.decrease(num) # never stop -async def background_task_exec(*args, **kwargs): +async def mock_behavior_task(*args, **kwargs): while True: if Sleep.check_sleep_time(): sleep = Sleep.ack_sleep_time() @@ -63,9 +41,20 @@ async def background_task_exec(*args, **kwargs): enqueue(current_enque_num) await asyncio.sleep(0.1) else: - print("no consume") + print("no enque") + + if check_deque(): + current_deque_num = get_deque_num() + remain = Counter.get_count() + current_deque_num = min(current_deque_num, remain) + + print(f"deque {current_deque_num}") + dequeue(current_deque_num) + await asyncio.sleep(0.1) + else: + print("no deque") -class BackgoundJobClass: +class MockBehaviorBackgroundClass: def __init__(self, *args, **kwargs) -> None: - self.task = asyncio.create_task(background_task_exec(*args, **kwargs)) + self.task = asyncio.create_task(mock_behavior_task(*args, **kwargs)) From 2ccf23ad4124d79ccfd30a3b57e323c124592ce5 Mon Sep 17 00:00:00 2001 From: jason810496 <810496@email.wlsh.tyc.edu.tw> Date: Tue, 23 Jan 2024 17:38:10 +0800 Subject: [PATCH 15/44] add : settings config --- consumer/src/app.py | 5 +++-- consumer/src/core/__init__.py | 0 consumer/src/core/config.py | 19 +++++++++++++++++++ 3 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 consumer/src/core/__init__.py create mode 100644 consumer/src/core/config.py diff --git a/consumer/src/app.py b/consumer/src/app.py index 0988c83..d92958d 100644 --- a/consumer/src/app.py +++ b/consumer/src/app.py @@ -55,7 +55,8 @@ async def add_process_time_header(request: Request, call_next: callable): # include routers app.include_router(health_router, prefix="") +app.include_router(job_router, prefix="/api") app.include_router(full_router, prefix="/api") -app.include_router(state_router, prefix="/api") app.include_router(status_router, prefix="/api") -app.include_router(job_router, prefix="/api") +app.include_router(state_router, prefix="/api") + diff --git a/consumer/src/core/__init__.py b/consumer/src/core/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/consumer/src/core/config.py b/consumer/src/core/config.py new file mode 100644 index 0000000..8a2cb7c --- /dev/null +++ b/consumer/src/core/config.py @@ -0,0 +1,19 @@ +import os +from functools import lru_cache + + +class Settings(): + full_cpu_process_count: int = os.getenv("FULL_CPU_PROCESS_COUNT", 4) + full_ram_byte: int = os.getenv("FULL_RAM_BYTE", 1024*1024*1024*10) + job_interval: int = os.getenv("JOB_INTERVAL", 1) + enqueue_upper_bound: int = os.getenv("ENQUEUE_UPPER_BOUND", 100) + enqueue_lower_bound: int = os.getenv("ENQUEUE_LOWER_BOUND", 1) + dequeue_upper_bound: int = os.getenv("DEQUEUE_UPPER_BOUND", 100) + dequeue_lower_bound: int = os.getenv("DEQUEUE_LOWER_BOUND", 1) + execute_upper_bound: int = os.getenv("EXECUTE_UPPER_BOUND", 100) + execute_lower_bound: int = os.getenv("EXECUTE_LOWER_BOUND", 1) + + +@lru_cache() +def get_settings(): + return Settings() \ No newline at end of file From 35ad4eb137ee9b46dbd66455658be819c304fc39 Mon Sep 17 00:00:00 2001 From: jason810496 <810496@email.wlsh.tyc.edu.tw> Date: Tue, 23 Jan 2024 17:38:37 +0800 Subject: [PATCH 16/44] feat: full , status , job - full : full resource in specific time - status : get current status of resource - job : background normal behavior stimate controller --- consumer/src/api/full.py | 31 ++++++++++++---- consumer/src/api/state.py | 4 ++- consumer/src/api/status.py | 23 ++++++++++-- consumer/src/schema/statistics.py | 7 ++++ consumer/src/services/cpu.py | 0 consumer/src/services/full.py | 60 +++++++++++++++++++++++++++++++ consumer/src/services/job.py | 14 ++++++-- consumer/src/services/ram.py | 0 8 files changed, 126 insertions(+), 13 deletions(-) delete mode 100644 consumer/src/services/cpu.py create mode 100644 consumer/src/services/full.py delete mode 100644 consumer/src/services/ram.py diff --git a/consumer/src/api/full.py b/consumer/src/api/full.py index d55920a..6e0b85a 100644 --- a/consumer/src/api/full.py +++ b/consumer/src/api/full.py @@ -1,6 +1,10 @@ -from fastapi import APIRouter, Depends, HTTPException, status +from fastapi import APIRouter, status, BackgroundTasks +from fastapi.responses import JSONResponse from typing import List +from services.full import create_full_cpu_process, create_full_rem_process +from services.job import enqueue as enqueue_task + router = APIRouter( prefix="/full", @@ -9,15 +13,28 @@ @router.get("/cpu/duration/{duration}", status_code=status.HTTP_200_OK) -async def full_cpu(cpu_rate: int, duration: int): - return {"cpu_rate": cpu_rate, "duration": duration} +async def full_cpu(duration: int, background_tasks: BackgroundTasks): + background_tasks.add_task(create_full_cpu_process, duration) + return JSONResponse( + status_code=status.HTTP_200_OK, + content={"full_type": "cpu", "duration": duration, "message": f"full cpu in {duration} seconds"}, + ) -@router.get("/mem/duration/{duration}", status_code=status.HTTP_200_OK) -async def full_cpu(mem_rate: int, duration: int): - return {"mem_rate": mem_rate, "duration": duration} +@router.get("/ram/duration/{duration}", status_code=status.HTTP_200_OK) +async def full_cpu(duration: int, background_tasks: BackgroundTasks): + background_tasks.add_task(create_full_rem_process, duration) + return JSONResponse( + status_code=status.HTTP_200_OK, + content={"full_type": "mem", "duration": duration, "message": f"full memory in {duration} seconds"}, + ) @router.get("/enque/{num}", status_code=status.HTTP_200_OK) async def enque(num: int): - return {"num": num} + enqueue_task(num) + + return JSONResponse( + status_code=status.HTTP_200_OK, + content={"message": f"enque {num}"}, + ) diff --git a/consumer/src/api/state.py b/consumer/src/api/state.py index 388153d..3d62f12 100644 --- a/consumer/src/api/state.py +++ b/consumer/src/api/state.py @@ -2,9 +2,11 @@ from typing import List +# archive router = APIRouter( prefix="/state", tags=["State"], + deprecated=True, ) @@ -13,7 +15,7 @@ async def state_cpu(rate: str, duration: int): return {"state": rate, "duration": duration} -@router.get("/mem/{rate}/duration/{duration}", status_code=status.HTTP_200_OK) +@router.get("/ram/{rate}/duration/{duration}", status_code=status.HTTP_200_OK) async def state_mem(rate: str, duration: int): return {"state": rate, "duration": duration} diff --git a/consumer/src/api/status.py b/consumer/src/api/status.py index 9795382..39818f0 100644 --- a/consumer/src/api/status.py +++ b/consumer/src/api/status.py @@ -12,11 +12,30 @@ ) # schemas -from schema.statistics import HardwareResponse +from schema.statistics import HardwareResponse , StatisticsResponse router = APIRouter(prefix="/status", tags=["Status"]) +@router.get("", status_code=status.HTTP_200_OK, response_model=StatisticsResponse) +async def all_status(): + """ + - cpu: cpu status + - percent: cpu usage percentage + - usage: cpu usage percentage + - mem: memory status + - percent: memory usage percentage + - usage: memory usage in **GB** + - remain_count: remain query count + - avg_exe_time: average execution time + """ + return StatisticsResponse( + cpu=HardwareResponse(percent=get_cpu_percent(), usage=get_cpu_usage()), + mem=HardwareResponse(percent=get_mem_percent(), usage=get_mem_usage()), + remain_count=get_remain_count(), + avg_exe_time=get_avg_exe_time(), + ) + @router.get("/cpu", status_code=status.HTTP_200_OK, response_model=HardwareResponse) async def status_cpu(): @@ -27,7 +46,7 @@ async def status_cpu(): return HardwareResponse(percent=get_cpu_percent(), usage=get_cpu_usage()) -@router.get("/mem", status_code=status.HTTP_200_OK, response_model=HardwareResponse) +@router.get("/ram", status_code=status.HTTP_200_OK, response_model=HardwareResponse) async def status_mem(): """ - percent: memory usage percentage diff --git a/consumer/src/schema/statistics.py b/consumer/src/schema/statistics.py index 7de4178..de22493 100644 --- a/consumer/src/schema/statistics.py +++ b/consumer/src/schema/statistics.py @@ -4,3 +4,10 @@ class HardwareResponse(BaseModel): percent: float usage: float + + +class StatisticsResponse(BaseModel): + cpu: HardwareResponse + mem: HardwareResponse + remain_count: int + avg_exe_time: float \ No newline at end of file diff --git a/consumer/src/services/cpu.py b/consumer/src/services/cpu.py deleted file mode 100644 index e69de29..0000000 diff --git a/consumer/src/services/full.py b/consumer/src/services/full.py new file mode 100644 index 0000000..c3531bf --- /dev/null +++ b/consumer/src/services/full.py @@ -0,0 +1,60 @@ +import time +import multiprocessing +from core.config import get_settings + +settings = get_settings() + +def full_cpu_in_duration(duration: int): + now = time.time() + print("time", now) + print(f"full cpu in {duration} seconds") + + i=0 + while True: + if time.time() > now + duration: + break + i += 1 + print("time", time.time()) + +def create_full_cpu_process(duration: int): + ''' + create 4 process to full cpu in duration seconds + ''' + + for _ in range(settings.full_cpu_process_count): + p = multiprocessing.Process(target=full_cpu_in_duration, args=(duration,)) + p.start() + + +""" +refence: +https://stackoverflow.com/questions/6317818/eat-memory-using-python +""" +def full_ram_in_duration(duration: int): + now = time.time() + print("time", now) + print(f"full ram in {duration} seconds") + + cnt = 0 + a = bytearray(settings.full_ram_byte) + while True: + if time.time() > now + duration: + break + + try: + a = a + bytearray(settings.full_ram_byte) + cnt += 1 + except MemoryError: + break + + if time.time() < now + duration: + time.sleep(now + duration - time.time()) + + # in GB + print(f"Allocated {cnt} GB in {duration} seconds") + print("time", time.time()) + +def create_full_rem_process(duration: int): + p = multiprocessing.Process(target=full_ram_in_duration, args=(duration,)) + p.start() + return p \ No newline at end of file diff --git a/consumer/src/services/job.py b/consumer/src/services/job.py index af21d93..f46f5c4 100644 --- a/consumer/src/services/job.py +++ b/consumer/src/services/job.py @@ -1,27 +1,33 @@ import random import asyncio +from core.config import get_settings from state.instance import Sleep, Counter, TotalQueryCount, AvgExecutionTime +settings = get_settings() def check_enque(): return random.randint(0, 1) + def check_deque(): return random.randint(0, 1) def get_enque_num(): - return random.randint(1, 100) + return random.randint(settings.enqueue_lower_bound, settings.enqueue_upper_bound) + def get_deque_num(): - return random.randint(1, 100) + return random.randint(settings.dequeue_lower_bound, settings.dequeue_upper_bound) def enqueue(num: int): Counter.increase(num) TotalQueryCount.increase(num) - AvgExecutionTime.add_time(random.randint(1, 100), TotalQueryCount.get_count()) + execution_time = random.randint(settings.execute_lower_bound, settings.execute_upper_bound) + AvgExecutionTime.add_time(execution_time, TotalQueryCount.get_count()) + def dequeue(num: int): Counter.decrease(num) @@ -54,6 +60,8 @@ async def mock_behavior_task(*args, **kwargs): else: print("no deque") + await asyncio.sleep(settings.job_interval) + class MockBehaviorBackgroundClass: def __init__(self, *args, **kwargs) -> None: diff --git a/consumer/src/services/ram.py b/consumer/src/services/ram.py deleted file mode 100644 index e69de29..0000000 From a7e4f393356f864ed260ea7a1caf3246281505cc Mon Sep 17 00:00:00 2001 From: jason810496 <810496@email.wlsh.tyc.edu.tw> Date: Tue, 23 Jan 2024 21:29:30 +0800 Subject: [PATCH 17/44] ci : fix consumer docker ci action --- .github/workflows/consumer-docker.yaml | 4 +- consumer/.dockerignore | 97 ++++++++++++++++++++++++++ consumer/Dockerfile | 18 +++++ consumer/Makefile | 11 +++ consumer/requirements.txt | 26 +++++++ 5 files changed, 153 insertions(+), 3 deletions(-) create mode 100644 consumer/.dockerignore create mode 100644 consumer/Makefile create mode 100644 consumer/requirements.txt diff --git a/.github/workflows/consumer-docker.yaml b/.github/workflows/consumer-docker.yaml index e4515a8..93cbcd1 100644 --- a/.github/workflows/consumer-docker.yaml +++ b/.github/workflows/consumer-docker.yaml @@ -8,8 +8,7 @@ on: env: IMAGE_NAME: tsmc-hackathon-2024-consumer - DOCKER_FILE_PATH: ./backend-mock # '.' for root directory - DOCKER_FILE_NAME: Dockerfile # change to your Dockerfile name + DOCKER_FILE_PATH: ./consumer # '.' for root directory jobs: docker: @@ -32,7 +31,6 @@ jobs: uses: docker/build-push-action@v4 with: context: ${{ env.DOCKER_FILE_PATH }} - # file: ${{ env.DOCKER_FILE_NAME }} platforms: linux/amd64,linux/arm64 tags: docker.io/${{ secrets.DOCKER_USERNAME }}/${{ env.IMAGE_NAME }}:latest outputs: type=oci,dest=/tmp/image.tar diff --git a/consumer/.dockerignore b/consumer/.dockerignore new file mode 100644 index 0000000..2ea8c25 --- /dev/null +++ b/consumer/.dockerignore @@ -0,0 +1,97 @@ +# Git +.git +.gitignore + +# CI +.codeclimate.yml +.travis.yml +.taskcluster.yml + +# Docker +docker-compose.yml +.docker +.dockerignore + +# Byte-compiled / optimized / DLL files +__pycache__/ +*/__pycache__/ +*/*/__pycache__/ +*/*/*/__pycache__/ +*.py[cod] +*/*.py[cod] +*/*/*.py[cod] +*/*/*/*.py[cod] + +# C extensions +*.so + +# Distribution / packaging +.Python +env/ +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +*.egg-info/ +.installed.cfg +*.egg + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.cache +nosetests.xml +coverage.xml + +# Translations +*.mo +*.pot + +# Django stuff: +*.log + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Virtual environment +.env/ +.venv/ +venv/ + +# PyCharm +.idea + +# Python mode for VIM +.ropeproject +*/.ropeproject +*/*/.ropeproject +*/*/*/.ropeproject + +# Vim swap files +*.swp +*/*.swp +*/*/*.swp +*/*/*/*.swp + +# test folder +test/ \ No newline at end of file diff --git a/consumer/Dockerfile b/consumer/Dockerfile index e69de29..d9c75a7 100644 --- a/consumer/Dockerfile +++ b/consumer/Dockerfile @@ -0,0 +1,18 @@ +FROM python:3.11-slim-buster + +# Set the working directory to /app +WORKDIR /app + +# Copy the current directory contents into the container at /app +COPY ./requirements.txt /app/requirements.txt + +# Install any needed packages specified in requirements.txt +RUN pip install --no-cache-dir -r requirements.txt + +COPY . /app/ + +# Make port 80 available to the world outside this container +EXPOSE 80 + +# Run app.py when the container launches +CMD ["python", "src/run.py", "--dev"] diff --git a/consumer/Makefile b/consumer/Makefile new file mode 100644 index 0000000..d9602d1 --- /dev/null +++ b/consumer/Makefile @@ -0,0 +1,11 @@ +run: + python3 src/run.py --dev + +build-local: + docker build -t consumer . + +build-linux: + docker build -t consumer --platform linux/amd64 . + +run-docker: + docker run --name consumer -d consumer diff --git a/consumer/requirements.txt b/consumer/requirements.txt new file mode 100644 index 0000000..e754613 --- /dev/null +++ b/consumer/requirements.txt @@ -0,0 +1,26 @@ +annotated-types==0.6.0 ; python_version >= "3.11" and python_version < "4.0" +anyio==4.2.0 ; python_version >= "3.11" and python_version < "4.0" +cfgv==3.4.0 ; python_version >= "3.11" and python_version < "4.0" +click==8.1.7 ; python_version >= "3.11" and python_version < "4.0" +colorama==0.4.6 ; python_version >= "3.11" and python_version < "4.0" and platform_system == "Windows" +distlib==0.3.8 ; python_version >= "3.11" and python_version < "4.0" +fastapi==0.109.0 ; python_version >= "3.11" and python_version < "4.0" +filelock==3.13.1 ; python_version >= "3.11" and python_version < "4.0" +h11==0.14.0 ; python_version >= "3.11" and python_version < "4.0" +identify==2.5.33 ; python_version >= "3.11" and python_version < "4.0" +idna==3.6 ; python_version >= "3.11" and python_version < "4.0" +nodeenv==1.8.0 ; python_version >= "3.11" and python_version < "4.0" +platformdirs==4.1.0 ; python_version >= "3.11" and python_version < "4.0" +pre-commit==3.6.0 ; python_version >= "3.11" and python_version < "4.0" +psutil==5.9.8 ; python_version >= "3.11" and python_version < "4.0" +pydantic-core==2.14.6 ; python_version >= "3.11" and python_version < "4.0" +pydantic==2.5.3 ; python_version >= "3.11" and python_version < "4.0" +python-dotenv==1.0.0 ; python_version >= "3.11" and python_version < "4.0" +pyyaml==6.0.1 ; python_version >= "3.11" and python_version < "4.0" +ruff==0.1.14 ; python_version >= "3.11" and python_version < "4.0" +setuptools==69.0.3 ; python_version >= "3.11" and python_version < "4.0" +sniffio==1.3.0 ; python_version >= "3.11" and python_version < "4.0" +starlette==0.35.1 ; python_version >= "3.11" and python_version < "4.0" +typing-extensions==4.9.0 ; python_version >= "3.11" and python_version < "4.0" +uvicorn==0.27.0 ; python_version >= "3.11" and python_version < "4.0" +virtualenv==20.25.0 ; python_version >= "3.11" and python_version < "4.0" From 10a8c64f529b2ab828e622656e40ef55652b9bfa Mon Sep 17 00:00:00 2001 From: jason810496 <810496@email.wlsh.tyc.edu.tw> Date: Tue, 23 Jan 2024 21:29:50 +0800 Subject: [PATCH 18/44] ci : fix bandit action check scope --- .github/workflows/bandit-action.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/bandit-action.yaml b/.github/workflows/bandit-action.yaml index c49d956..6e3b224 100644 --- a/.github/workflows/bandit-action.yaml +++ b/.github/workflows/bandit-action.yaml @@ -5,6 +5,8 @@ on: branches: - main - dev + - feature/** + - feat/** jobs: test: From 4eeb5ef8f633893230b4a74aac8efdf6d01cd926 Mon Sep 17 00:00:00 2001 From: jason810496 <810496@email.wlsh.tyc.edu.tw> Date: Tue, 23 Jan 2024 21:30:17 +0800 Subject: [PATCH 19/44] refactor : fix consumer details --- consumer/src/api/job.py | 14 +++++++++++++- consumer/src/core/config.py | 2 +- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/consumer/src/api/job.py b/consumer/src/api/job.py index 1e32494..b6d413a 100644 --- a/consumer/src/api/job.py +++ b/consumer/src/api/job.py @@ -2,7 +2,7 @@ from fastapi.responses import JSONResponse from services.job import MockBehaviorBackgroundClass -from state.instance import BackgroundJobSaver +from state.instance import BackgroundJobSaver , Sleep router = APIRouter(prefix="/job", tags=["Job"]) @@ -49,3 +49,15 @@ async def status_normal_behavior(): "running": bg_job is not None, }, ) + +@router.get("/sleep/{seconds}", status_code=status.HTTP_200_OK) +async def sleep(seconds: int): + + Sleep.set_sleep_time(seconds) + + return JSONResponse( + status_code=200, + content={ + "message": f"Sleep time set to {seconds} seconds." + } + ) \ No newline at end of file diff --git a/consumer/src/core/config.py b/consumer/src/core/config.py index 8a2cb7c..51ef575 100644 --- a/consumer/src/core/config.py +++ b/consumer/src/core/config.py @@ -11,7 +11,7 @@ class Settings(): dequeue_upper_bound: int = os.getenv("DEQUEUE_UPPER_BOUND", 100) dequeue_lower_bound: int = os.getenv("DEQUEUE_LOWER_BOUND", 1) execute_upper_bound: int = os.getenv("EXECUTE_UPPER_BOUND", 100) - execute_lower_bound: int = os.getenv("EXECUTE_LOWER_BOUND", 1) + execute_lower_bound: int = os.getenv("EXECUTE_LOWER_BOUND", 10) @lru_cache() From 122dd623ac0f5c3cb6c3420abc9ce0c618307fe8 Mon Sep 17 00:00:00 2001 From: jason810496 <810496@email.wlsh.tyc.edu.tw> Date: Wed, 24 Jan 2024 00:00:00 +0800 Subject: [PATCH 20/44] feat : add log service --- consumer/Dockerfile | 5 +++ consumer/Makefile | 3 ++ consumer/src/api/full.py | 12 ++++++-- consumer/src/api/health.py | 8 +++-- consumer/src/api/job.py | 11 +++---- consumer/src/api/status.py | 3 +- consumer/src/app.py | 1 - consumer/src/core/config.py | 27 +++++++++------- consumer/src/schema/statistics.py | 2 +- consumer/src/services/full.py | 17 +++++++---- consumer/src/services/job.py | 5 ++- consumer/src/services/log.py | 51 +++++++++++++++++++++++++++++++ 12 files changed, 112 insertions(+), 33 deletions(-) create mode 100644 consumer/src/services/log.py diff --git a/consumer/Dockerfile b/consumer/Dockerfile index d9c75a7..e8025f4 100644 --- a/consumer/Dockerfile +++ b/consumer/Dockerfile @@ -6,6 +6,11 @@ WORKDIR /app # Copy the current directory contents into the container at /app COPY ./requirements.txt /app/requirements.txt +RUN apt-get update && apt-get install -y \ + gcc \ + python3-dev \ + && rm -rf /var/lib/apt/lists/* + # Install any needed packages specified in requirements.txt RUN pip install --no-cache-dir -r requirements.txt diff --git a/consumer/Makefile b/consumer/Makefile index d9602d1..bb7ea84 100644 --- a/consumer/Makefile +++ b/consumer/Makefile @@ -9,3 +9,6 @@ build-linux: run-docker: docker run --name consumer -d consumer + + +.PHONY: run build-local build-linux run-docker \ No newline at end of file diff --git a/consumer/src/api/full.py b/consumer/src/api/full.py index 6e0b85a..014d9b1 100644 --- a/consumer/src/api/full.py +++ b/consumer/src/api/full.py @@ -17,7 +17,11 @@ async def full_cpu(duration: int, background_tasks: BackgroundTasks): background_tasks.add_task(create_full_cpu_process, duration) return JSONResponse( status_code=status.HTTP_200_OK, - content={"full_type": "cpu", "duration": duration, "message": f"full cpu in {duration} seconds"}, + content={ + "full_type": "cpu", + "duration": duration, + "message": f"full cpu in {duration} seconds", + }, ) @@ -26,7 +30,11 @@ async def full_cpu(duration: int, background_tasks: BackgroundTasks): background_tasks.add_task(create_full_rem_process, duration) return JSONResponse( status_code=status.HTTP_200_OK, - content={"full_type": "mem", "duration": duration, "message": f"full memory in {duration} seconds"}, + content={ + "full_type": "mem", + "duration": duration, + "message": f"full memory in {duration} seconds", + }, ) diff --git a/consumer/src/api/health.py b/consumer/src/api/health.py index 4ad16d3..9c415fc 100644 --- a/consumer/src/api/health.py +++ b/consumer/src/api/health.py @@ -1,8 +1,10 @@ -from fastapi import APIRouter, status +from fastapi import APIRouter, status, BackgroundTasks +from services.log import LoggingBackgroundClass router = APIRouter(prefix="", tags=["Health"]) @router.get("/", status_code=status.HTTP_200_OK) -async def health(): - return {"hello": "world"} +async def health(backgound_tasks: BackgroundTasks): + LoggingBackgroundClass() + return {"health": "ok"} diff --git a/consumer/src/api/job.py b/consumer/src/api/job.py index b6d413a..2a72bbd 100644 --- a/consumer/src/api/job.py +++ b/consumer/src/api/job.py @@ -2,7 +2,7 @@ from fastapi.responses import JSONResponse from services.job import MockBehaviorBackgroundClass -from state.instance import BackgroundJobSaver , Sleep +from state.instance import BackgroundJobSaver, Sleep router = APIRouter(prefix="/job", tags=["Job"]) @@ -50,14 +50,11 @@ async def status_normal_behavior(): }, ) + @router.get("/sleep/{seconds}", status_code=status.HTTP_200_OK) async def sleep(seconds: int): - Sleep.set_sleep_time(seconds) return JSONResponse( - status_code=200, - content={ - "message": f"Sleep time set to {seconds} seconds." - } - ) \ No newline at end of file + status_code=200, content={"message": f"Sleep time set to {seconds} seconds."} + ) diff --git a/consumer/src/api/status.py b/consumer/src/api/status.py index 39818f0..ae627a3 100644 --- a/consumer/src/api/status.py +++ b/consumer/src/api/status.py @@ -12,11 +12,12 @@ ) # schemas -from schema.statistics import HardwareResponse , StatisticsResponse +from schema.statistics import HardwareResponse, StatisticsResponse router = APIRouter(prefix="/status", tags=["Status"]) + @router.get("", status_code=status.HTTP_200_OK, response_model=StatisticsResponse) async def all_status(): """ diff --git a/consumer/src/app.py b/consumer/src/app.py index d92958d..8a9a47b 100644 --- a/consumer/src/app.py +++ b/consumer/src/app.py @@ -59,4 +59,3 @@ async def add_process_time_header(request: Request, call_next: callable): app.include_router(full_router, prefix="/api") app.include_router(status_router, prefix="/api") app.include_router(state_router, prefix="/api") - diff --git a/consumer/src/core/config.py b/consumer/src/core/config.py index 51ef575..98f050a 100644 --- a/consumer/src/core/config.py +++ b/consumer/src/core/config.py @@ -2,18 +2,23 @@ from functools import lru_cache -class Settings(): - full_cpu_process_count: int = os.getenv("FULL_CPU_PROCESS_COUNT", 4) - full_ram_byte: int = os.getenv("FULL_RAM_BYTE", 1024*1024*1024*10) - job_interval: int = os.getenv("JOB_INTERVAL", 1) - enqueue_upper_bound: int = os.getenv("ENQUEUE_UPPER_BOUND", 100) - enqueue_lower_bound: int = os.getenv("ENQUEUE_LOWER_BOUND", 1) - dequeue_upper_bound: int = os.getenv("DEQUEUE_UPPER_BOUND", 100) - dequeue_lower_bound: int = os.getenv("DEQUEUE_LOWER_BOUND", 1) - execute_upper_bound: int = os.getenv("EXECUTE_UPPER_BOUND", 100) - execute_lower_bound: int = os.getenv("EXECUTE_LOWER_BOUND", 10) +class Settings: + full_cpu_process_count: int = int(os.getenv("FULL_CPU_PROCESS_COUNT", 4)) + full_ram_byte: int = int(os.getenv("FULL_RAM_BYTE", 1024 * 1024 * 1024 * 10)) + job_interval: int = int(os.getenv("JOB_INTERVAL", 1)) + enqueue_upper_bound: int = int(os.getenv("ENQUEUE_UPPER_BOUND", 100)) + enqueue_lower_bound: int = int(os.getenv("ENQUEUE_LOWER_BOUND", 1)) + dequeue_upper_bound: int = int(os.getenv("DEQUEUE_UPPER_BOUND", 100)) + dequeue_lower_bound: int = int(os.getenv("DEQUEUE_LOWER_BOUND", 1)) + execute_upper_bound: int = int(os.getenv("EXECUTE_UPPER_BOUND", 100)) + execute_lower_bound: int = int(os.getenv("EXECUTE_LOWER_BOUND", 10)) + + log_interval: int = int(os.getenv("LOG_INTERVAL", 1)) + log_file: str = os.getenv("LOG_FILE", "./log/consumer.log") + log_max_bytes: int = int(os.getenv("LOG_MAX_BYTES", 10 * 1024 * 1024)) # 10MB + log_backup_count: int = int(os.getenv("LOG_BACKUP_COUNT", 10)) # 10 files @lru_cache() def get_settings(): - return Settings() \ No newline at end of file + return Settings() diff --git a/consumer/src/schema/statistics.py b/consumer/src/schema/statistics.py index de22493..699c6f8 100644 --- a/consumer/src/schema/statistics.py +++ b/consumer/src/schema/statistics.py @@ -10,4 +10,4 @@ class StatisticsResponse(BaseModel): cpu: HardwareResponse mem: HardwareResponse remain_count: int - avg_exe_time: float \ No newline at end of file + avg_exe_time: float diff --git a/consumer/src/services/full.py b/consumer/src/services/full.py index c3531bf..b73a155 100644 --- a/consumer/src/services/full.py +++ b/consumer/src/services/full.py @@ -4,32 +4,36 @@ settings = get_settings() + def full_cpu_in_duration(duration: int): now = time.time() print("time", now) print(f"full cpu in {duration} seconds") - i=0 + i = 0 while True: if time.time() > now + duration: break i += 1 print("time", time.time()) + def create_full_cpu_process(duration: int): - ''' + """ create 4 process to full cpu in duration seconds - ''' + """ for _ in range(settings.full_cpu_process_count): p = multiprocessing.Process(target=full_cpu_in_duration, args=(duration,)) p.start() - + """ refence: https://stackoverflow.com/questions/6317818/eat-memory-using-python """ + + def full_ram_in_duration(duration: int): now = time.time() print("time", now) @@ -39,7 +43,7 @@ def full_ram_in_duration(duration: int): a = bytearray(settings.full_ram_byte) while True: if time.time() > now + duration: - break + break try: a = a + bytearray(settings.full_ram_byte) @@ -54,7 +58,8 @@ def full_ram_in_duration(duration: int): print(f"Allocated {cnt} GB in {duration} seconds") print("time", time.time()) + def create_full_rem_process(duration: int): p = multiprocessing.Process(target=full_ram_in_duration, args=(duration,)) p.start() - return p \ No newline at end of file + return p diff --git a/consumer/src/services/job.py b/consumer/src/services/job.py index f46f5c4..f8c2661 100644 --- a/consumer/src/services/job.py +++ b/consumer/src/services/job.py @@ -6,6 +6,7 @@ settings = get_settings() + def check_enque(): return random.randint(0, 1) @@ -25,7 +26,9 @@ def get_deque_num(): def enqueue(num: int): Counter.increase(num) TotalQueryCount.increase(num) - execution_time = random.randint(settings.execute_lower_bound, settings.execute_upper_bound) + execution_time = random.randint( + settings.execute_lower_bound, settings.execute_upper_bound + ) AvgExecutionTime.add_time(execution_time, TotalQueryCount.get_count()) diff --git a/consumer/src/services/log.py b/consumer/src/services/log.py new file mode 100644 index 0000000..c2f5010 --- /dev/null +++ b/consumer/src/services/log.py @@ -0,0 +1,51 @@ +import asyncio +import logging + +from core.config import get_settings +from services.statistics import ( + get_cpu_percent, + get_mem_usage, + get_remain_count, + get_avg_exe_time, +) + + +async def backgound_logging_task(): + """ + level,time,cpu,ram,remain_count,avg_exe_time + """ + + settings = get_settings() + + logging.basicConfig() + logger = logging.getLogger("uvicorn.default") + file_handler = logging.handlers.RotatingFileHandler( + filename=settings.log_file, + maxBytes=settings.log_max_bytes, + backupCount=settings.log_backup_count, + ) + + formatter = logging.Formatter( + fmt="%(asctime)s,%(message)s", + datefmt="%H:%M:%S", + ) + + file_handler.setFormatter(formatter) + + logger.addHandler(file_handler) + + while True: + """ + level,time,cpu,ram,remain_count,avg_exe_time + """ + logger.info( + msg=f"{get_cpu_percent()},{get_mem_usage()},{get_remain_count()},{get_avg_exe_time()}" + ) + # print("logging...") + + await asyncio.sleep(settings.log_interval) + + +class LoggingBackgroundClass: + def __init__(self, *args, **kwargs) -> None: + self.task = asyncio.create_task(backgound_logging_task(*args, **kwargs)) From 16a74540f0f505dccb1213e429463ad67b8555f4 Mon Sep 17 00:00:00 2001 From: peterxcli Date: Wed, 24 Jan 2024 02:37:37 +0800 Subject: [PATCH 21/44] chore: add pyproject.toml file with project dependencies --- poetry.lock => monitor/poetry.lock | 90 +++++++++++++++++++++++- pyproject.toml => monitor/pyproject.toml | 2 + 2 files changed, 91 insertions(+), 1 deletion(-) rename poetry.lock => monitor/poetry.lock (92%) rename pyproject.toml => monitor/pyproject.toml (85%) diff --git a/poetry.lock b/monitor/poetry.lock similarity index 92% rename from poetry.lock rename to monitor/poetry.lock index 02b2d0f..977de05 100644 --- a/poetry.lock +++ b/monitor/poetry.lock @@ -206,6 +206,94 @@ pyopenssl = ["cryptography (>=38.0.3)", "pyopenssl (>=20.0.0)"] reauth = ["pyu2f (>=0.1.5)"] requests = ["requests (>=2.20.0,<3.0.0.dev0)"] +[[package]] +name = "google-cloud-appengine-logging" +version = "1.4.0" +description = "Google Cloud Appengine Logging API client library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "google-cloud-appengine-logging-1.4.0.tar.gz", hash = "sha256:fe74f418d0b01ebebe83ae212abf051ad42692a636677e397de3d459e00d7b64"}, + {file = "google_cloud_appengine_logging-1.4.0-py2.py3-none-any.whl", hash = "sha256:226721903a2d50b6e51c43e59edb548c0bb08cc5f70e1a5f289d3edf2f09a8c9"}, +] + +[package.dependencies] +google-api-core = {version = ">=1.34.0,<2.0.dev0 || >=2.11.dev0,<3.0.0dev", extras = ["grpc"]} +proto-plus = ">=1.22.3,<2.0.0dev" +protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev" + +[[package]] +name = "google-cloud-audit-log" +version = "0.2.5" +description = "Google Cloud Audit Protos" +optional = false +python-versions = ">=3.7" +files = [ + {file = "google-cloud-audit-log-0.2.5.tar.gz", hash = "sha256:86e2faba3383adc8fd04a5bd7fd4f960b3e4aedaa7ed950f2f891ce16902eb6b"}, + {file = "google_cloud_audit_log-0.2.5-py2.py3-none-any.whl", hash = "sha256:18b94d4579002a450b7902cd2e8b8fdcb1ea2dd4df3b41f8f82be6d9f7fcd746"}, +] + +[package.dependencies] +googleapis-common-protos = ">=1.56.2,<2.0dev" +protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev" + +[[package]] +name = "google-cloud-core" +version = "2.4.1" +description = "Google Cloud API client core library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "google-cloud-core-2.4.1.tar.gz", hash = "sha256:9b7749272a812bde58fff28868d0c5e2f585b82f37e09a1f6ed2d4d10f134073"}, + {file = "google_cloud_core-2.4.1-py2.py3-none-any.whl", hash = "sha256:a9e6a4422b9ac5c29f79a0ede9485473338e2ce78d91f2370c01e730eab22e61"}, +] + +[package.dependencies] +google-api-core = ">=1.31.6,<2.0.dev0 || >2.3.0,<3.0.0dev" +google-auth = ">=1.25.0,<3.0dev" + +[package.extras] +grpc = ["grpcio (>=1.38.0,<2.0dev)", "grpcio-status (>=1.38.0,<2.0.dev0)"] + +[[package]] +name = "google-cloud-logging" +version = "3.9.0" +description = "Stackdriver Logging API client library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "google-cloud-logging-3.9.0.tar.gz", hash = "sha256:4decb1b0bed4a0e3c0e58a376646e6002d6be7cad039e3466822e8665072ea33"}, + {file = "google_cloud_logging-3.9.0-py2.py3-none-any.whl", hash = "sha256:094a2db068ff7f38c9e0c1017673fa49c0768fbae02769e03e06baa30f138b87"}, +] + +[package.dependencies] +google-api-core = {version = ">=1.33.2,<2.0.dev0 || >=2.8.dev0,<3.0.0dev", extras = ["grpc"]} +google-cloud-appengine-logging = ">=0.1.0,<2.0.0dev" +google-cloud-audit-log = ">=0.1.0,<1.0.0dev" +google-cloud-core = ">=2.0.0,<3.0.0dev" +grpc-google-iam-v1 = ">=0.12.4,<1.0.0dev" +proto-plus = {version = ">=1.22.2,<2.0.0dev", markers = "python_version >= \"3.11\""} +protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev" + +[[package]] +name = "google-cloud-monitoring" +version = "2.18.0" +description = "Google Cloud Monitoring API client library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "google-cloud-monitoring-2.18.0.tar.gz", hash = "sha256:06cc1d7fb75c5e50b54bcc004941ea4b20a7a9f09ed7e6e753514fd8c436096a"}, + {file = "google_cloud_monitoring-2.18.0-py2.py3-none-any.whl", hash = "sha256:548a1ac0b88c38694e14e1359e89c7eb19b27423906f456bb590f3f0962bb562"}, +] + +[package.dependencies] +google-api-core = {version = ">=1.34.0,<2.0.dev0 || >=2.11.dev0,<3.0.0dev", extras = ["grpc"]} +proto-plus = ">=1.22.3,<2.0.0dev" +protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev" + +[package.extras] +pandas = ["pandas (>=0.23.2)"] + [[package]] name = "google-cloud-run" version = "0.10.1" @@ -638,4 +726,4 @@ test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess [metadata] lock-version = "2.0" python-versions = "^3.11" -content-hash = "9e55cbb7d536c5b31f7f6ef02826b59ae2a648f5d7079e74b332a1ed5eeaf7a7" +content-hash = "df893032b6cf949dd77e9e78dd1c951da80494bd425ab973a8ef99b0a50e4502" diff --git a/pyproject.toml b/monitor/pyproject.toml similarity index 85% rename from pyproject.toml rename to monitor/pyproject.toml index 8719314..c928996 100644 --- a/pyproject.toml +++ b/monitor/pyproject.toml @@ -10,6 +10,8 @@ python = "^3.11" pre-commit = "^3.6.0" ruff = "^0.1.14" google-cloud-run = "^0.10.1" +google-cloud-logging = "^3.9.0" +google-cloud-monitoring = "^2.18.0" [build-system] From 6db83e94bb33edb49361a592cc3b2601919004a3 Mon Sep 17 00:00:00 2001 From: peterxcli Date: Wed, 24 Jan 2024 02:37:49 +0800 Subject: [PATCH 22/44] docs: add more logging and metrics API documentation --- monitor/README.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/monitor/README.md b/monitor/README.md index 1ee5bab..98d6365 100644 --- a/monitor/README.md +++ b/monitor/README.md @@ -12,5 +12,12 @@ ### Cloud Run Log and Metrics Retrieve API +#### Logging API + +- [python sdk for logging](https://cloud.google.com/logging/docs/reference/libraries#client-libraries-install-python) +- [cloud run logging api](https://cloud.google.com/run/docs/logging) + +#### Metrics API + - [cloud run metrics api](https://cloud.google.com/monitoring/api/metrics_gcp#gcp-run) -- [cloud run log api](https://cloud.google.com/run/docs/logging) +- [python sdk for metrics](https://cloud.google.com/monitoring/docs/reference/libraries#client-libraries-install-python) \ No newline at end of file From f0a1781750c8a5c811f45c6ffa5fe1e3808c5b56 Mon Sep 17 00:00:00 2001 From: peterxcli Date: Wed, 24 Jan 2024 02:38:16 +0800 Subject: [PATCH 23/44] feat: add get_metrics method for CloudRunManager class --- monitor/auto_scaling/cloud_run_api.py | 66 +++++++++++++++++++++++---- 1 file changed, 56 insertions(+), 10 deletions(-) diff --git a/monitor/auto_scaling/cloud_run_api.py b/monitor/auto_scaling/cloud_run_api.py index 1d1e08a..f952b88 100644 --- a/monitor/auto_scaling/cloud_run_api.py +++ b/monitor/auto_scaling/cloud_run_api.py @@ -1,9 +1,19 @@ -from google.cloud import run_v2 +import time + +from google.cloud import monitoring_v3, run_v2 + +project_id = "tsmccareerhack2024-icsd-grp5" +project_name = f"projects/{project_id}" class CloudRunManager: - def __init__(self, client: run_v2.ServicesClient): - self.client = client + def __init__( + self, + run_client: run_v2.ServicesClient, + monitoring_client: monitoring_v3.MetricServiceClient, + ): + self.cloud_run_client = run_client + self.monitoring_client = monitoring_client def adjust_cpu_ram(self, instance_id, cpu=None, ram=None): """ @@ -31,7 +41,7 @@ def adjust_cpu_ram(self, instance_id, cpu=None, ram=None): ) ) - operation = self.client.update_service(request=request) + operation = self.cloud_run_client.update_service(request=request) response = operation.result() # Blocks until operation is complete return response @@ -56,12 +66,13 @@ def adjust_instance_count(self, instance_id, new_count): ) ) - operation = self.client.update_service(request=request) + operation = self.cloud_run_client.update_service(request=request) response = operation.result() # Blocks until operation is complete return response def deploy_image(self, drone_id, image): + # self.client. """ Deploys a new image to a cloud run. @@ -80,13 +91,48 @@ def deploy_image(self, drone_id, image): ) ) - operation = self.client.update_service(request=request) + operation = self.cloud_run_client.update_service(request=request) response = operation.result() # Blocks until operation is complete return response + def get_metrics( + self, + instance_name, + start_time=int(time.time() - 60 * 60 * 3), + end_time=int(time.time()), + ): + """ + Gets the metrics of a cloud run. + + :param drone_id: The ID of the cloud run. + """ + + # TODO: currently only gets CPU utilization, add more metrics + return self.monitoring_client.list_time_series( + request=monitoring_v3.ListTimeSeriesRequest( + name=f"projects/{project_id}", + filter=f'metric.type="run.googleapis.com/container/cpu/utilizations" AND resource.label."configuration_name"="{instance_name}"', + aggregation=monitoring_v3.Aggregation( + alignment_period={"seconds": 60}, + per_series_aligner=monitoring_v3.Aggregation.Aligner.ALIGN_DELTA, + cross_series_reducer=monitoring_v3.Aggregation.Reducer.REDUCE_MEAN, + ), + interval=monitoring_v3.TimeInterval( + { + "start_time": {"seconds": int(start_time)}, + "end_time": {"seconds": int(end_time)}, + } + ), + ), + ) + + +if __name__ == "__main__": + monitoring_client = monitoring_v3.MetricServiceClient() + run_manager = CloudRunManager( + run_v2.ServicesClient(), monitoring_v3.MetricServiceClient() + ) -# Example usage -# adjust_cpu_ram('instance123', cpu='2 vCPUs', ram='4 GB') -# adjust_instance_count(5) -# deploy_image('new_image_version') + metric = run_manager.get_metrics("consumer") + print(metric) From 40b10f5b90fd74d72db761552930f7bb8872ee34 Mon Sep 17 00:00:00 2001 From: peterxcli Date: Wed, 24 Jan 2024 02:42:03 +0800 Subject: [PATCH 24/44] docs: add init gcloud setting --- monitor/README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/monitor/README.md b/monitor/README.md index 98d6365..dadf19e 100644 --- a/monitor/README.md +++ b/monitor/README.md @@ -1,5 +1,11 @@ # Cloud Run Monitor System +## Setup `gcloud` environment + +```bash +gcloud auth application-default login +``` + ## Reference ### Cloud Run API From ca8e944421a361d6334e4f5f0685b52a1147440f Mon Sep 17 00:00:00 2001 From: jason810496 <810496@email.wlsh.tyc.edu.tw> Date: Wed, 24 Jan 2024 13:03:34 +0800 Subject: [PATCH 25/44] hotfix : consumer image error --- consumer/Dockerfile | 2 +- consumer/poetry.lock | 630 +++++++++++++++++++++ pyproject.toml => consumer/pyproject.toml | 6 +- consumer/requirements.txt | 5 +- consumer/src/app.py | 9 + consumer/src/core/config.py | 2 + consumer/src/run.py | 4 +- poetry.lock | 658 ---------------------- 8 files changed, 653 insertions(+), 663 deletions(-) create mode 100644 consumer/poetry.lock rename pyproject.toml => consumer/pyproject.toml (77%) delete mode 100644 poetry.lock diff --git a/consumer/Dockerfile b/consumer/Dockerfile index e8025f4..cf41a47 100644 --- a/consumer/Dockerfile +++ b/consumer/Dockerfile @@ -20,4 +20,4 @@ COPY . /app/ EXPOSE 80 # Run app.py when the container launches -CMD ["python", "src/run.py", "--dev"] +CMD ["python", "src/run.py", "--prod"] diff --git a/consumer/poetry.lock b/consumer/poetry.lock new file mode 100644 index 0000000..ba8c924 --- /dev/null +++ b/consumer/poetry.lock @@ -0,0 +1,630 @@ +# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. + +[[package]] +name = "annotated-types" +version = "0.6.0" +description = "Reusable constraint types to use with typing.Annotated" +optional = false +python-versions = ">=3.8" +files = [ + {file = "annotated_types-0.6.0-py3-none-any.whl", hash = "sha256:0641064de18ba7a25dee8f96403ebc39113d0cb953a01429249d5c7564666a43"}, + {file = "annotated_types-0.6.0.tar.gz", hash = "sha256:563339e807e53ffd9c267e99fc6d9ea23eb8443c08f112651963e24e22f84a5d"}, +] + +[[package]] +name = "anyio" +version = "4.2.0" +description = "High level compatibility layer for multiple asynchronous event loop implementations" +optional = false +python-versions = ">=3.8" +files = [ + {file = "anyio-4.2.0-py3-none-any.whl", hash = "sha256:745843b39e829e108e518c489b31dc757de7d2131d53fac32bd8df268227bfee"}, + {file = "anyio-4.2.0.tar.gz", hash = "sha256:e1875bb4b4e2de1669f4bc7869b6d3f54231cdced71605e6e64c9be77e3be50f"}, +] + +[package.dependencies] +idna = ">=2.8" +sniffio = ">=1.1" + +[package.extras] +doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] +trio = ["trio (>=0.23)"] + +[[package]] +name = "certifi" +version = "2023.11.17" +description = "Python package for providing Mozilla's CA Bundle." +optional = false +python-versions = ">=3.6" +files = [ + {file = "certifi-2023.11.17-py3-none-any.whl", hash = "sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474"}, + {file = "certifi-2023.11.17.tar.gz", hash = "sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1"}, +] + +[[package]] +name = "cfgv" +version = "3.4.0" +description = "Validate configuration and produce human readable error messages." +optional = false +python-versions = ">=3.8" +files = [ + {file = "cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9"}, + {file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"}, +] + +[[package]] +name = "click" +version = "8.1.7" +description = "Composable command line interface toolkit" +optional = false +python-versions = ">=3.7" +files = [ + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "distlib" +version = "0.3.8" +description = "Distribution utilities" +optional = false +python-versions = "*" +files = [ + {file = "distlib-0.3.8-py2.py3-none-any.whl", hash = "sha256:034db59a0b96f8ca18035f36290806a9a6e6bd9d1ff91e45a7f172eb17e51784"}, + {file = "distlib-0.3.8.tar.gz", hash = "sha256:1530ea13e350031b6312d8580ddb6b27a104275a31106523b8f123787f494f64"}, +] + +[[package]] +name = "fastapi" +version = "0.109.0" +description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" +optional = false +python-versions = ">=3.8" +files = [ + {file = "fastapi-0.109.0-py3-none-any.whl", hash = "sha256:8c77515984cd8e8cfeb58364f8cc7a28f0692088475e2614f7bf03275eba9093"}, + {file = "fastapi-0.109.0.tar.gz", hash = "sha256:b978095b9ee01a5cf49b19f4bc1ac9b8ca83aa076e770ef8fd9af09a2b88d191"}, +] + +[package.dependencies] +pydantic = ">=1.7.4,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0 || >2.0.0,<2.0.1 || >2.0.1,<2.1.0 || >2.1.0,<3.0.0" +starlette = ">=0.35.0,<0.36.0" +typing-extensions = ">=4.8.0" + +[package.extras] +all = ["email-validator (>=2.0.0)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=2.11.2)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.5)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"] + +[[package]] +name = "filelock" +version = "3.13.1" +description = "A platform independent file lock." +optional = false +python-versions = ">=3.8" +files = [ + {file = "filelock-3.13.1-py3-none-any.whl", hash = "sha256:57dbda9b35157b05fb3e58ee91448612eb674172fab98ee235ccb0b5bee19a1c"}, + {file = "filelock-3.13.1.tar.gz", hash = "sha256:521f5f56c50f8426f5e03ad3b281b490a87ef15bc6c526f168290f0c7148d44e"}, +] + +[package.extras] +docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.24)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"] +typing = ["typing-extensions (>=4.8)"] + +[[package]] +name = "h11" +version = "0.14.0" +description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" +optional = false +python-versions = ">=3.7" +files = [ + {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, + {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, +] + +[[package]] +name = "identify" +version = "2.5.33" +description = "File identification library for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "identify-2.5.33-py2.py3-none-any.whl", hash = "sha256:d40ce5fcd762817627670da8a7d8d8e65f24342d14539c59488dc603bf662e34"}, + {file = "identify-2.5.33.tar.gz", hash = "sha256:161558f9fe4559e1557e1bff323e8631f6a0e4837f7497767c1782832f16b62d"}, +] + +[package.extras] +license = ["ukkonen"] + +[[package]] +name = "idna" +version = "3.6" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.5" +files = [ + {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"}, + {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"}, +] + +[[package]] +name = "nodeenv" +version = "1.8.0" +description = "Node.js virtual environment builder" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" +files = [ + {file = "nodeenv-1.8.0-py2.py3-none-any.whl", hash = "sha256:df865724bb3c3adc86b3876fa209771517b0cfe596beff01a92700e0e8be4cec"}, + {file = "nodeenv-1.8.0.tar.gz", hash = "sha256:d51e0c37e64fbf47d017feac3145cdbb58836d7eee8c6f6d3b6880c5456227d2"}, +] + +[package.dependencies] +setuptools = "*" + +[[package]] +name = "platformdirs" +version = "4.1.0" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +optional = false +python-versions = ">=3.8" +files = [ + {file = "platformdirs-4.1.0-py3-none-any.whl", hash = "sha256:11c8f37bcca40db96d8144522d925583bdb7a31f7b0e37e3ed4318400a8e2380"}, + {file = "platformdirs-4.1.0.tar.gz", hash = "sha256:906d548203468492d432bcb294d4bc2fff751bf84971fbb2c10918cc206ee420"}, +] + +[package.extras] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] + +[[package]] +name = "pre-commit" +version = "3.6.0" +description = "A framework for managing and maintaining multi-language pre-commit hooks." +optional = false +python-versions = ">=3.9" +files = [ + {file = "pre_commit-3.6.0-py2.py3-none-any.whl", hash = "sha256:c255039ef399049a5544b6ce13d135caba8f2c28c3b4033277a788f434308376"}, + {file = "pre_commit-3.6.0.tar.gz", hash = "sha256:d30bad9abf165f7785c15a21a1f46da7d0677cb00ee7ff4c579fd38922efe15d"}, +] + +[package.dependencies] +cfgv = ">=2.0.0" +identify = ">=1.0.0" +nodeenv = ">=0.11.1" +pyyaml = ">=5.1" +virtualenv = ">=20.10.0" + +[[package]] +name = "psutil" +version = "5.9.8" +description = "Cross-platform lib for process and system monitoring in Python." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +files = [ + {file = "psutil-5.9.8-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:26bd09967ae00920df88e0352a91cff1a78f8d69b3ecabbfe733610c0af486c8"}, + {file = "psutil-5.9.8-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:05806de88103b25903dff19bb6692bd2e714ccf9e668d050d144012055cbca73"}, + {file = "psutil-5.9.8-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:611052c4bc70432ec770d5d54f64206aa7203a101ec273a0cd82418c86503bb7"}, + {file = "psutil-5.9.8-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:50187900d73c1381ba1454cf40308c2bf6f34268518b3f36a9b663ca87e65e36"}, + {file = "psutil-5.9.8-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:02615ed8c5ea222323408ceba16c60e99c3f91639b07da6373fb7e6539abc56d"}, + {file = "psutil-5.9.8-cp27-none-win32.whl", hash = "sha256:36f435891adb138ed3c9e58c6af3e2e6ca9ac2f365efe1f9cfef2794e6c93b4e"}, + {file = "psutil-5.9.8-cp27-none-win_amd64.whl", hash = "sha256:bd1184ceb3f87651a67b2708d4c3338e9b10c5df903f2e3776b62303b26cb631"}, + {file = "psutil-5.9.8-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:aee678c8720623dc456fa20659af736241f575d79429a0e5e9cf88ae0605cc81"}, + {file = "psutil-5.9.8-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8cb6403ce6d8e047495a701dc7c5bd788add903f8986d523e3e20b98b733e421"}, + {file = "psutil-5.9.8-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d06016f7f8625a1825ba3732081d77c94589dca78b7a3fc072194851e88461a4"}, + {file = "psutil-5.9.8-cp36-cp36m-win32.whl", hash = "sha256:7d79560ad97af658a0f6adfef8b834b53f64746d45b403f225b85c5c2c140eee"}, + {file = "psutil-5.9.8-cp36-cp36m-win_amd64.whl", hash = "sha256:27cc40c3493bb10de1be4b3f07cae4c010ce715290a5be22b98493509c6299e2"}, + {file = "psutil-5.9.8-cp37-abi3-win32.whl", hash = "sha256:bc56c2a1b0d15aa3eaa5a60c9f3f8e3e565303b465dbf57a1b730e7a2b9844e0"}, + {file = "psutil-5.9.8-cp37-abi3-win_amd64.whl", hash = "sha256:8db4c1b57507eef143a15a6884ca10f7c73876cdf5d51e713151c1236a0e68cf"}, + {file = "psutil-5.9.8-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:d16bbddf0693323b8c6123dd804100241da461e41d6e332fb0ba6058f630f8c8"}, + {file = "psutil-5.9.8.tar.gz", hash = "sha256:6be126e3225486dff286a8fb9a06246a5253f4c7c53b475ea5f5ac934e64194c"}, +] + +[package.extras] +test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] + +[[package]] +name = "pydantic" +version = "2.5.3" +description = "Data validation using Python type hints" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pydantic-2.5.3-py3-none-any.whl", hash = "sha256:d0caf5954bee831b6bfe7e338c32b9e30c85dfe080c843680783ac2b631673b4"}, + {file = "pydantic-2.5.3.tar.gz", hash = "sha256:b3ef57c62535b0941697cce638c08900d87fcb67e29cfa99e8a68f747f393f7a"}, +] + +[package.dependencies] +annotated-types = ">=0.4.0" +pydantic-core = "2.14.6" +typing-extensions = ">=4.6.1" + +[package.extras] +email = ["email-validator (>=2.0.0)"] + +[[package]] +name = "pydantic-core" +version = "2.14.6" +description = "" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pydantic_core-2.14.6-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:72f9a942d739f09cd42fffe5dc759928217649f070056f03c70df14f5770acf9"}, + {file = "pydantic_core-2.14.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6a31d98c0d69776c2576dda4b77b8e0c69ad08e8b539c25c7d0ca0dc19a50d6c"}, + {file = "pydantic_core-2.14.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5aa90562bc079c6c290f0512b21768967f9968e4cfea84ea4ff5af5d917016e4"}, + {file = "pydantic_core-2.14.6-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:370ffecb5316ed23b667d99ce4debe53ea664b99cc37bfa2af47bc769056d534"}, + {file = "pydantic_core-2.14.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f85f3843bdb1fe80e8c206fe6eed7a1caeae897e496542cee499c374a85c6e08"}, + {file = "pydantic_core-2.14.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9862bf828112e19685b76ca499b379338fd4c5c269d897e218b2ae8fcb80139d"}, + {file = "pydantic_core-2.14.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:036137b5ad0cb0004c75b579445a1efccd072387a36c7f217bb8efd1afbe5245"}, + {file = "pydantic_core-2.14.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:92879bce89f91f4b2416eba4429c7b5ca22c45ef4a499c39f0c5c69257522c7c"}, + {file = "pydantic_core-2.14.6-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0c08de15d50fa190d577e8591f0329a643eeaed696d7771760295998aca6bc66"}, + {file = "pydantic_core-2.14.6-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:36099c69f6b14fc2c49d7996cbf4f87ec4f0e66d1c74aa05228583225a07b590"}, + {file = "pydantic_core-2.14.6-cp310-none-win32.whl", hash = "sha256:7be719e4d2ae6c314f72844ba9d69e38dff342bc360379f7c8537c48e23034b7"}, + {file = "pydantic_core-2.14.6-cp310-none-win_amd64.whl", hash = "sha256:36fa402dcdc8ea7f1b0ddcf0df4254cc6b2e08f8cd80e7010d4c4ae6e86b2a87"}, + {file = "pydantic_core-2.14.6-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:dea7fcd62915fb150cdc373212141a30037e11b761fbced340e9db3379b892d4"}, + {file = "pydantic_core-2.14.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ffff855100bc066ff2cd3aa4a60bc9534661816b110f0243e59503ec2df38421"}, + {file = "pydantic_core-2.14.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b027c86c66b8627eb90e57aee1f526df77dc6d8b354ec498be9a757d513b92b"}, + {file = "pydantic_core-2.14.6-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:00b1087dabcee0b0ffd104f9f53d7d3eaddfaa314cdd6726143af6bc713aa27e"}, + {file = "pydantic_core-2.14.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:75ec284328b60a4e91010c1acade0c30584f28a1f345bc8f72fe8b9e46ec6a96"}, + {file = "pydantic_core-2.14.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7e1f4744eea1501404b20b0ac059ff7e3f96a97d3e3f48ce27a139e053bb370b"}, + {file = "pydantic_core-2.14.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2602177668f89b38b9f84b7b3435d0a72511ddef45dc14446811759b82235a1"}, + {file = "pydantic_core-2.14.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6c8edaea3089bf908dd27da8f5d9e395c5b4dc092dbcce9b65e7156099b4b937"}, + {file = "pydantic_core-2.14.6-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:478e9e7b360dfec451daafe286998d4a1eeaecf6d69c427b834ae771cad4b622"}, + {file = "pydantic_core-2.14.6-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:b6ca36c12a5120bad343eef193cc0122928c5c7466121da7c20f41160ba00ba2"}, + {file = "pydantic_core-2.14.6-cp311-none-win32.whl", hash = "sha256:2b8719037e570639e6b665a4050add43134d80b687288ba3ade18b22bbb29dd2"}, + {file = "pydantic_core-2.14.6-cp311-none-win_amd64.whl", hash = "sha256:78ee52ecc088c61cce32b2d30a826f929e1708f7b9247dc3b921aec367dc1b23"}, + {file = "pydantic_core-2.14.6-cp311-none-win_arm64.whl", hash = "sha256:a19b794f8fe6569472ff77602437ec4430f9b2b9ec7a1105cfd2232f9ba355e6"}, + {file = "pydantic_core-2.14.6-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:667aa2eac9cd0700af1ddb38b7b1ef246d8cf94c85637cbb03d7757ca4c3fdec"}, + {file = "pydantic_core-2.14.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cdee837710ef6b56ebd20245b83799fce40b265b3b406e51e8ccc5b85b9099b7"}, + {file = "pydantic_core-2.14.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c5bcf3414367e29f83fd66f7de64509a8fd2368b1edf4351e862910727d3e51"}, + {file = "pydantic_core-2.14.6-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:26a92ae76f75d1915806b77cf459811e772d8f71fd1e4339c99750f0e7f6324f"}, + {file = "pydantic_core-2.14.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a983cca5ed1dd9a35e9e42ebf9f278d344603bfcb174ff99a5815f953925140a"}, + {file = "pydantic_core-2.14.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cb92f9061657287eded380d7dc455bbf115430b3aa4741bdc662d02977e7d0af"}, + {file = "pydantic_core-2.14.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4ace1e220b078c8e48e82c081e35002038657e4b37d403ce940fa679e57113b"}, + {file = "pydantic_core-2.14.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ef633add81832f4b56d3b4c9408b43d530dfca29e68fb1b797dcb861a2c734cd"}, + {file = "pydantic_core-2.14.6-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7e90d6cc4aad2cc1f5e16ed56e46cebf4877c62403a311af20459c15da76fd91"}, + {file = "pydantic_core-2.14.6-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e8a5ac97ea521d7bde7621d86c30e86b798cdecd985723c4ed737a2aa9e77d0c"}, + {file = "pydantic_core-2.14.6-cp312-none-win32.whl", hash = "sha256:f27207e8ca3e5e021e2402ba942e5b4c629718e665c81b8b306f3c8b1ddbb786"}, + {file = "pydantic_core-2.14.6-cp312-none-win_amd64.whl", hash = "sha256:b3e5fe4538001bb82e2295b8d2a39356a84694c97cb73a566dc36328b9f83b40"}, + {file = "pydantic_core-2.14.6-cp312-none-win_arm64.whl", hash = "sha256:64634ccf9d671c6be242a664a33c4acf12882670b09b3f163cd00a24cffbd74e"}, + {file = "pydantic_core-2.14.6-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:24368e31be2c88bd69340fbfe741b405302993242ccb476c5c3ff48aeee1afe0"}, + {file = "pydantic_core-2.14.6-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:e33b0834f1cf779aa839975f9d8755a7c2420510c0fa1e9fa0497de77cd35d2c"}, + {file = "pydantic_core-2.14.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6af4b3f52cc65f8a0bc8b1cd9676f8c21ef3e9132f21fed250f6958bd7223bed"}, + {file = "pydantic_core-2.14.6-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d15687d7d7f40333bd8266f3814c591c2e2cd263fa2116e314f60d82086e353a"}, + {file = "pydantic_core-2.14.6-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:095b707bb287bfd534044166ab767bec70a9bba3175dcdc3371782175c14e43c"}, + {file = "pydantic_core-2.14.6-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:94fc0e6621e07d1e91c44e016cc0b189b48db053061cc22d6298a611de8071bb"}, + {file = "pydantic_core-2.14.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ce830e480f6774608dedfd4a90c42aac4a7af0a711f1b52f807130c2e434c06"}, + {file = "pydantic_core-2.14.6-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a306cdd2ad3a7d795d8e617a58c3a2ed0f76c8496fb7621b6cd514eb1532cae8"}, + {file = "pydantic_core-2.14.6-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:2f5fa187bde8524b1e37ba894db13aadd64faa884657473b03a019f625cee9a8"}, + {file = "pydantic_core-2.14.6-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:438027a975cc213a47c5d70672e0d29776082155cfae540c4e225716586be75e"}, + {file = "pydantic_core-2.14.6-cp37-none-win32.whl", hash = "sha256:f96ae96a060a8072ceff4cfde89d261837b4294a4f28b84a28765470d502ccc6"}, + {file = "pydantic_core-2.14.6-cp37-none-win_amd64.whl", hash = "sha256:e646c0e282e960345314f42f2cea5e0b5f56938c093541ea6dbf11aec2862391"}, + {file = "pydantic_core-2.14.6-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:db453f2da3f59a348f514cfbfeb042393b68720787bbef2b4c6068ea362c8149"}, + {file = "pydantic_core-2.14.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3860c62057acd95cc84044e758e47b18dcd8871a328ebc8ccdefd18b0d26a21b"}, + {file = "pydantic_core-2.14.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:36026d8f99c58d7044413e1b819a67ca0e0b8ebe0f25e775e6c3d1fabb3c38fb"}, + {file = "pydantic_core-2.14.6-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8ed1af8692bd8d2a29d702f1a2e6065416d76897d726e45a1775b1444f5928a7"}, + {file = "pydantic_core-2.14.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:314ccc4264ce7d854941231cf71b592e30d8d368a71e50197c905874feacc8a8"}, + {file = "pydantic_core-2.14.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:982487f8931067a32e72d40ab6b47b1628a9c5d344be7f1a4e668fb462d2da42"}, + {file = "pydantic_core-2.14.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2dbe357bc4ddda078f79d2a36fc1dd0494a7f2fad83a0a684465b6f24b46fe80"}, + {file = "pydantic_core-2.14.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2f6ffc6701a0eb28648c845f4945a194dc7ab3c651f535b81793251e1185ac3d"}, + {file = "pydantic_core-2.14.6-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7f5025db12fc6de7bc1104d826d5aee1d172f9ba6ca936bf6474c2148ac336c1"}, + {file = "pydantic_core-2.14.6-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:dab03ed811ed1c71d700ed08bde8431cf429bbe59e423394f0f4055f1ca0ea60"}, + {file = "pydantic_core-2.14.6-cp38-none-win32.whl", hash = "sha256:dfcbebdb3c4b6f739a91769aea5ed615023f3c88cb70df812849aef634c25fbe"}, + {file = "pydantic_core-2.14.6-cp38-none-win_amd64.whl", hash = "sha256:99b14dbea2fdb563d8b5a57c9badfcd72083f6006caf8e126b491519c7d64ca8"}, + {file = "pydantic_core-2.14.6-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:4ce8299b481bcb68e5c82002b96e411796b844d72b3e92a3fbedfe8e19813eab"}, + {file = "pydantic_core-2.14.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b9a9d92f10772d2a181b5ca339dee066ab7d1c9a34ae2421b2a52556e719756f"}, + {file = "pydantic_core-2.14.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fd9e98b408384989ea4ab60206b8e100d8687da18b5c813c11e92fd8212a98e0"}, + {file = "pydantic_core-2.14.6-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4f86f1f318e56f5cbb282fe61eb84767aee743ebe32c7c0834690ebea50c0a6b"}, + {file = "pydantic_core-2.14.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:86ce5fcfc3accf3a07a729779d0b86c5d0309a4764c897d86c11089be61da160"}, + {file = "pydantic_core-2.14.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3dcf1978be02153c6a31692d4fbcc2a3f1db9da36039ead23173bc256ee3b91b"}, + {file = "pydantic_core-2.14.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eedf97be7bc3dbc8addcef4142f4b4164066df0c6f36397ae4aaed3eb187d8ab"}, + {file = "pydantic_core-2.14.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d5f916acf8afbcab6bacbb376ba7dc61f845367901ecd5e328fc4d4aef2fcab0"}, + {file = "pydantic_core-2.14.6-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:8a14c192c1d724c3acbfb3f10a958c55a2638391319ce8078cb36c02283959b9"}, + {file = "pydantic_core-2.14.6-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0348b1dc6b76041516e8a854ff95b21c55f5a411c3297d2ca52f5528e49d8411"}, + {file = "pydantic_core-2.14.6-cp39-none-win32.whl", hash = "sha256:de2a0645a923ba57c5527497daf8ec5df69c6eadf869e9cd46e86349146e5975"}, + {file = "pydantic_core-2.14.6-cp39-none-win_amd64.whl", hash = "sha256:aca48506a9c20f68ee61c87f2008f81f8ee99f8d7f0104bff3c47e2d148f89d9"}, + {file = "pydantic_core-2.14.6-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:d5c28525c19f5bb1e09511669bb57353d22b94cf8b65f3a8d141c389a55dec95"}, + {file = "pydantic_core-2.14.6-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:78d0768ee59baa3de0f4adac9e3748b4b1fffc52143caebddfd5ea2961595277"}, + {file = "pydantic_core-2.14.6-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b93785eadaef932e4fe9c6e12ba67beb1b3f1e5495631419c784ab87e975670"}, + {file = "pydantic_core-2.14.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a874f21f87c485310944b2b2734cd6d318765bcbb7515eead33af9641816506e"}, + {file = "pydantic_core-2.14.6-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b89f4477d915ea43b4ceea6756f63f0288941b6443a2b28c69004fe07fde0d0d"}, + {file = "pydantic_core-2.14.6-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:172de779e2a153d36ee690dbc49c6db568d7b33b18dc56b69a7514aecbcf380d"}, + {file = "pydantic_core-2.14.6-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:dfcebb950aa7e667ec226a442722134539e77c575f6cfaa423f24371bb8d2e94"}, + {file = "pydantic_core-2.14.6-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:55a23dcd98c858c0db44fc5c04fc7ed81c4b4d33c653a7c45ddaebf6563a2f66"}, + {file = "pydantic_core-2.14.6-pp37-pypy37_pp73-macosx_10_7_x86_64.whl", hash = "sha256:4241204e4b36ab5ae466ecec5c4c16527a054c69f99bba20f6f75232a6a534e2"}, + {file = "pydantic_core-2.14.6-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e574de99d735b3fc8364cba9912c2bec2da78775eba95cbb225ef7dda6acea24"}, + {file = "pydantic_core-2.14.6-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1302a54f87b5cd8528e4d6d1bf2133b6aa7c6122ff8e9dc5220fbc1e07bffebd"}, + {file = "pydantic_core-2.14.6-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f8e81e4b55930e5ffab4a68db1af431629cf2e4066dbdbfef65348b8ab804ea8"}, + {file = "pydantic_core-2.14.6-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:c99462ffc538717b3e60151dfaf91125f637e801f5ab008f81c402f1dff0cd0f"}, + {file = "pydantic_core-2.14.6-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:e4cf2d5829f6963a5483ec01578ee76d329eb5caf330ecd05b3edd697e7d768a"}, + {file = "pydantic_core-2.14.6-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:cf10b7d58ae4a1f07fccbf4a0a956d705356fea05fb4c70608bb6fa81d103cda"}, + {file = "pydantic_core-2.14.6-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:399ac0891c284fa8eb998bcfa323f2234858f5d2efca3950ae58c8f88830f145"}, + {file = "pydantic_core-2.14.6-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c6a5c79b28003543db3ba67d1df336f253a87d3112dac3a51b94f7d48e4c0e1"}, + {file = "pydantic_core-2.14.6-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:599c87d79cab2a6a2a9df4aefe0455e61e7d2aeede2f8577c1b7c0aec643ee8e"}, + {file = "pydantic_core-2.14.6-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:43e166ad47ba900f2542a80d83f9fc65fe99eb63ceec4debec160ae729824052"}, + {file = "pydantic_core-2.14.6-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:3a0b5db001b98e1c649dd55afa928e75aa4087e587b9524a4992316fa23c9fba"}, + {file = "pydantic_core-2.14.6-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:747265448cb57a9f37572a488a57d873fd96bf51e5bb7edb52cfb37124516da4"}, + {file = "pydantic_core-2.14.6-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:7ebe3416785f65c28f4f9441e916bfc8a54179c8dea73c23023f7086fa601c5d"}, + {file = "pydantic_core-2.14.6-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:86c963186ca5e50d5c8287b1d1c9d3f8f024cbe343d048c5bd282aec2d8641f2"}, + {file = "pydantic_core-2.14.6-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:e0641b506486f0b4cd1500a2a65740243e8670a2549bb02bc4556a83af84ae03"}, + {file = "pydantic_core-2.14.6-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71d72ca5eaaa8d38c8df16b7deb1a2da4f650c41b58bb142f3fb75d5ad4a611f"}, + {file = "pydantic_core-2.14.6-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27e524624eace5c59af499cd97dc18bb201dc6a7a2da24bfc66ef151c69a5f2a"}, + {file = "pydantic_core-2.14.6-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a3dde6cac75e0b0902778978d3b1646ca9f438654395a362cb21d9ad34b24acf"}, + {file = "pydantic_core-2.14.6-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:00646784f6cd993b1e1c0e7b0fdcbccc375d539db95555477771c27555e3c556"}, + {file = "pydantic_core-2.14.6-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:23598acb8ccaa3d1d875ef3b35cb6376535095e9405d91a3d57a8c7db5d29341"}, + {file = "pydantic_core-2.14.6-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7f41533d7e3cf9520065f610b41ac1c76bc2161415955fbcead4981b22c7611e"}, + {file = "pydantic_core-2.14.6.tar.gz", hash = "sha256:1fd0c1d395372843fba13a51c28e3bb9d59bd7aebfeb17358ffaaa1e4dbbe948"}, +] + +[package.dependencies] +typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" + +[[package]] +name = "python-dotenv" +version = "1.0.1" +description = "Read key-value pairs from a .env file and set them as environment variables" +optional = false +python-versions = ">=3.8" +files = [ + {file = "python-dotenv-1.0.1.tar.gz", hash = "sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca"}, + {file = "python_dotenv-1.0.1-py3-none-any.whl", hash = "sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a"}, +] + +[package.extras] +cli = ["click (>=5.0)"] + +[[package]] +name = "pyyaml" +version = "6.0.1" +description = "YAML parser and emitter for Python" +optional = false +python-versions = ">=3.6" +files = [ + {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, + {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, + {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, + {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, + {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, + {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, + {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, + {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, + {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, + {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, + {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, + {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, +] + +[[package]] +name = "ruff" +version = "0.1.14" +description = "An extremely fast Python linter and code formatter, written in Rust." +optional = false +python-versions = ">=3.7" +files = [ + {file = "ruff-0.1.14-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:96f76536df9b26622755c12ed8680f159817be2f725c17ed9305b472a757cdbb"}, + {file = "ruff-0.1.14-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:ab3f71f64498c7241123bb5a768544cf42821d2a537f894b22457a543d3ca7a9"}, + {file = "ruff-0.1.14-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7060156ecc572b8f984fd20fd8b0fcb692dd5d837b7606e968334ab7ff0090ab"}, + {file = "ruff-0.1.14-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a53d8e35313d7b67eb3db15a66c08434809107659226a90dcd7acb2afa55faea"}, + {file = "ruff-0.1.14-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bea9be712b8f5b4ebed40e1949379cfb2a7d907f42921cf9ab3aae07e6fba9eb"}, + {file = "ruff-0.1.14-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:2270504d629a0b064247983cbc495bed277f372fb9eaba41e5cf51f7ba705a6a"}, + {file = "ruff-0.1.14-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80258bb3b8909b1700610dfabef7876423eed1bc930fe177c71c414921898efa"}, + {file = "ruff-0.1.14-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:653230dd00aaf449eb5ff25d10a6e03bc3006813e2cb99799e568f55482e5cae"}, + {file = "ruff-0.1.14-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87b3acc6c4e6928459ba9eb7459dd4f0c4bf266a053c863d72a44c33246bfdbf"}, + {file = "ruff-0.1.14-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:6b3dadc9522d0eccc060699a9816e8127b27addbb4697fc0c08611e4e6aeb8b5"}, + {file = "ruff-0.1.14-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:1c8eca1a47b4150dc0fbec7fe68fc91c695aed798532a18dbb1424e61e9b721f"}, + {file = "ruff-0.1.14-py3-none-musllinux_1_2_i686.whl", hash = "sha256:62ce2ae46303ee896fc6811f63d6dabf8d9c389da0f3e3f2bce8bc7f15ef5488"}, + {file = "ruff-0.1.14-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:b2027dde79d217b211d725fc833e8965dc90a16d0d3213f1298f97465956661b"}, + {file = "ruff-0.1.14-py3-none-win32.whl", hash = "sha256:722bafc299145575a63bbd6b5069cb643eaa62546a5b6398f82b3e4403329cab"}, + {file = "ruff-0.1.14-py3-none-win_amd64.whl", hash = "sha256:e3d241aa61f92b0805a7082bd89a9990826448e4d0398f0e2bc8f05c75c63d99"}, + {file = "ruff-0.1.14-py3-none-win_arm64.whl", hash = "sha256:269302b31ade4cde6cf6f9dd58ea593773a37ed3f7b97e793c8594b262466b67"}, + {file = "ruff-0.1.14.tar.gz", hash = "sha256:ad3f8088b2dfd884820289a06ab718cde7d38b94972212cc4ba90d5fbc9955f3"}, +] + +[[package]] +name = "sentry-sdk" +version = "1.39.2" +description = "Python client for Sentry (https://sentry.io)" +optional = false +python-versions = "*" +files = [ + {file = "sentry-sdk-1.39.2.tar.gz", hash = "sha256:24c83b0b41c887d33328a9166f5950dc37ad58f01c9f2fbff6b87a6f1094170c"}, + {file = "sentry_sdk-1.39.2-py2.py3-none-any.whl", hash = "sha256:acaf597b30258fc7663063b291aa99e58f3096e91fe1e6634f4b79f9c1943e8e"}, +] + +[package.dependencies] +certifi = "*" +urllib3 = {version = ">=1.26.11", markers = "python_version >= \"3.6\""} + +[package.extras] +aiohttp = ["aiohttp (>=3.5)"] +arq = ["arq (>=0.23)"] +asyncpg = ["asyncpg (>=0.23)"] +beam = ["apache-beam (>=2.12)"] +bottle = ["bottle (>=0.12.13)"] +celery = ["celery (>=3)"] +chalice = ["chalice (>=1.16.0)"] +clickhouse-driver = ["clickhouse-driver (>=0.2.0)"] +django = ["django (>=1.8)"] +falcon = ["falcon (>=1.4)"] +fastapi = ["fastapi (>=0.79.0)"] +flask = ["blinker (>=1.1)", "flask (>=0.11)", "markupsafe"] +grpcio = ["grpcio (>=1.21.1)"] +httpx = ["httpx (>=0.16.0)"] +huey = ["huey (>=2)"] +loguru = ["loguru (>=0.5)"] +opentelemetry = ["opentelemetry-distro (>=0.35b0)"] +opentelemetry-experimental = ["opentelemetry-distro (>=0.40b0,<1.0)", "opentelemetry-instrumentation-aiohttp-client (>=0.40b0,<1.0)", "opentelemetry-instrumentation-django (>=0.40b0,<1.0)", "opentelemetry-instrumentation-fastapi (>=0.40b0,<1.0)", "opentelemetry-instrumentation-flask (>=0.40b0,<1.0)", "opentelemetry-instrumentation-requests (>=0.40b0,<1.0)", "opentelemetry-instrumentation-sqlite3 (>=0.40b0,<1.0)", "opentelemetry-instrumentation-urllib (>=0.40b0,<1.0)"] +pure-eval = ["asttokens", "executing", "pure_eval"] +pymongo = ["pymongo (>=3.1)"] +pyspark = ["pyspark (>=2.4.4)"] +quart = ["blinker (>=1.1)", "quart (>=0.16.1)"] +rq = ["rq (>=0.6)"] +sanic = ["sanic (>=0.8)"] +sqlalchemy = ["sqlalchemy (>=1.2)"] +starlette = ["starlette (>=0.19.1)"] +starlite = ["starlite (>=1.48)"] +tornado = ["tornado (>=5)"] + +[[package]] +name = "setuptools" +version = "69.0.3" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "setuptools-69.0.3-py3-none-any.whl", hash = "sha256:385eb4edd9c9d5c17540511303e39a147ce2fc04bc55289c322b9e5904fe2c05"}, + {file = "setuptools-69.0.3.tar.gz", hash = "sha256:be1af57fc409f93647f2e8e4573a142ed38724b8cdd389706a867bb4efcf1e78"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] + +[[package]] +name = "sniffio" +version = "1.3.0" +description = "Sniff out which async library your code is running under" +optional = false +python-versions = ">=3.7" +files = [ + {file = "sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"}, + {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, +] + +[[package]] +name = "starlette" +version = "0.35.1" +description = "The little ASGI library that shines." +optional = false +python-versions = ">=3.8" +files = [ + {file = "starlette-0.35.1-py3-none-any.whl", hash = "sha256:50bbbda9baa098e361f398fda0928062abbaf1f54f4fadcbe17c092a01eb9a25"}, + {file = "starlette-0.35.1.tar.gz", hash = "sha256:3e2639dac3520e4f58734ed22553f950d3f3cb1001cd2eaac4d57e8cdc5f66bc"}, +] + +[package.dependencies] +anyio = ">=3.4.0,<5" + +[package.extras] +full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart", "pyyaml"] + +[[package]] +name = "typing-extensions" +version = "4.9.0" +description = "Backported and Experimental Type Hints for Python 3.8+" +optional = false +python-versions = ">=3.8" +files = [ + {file = "typing_extensions-4.9.0-py3-none-any.whl", hash = "sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd"}, + {file = "typing_extensions-4.9.0.tar.gz", hash = "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783"}, +] + +[[package]] +name = "urllib3" +version = "2.1.0" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=3.8" +files = [ + {file = "urllib3-2.1.0-py3-none-any.whl", hash = "sha256:55901e917a5896a349ff771be919f8bd99aff50b79fe58fec595eb37bbc56bb3"}, + {file = "urllib3-2.1.0.tar.gz", hash = "sha256:df7aa8afb0148fa78488e7899b2c59b5f4ffcfa82e6c54ccb9dd37c1d7b52d54"}, +] + +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] + +[[package]] +name = "uvicorn" +version = "0.27.0" +description = "The lightning-fast ASGI server." +optional = false +python-versions = ">=3.8" +files = [ + {file = "uvicorn-0.27.0-py3-none-any.whl", hash = "sha256:890b00f6c537d58695d3bb1f28e23db9d9e7a17cbcc76d7457c499935f933e24"}, + {file = "uvicorn-0.27.0.tar.gz", hash = "sha256:c855578045d45625fd027367f7653d249f7c49f9361ba15cf9624186b26b8eb6"}, +] + +[package.dependencies] +click = ">=7.0" +h11 = ">=0.8" + +[package.extras] +standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.4)"] + +[[package]] +name = "virtualenv" +version = "20.25.0" +description = "Virtual Python Environment builder" +optional = false +python-versions = ">=3.7" +files = [ + {file = "virtualenv-20.25.0-py3-none-any.whl", hash = "sha256:4238949c5ffe6876362d9c0180fc6c3a824a7b12b80604eeb8085f2ed7460de3"}, + {file = "virtualenv-20.25.0.tar.gz", hash = "sha256:bf51c0d9c7dd63ea8e44086fa1e4fb1093a31e963b86959257378aef020e1f1b"}, +] + +[package.dependencies] +distlib = ">=0.3.7,<1" +filelock = ">=3.12.2,<4" +platformdirs = ">=3.9.1,<5" + +[package.extras] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] +test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] + +[metadata] +lock-version = "2.0" +python-versions = "^3.11" +content-hash = "ac12daac6a36e815aa3f7314c58795d8748f9ccfe756f94ec478e7a6851d44d9" diff --git a/pyproject.toml b/consumer/pyproject.toml similarity index 77% rename from pyproject.toml rename to consumer/pyproject.toml index a6f0ba9..54a60a2 100644 --- a/pyproject.toml +++ b/consumer/pyproject.toml @@ -9,7 +9,11 @@ readme = "README.md" python = "^3.11" pre-commit = "^3.6.0" ruff = "^0.1.14" -discord-py = "^2.3.2" +sentry-sdk = "^1.39.2" +python-dotenv = "^1.0.1" +fastapi = "^0.109.0" +uvicorn = "^0.27.0" +psutil = "^5.9.8" [build-system] diff --git a/consumer/requirements.txt b/consumer/requirements.txt index e754613..5edf3f7 100644 --- a/consumer/requirements.txt +++ b/consumer/requirements.txt @@ -1,5 +1,6 @@ annotated-types==0.6.0 ; python_version >= "3.11" and python_version < "4.0" anyio==4.2.0 ; python_version >= "3.11" and python_version < "4.0" +certifi==2023.11.17 ; python_version >= "3.11" and python_version < "4.0" cfgv==3.4.0 ; python_version >= "3.11" and python_version < "4.0" click==8.1.7 ; python_version >= "3.11" and python_version < "4.0" colorama==0.4.6 ; python_version >= "3.11" and python_version < "4.0" and platform_system == "Windows" @@ -15,12 +16,14 @@ pre-commit==3.6.0 ; python_version >= "3.11" and python_version < "4.0" psutil==5.9.8 ; python_version >= "3.11" and python_version < "4.0" pydantic-core==2.14.6 ; python_version >= "3.11" and python_version < "4.0" pydantic==2.5.3 ; python_version >= "3.11" and python_version < "4.0" -python-dotenv==1.0.0 ; python_version >= "3.11" and python_version < "4.0" +python-dotenv==1.0.1 ; python_version >= "3.11" and python_version < "4.0" pyyaml==6.0.1 ; python_version >= "3.11" and python_version < "4.0" ruff==0.1.14 ; python_version >= "3.11" and python_version < "4.0" +sentry-sdk==1.39.2 ; python_version >= "3.11" and python_version < "4.0" setuptools==69.0.3 ; python_version >= "3.11" and python_version < "4.0" sniffio==1.3.0 ; python_version >= "3.11" and python_version < "4.0" starlette==0.35.1 ; python_version >= "3.11" and python_version < "4.0" typing-extensions==4.9.0 ; python_version >= "3.11" and python_version < "4.0" +urllib3==2.1.0 ; python_version >= "3.11" and python_version < "4.0" uvicorn==0.27.0 ; python_version >= "3.11" and python_version < "4.0" virtualenv==20.25.0 ; python_version >= "3.11" and python_version < "4.0" diff --git a/consumer/src/app.py b/consumer/src/app.py index 8a9a47b..49095ab 100644 --- a/consumer/src/app.py +++ b/consumer/src/app.py @@ -13,6 +13,15 @@ from api.status import router as status_router from api.job import router as job_router +from core.config import get_settings + +settings = get_settings() + +if settings.sentry_dsn: + import sentry_sdk + + sentry_sdk.init(settings.sentry_dsn) + # backgound livespan task # from services.job import backgound_mock_behavior diff --git a/consumer/src/core/config.py b/consumer/src/core/config.py index 98f050a..769bf10 100644 --- a/consumer/src/core/config.py +++ b/consumer/src/core/config.py @@ -18,6 +18,8 @@ class Settings: log_max_bytes: int = int(os.getenv("LOG_MAX_BYTES", 10 * 1024 * 1024)) # 10MB log_backup_count: int = int(os.getenv("LOG_BACKUP_COUNT", 10)) # 10 files + sentry_dsn: str = os.getenv("SENTRY_DSN", None) + @lru_cache() def get_settings(): diff --git a/consumer/src/run.py b/consumer/src/run.py index b98e949..b939064 100644 --- a/consumer/src/run.py +++ b/consumer/src/run.py @@ -1,7 +1,5 @@ import argparse import os - -from dotenv import load_dotenv import uvicorn if __name__ == "__main__": @@ -24,6 +22,8 @@ if args.dev: # for development mode + from dotenv import load_dotenv + load_dotenv(".env/dev.env") uvicorn.run( diff --git a/poetry.lock b/poetry.lock deleted file mode 100644 index 79ec60b..0000000 --- a/poetry.lock +++ /dev/null @@ -1,658 +0,0 @@ -# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. - -[[package]] -name = "aiohttp" -version = "3.9.1" -description = "Async http client/server framework (asyncio)" -optional = false -python-versions = ">=3.8" -files = [ - {file = "aiohttp-3.9.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e1f80197f8b0b846a8d5cf7b7ec6084493950d0882cc5537fb7b96a69e3c8590"}, - {file = "aiohttp-3.9.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c72444d17777865734aa1a4d167794c34b63e5883abb90356a0364a28904e6c0"}, - {file = "aiohttp-3.9.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9b05d5cbe9dafcdc733262c3a99ccf63d2f7ce02543620d2bd8db4d4f7a22f83"}, - {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c4fa235d534b3547184831c624c0b7c1e262cd1de847d95085ec94c16fddcd5"}, - {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:289ba9ae8e88d0ba16062ecf02dd730b34186ea3b1e7489046fc338bdc3361c4"}, - {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bff7e2811814fa2271be95ab6e84c9436d027a0e59665de60edf44e529a42c1f"}, - {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81b77f868814346662c96ab36b875d7814ebf82340d3284a31681085c051320f"}, - {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3b9c7426923bb7bd66d409da46c41e3fb40f5caf679da624439b9eba92043fa6"}, - {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8d44e7bf06b0c0a70a20f9100af9fcfd7f6d9d3913e37754c12d424179b4e48f"}, - {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:22698f01ff5653fe66d16ffb7658f582a0ac084d7da1323e39fd9eab326a1f26"}, - {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ca7ca5abfbfe8d39e653870fbe8d7710be7a857f8a8386fc9de1aae2e02ce7e4"}, - {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:8d7f98fde213f74561be1d6d3fa353656197f75d4edfbb3d94c9eb9b0fc47f5d"}, - {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5216b6082c624b55cfe79af5d538e499cd5f5b976820eac31951fb4325974501"}, - {file = "aiohttp-3.9.1-cp310-cp310-win32.whl", hash = "sha256:0e7ba7ff228c0d9a2cd66194e90f2bca6e0abca810b786901a569c0de082f489"}, - {file = "aiohttp-3.9.1-cp310-cp310-win_amd64.whl", hash = "sha256:c7e939f1ae428a86e4abbb9a7c4732bf4706048818dfd979e5e2839ce0159f23"}, - {file = "aiohttp-3.9.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:df9cf74b9bc03d586fc53ba470828d7b77ce51b0582d1d0b5b2fb673c0baa32d"}, - {file = "aiohttp-3.9.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ecca113f19d5e74048c001934045a2b9368d77b0b17691d905af18bd1c21275e"}, - {file = "aiohttp-3.9.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8cef8710fb849d97c533f259103f09bac167a008d7131d7b2b0e3a33269185c0"}, - {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bea94403a21eb94c93386d559bce297381609153e418a3ffc7d6bf772f59cc35"}, - {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91c742ca59045dce7ba76cab6e223e41d2c70d79e82c284a96411f8645e2afff"}, - {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6c93b7c2e52061f0925c3382d5cb8980e40f91c989563d3d32ca280069fd6a87"}, - {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee2527134f95e106cc1653e9ac78846f3a2ec1004cf20ef4e02038035a74544d"}, - {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11ff168d752cb41e8492817e10fb4f85828f6a0142b9726a30c27c35a1835f01"}, - {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b8c3a67eb87394386847d188996920f33b01b32155f0a94f36ca0e0c635bf3e3"}, - {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c7b5d5d64e2a14e35a9240b33b89389e0035e6de8dbb7ffa50d10d8b65c57449"}, - {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:69985d50a2b6f709412d944ffb2e97d0be154ea90600b7a921f95a87d6f108a2"}, - {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:c9110c06eaaac7e1f5562caf481f18ccf8f6fdf4c3323feab28a93d34cc646bd"}, - {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d737e69d193dac7296365a6dcb73bbbf53bb760ab25a3727716bbd42022e8d7a"}, - {file = "aiohttp-3.9.1-cp311-cp311-win32.whl", hash = "sha256:4ee8caa925aebc1e64e98432d78ea8de67b2272252b0a931d2ac3bd876ad5544"}, - {file = "aiohttp-3.9.1-cp311-cp311-win_amd64.whl", hash = "sha256:a34086c5cc285be878622e0a6ab897a986a6e8bf5b67ecb377015f06ed316587"}, - {file = "aiohttp-3.9.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f800164276eec54e0af5c99feb9494c295118fc10a11b997bbb1348ba1a52065"}, - {file = "aiohttp-3.9.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:500f1c59906cd142d452074f3811614be04819a38ae2b3239a48b82649c08821"}, - {file = "aiohttp-3.9.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0b0a6a36ed7e164c6df1e18ee47afbd1990ce47cb428739d6c99aaabfaf1b3af"}, - {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69da0f3ed3496808e8cbc5123a866c41c12c15baaaead96d256477edf168eb57"}, - {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:176df045597e674fa950bf5ae536be85699e04cea68fa3a616cf75e413737eb5"}, - {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b796b44111f0cab6bbf66214186e44734b5baab949cb5fb56154142a92989aeb"}, - {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f27fdaadce22f2ef950fc10dcdf8048407c3b42b73779e48a4e76b3c35bca26c"}, - {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bcb6532b9814ea7c5a6a3299747c49de30e84472fa72821b07f5a9818bce0f66"}, - {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:54631fb69a6e44b2ba522f7c22a6fb2667a02fd97d636048478db2fd8c4e98fe"}, - {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:4b4c452d0190c5a820d3f5c0f3cd8a28ace48c54053e24da9d6041bf81113183"}, - {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:cae4c0c2ca800c793cae07ef3d40794625471040a87e1ba392039639ad61ab5b"}, - {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:565760d6812b8d78d416c3c7cfdf5362fbe0d0d25b82fed75d0d29e18d7fc30f"}, - {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:54311eb54f3a0c45efb9ed0d0a8f43d1bc6060d773f6973efd90037a51cd0a3f"}, - {file = "aiohttp-3.9.1-cp312-cp312-win32.whl", hash = "sha256:85c3e3c9cb1d480e0b9a64c658cd66b3cfb8e721636ab8b0e746e2d79a7a9eed"}, - {file = "aiohttp-3.9.1-cp312-cp312-win_amd64.whl", hash = "sha256:11cb254e397a82efb1805d12561e80124928e04e9c4483587ce7390b3866d213"}, - {file = "aiohttp-3.9.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8a22a34bc594d9d24621091d1b91511001a7eea91d6652ea495ce06e27381f70"}, - {file = "aiohttp-3.9.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:598db66eaf2e04aa0c8900a63b0101fdc5e6b8a7ddd805c56d86efb54eb66672"}, - {file = "aiohttp-3.9.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2c9376e2b09895c8ca8b95362283365eb5c03bdc8428ade80a864160605715f1"}, - {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41473de252e1797c2d2293804e389a6d6986ef37cbb4a25208de537ae32141dd"}, - {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9c5857612c9813796960c00767645cb5da815af16dafb32d70c72a8390bbf690"}, - {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ffcd828e37dc219a72c9012ec44ad2e7e3066bec6ff3aaa19e7d435dbf4032ca"}, - {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:219a16763dc0294842188ac8a12262b5671817042b35d45e44fd0a697d8c8361"}, - {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f694dc8a6a3112059258a725a4ebe9acac5fe62f11c77ac4dcf896edfa78ca28"}, - {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:bcc0ea8d5b74a41b621ad4a13d96c36079c81628ccc0b30cfb1603e3dfa3a014"}, - {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:90ec72d231169b4b8d6085be13023ece8fa9b1bb495e4398d847e25218e0f431"}, - {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:cf2a0ac0615842b849f40c4d7f304986a242f1e68286dbf3bd7a835e4f83acfd"}, - {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:0e49b08eafa4f5707ecfb321ab9592717a319e37938e301d462f79b4e860c32a"}, - {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2c59e0076ea31c08553e868cec02d22191c086f00b44610f8ab7363a11a5d9d8"}, - {file = "aiohttp-3.9.1-cp38-cp38-win32.whl", hash = "sha256:4831df72b053b1eed31eb00a2e1aff6896fb4485301d4ccb208cac264b648db4"}, - {file = "aiohttp-3.9.1-cp38-cp38-win_amd64.whl", hash = "sha256:3135713c5562731ee18f58d3ad1bf41e1d8883eb68b363f2ffde5b2ea4b84cc7"}, - {file = "aiohttp-3.9.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:cfeadf42840c1e870dc2042a232a8748e75a36b52d78968cda6736de55582766"}, - {file = "aiohttp-3.9.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:70907533db712f7aa791effb38efa96f044ce3d4e850e2d7691abd759f4f0ae0"}, - {file = "aiohttp-3.9.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cdefe289681507187e375a5064c7599f52c40343a8701761c802c1853a504558"}, - {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7481f581251bb5558ba9f635db70908819caa221fc79ee52a7f58392778c636"}, - {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:49f0c1b3c2842556e5de35f122fc0f0b721334ceb6e78c3719693364d4af8499"}, - {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0d406b01a9f5a7e232d1b0d161b40c05275ffbcbd772dc18c1d5a570961a1ca4"}, - {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d8e4450e7fe24d86e86b23cc209e0023177b6d59502e33807b732d2deb6975f"}, - {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c0266cd6f005e99f3f51e583012de2778e65af6b73860038b968a0a8888487a"}, - {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab221850108a4a063c5b8a70f00dd7a1975e5a1713f87f4ab26a46e5feac5a0e"}, - {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c88a15f272a0ad3d7773cf3a37cc7b7d077cbfc8e331675cf1346e849d97a4e5"}, - {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:237533179d9747080bcaad4d02083ce295c0d2eab3e9e8ce103411a4312991a0"}, - {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:02ab6006ec3c3463b528374c4cdce86434e7b89ad355e7bf29e2f16b46c7dd6f"}, - {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04fa38875e53eb7e354ece1607b1d2fdee2d175ea4e4d745f6ec9f751fe20c7c"}, - {file = "aiohttp-3.9.1-cp39-cp39-win32.whl", hash = "sha256:82eefaf1a996060602f3cc1112d93ba8b201dbf5d8fd9611227de2003dddb3b7"}, - {file = "aiohttp-3.9.1-cp39-cp39-win_amd64.whl", hash = "sha256:9b05d33ff8e6b269e30a7957bd3244ffbce2a7a35a81b81c382629b80af1a8bf"}, - {file = "aiohttp-3.9.1.tar.gz", hash = "sha256:8fc49a87ac269d4529da45871e2ffb6874e87779c3d0e2ccd813c0899221239d"}, -] - -[package.dependencies] -aiosignal = ">=1.1.2" -attrs = ">=17.3.0" -frozenlist = ">=1.1.1" -multidict = ">=4.5,<7.0" -yarl = ">=1.0,<2.0" - -[package.extras] -speedups = ["Brotli", "aiodns", "brotlicffi"] - -[[package]] -name = "aiosignal" -version = "1.3.1" -description = "aiosignal: a list of registered asynchronous callbacks" -optional = false -python-versions = ">=3.7" -files = [ - {file = "aiosignal-1.3.1-py3-none-any.whl", hash = "sha256:f8376fb07dd1e86a584e4fcdec80b36b7f81aac666ebc724e2c090300dd83b17"}, - {file = "aiosignal-1.3.1.tar.gz", hash = "sha256:54cd96e15e1649b75d6c87526a6ff0b6c1b0dd3459f43d9ca11d48c339b68cfc"}, -] - -[package.dependencies] -frozenlist = ">=1.1.0" - -[[package]] -name = "attrs" -version = "23.2.0" -description = "Classes Without Boilerplate" -optional = false -python-versions = ">=3.7" -files = [ - {file = "attrs-23.2.0-py3-none-any.whl", hash = "sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1"}, - {file = "attrs-23.2.0.tar.gz", hash = "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30"}, -] - -[package.extras] -cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] -dev = ["attrs[tests]", "pre-commit"] -docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] -tests = ["attrs[tests-no-zope]", "zope-interface"] -tests-mypy = ["mypy (>=1.6)", "pytest-mypy-plugins"] -tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist[psutil]"] - -[[package]] -name = "cfgv" -version = "3.4.0" -description = "Validate configuration and produce human readable error messages." -optional = false -python-versions = ">=3.8" -files = [ - {file = "cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9"}, - {file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"}, -] - -[[package]] -name = "discord-py" -version = "2.3.2" -description = "A Python wrapper for the Discord API" -optional = false -python-versions = ">=3.8.0" -files = [ - {file = "discord.py-2.3.2-py3-none-any.whl", hash = "sha256:9da4679fc3cb10c64b388284700dc998663e0e57328283bbfcfc2525ec5960a6"}, - {file = "discord.py-2.3.2.tar.gz", hash = "sha256:4560f70f2eddba7e83370ecebd237ac09fbb4980dc66507482b0c0e5b8f76b9c"}, -] - -[package.dependencies] -aiohttp = ">=3.7.4,<4" - -[package.extras] -docs = ["sphinx (==4.4.0)", "sphinxcontrib-trio (==1.1.2)", "sphinxcontrib-websupport", "typing-extensions (>=4.3,<5)"] -speed = ["Brotli", "aiodns (>=1.1)", "cchardet (==2.1.7)", "orjson (>=3.5.4)"] -test = ["coverage[toml]", "pytest", "pytest-asyncio", "pytest-cov", "pytest-mock", "typing-extensions (>=4.3,<5)"] -voice = ["PyNaCl (>=1.3.0,<1.6)"] - -[[package]] -name = "distlib" -version = "0.3.8" -description = "Distribution utilities" -optional = false -python-versions = "*" -files = [ - {file = "distlib-0.3.8-py2.py3-none-any.whl", hash = "sha256:034db59a0b96f8ca18035f36290806a9a6e6bd9d1ff91e45a7f172eb17e51784"}, - {file = "distlib-0.3.8.tar.gz", hash = "sha256:1530ea13e350031b6312d8580ddb6b27a104275a31106523b8f123787f494f64"}, -] - -[[package]] -name = "filelock" -version = "3.13.1" -description = "A platform independent file lock." -optional = false -python-versions = ">=3.8" -files = [ - {file = "filelock-3.13.1-py3-none-any.whl", hash = "sha256:57dbda9b35157b05fb3e58ee91448612eb674172fab98ee235ccb0b5bee19a1c"}, - {file = "filelock-3.13.1.tar.gz", hash = "sha256:521f5f56c50f8426f5e03ad3b281b490a87ef15bc6c526f168290f0c7148d44e"}, -] - -[package.extras] -docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.24)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"] -typing = ["typing-extensions (>=4.8)"] - -[[package]] -name = "frozenlist" -version = "1.4.1" -description = "A list-like structure which implements collections.abc.MutableSequence" -optional = false -python-versions = ">=3.8" -files = [ - {file = "frozenlist-1.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f9aa1878d1083b276b0196f2dfbe00c9b7e752475ed3b682025ff20c1c1f51ac"}, - {file = "frozenlist-1.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:29acab3f66f0f24674b7dc4736477bcd4bc3ad4b896f5f45379a67bce8b96868"}, - {file = "frozenlist-1.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:74fb4bee6880b529a0c6560885fce4dc95936920f9f20f53d99a213f7bf66776"}, - {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:590344787a90ae57d62511dd7c736ed56b428f04cd8c161fcc5e7232c130c69a"}, - {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:068b63f23b17df8569b7fdca5517edef76171cf3897eb68beb01341131fbd2ad"}, - {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c849d495bf5154cd8da18a9eb15db127d4dba2968d88831aff6f0331ea9bd4c"}, - {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9750cc7fe1ae3b1611bb8cfc3f9ec11d532244235d75901fb6b8e42ce9229dfe"}, - {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9b2de4cf0cdd5bd2dee4c4f63a653c61d2408055ab77b151c1957f221cabf2a"}, - {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0633c8d5337cb5c77acbccc6357ac49a1770b8c487e5b3505c57b949b4b82e98"}, - {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:27657df69e8801be6c3638054e202a135c7f299267f1a55ed3a598934f6c0d75"}, - {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:f9a3ea26252bd92f570600098783d1371354d89d5f6b7dfd87359d669f2109b5"}, - {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:4f57dab5fe3407b6c0c1cc907ac98e8a189f9e418f3b6e54d65a718aaafe3950"}, - {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e02a0e11cf6597299b9f3bbd3f93d79217cb90cfd1411aec33848b13f5c656cc"}, - {file = "frozenlist-1.4.1-cp310-cp310-win32.whl", hash = "sha256:a828c57f00f729620a442881cc60e57cfcec6842ba38e1b19fd3e47ac0ff8dc1"}, - {file = "frozenlist-1.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:f56e2333dda1fe0f909e7cc59f021eba0d2307bc6f012a1ccf2beca6ba362439"}, - {file = "frozenlist-1.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a0cb6f11204443f27a1628b0e460f37fb30f624be6051d490fa7d7e26d4af3d0"}, - {file = "frozenlist-1.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b46c8ae3a8f1f41a0d2ef350c0b6e65822d80772fe46b653ab6b6274f61d4a49"}, - {file = "frozenlist-1.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fde5bd59ab5357e3853313127f4d3565fc7dad314a74d7b5d43c22c6a5ed2ced"}, - {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:722e1124aec435320ae01ee3ac7bec11a5d47f25d0ed6328f2273d287bc3abb0"}, - {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2471c201b70d58a0f0c1f91261542a03d9a5e088ed3dc6c160d614c01649c106"}, - {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c757a9dd70d72b076d6f68efdbb9bc943665ae954dad2801b874c8c69e185068"}, - {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f146e0911cb2f1da549fc58fc7bcd2b836a44b79ef871980d605ec392ff6b0d2"}, - {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f9c515e7914626b2a2e1e311794b4c35720a0be87af52b79ff8e1429fc25f19"}, - {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c302220494f5c1ebeb0912ea782bcd5e2f8308037b3c7553fad0e48ebad6ad82"}, - {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:442acde1e068288a4ba7acfe05f5f343e19fac87bfc96d89eb886b0363e977ec"}, - {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:1b280e6507ea8a4fa0c0a7150b4e526a8d113989e28eaaef946cc77ffd7efc0a"}, - {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:fe1a06da377e3a1062ae5fe0926e12b84eceb8a50b350ddca72dc85015873f74"}, - {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:db9e724bebd621d9beca794f2a4ff1d26eed5965b004a97f1f1685a173b869c2"}, - {file = "frozenlist-1.4.1-cp311-cp311-win32.whl", hash = "sha256:e774d53b1a477a67838a904131c4b0eef6b3d8a651f8b138b04f748fccfefe17"}, - {file = "frozenlist-1.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:fb3c2db03683b5767dedb5769b8a40ebb47d6f7f45b1b3e3b4b51ec8ad9d9825"}, - {file = "frozenlist-1.4.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:1979bc0aeb89b33b588c51c54ab0161791149f2461ea7c7c946d95d5f93b56ae"}, - {file = "frozenlist-1.4.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:cc7b01b3754ea68a62bd77ce6020afaffb44a590c2289089289363472d13aedb"}, - {file = "frozenlist-1.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c9c92be9fd329ac801cc420e08452b70e7aeab94ea4233a4804f0915c14eba9b"}, - {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c3894db91f5a489fc8fa6a9991820f368f0b3cbdb9cd8849547ccfab3392d86"}, - {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ba60bb19387e13597fb059f32cd4d59445d7b18b69a745b8f8e5db0346f33480"}, - {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8aefbba5f69d42246543407ed2461db31006b0f76c4e32dfd6f42215a2c41d09"}, - {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780d3a35680ced9ce682fbcf4cb9c2bad3136eeff760ab33707b71db84664e3a"}, - {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9acbb16f06fe7f52f441bb6f413ebae6c37baa6ef9edd49cdd567216da8600cd"}, - {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:23b701e65c7b36e4bf15546a89279bd4d8675faabc287d06bbcfac7d3c33e1e6"}, - {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:3e0153a805a98f5ada7e09826255ba99fb4f7524bb81bf6b47fb702666484ae1"}, - {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:dd9b1baec094d91bf36ec729445f7769d0d0cf6b64d04d86e45baf89e2b9059b"}, - {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:1a4471094e146b6790f61b98616ab8e44f72661879cc63fa1049d13ef711e71e"}, - {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5667ed53d68d91920defdf4035d1cdaa3c3121dc0b113255124bcfada1cfa1b8"}, - {file = "frozenlist-1.4.1-cp312-cp312-win32.whl", hash = "sha256:beee944ae828747fd7cb216a70f120767fc9f4f00bacae8543c14a6831673f89"}, - {file = "frozenlist-1.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:64536573d0a2cb6e625cf309984e2d873979709f2cf22839bf2d61790b448ad5"}, - {file = "frozenlist-1.4.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:20b51fa3f588ff2fe658663db52a41a4f7aa6c04f6201449c6c7c476bd255c0d"}, - {file = "frozenlist-1.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:410478a0c562d1a5bcc2f7ea448359fcb050ed48b3c6f6f4f18c313a9bdb1826"}, - {file = "frozenlist-1.4.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c6321c9efe29975232da3bd0af0ad216800a47e93d763ce64f291917a381b8eb"}, - {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48f6a4533887e189dae092f1cf981f2e3885175f7a0f33c91fb5b7b682b6bab6"}, - {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6eb73fa5426ea69ee0e012fb59cdc76a15b1283d6e32e4f8dc4482ec67d1194d"}, - {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fbeb989b5cc29e8daf7f976b421c220f1b8c731cbf22b9130d8815418ea45887"}, - {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:32453c1de775c889eb4e22f1197fe3bdfe457d16476ea407472b9442e6295f7a"}, - {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:693945278a31f2086d9bf3df0fe8254bbeaef1fe71e1351c3bd730aa7d31c41b"}, - {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:1d0ce09d36d53bbbe566fe296965b23b961764c0bcf3ce2fa45f463745c04701"}, - {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3a670dc61eb0d0eb7080890c13de3066790f9049b47b0de04007090807c776b0"}, - {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:dca69045298ce5c11fd539682cff879cc1e664c245d1c64da929813e54241d11"}, - {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a06339f38e9ed3a64e4c4e43aec7f59084033647f908e4259d279a52d3757d09"}, - {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b7f2f9f912dca3934c1baec2e4585a674ef16fe00218d833856408c48d5beee7"}, - {file = "frozenlist-1.4.1-cp38-cp38-win32.whl", hash = "sha256:e7004be74cbb7d9f34553a5ce5fb08be14fb33bc86f332fb71cbe5216362a497"}, - {file = "frozenlist-1.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:5a7d70357e7cee13f470c7883a063aae5fe209a493c57d86eb7f5a6f910fae09"}, - {file = "frozenlist-1.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bfa4a17e17ce9abf47a74ae02f32d014c5e9404b6d9ac7f729e01562bbee601e"}, - {file = "frozenlist-1.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b7e3ed87d4138356775346e6845cccbe66cd9e207f3cd11d2f0b9fd13681359d"}, - {file = "frozenlist-1.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c99169d4ff810155ca50b4da3b075cbde79752443117d89429595c2e8e37fed8"}, - {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edb678da49d9f72c9f6c609fbe41a5dfb9a9282f9e6a2253d5a91e0fc382d7c0"}, - {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6db4667b187a6742b33afbbaf05a7bc551ffcf1ced0000a571aedbb4aa42fc7b"}, - {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55fdc093b5a3cb41d420884cdaf37a1e74c3c37a31f46e66286d9145d2063bd0"}, - {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82e8211d69a4f4bc360ea22cd6555f8e61a1bd211d1d5d39d3d228b48c83a897"}, - {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89aa2c2eeb20957be2d950b85974b30a01a762f3308cd02bb15e1ad632e22dc7"}, - {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9d3e0c25a2350080e9319724dede4f31f43a6c9779be48021a7f4ebde8b2d742"}, - {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7268252af60904bf52c26173cbadc3a071cece75f873705419c8681f24d3edea"}, - {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:0c250a29735d4f15321007fb02865f0e6b6a41a6b88f1f523ca1596ab5f50bd5"}, - {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:96ec70beabbd3b10e8bfe52616a13561e58fe84c0101dd031dc78f250d5128b9"}, - {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:23b2d7679b73fe0e5a4560b672a39f98dfc6f60df63823b0a9970525325b95f6"}, - {file = "frozenlist-1.4.1-cp39-cp39-win32.whl", hash = "sha256:a7496bfe1da7fb1a4e1cc23bb67c58fab69311cc7d32b5a99c2007b4b2a0e932"}, - {file = "frozenlist-1.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:e6a20a581f9ce92d389a8c7d7c3dd47c81fd5d6e655c8dddf341e14aa48659d0"}, - {file = "frozenlist-1.4.1-py3-none-any.whl", hash = "sha256:04ced3e6a46b4cfffe20f9ae482818e34eba9b5fb0ce4056e4cc9b6e212d09b7"}, - {file = "frozenlist-1.4.1.tar.gz", hash = "sha256:c037a86e8513059a2613aaba4d817bb90b9d9b6b69aace3ce9c877e8c8ed402b"}, -] - -[[package]] -name = "identify" -version = "2.5.33" -description = "File identification library for Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "identify-2.5.33-py2.py3-none-any.whl", hash = "sha256:d40ce5fcd762817627670da8a7d8d8e65f24342d14539c59488dc603bf662e34"}, - {file = "identify-2.5.33.tar.gz", hash = "sha256:161558f9fe4559e1557e1bff323e8631f6a0e4837f7497767c1782832f16b62d"}, -] - -[package.extras] -license = ["ukkonen"] - -[[package]] -name = "idna" -version = "3.6" -description = "Internationalized Domain Names in Applications (IDNA)" -optional = false -python-versions = ">=3.5" -files = [ - {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"}, - {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"}, -] - -[[package]] -name = "multidict" -version = "6.0.4" -description = "multidict implementation" -optional = false -python-versions = ">=3.7" -files = [ - {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b1a97283e0c85772d613878028fec909f003993e1007eafa715b24b377cb9b8"}, - {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eeb6dcc05e911516ae3d1f207d4b0520d07f54484c49dfc294d6e7d63b734171"}, - {file = "multidict-6.0.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d6d635d5209b82a3492508cf5b365f3446afb65ae7ebd755e70e18f287b0adf7"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c048099e4c9e9d615545e2001d3d8a4380bd403e1a0578734e0d31703d1b0c0b"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ea20853c6dbbb53ed34cb4d080382169b6f4554d394015f1bef35e881bf83547"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:16d232d4e5396c2efbbf4f6d4df89bfa905eb0d4dc5b3549d872ab898451f569"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36c63aaa167f6c6b04ef2c85704e93af16c11d20de1d133e39de6a0e84582a93"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:64bdf1086b6043bf519869678f5f2757f473dee970d7abf6da91ec00acb9cb98"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:43644e38f42e3af682690876cff722d301ac585c5b9e1eacc013b7a3f7b696a0"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7582a1d1030e15422262de9f58711774e02fa80df0d1578995c76214f6954988"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ddff9c4e225a63a5afab9dd15590432c22e8057e1a9a13d28ed128ecf047bbdc"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ee2a1ece51b9b9e7752e742cfb661d2a29e7bcdba2d27e66e28a99f1890e4fa0"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a2e4369eb3d47d2034032a26c7a80fcb21a2cb22e1173d761a162f11e562caa5"}, - {file = "multidict-6.0.4-cp310-cp310-win32.whl", hash = "sha256:574b7eae1ab267e5f8285f0fe881f17efe4b98c39a40858247720935b893bba8"}, - {file = "multidict-6.0.4-cp310-cp310-win_amd64.whl", hash = "sha256:4dcbb0906e38440fa3e325df2359ac6cb043df8e58c965bb45f4e406ecb162cc"}, - {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0dfad7a5a1e39c53ed00d2dd0c2e36aed4650936dc18fd9a1826a5ae1cad6f03"}, - {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:64da238a09d6039e3bd39bb3aee9c21a5e34f28bfa5aa22518581f910ff94af3"}, - {file = "multidict-6.0.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ff959bee35038c4624250473988b24f846cbeb2c6639de3602c073f10410ceba"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01a3a55bd90018c9c080fbb0b9f4891db37d148a0a18722b42f94694f8b6d4c9"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c5cb09abb18c1ea940fb99360ea0396f34d46566f157122c92dfa069d3e0e982"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:666daae833559deb2d609afa4490b85830ab0dfca811a98b70a205621a6109fe"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11bdf3f5e1518b24530b8241529d2050014c884cf18b6fc69c0c2b30ca248710"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d18748f2d30f94f498e852c67d61261c643b349b9d2a581131725595c45ec6c"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:458f37be2d9e4c95e2d8866a851663cbc76e865b78395090786f6cd9b3bbf4f4"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:b1a2eeedcead3a41694130495593a559a668f382eee0727352b9a41e1c45759a"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7d6ae9d593ef8641544d6263c7fa6408cc90370c8cb2bbb65f8d43e5b0351d9c"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5979b5632c3e3534e42ca6ff856bb24b2e3071b37861c2c727ce220d80eee9ed"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dcfe792765fab89c365123c81046ad4103fcabbc4f56d1c1997e6715e8015461"}, - {file = "multidict-6.0.4-cp311-cp311-win32.whl", hash = "sha256:3601a3cece3819534b11d4efc1eb76047488fddd0c85a3948099d5da4d504636"}, - {file = "multidict-6.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:81a4f0b34bd92df3da93315c6a59034df95866014ac08535fc819f043bfd51f0"}, - {file = "multidict-6.0.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:67040058f37a2a51ed8ea8f6b0e6ee5bd78ca67f169ce6122f3e2ec80dfe9b78"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:853888594621e6604c978ce2a0444a1e6e70c8d253ab65ba11657659dcc9100f"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:39ff62e7d0f26c248b15e364517a72932a611a9b75f35b45be078d81bdb86603"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af048912e045a2dc732847d33821a9d84ba553f5c5f028adbd364dd4765092ac"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e8b901e607795ec06c9e42530788c45ac21ef3aaa11dbd0c69de543bfb79a9"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62501642008a8b9871ddfccbf83e4222cf8ac0d5aeedf73da36153ef2ec222d2"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:99b76c052e9f1bc0721f7541e5e8c05db3941eb9ebe7b8553c625ef88d6eefde"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:509eac6cf09c794aa27bcacfd4d62c885cce62bef7b2c3e8b2e49d365b5003fe"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:21a12c4eb6ddc9952c415f24eef97e3e55ba3af61f67c7bc388dcdec1404a067"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:5cad9430ab3e2e4fa4a2ef4450f548768400a2ac635841bc2a56a2052cdbeb87"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ab55edc2e84460694295f401215f4a58597f8f7c9466faec545093045476327d"}, - {file = "multidict-6.0.4-cp37-cp37m-win32.whl", hash = "sha256:5a4dcf02b908c3b8b17a45fb0f15b695bf117a67b76b7ad18b73cf8e92608775"}, - {file = "multidict-6.0.4-cp37-cp37m-win_amd64.whl", hash = "sha256:6ed5f161328b7df384d71b07317f4d8656434e34591f20552c7bcef27b0ab88e"}, - {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5fc1b16f586f049820c5c5b17bb4ee7583092fa0d1c4e28b5239181ff9532e0c"}, - {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1502e24330eb681bdaa3eb70d6358e818e8e8f908a22a1851dfd4e15bc2f8161"}, - {file = "multidict-6.0.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b692f419760c0e65d060959df05f2a531945af31fda0c8a3b3195d4efd06de11"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45e1ecb0379bfaab5eef059f50115b54571acfbe422a14f668fc8c27ba410e7e"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ddd3915998d93fbcd2566ddf9cf62cdb35c9e093075f862935573d265cf8f65d"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:59d43b61c59d82f2effb39a93c48b845efe23a3852d201ed2d24ba830d0b4cf2"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc8e1d0c705233c5dd0c5e6460fbad7827d5d36f310a0fadfd45cc3029762258"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6aa0418fcc838522256761b3415822626f866758ee0bc6632c9486b179d0b52"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6748717bb10339c4760c1e63da040f5f29f5ed6e59d76daee30305894069a660"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4d1a3d7ef5e96b1c9e92f973e43aa5e5b96c659c9bc3124acbbd81b0b9c8a951"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4372381634485bec7e46718edc71528024fcdc6f835baefe517b34a33c731d60"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:fc35cb4676846ef752816d5be2193a1e8367b4c1397b74a565a9d0389c433a1d"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:4b9d9e4e2b37daddb5c23ea33a3417901fa7c7b3dee2d855f63ee67a0b21e5b1"}, - {file = "multidict-6.0.4-cp38-cp38-win32.whl", hash = "sha256:e41b7e2b59679edfa309e8db64fdf22399eec4b0b24694e1b2104fb789207779"}, - {file = "multidict-6.0.4-cp38-cp38-win_amd64.whl", hash = "sha256:d6c254ba6e45d8e72739281ebc46ea5eb5f101234f3ce171f0e9f5cc86991480"}, - {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:16ab77bbeb596e14212e7bab8429f24c1579234a3a462105cda4a66904998664"}, - {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc779e9e6f7fda81b3f9aa58e3a6091d49ad528b11ed19f6621408806204ad35"}, - {file = "multidict-6.0.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ceef517eca3e03c1cceb22030a3e39cb399ac86bff4e426d4fc6ae49052cc60"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:281af09f488903fde97923c7744bb001a9b23b039a909460d0f14edc7bf59706"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:52f2dffc8acaba9a2f27174c41c9e57f60b907bb9f096b36b1a1f3be71c6284d"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b41156839806aecb3641f3208c0dafd3ac7775b9c4c422d82ee2a45c34ba81ca"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5e3fc56f88cc98ef8139255cf8cd63eb2c586531e43310ff859d6bb3a6b51f1"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8316a77808c501004802f9beebde51c9f857054a0c871bd6da8280e718444449"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f70b98cd94886b49d91170ef23ec5c0e8ebb6f242d734ed7ed677b24d50c82cf"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bf6774e60d67a9efe02b3616fee22441d86fab4c6d335f9d2051d19d90a40063"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:e69924bfcdda39b722ef4d9aa762b2dd38e4632b3641b1d9a57ca9cd18f2f83a"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:6b181d8c23da913d4ff585afd1155a0e1194c0b50c54fcfe286f70cdaf2b7176"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:52509b5be062d9eafc8170e53026fbc54cf3b32759a23d07fd935fb04fc22d95"}, - {file = "multidict-6.0.4-cp39-cp39-win32.whl", hash = "sha256:27c523fbfbdfd19c6867af7346332b62b586eed663887392cff78d614f9ec313"}, - {file = "multidict-6.0.4-cp39-cp39-win_amd64.whl", hash = "sha256:33029f5734336aa0d4c0384525da0387ef89148dc7191aae00ca5fb23d7aafc2"}, - {file = "multidict-6.0.4.tar.gz", hash = "sha256:3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49"}, -] - -[[package]] -name = "nodeenv" -version = "1.8.0" -description = "Node.js virtual environment builder" -optional = false -python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" -files = [ - {file = "nodeenv-1.8.0-py2.py3-none-any.whl", hash = "sha256:df865724bb3c3adc86b3876fa209771517b0cfe596beff01a92700e0e8be4cec"}, - {file = "nodeenv-1.8.0.tar.gz", hash = "sha256:d51e0c37e64fbf47d017feac3145cdbb58836d7eee8c6f6d3b6880c5456227d2"}, -] - -[package.dependencies] -setuptools = "*" - -[[package]] -name = "platformdirs" -version = "4.1.0" -description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -optional = false -python-versions = ">=3.8" -files = [ - {file = "platformdirs-4.1.0-py3-none-any.whl", hash = "sha256:11c8f37bcca40db96d8144522d925583bdb7a31f7b0e37e3ed4318400a8e2380"}, - {file = "platformdirs-4.1.0.tar.gz", hash = "sha256:906d548203468492d432bcb294d4bc2fff751bf84971fbb2c10918cc206ee420"}, -] - -[package.extras] -docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] - -[[package]] -name = "pre-commit" -version = "3.6.0" -description = "A framework for managing and maintaining multi-language pre-commit hooks." -optional = false -python-versions = ">=3.9" -files = [ - {file = "pre_commit-3.6.0-py2.py3-none-any.whl", hash = "sha256:c255039ef399049a5544b6ce13d135caba8f2c28c3b4033277a788f434308376"}, - {file = "pre_commit-3.6.0.tar.gz", hash = "sha256:d30bad9abf165f7785c15a21a1f46da7d0677cb00ee7ff4c579fd38922efe15d"}, -] - -[package.dependencies] -cfgv = ">=2.0.0" -identify = ">=1.0.0" -nodeenv = ">=0.11.1" -pyyaml = ">=5.1" -virtualenv = ">=20.10.0" - -[[package]] -name = "pyyaml" -version = "6.0.1" -description = "YAML parser and emitter for Python" -optional = false -python-versions = ">=3.6" -files = [ - {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, - {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, - {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, - {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, - {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, - {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, - {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, - {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, - {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, - {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, - {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, - {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, - {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, - {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, - {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, - {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, - {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, - {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, - {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, - {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, - {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, - {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, - {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, - {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, - {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, - {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, - {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, - {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, - {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, -] - -[[package]] -name = "ruff" -version = "0.1.14" -description = "An extremely fast Python linter and code formatter, written in Rust." -optional = false -python-versions = ">=3.7" -files = [ - {file = "ruff-0.1.14-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:96f76536df9b26622755c12ed8680f159817be2f725c17ed9305b472a757cdbb"}, - {file = "ruff-0.1.14-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:ab3f71f64498c7241123bb5a768544cf42821d2a537f894b22457a543d3ca7a9"}, - {file = "ruff-0.1.14-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7060156ecc572b8f984fd20fd8b0fcb692dd5d837b7606e968334ab7ff0090ab"}, - {file = "ruff-0.1.14-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a53d8e35313d7b67eb3db15a66c08434809107659226a90dcd7acb2afa55faea"}, - {file = "ruff-0.1.14-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bea9be712b8f5b4ebed40e1949379cfb2a7d907f42921cf9ab3aae07e6fba9eb"}, - {file = "ruff-0.1.14-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:2270504d629a0b064247983cbc495bed277f372fb9eaba41e5cf51f7ba705a6a"}, - {file = "ruff-0.1.14-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80258bb3b8909b1700610dfabef7876423eed1bc930fe177c71c414921898efa"}, - {file = "ruff-0.1.14-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:653230dd00aaf449eb5ff25d10a6e03bc3006813e2cb99799e568f55482e5cae"}, - {file = "ruff-0.1.14-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87b3acc6c4e6928459ba9eb7459dd4f0c4bf266a053c863d72a44c33246bfdbf"}, - {file = "ruff-0.1.14-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:6b3dadc9522d0eccc060699a9816e8127b27addbb4697fc0c08611e4e6aeb8b5"}, - {file = "ruff-0.1.14-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:1c8eca1a47b4150dc0fbec7fe68fc91c695aed798532a18dbb1424e61e9b721f"}, - {file = "ruff-0.1.14-py3-none-musllinux_1_2_i686.whl", hash = "sha256:62ce2ae46303ee896fc6811f63d6dabf8d9c389da0f3e3f2bce8bc7f15ef5488"}, - {file = "ruff-0.1.14-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:b2027dde79d217b211d725fc833e8965dc90a16d0d3213f1298f97465956661b"}, - {file = "ruff-0.1.14-py3-none-win32.whl", hash = "sha256:722bafc299145575a63bbd6b5069cb643eaa62546a5b6398f82b3e4403329cab"}, - {file = "ruff-0.1.14-py3-none-win_amd64.whl", hash = "sha256:e3d241aa61f92b0805a7082bd89a9990826448e4d0398f0e2bc8f05c75c63d99"}, - {file = "ruff-0.1.14-py3-none-win_arm64.whl", hash = "sha256:269302b31ade4cde6cf6f9dd58ea593773a37ed3f7b97e793c8594b262466b67"}, - {file = "ruff-0.1.14.tar.gz", hash = "sha256:ad3f8088b2dfd884820289a06ab718cde7d38b94972212cc4ba90d5fbc9955f3"}, -] - -[[package]] -name = "setuptools" -version = "69.0.3" -description = "Easily download, build, install, upgrade, and uninstall Python packages" -optional = false -python-versions = ">=3.8" -files = [ - {file = "setuptools-69.0.3-py3-none-any.whl", hash = "sha256:385eb4edd9c9d5c17540511303e39a147ce2fc04bc55289c322b9e5904fe2c05"}, - {file = "setuptools-69.0.3.tar.gz", hash = "sha256:be1af57fc409f93647f2e8e4573a142ed38724b8cdd389706a867bb4efcf1e78"}, -] - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] -testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] - -[[package]] -name = "virtualenv" -version = "20.25.0" -description = "Virtual Python Environment builder" -optional = false -python-versions = ">=3.7" -files = [ - {file = "virtualenv-20.25.0-py3-none-any.whl", hash = "sha256:4238949c5ffe6876362d9c0180fc6c3a824a7b12b80604eeb8085f2ed7460de3"}, - {file = "virtualenv-20.25.0.tar.gz", hash = "sha256:bf51c0d9c7dd63ea8e44086fa1e4fb1093a31e963b86959257378aef020e1f1b"}, -] - -[package.dependencies] -distlib = ">=0.3.7,<1" -filelock = ">=3.12.2,<4" -platformdirs = ">=3.9.1,<5" - -[package.extras] -docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] -test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] - -[[package]] -name = "yarl" -version = "1.9.4" -description = "Yet another URL library" -optional = false -python-versions = ">=3.7" -files = [ - {file = "yarl-1.9.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a8c1df72eb746f4136fe9a2e72b0c9dc1da1cbd23b5372f94b5820ff8ae30e0e"}, - {file = "yarl-1.9.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a3a6ed1d525bfb91b3fc9b690c5a21bb52de28c018530ad85093cc488bee2dd2"}, - {file = "yarl-1.9.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c38c9ddb6103ceae4e4498f9c08fac9b590c5c71b0370f98714768e22ac6fa66"}, - {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9e09c9d74f4566e905a0b8fa668c58109f7624db96a2171f21747abc7524234"}, - {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8477c1ee4bd47c57d49621a062121c3023609f7a13b8a46953eb6c9716ca392"}, - {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5ff2c858f5f6a42c2a8e751100f237c5e869cbde669a724f2062d4c4ef93551"}, - {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:357495293086c5b6d34ca9616a43d329317feab7917518bc97a08f9e55648455"}, - {file = "yarl-1.9.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54525ae423d7b7a8ee81ba189f131054defdb122cde31ff17477951464c1691c"}, - {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:801e9264d19643548651b9db361ce3287176671fb0117f96b5ac0ee1c3530d53"}, - {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e516dc8baf7b380e6c1c26792610230f37147bb754d6426462ab115a02944385"}, - {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:7d5aaac37d19b2904bb9dfe12cdb08c8443e7ba7d2852894ad448d4b8f442863"}, - {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:54beabb809ffcacbd9d28ac57b0db46e42a6e341a030293fb3185c409e626b8b"}, - {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bac8d525a8dbc2a1507ec731d2867025d11ceadcb4dd421423a5d42c56818541"}, - {file = "yarl-1.9.4-cp310-cp310-win32.whl", hash = "sha256:7855426dfbddac81896b6e533ebefc0af2f132d4a47340cee6d22cac7190022d"}, - {file = "yarl-1.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:848cd2a1df56ddbffeb375535fb62c9d1645dde33ca4d51341378b3f5954429b"}, - {file = "yarl-1.9.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:35a2b9396879ce32754bd457d31a51ff0a9d426fd9e0e3c33394bf4b9036b099"}, - {file = "yarl-1.9.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c7d56b293cc071e82532f70adcbd8b61909eec973ae9d2d1f9b233f3d943f2c"}, - {file = "yarl-1.9.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d8a1c6c0be645c745a081c192e747c5de06e944a0d21245f4cf7c05e457c36e0"}, - {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b3c1ffe10069f655ea2d731808e76e0f452fc6c749bea04781daf18e6039525"}, - {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:549d19c84c55d11687ddbd47eeb348a89df9cb30e1993f1b128f4685cd0ebbf8"}, - {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7409f968456111140c1c95301cadf071bd30a81cbd7ab829169fb9e3d72eae9"}, - {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e23a6d84d9d1738dbc6e38167776107e63307dfc8ad108e580548d1f2c587f42"}, - {file = "yarl-1.9.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d8b889777de69897406c9fb0b76cdf2fd0f31267861ae7501d93003d55f54fbe"}, - {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:03caa9507d3d3c83bca08650678e25364e1843b484f19986a527630ca376ecce"}, - {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4e9035df8d0880b2f1c7f5031f33f69e071dfe72ee9310cfc76f7b605958ceb9"}, - {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:c0ec0ed476f77db9fb29bca17f0a8fcc7bc97ad4c6c1d8959c507decb22e8572"}, - {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:ee04010f26d5102399bd17f8df8bc38dc7ccd7701dc77f4a68c5b8d733406958"}, - {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:49a180c2e0743d5d6e0b4d1a9e5f633c62eca3f8a86ba5dd3c471060e352ca98"}, - {file = "yarl-1.9.4-cp311-cp311-win32.whl", hash = "sha256:81eb57278deb6098a5b62e88ad8281b2ba09f2f1147c4767522353eaa6260b31"}, - {file = "yarl-1.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:d1d2532b340b692880261c15aee4dc94dd22ca5d61b9db9a8a361953d36410b1"}, - {file = "yarl-1.9.4-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0d2454f0aef65ea81037759be5ca9947539667eecebca092733b2eb43c965a81"}, - {file = "yarl-1.9.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:44d8ffbb9c06e5a7f529f38f53eda23e50d1ed33c6c869e01481d3fafa6b8142"}, - {file = "yarl-1.9.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:aaaea1e536f98754a6e5c56091baa1b6ce2f2700cc4a00b0d49eca8dea471074"}, - {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3777ce5536d17989c91696db1d459574e9a9bd37660ea7ee4d3344579bb6f129"}, - {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fc5fc1eeb029757349ad26bbc5880557389a03fa6ada41703db5e068881e5f2"}, - {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea65804b5dc88dacd4a40279af0cdadcfe74b3e5b4c897aa0d81cf86927fee78"}, - {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa102d6d280a5455ad6a0f9e6d769989638718e938a6a0a2ff3f4a7ff8c62cc4"}, - {file = "yarl-1.9.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09efe4615ada057ba2d30df871d2f668af661e971dfeedf0c159927d48bbeff0"}, - {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:008d3e808d03ef28542372d01057fd09168419cdc8f848efe2804f894ae03e51"}, - {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:6f5cb257bc2ec58f437da2b37a8cd48f666db96d47b8a3115c29f316313654ff"}, - {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:992f18e0ea248ee03b5a6e8b3b4738850ae7dbb172cc41c966462801cbf62cf7"}, - {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:0e9d124c191d5b881060a9e5060627694c3bdd1fe24c5eecc8d5d7d0eb6faabc"}, - {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3986b6f41ad22988e53d5778f91855dc0399b043fc8946d4f2e68af22ee9ff10"}, - {file = "yarl-1.9.4-cp312-cp312-win32.whl", hash = "sha256:4b21516d181cd77ebd06ce160ef8cc2a5e9ad35fb1c5930882baff5ac865eee7"}, - {file = "yarl-1.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:a9bd00dc3bc395a662900f33f74feb3e757429e545d831eef5bb280252631984"}, - {file = "yarl-1.9.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:63b20738b5aac74e239622d2fe30df4fca4942a86e31bf47a81a0e94c14df94f"}, - {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7d7f7de27b8944f1fee2c26a88b4dabc2409d2fea7a9ed3df79b67277644e17"}, - {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c74018551e31269d56fab81a728f683667e7c28c04e807ba08f8c9e3bba32f14"}, - {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ca06675212f94e7a610e85ca36948bb8fc023e458dd6c63ef71abfd482481aa5"}, - {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5aef935237d60a51a62b86249839b51345f47564208c6ee615ed2a40878dccdd"}, - {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b134fd795e2322b7684155b7855cc99409d10b2e408056db2b93b51a52accc7"}, - {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d25039a474c4c72a5ad4b52495056f843a7ff07b632c1b92ea9043a3d9950f6e"}, - {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f7d6b36dd2e029b6bcb8a13cf19664c7b8e19ab3a58e0fefbb5b8461447ed5ec"}, - {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:957b4774373cf6f709359e5c8c4a0af9f6d7875db657adb0feaf8d6cb3c3964c"}, - {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:d7eeb6d22331e2fd42fce928a81c697c9ee2d51400bd1a28803965883e13cead"}, - {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:6a962e04b8f91f8c4e5917e518d17958e3bdee71fd1d8b88cdce74dd0ebbf434"}, - {file = "yarl-1.9.4-cp37-cp37m-win32.whl", hash = "sha256:f3bc6af6e2b8f92eced34ef6a96ffb248e863af20ef4fde9448cc8c9b858b749"}, - {file = "yarl-1.9.4-cp37-cp37m-win_amd64.whl", hash = "sha256:ad4d7a90a92e528aadf4965d685c17dacff3df282db1121136c382dc0b6014d2"}, - {file = "yarl-1.9.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ec61d826d80fc293ed46c9dd26995921e3a82146feacd952ef0757236fc137be"}, - {file = "yarl-1.9.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8be9e837ea9113676e5754b43b940b50cce76d9ed7d2461df1af39a8ee674d9f"}, - {file = "yarl-1.9.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:bef596fdaa8f26e3d66af846bbe77057237cb6e8efff8cd7cc8dff9a62278bbf"}, - {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d47552b6e52c3319fede1b60b3de120fe83bde9b7bddad11a69fb0af7db32f1"}, - {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84fc30f71689d7fc9168b92788abc977dc8cefa806909565fc2951d02f6b7d57"}, - {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4aa9741085f635934f3a2583e16fcf62ba835719a8b2b28fb2917bb0537c1dfa"}, - {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:206a55215e6d05dbc6c98ce598a59e6fbd0c493e2de4ea6cc2f4934d5a18d130"}, - {file = "yarl-1.9.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07574b007ee20e5c375a8fe4a0789fad26db905f9813be0f9fef5a68080de559"}, - {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5a2e2433eb9344a163aced6a5f6c9222c0786e5a9e9cac2c89f0b28433f56e23"}, - {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6ad6d10ed9b67a382b45f29ea028f92d25bc0bc1daf6c5b801b90b5aa70fb9ec"}, - {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:6fe79f998a4052d79e1c30eeb7d6c1c1056ad33300f682465e1b4e9b5a188b78"}, - {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a825ec844298c791fd28ed14ed1bffc56a98d15b8c58a20e0e08c1f5f2bea1be"}, - {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8619d6915b3b0b34420cf9b2bb6d81ef59d984cb0fde7544e9ece32b4b3043c3"}, - {file = "yarl-1.9.4-cp38-cp38-win32.whl", hash = "sha256:686a0c2f85f83463272ddffd4deb5e591c98aac1897d65e92319f729c320eece"}, - {file = "yarl-1.9.4-cp38-cp38-win_amd64.whl", hash = "sha256:a00862fb23195b6b8322f7d781b0dc1d82cb3bcac346d1e38689370cc1cc398b"}, - {file = "yarl-1.9.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:604f31d97fa493083ea21bd9b92c419012531c4e17ea6da0f65cacdcf5d0bd27"}, - {file = "yarl-1.9.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8a854227cf581330ffa2c4824d96e52ee621dd571078a252c25e3a3b3d94a1b1"}, - {file = "yarl-1.9.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ba6f52cbc7809cd8d74604cce9c14868306ae4aa0282016b641c661f981a6e91"}, - {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a6327976c7c2f4ee6816eff196e25385ccc02cb81427952414a64811037bbc8b"}, - {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8397a3817d7dcdd14bb266283cd1d6fc7264a48c186b986f32e86d86d35fbac5"}, - {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0381b4ce23ff92f8170080c97678040fc5b08da85e9e292292aba67fdac6c34"}, - {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23d32a2594cb5d565d358a92e151315d1b2268bc10f4610d098f96b147370136"}, - {file = "yarl-1.9.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ddb2a5c08a4eaaba605340fdee8fc08e406c56617566d9643ad8bf6852778fc7"}, - {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:26a1dc6285e03f3cc9e839a2da83bcbf31dcb0d004c72d0730e755b33466c30e"}, - {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:18580f672e44ce1238b82f7fb87d727c4a131f3a9d33a5e0e82b793362bf18b4"}, - {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:29e0f83f37610f173eb7e7b5562dd71467993495e568e708d99e9d1944f561ec"}, - {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:1f23e4fe1e8794f74b6027d7cf19dc25f8b63af1483d91d595d4a07eca1fb26c"}, - {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:db8e58b9d79200c76956cefd14d5c90af54416ff5353c5bfd7cbe58818e26ef0"}, - {file = "yarl-1.9.4-cp39-cp39-win32.whl", hash = "sha256:c7224cab95645c7ab53791022ae77a4509472613e839dab722a72abe5a684575"}, - {file = "yarl-1.9.4-cp39-cp39-win_amd64.whl", hash = "sha256:824d6c50492add5da9374875ce72db7a0733b29c2394890aef23d533106e2b15"}, - {file = "yarl-1.9.4-py3-none-any.whl", hash = "sha256:928cecb0ef9d5a7946eb6ff58417ad2fe9375762382f1bf5c55e61645f2c43ad"}, - {file = "yarl-1.9.4.tar.gz", hash = "sha256:566db86717cf8080b99b58b083b773a908ae40f06681e87e589a976faf8246bf"}, -] - -[package.dependencies] -idna = ">=2.0" -multidict = ">=4.0" - -[metadata] -lock-version = "2.0" -python-versions = "^3.11" -content-hash = "57c5cff9c4c2b7d530e5c5967d5347d181b06d566e69b0748a3517eada0e9fd7" From 9076e42065e174d3b823fbc61105dfa2494fc4fd Mon Sep 17 00:00:00 2001 From: Jerry Lee Date: Wed, 24 Jan 2024 18:12:03 +0800 Subject: [PATCH 26/44] add: Training data --- ai/data/sample/Container CPU Utilization.csv | 598 +++++++++++++++++ .../sample/Container Memory Utilization.csv | 599 +++++++++++++++++ ai/data/sample/Container Startup Latency.csv | 2 + ai/data/sample/Instance Count.csv | 602 ++++++++++++++++++ ai/data/sample/Request Count.csv | 602 ++++++++++++++++++ ai/data/sample/Request Latency.csv | 602 ++++++++++++++++++ 6 files changed, 3005 insertions(+) create mode 100644 ai/data/sample/Container CPU Utilization.csv create mode 100644 ai/data/sample/Container Memory Utilization.csv create mode 100644 ai/data/sample/Container Startup Latency.csv create mode 100644 ai/data/sample/Instance Count.csv create mode 100644 ai/data/sample/Request Count.csv create mode 100644 ai/data/sample/Request Latency.csv diff --git a/ai/data/sample/Container CPU Utilization.csv b/ai/data/sample/Container CPU Utilization.csv new file mode 100644 index 0000000..84938ac --- /dev/null +++ b/ai/data/sample/Container CPU Utilization.csv @@ -0,0 +1,598 @@ +Time,Container CPU Utilization (%) +Thu Dec 07 2023 09:00:00 ,16.0875 +Thu Dec 07 2023 09:01:00 ,16.0875 +Thu Dec 07 2023 09:02:00 ,16.0875 +Thu Dec 07 2023 09:03:00 ,16.0875 +Thu Dec 07 2023 09:04:00 ,16.0875 +Thu Dec 07 2023 09:05:00 ,16.0875 +Thu Dec 07 2023 09:06:00 ,16.0875 +Thu Dec 07 2023 09:07:00 ,16.0875 +Thu Dec 07 2023 09:08:00 ,16.0875 +Thu Dec 07 2023 09:09:00 ,16.0875 +Thu Dec 07 2023 09:10:00 ,16.0875 +Thu Dec 07 2023 09:11:00 ,16.0875 +Thu Dec 07 2023 09:12:00 ,16.0875 +Thu Dec 07 2023 09:13:00 ,16.0875 +Thu Dec 07 2023 09:14:00 ,16.0875 +Thu Dec 07 2023 09:15:00 ,16.0875 +Thu Dec 07 2023 09:16:00 ,16.0875 +Thu Dec 07 2023 09:17:00 ,16.0875 +Thu Dec 07 2023 09:18:00 ,64.8375 +Thu Dec 07 2023 09:19:00 ,32.3375 +Thu Dec 07 2023 09:20:00 ,16.0875 +Thu Dec 07 2023 09:21:00 ,32.3375 +Thu Dec 07 2023 09:22:00 ,32.3375 +Thu Dec 07 2023 09:23:00 ,32.3375 +Thu Dec 07 2023 09:24:00 ,16.0875 +Thu Dec 07 2023 09:25:00 ,16.0875 +Thu Dec 07 2023 09:26:00 ,32.3375 +Thu Dec 07 2023 09:27:00 ,16.0875 +Thu Dec 07 2023 09:28:00 ,16.0875 +Thu Dec 07 2023 09:29:00 ,16.0875 +Thu Dec 07 2023 09:30:00 ,16.0875 +Thu Dec 07 2023 09:31:00 ,16.0875 +Thu Dec 07 2023 09:32:00 ,16.0875 +Thu Dec 07 2023 09:33:00 ,16.0875 +Thu Dec 07 2023 09:34:00 ,16.0875 +Thu Dec 07 2023 09:35:00 ,16.0875 +Thu Dec 07 2023 09:36:00 ,16.0875 +Thu Dec 07 2023 09:37:00 ,16.0875 +Thu Dec 07 2023 09:39:00 ,32.3375 +Thu Dec 07 2023 09:40:00 ,16.0875 +Thu Dec 07 2023 09:41:00 ,97.3375 +Thu Dec 07 2023 09:42:00 ,64.8375 +Thu Dec 07 2023 09:43:00 ,68.5875 +Thu Dec 07 2023 09:44:00 ,16.0875 +Thu Dec 07 2023 09:45:00 ,16.0875 +Thu Dec 07 2023 09:46:00 ,16.0875 +Thu Dec 07 2023 09:47:00 ,16.0875 +Thu Dec 07 2023 09:48:00 ,16.0875 +Thu Dec 07 2023 09:49:00 ,16.0875 +Thu Dec 07 2023 09:50:00 ,16.0875 +Thu Dec 07 2023 09:51:00 ,16.0875 +Thu Dec 07 2023 09:52:00 ,16.0875 +Thu Dec 07 2023 09:53:00 ,16.0875 +Thu Dec 07 2023 09:54:00 ,16.0875 +Thu Dec 07 2023 09:55:00 ,16.0875 +Thu Dec 07 2023 09:56:00 ,16.0875 +Thu Dec 07 2023 09:57:00 ,16.0875 +Thu Dec 07 2023 09:58:00 ,16.0875 +Thu Dec 07 2023 09:59:00 ,32.3375 +Thu Dec 07 2023 10:00:00 ,32.3375 +Thu Dec 07 2023 10:01:00 ,16.0875 +Thu Dec 07 2023 10:02:00 ,16.0875 +Thu Dec 07 2023 10:03:00 ,16.0875 +Thu Dec 07 2023 10:04:00 ,16.0875 +Thu Dec 07 2023 10:05:00 ,16.0875 +Thu Dec 07 2023 10:06:00 ,16.0875 +Thu Dec 07 2023 10:07:00 ,16.0875 +Thu Dec 07 2023 10:08:00 ,16.0875 +Thu Dec 07 2023 10:09:00 ,16.0875 +Thu Dec 07 2023 10:10:00 ,16.0875 +Thu Dec 07 2023 10:11:00 ,16.0875 +Thu Dec 07 2023 10:12:00 ,16.0875 +Thu Dec 07 2023 10:13:00 ,16.0875 +Thu Dec 07 2023 10:14:00 ,16.0875 +Thu Dec 07 2023 10:15:00 ,16.0875 +Thu Dec 07 2023 10:16:00 ,16.0875 +Thu Dec 07 2023 10:17:00 ,16.0875 +Thu Dec 07 2023 10:18:00 ,16.0875 +Thu Dec 07 2023 10:19:00 ,16.0875 +Thu Dec 07 2023 10:20:00 ,16.0875 +Thu Dec 07 2023 10:21:00 ,16.0875 +Thu Dec 07 2023 10:22:00 ,16.0875 +Thu Dec 07 2023 10:23:00 ,16.0875 +Thu Dec 07 2023 10:24:00 ,16.0875 +Thu Dec 07 2023 10:25:00 ,16.0875 +Thu Dec 07 2023 10:26:00 ,16.0875 +Thu Dec 07 2023 10:27:00 ,16.0875 +Thu Dec 07 2023 10:28:00 ,16.0875 +Thu Dec 07 2023 10:29:00 ,16.0875 +Thu Dec 07 2023 10:30:00 ,16.0875 +Thu Dec 07 2023 10:31:00 ,16.0875 +Thu Dec 07 2023 10:32:00 ,16.0875 +Thu Dec 07 2023 10:33:00 ,16.0875 +Thu Dec 07 2023 10:34:00 ,16.0875 +Thu Dec 07 2023 10:35:00 ,16.0875 +Thu Dec 07 2023 10:36:00 ,16.0875 +Thu Dec 07 2023 10:37:00 ,16.0875 +Thu Dec 07 2023 10:38:00 ,16.0875 +Thu Dec 07 2023 10:39:00 ,16.0875 +Thu Dec 07 2023 10:40:00 ,16.0875 +Thu Dec 07 2023 10:41:00 ,16.0875 +Thu Dec 07 2023 10:42:00 ,16.0875 +Thu Dec 07 2023 10:43:00 ,16.0875 +Thu Dec 07 2023 10:44:00 ,16.0875 +Thu Dec 07 2023 10:45:00 ,16.0875 +Thu Dec 07 2023 10:46:00 ,16.0875 +Thu Dec 07 2023 10:47:00 ,16.0875 +Thu Dec 07 2023 10:48:00 ,16.0875 +Thu Dec 07 2023 10:49:00 ,16.0875 +Thu Dec 07 2023 10:50:00 ,16.0875 +Thu Dec 07 2023 10:51:00 ,16.0875 +Thu Dec 07 2023 10:52:00 ,16.0875 +Thu Dec 07 2023 10:53:00 ,16.0875 +Thu Dec 07 2023 10:54:00 ,16.0875 +Thu Dec 07 2023 10:55:00 ,16.0875 +Thu Dec 07 2023 10:56:00 ,16.0875 +Thu Dec 07 2023 10:57:00 ,16.0875 +Thu Dec 07 2023 10:58:00 ,16.0875 +Thu Dec 07 2023 10:59:00 ,16.0875 +Thu Dec 07 2023 11:00:00 ,16.0875 +Thu Dec 07 2023 11:01:00 ,16.0875 +Thu Dec 07 2023 11:02:00 ,16.0875 +Thu Dec 07 2023 11:03:00 ,16.0875 +Thu Dec 07 2023 11:04:00 ,16.0875 +Thu Dec 07 2023 11:05:00 ,16.0875 +Thu Dec 07 2023 11:06:00 ,16.0875 +Thu Dec 07 2023 11:07:00 ,16.0875 +Thu Dec 07 2023 11:08:00 ,16.0875 +Thu Dec 07 2023 11:09:00 ,16.0875 +Thu Dec 07 2023 11:10:00 ,16.0875 +Thu Dec 07 2023 11:11:00 ,16.0875 +Thu Dec 07 2023 11:12:00 ,16.0875 +Thu Dec 07 2023 11:13:00 ,16.0875 +Thu Dec 07 2023 11:14:00 ,16.0875 +Thu Dec 07 2023 11:15:00 ,16.0875 +Thu Dec 07 2023 11:16:00 ,32.3375 +Thu Dec 07 2023 11:17:00 ,16.0875 +Thu Dec 07 2023 11:18:00 ,32.3375 +Thu Dec 07 2023 11:19:00 ,16.0875 +Thu Dec 07 2023 11:20:00 ,16.0875 +Thu Dec 07 2023 11:21:00 ,16.0875 +Thu Dec 07 2023 11:22:00 ,16.0875 +Thu Dec 07 2023 11:23:00 ,16.0875 +Thu Dec 07 2023 11:24:00 ,16.0875 +Thu Dec 07 2023 11:25:00 ,16.0875 +Thu Dec 07 2023 11:26:00 ,16.0875 +Thu Dec 07 2023 11:27:00 ,16.0875 +Thu Dec 07 2023 11:28:00 ,16.0875 +Thu Dec 07 2023 11:29:00 ,16.0875 +Thu Dec 07 2023 11:30:00 ,16.0875 +Thu Dec 07 2023 11:31:00 ,16.0875 +Thu Dec 07 2023 11:32:00 ,16.0875 +Thu Dec 07 2023 11:33:00 ,16.0875 +Thu Dec 07 2023 11:34:00 ,16.0875 +Thu Dec 07 2023 11:35:00 ,16.0875 +Thu Dec 07 2023 11:36:00 ,16.0875 +Thu Dec 07 2023 11:37:00 ,16.0875 +Thu Dec 07 2023 11:38:00 ,16.0875 +Thu Dec 07 2023 11:39:00 ,16.0875 +Thu Dec 07 2023 11:40:00 ,16.0875 +Thu Dec 07 2023 11:41:00 ,16.0875 +Thu Dec 07 2023 11:42:00 ,16.0875 +Thu Dec 07 2023 11:43:00 ,16.0875 +Thu Dec 07 2023 11:44:00 ,16.0875 +Thu Dec 07 2023 11:45:00 ,16.0875 +Thu Dec 07 2023 11:46:00 ,16.0875 +Thu Dec 07 2023 11:47:00 ,16.0875 +Thu Dec 07 2023 11:48:00 ,16.0875 +Thu Dec 07 2023 11:49:00 ,16.0875 +Thu Dec 07 2023 11:50:00 ,16.0875 +Thu Dec 07 2023 11:51:00 ,16.0875 +Thu Dec 07 2023 11:52:00 ,16.0875 +Thu Dec 07 2023 11:53:00 ,16.0875 +Thu Dec 07 2023 11:54:00 ,16.0875 +Thu Dec 07 2023 11:55:00 ,16.0875 +Thu Dec 07 2023 11:56:00 ,16.0875 +Thu Dec 07 2023 11:57:00 ,16.0875 +Thu Dec 07 2023 11:58:00 ,16.0875 +Thu Dec 07 2023 11:59:00 ,16.0875 +Thu Dec 07 2023 12:00:00 ,16.0875 +Thu Dec 07 2023 12:01:00 ,16.0875 +Thu Dec 07 2023 12:02:00 ,16.0875 +Thu Dec 07 2023 12:03:00 ,16.0875 +Thu Dec 07 2023 12:04:00 ,16.0875 +Thu Dec 07 2023 12:05:00 ,16.0875 +Thu Dec 07 2023 12:06:00 ,16.0875 +Thu Dec 07 2023 12:07:00 ,16.0875 +Thu Dec 07 2023 12:08:00 ,16.0875 +Thu Dec 07 2023 12:09:00 ,16.0875 +Thu Dec 07 2023 12:10:00 ,16.0875 +Thu Dec 07 2023 12:11:00 ,16.0875 +Thu Dec 07 2023 12:12:00 ,16.0875 +Thu Dec 07 2023 12:13:00 ,16.0875 +Thu Dec 07 2023 12:14:00 ,16.0875 +Thu Dec 07 2023 12:15:00 ,16.0875 +Thu Dec 07 2023 12:16:00 ,16.0875 +Thu Dec 07 2023 12:17:00 ,16.0875 +Thu Dec 07 2023 12:18:00 ,16.0875 +Thu Dec 07 2023 12:19:00 ,16.0875 +Thu Dec 07 2023 12:21:00 ,16.0875 +Thu Dec 07 2023 12:22:00 ,16.0875 +Thu Dec 07 2023 12:23:00 ,16.0875 +Thu Dec 07 2023 12:24:00 ,16.0875 +Thu Dec 07 2023 12:25:00 ,16.0875 +Thu Dec 07 2023 12:26:00 ,32.3375 +Thu Dec 07 2023 12:27:00 ,32.3375 +Thu Dec 07 2023 12:28:00 ,32.3375 +Thu Dec 07 2023 12:29:00 ,48.5875 +Thu Dec 07 2023 12:30:00 ,16.0875 +Thu Dec 07 2023 12:31:00 ,16.0875 +Thu Dec 07 2023 12:32:00 ,16.0875 +Thu Dec 07 2023 12:33:00 ,16.0875 +Thu Dec 07 2023 12:34:00 ,16.0875 +Thu Dec 07 2023 12:35:00 ,16.0875 +Thu Dec 07 2023 12:36:00 ,16.0875 +Thu Dec 07 2023 12:37:00 ,16.0875 +Thu Dec 07 2023 12:38:00 ,16.0875 +Thu Dec 07 2023 12:39:00 ,16.0875 +Thu Dec 07 2023 12:40:00 ,16.0875 +Thu Dec 07 2023 12:41:00 ,16.0875 +Thu Dec 07 2023 12:42:00 ,16.0875 +Thu Dec 07 2023 12:43:00 ,16.0875 +Thu Dec 07 2023 12:44:00 ,16.0875 +Thu Dec 07 2023 12:45:00 ,16.0875 +Thu Dec 07 2023 12:46:00 ,16.0875 +Thu Dec 07 2023 12:47:00 ,16.0875 +Thu Dec 07 2023 12:48:00 ,16.0875 +Thu Dec 07 2023 12:49:00 ,16.0875 +Thu Dec 07 2023 12:50:00 ,16.0875 +Thu Dec 07 2023 12:51:00 ,16.0875 +Thu Dec 07 2023 12:52:00 ,16.0875 +Thu Dec 07 2023 12:53:00 ,16.0875 +Thu Dec 07 2023 12:54:00 ,16.0875 +Thu Dec 07 2023 12:55:00 ,16.0875 +Thu Dec 07 2023 12:56:00 ,16.0875 +Thu Dec 07 2023 12:57:00 ,16.0875 +Thu Dec 07 2023 12:58:00 ,16.0875 +Thu Dec 07 2023 12:59:00 ,16.0875 +Thu Dec 07 2023 13:00:00 ,16.0875 +Thu Dec 07 2023 13:01:00 ,16.0875 +Thu Dec 07 2023 13:02:00 ,16.0875 +Thu Dec 07 2023 13:03:00 ,16.0875 +Thu Dec 07 2023 13:04:00 ,16.0875 +Thu Dec 07 2023 13:05:00 ,16.0875 +Thu Dec 07 2023 13:06:00 ,16.0875 +Thu Dec 07 2023 13:07:00 ,16.0875 +Thu Dec 07 2023 13:08:00 ,16.0875 +Thu Dec 07 2023 13:09:00 ,16.0875 +Thu Dec 07 2023 13:10:00 ,16.0875 +Thu Dec 07 2023 13:11:00 ,16.0875 +Thu Dec 07 2023 13:12:00 ,16.0875 +Thu Dec 07 2023 13:13:00 ,16.0875 +Thu Dec 07 2023 13:14:00 ,16.0875 +Thu Dec 07 2023 13:15:00 ,16.0875 +Thu Dec 07 2023 13:16:00 ,16.0875 +Thu Dec 07 2023 13:17:00 ,16.0875 +Thu Dec 07 2023 13:18:00 ,16.0875 +Thu Dec 07 2023 13:19:00 ,16.0875 +Thu Dec 07 2023 13:20:00 ,16.0875 +Thu Dec 07 2023 13:21:00 ,16.0875 +Thu Dec 07 2023 13:22:00 ,16.0875 +Thu Dec 07 2023 13:23:00 ,16.0875 +Thu Dec 07 2023 13:24:00 ,16.0875 +Thu Dec 07 2023 13:25:00 ,16.0875 +Thu Dec 07 2023 13:26:00 ,16.0875 +Thu Dec 07 2023 13:27:00 ,16.0875 +Thu Dec 07 2023 13:28:00 ,16.0875 +Thu Dec 07 2023 13:29:00 ,16.0875 +Thu Dec 07 2023 13:30:00 ,16.0875 +Thu Dec 07 2023 13:31:00 ,16.0875 +Thu Dec 07 2023 13:32:00 ,16.0875 +Thu Dec 07 2023 13:33:00 ,16.0875 +Thu Dec 07 2023 13:34:00 ,16.0875 +Thu Dec 07 2023 13:35:00 ,16.0875 +Thu Dec 07 2023 13:36:00 ,16.0875 +Thu Dec 07 2023 13:37:00 ,16.0875 +Thu Dec 07 2023 13:38:00 ,16.0875 +Thu Dec 07 2023 13:39:00 ,16.0875 +Thu Dec 07 2023 13:40:00 ,16.0875 +Thu Dec 07 2023 13:41:00 ,16.0875 +Thu Dec 07 2023 13:42:00 ,16.0875 +Thu Dec 07 2023 13:43:00 ,16.0875 +Thu Dec 07 2023 13:44:00 ,16.0875 +Thu Dec 07 2023 13:45:00 ,16.0875 +Thu Dec 07 2023 13:46:00 ,16.0875 +Thu Dec 07 2023 13:47:00 ,16.0875 +Thu Dec 07 2023 13:48:00 ,16.0875 +Thu Dec 07 2023 13:49:00 ,16.0875 +Thu Dec 07 2023 13:50:00 ,16.0875 +Thu Dec 07 2023 13:51:00 ,16.0875 +Thu Dec 07 2023 13:52:00 ,16.0875 +Thu Dec 07 2023 13:53:00 ,16.0875 +Thu Dec 07 2023 13:54:00 ,16.0875 +Thu Dec 07 2023 13:55:00 ,16.0875 +Thu Dec 07 2023 13:56:00 ,16.0875 +Thu Dec 07 2023 13:57:00 ,16.0875 +Thu Dec 07 2023 13:58:00 ,16.0875 +Thu Dec 07 2023 13:59:00 ,16.0875 +Thu Dec 07 2023 14:00:00 ,16.0875 +Thu Dec 07 2023 14:01:00 ,16.0875 +Thu Dec 07 2023 14:02:00 ,16.0875 +Thu Dec 07 2023 14:03:00 ,16.0875 +Thu Dec 07 2023 14:04:00 ,16.0875 +Thu Dec 07 2023 14:05:00 ,16.0875 +Thu Dec 07 2023 14:06:00 ,16.0875 +Thu Dec 07 2023 14:07:00 ,16.0875 +Thu Dec 07 2023 14:08:00 ,16.0875 +Thu Dec 07 2023 14:09:00 ,16.0875 +Thu Dec 07 2023 14:10:00 ,16.0875 +Thu Dec 07 2023 14:11:00 ,16.0875 +Thu Dec 07 2023 14:12:00 ,16.0875 +Thu Dec 07 2023 14:13:00 ,16.0875 +Thu Dec 07 2023 14:14:00 ,16.0875 +Thu Dec 07 2023 14:15:00 ,16.0875 +Thu Dec 07 2023 14:16:00 ,16.0875 +Thu Dec 07 2023 14:17:00 ,16.0875 +Thu Dec 07 2023 14:18:00 ,16.0875 +Thu Dec 07 2023 14:19:00 ,16.0875 +Thu Dec 07 2023 14:20:00 ,16.0875 +Thu Dec 07 2023 14:21:00 ,16.0875 +Thu Dec 07 2023 14:22:00 ,16.0875 +Thu Dec 07 2023 14:23:00 ,16.0875 +Thu Dec 07 2023 14:24:00 ,16.0875 +Thu Dec 07 2023 14:25:00 ,16.0875 +Thu Dec 07 2023 14:26:00 ,16.0875 +Thu Dec 07 2023 14:27:00 ,16.0875 +Thu Dec 07 2023 14:28:00 ,16.0875 +Thu Dec 07 2023 14:29:00 ,16.0875 +Thu Dec 07 2023 14:30:00 ,16.0875 +Thu Dec 07 2023 14:31:00 ,16.0875 +Thu Dec 07 2023 14:32:00 ,16.0875 +Thu Dec 07 2023 14:33:00 ,16.0875 +Thu Dec 07 2023 14:34:00 ,16.0875 +Thu Dec 07 2023 14:35:00 ,16.0875 +Thu Dec 07 2023 14:36:00 ,16.0875 +Thu Dec 07 2023 14:37:00 ,16.0875 +Thu Dec 07 2023 14:38:00 ,16.0875 +Thu Dec 07 2023 14:39:00 ,16.0875 +Thu Dec 07 2023 14:40:00 ,16.0875 +Thu Dec 07 2023 14:41:00 ,16.0875 +Thu Dec 07 2023 14:42:00 ,16.0875 +Thu Dec 07 2023 14:43:00 ,16.0875 +Thu Dec 07 2023 14:44:00 ,16.0875 +Thu Dec 07 2023 14:45:00 ,16.0875 +Thu Dec 07 2023 14:46:00 ,16.0875 +Thu Dec 07 2023 14:47:00 ,16.0875 +Thu Dec 07 2023 14:48:00 ,16.0875 +Thu Dec 07 2023 14:49:00 ,16.0875 +Thu Dec 07 2023 14:50:00 ,16.0875 +Thu Dec 07 2023 14:51:00 ,16.0875 +Thu Dec 07 2023 14:52:00 ,16.0875 +Thu Dec 07 2023 14:53:00 ,16.0875 +Thu Dec 07 2023 14:54:00 ,16.0875 +Thu Dec 07 2023 14:55:00 ,16.0875 +Thu Dec 07 2023 14:56:00 ,16.0875 +Thu Dec 07 2023 14:57:00 ,16.0875 +Thu Dec 07 2023 14:58:00 ,16.0875 +Thu Dec 07 2023 15:00:00 ,16.0875 +Thu Dec 07 2023 15:01:00 ,16.0875 +Thu Dec 07 2023 15:02:00 ,16.0875 +Thu Dec 07 2023 15:03:00 ,16.0875 +Thu Dec 07 2023 15:04:00 ,16.0875 +Thu Dec 07 2023 15:05:00 ,16.0875 +Thu Dec 07 2023 15:06:00 ,16.0875 +Thu Dec 07 2023 15:07:00 ,16.0875 +Thu Dec 07 2023 15:08:00 ,16.0875 +Thu Dec 07 2023 15:09:00 ,16.0875 +Thu Dec 07 2023 15:10:00 ,16.0875 +Thu Dec 07 2023 15:11:00 ,16.0875 +Thu Dec 07 2023 15:12:00 ,16.0875 +Thu Dec 07 2023 15:13:00 ,16.0875 +Thu Dec 07 2023 15:14:00 ,16.0875 +Thu Dec 07 2023 15:15:00 ,16.0875 +Thu Dec 07 2023 15:16:00 ,16.0875 +Thu Dec 07 2023 15:17:00 ,16.0875 +Thu Dec 07 2023 15:18:00 ,16.0875 +Thu Dec 07 2023 15:19:00 ,16.0875 +Thu Dec 07 2023 15:20:00 ,16.0875 +Thu Dec 07 2023 15:21:00 ,16.0875 +Thu Dec 07 2023 15:22:00 ,16.0875 +Thu Dec 07 2023 15:23:00 ,16.0875 +Thu Dec 07 2023 15:24:00 ,16.0875 +Thu Dec 07 2023 15:25:00 ,16.0875 +Thu Dec 07 2023 15:26:00 ,16.0875 +Thu Dec 07 2023 15:27:00 ,16.0875 +Thu Dec 07 2023 15:28:00 ,16.0875 +Thu Dec 07 2023 15:29:00 ,16.0875 +Thu Dec 07 2023 15:30:00 ,16.0875 +Thu Dec 07 2023 15:31:00 ,16.0875 +Thu Dec 07 2023 15:32:00 ,16.0875 +Thu Dec 07 2023 15:33:00 ,16.0875 +Thu Dec 07 2023 15:34:00 ,16.0875 +Thu Dec 07 2023 15:35:00 ,16.0875 +Thu Dec 07 2023 15:36:00 ,16.0875 +Thu Dec 07 2023 15:37:00 ,16.0875 +Thu Dec 07 2023 15:38:00 ,16.0875 +Thu Dec 07 2023 15:39:00 ,16.0875 +Thu Dec 07 2023 15:40:00 ,16.0875 +Thu Dec 07 2023 15:41:00 ,16.0875 +Thu Dec 07 2023 15:42:00 ,16.0875 +Thu Dec 07 2023 15:43:00 ,16.0875 +Thu Dec 07 2023 15:44:00 ,16.0875 +Thu Dec 07 2023 15:45:00 ,16.0875 +Thu Dec 07 2023 15:46:00 ,16.0875 +Thu Dec 07 2023 15:47:00 ,16.0875 +Thu Dec 07 2023 15:48:00 ,16.0875 +Thu Dec 07 2023 15:49:00 ,16.0875 +Thu Dec 07 2023 15:50:00 ,16.0875 +Thu Dec 07 2023 15:51:00 ,16.0875 +Thu Dec 07 2023 15:52:00 ,16.0875 +Thu Dec 07 2023 15:53:00 ,16.0875 +Thu Dec 07 2023 15:54:00 ,16.0875 +Thu Dec 07 2023 15:55:00 ,16.0875 +Thu Dec 07 2023 15:56:00 ,16.0875 +Thu Dec 07 2023 15:57:00 ,16.0875 +Thu Dec 07 2023 15:58:00 ,16.0875 +Thu Dec 07 2023 15:59:00 ,16.0875 +Thu Dec 07 2023 16:00:00 ,16.0875 +Thu Dec 07 2023 16:01:00 ,16.0875 +Thu Dec 07 2023 16:02:00 ,16.0875 +Thu Dec 07 2023 16:03:00 ,16.0875 +Thu Dec 07 2023 16:04:00 ,16.0875 +Thu Dec 07 2023 16:05:00 ,16.0875 +Thu Dec 07 2023 16:06:00 ,16.0875 +Thu Dec 07 2023 16:07:00 ,16.0875 +Thu Dec 07 2023 16:08:00 ,16.0875 +Thu Dec 07 2023 16:09:00 ,16.0875 +Thu Dec 07 2023 16:10:00 ,16.0875 +Thu Dec 07 2023 16:11:00 ,16.0875 +Thu Dec 07 2023 16:12:00 ,16.0875 +Thu Dec 07 2023 16:13:00 ,16.0875 +Thu Dec 07 2023 16:14:00 ,16.0875 +Thu Dec 07 2023 16:15:00 ,16.0875 +Thu Dec 07 2023 16:16:00 ,16.0875 +Thu Dec 07 2023 16:17:00 ,16.0875 +Thu Dec 07 2023 16:18:00 ,16.0875 +Thu Dec 07 2023 16:19:00 ,16.0875 +Thu Dec 07 2023 16:20:00 ,16.0875 +Thu Dec 07 2023 16:21:00 ,16.0875 +Thu Dec 07 2023 16:22:00 ,16.0875 +Thu Dec 07 2023 16:23:00 ,16.0875 +Thu Dec 07 2023 16:24:00 ,16.0875 +Thu Dec 07 2023 16:25:00 ,16.0875 +Thu Dec 07 2023 16:26:00 ,16.0875 +Thu Dec 07 2023 16:27:00 ,16.0875 +Thu Dec 07 2023 16:28:00 ,16.0875 +Thu Dec 07 2023 16:29:00 ,16.0875 +Thu Dec 07 2023 16:30:00 ,16.0875 +Thu Dec 07 2023 16:31:00 ,16.0875 +Thu Dec 07 2023 16:32:00 ,16.0875 +Thu Dec 07 2023 16:33:00 ,16.0875 +Thu Dec 07 2023 16:34:00 ,16.0875 +Thu Dec 07 2023 16:35:00 ,16.0875 +Thu Dec 07 2023 16:36:00 ,16.0875 +Thu Dec 07 2023 16:37:00 ,16.0875 +Thu Dec 07 2023 16:38:00 ,16.0875 +Thu Dec 07 2023 16:39:00 ,16.0875 +Thu Dec 07 2023 16:40:00 ,16.0875 +Thu Dec 07 2023 16:41:00 ,16.0875 +Thu Dec 07 2023 16:42:00 ,16.0875 +Thu Dec 07 2023 16:43:00 ,16.0875 +Thu Dec 07 2023 16:44:00 ,16.0875 +Thu Dec 07 2023 16:45:00 ,16.0875 +Thu Dec 07 2023 16:46:00 ,16.0875 +Thu Dec 07 2023 16:47:00 ,16.0875 +Thu Dec 07 2023 16:48:00 ,16.0875 +Thu Dec 07 2023 16:49:00 ,16.0875 +Thu Dec 07 2023 16:50:00 ,16.0875 +Thu Dec 07 2023 16:51:00 ,16.0875 +Thu Dec 07 2023 16:52:00 ,16.0875 +Thu Dec 07 2023 16:53:00 ,16.0875 +Thu Dec 07 2023 16:54:00 ,16.0875 +Thu Dec 07 2023 16:55:00 ,16.0875 +Thu Dec 07 2023 16:56:00 ,16.0875 +Thu Dec 07 2023 16:57:00 ,16.0875 +Thu Dec 07 2023 16:58:00 ,16.0875 +Thu Dec 07 2023 16:59:00 ,16.0875 +Thu Dec 07 2023 17:00:00 ,16.0875 +Thu Dec 07 2023 17:01:00 ,16.0875 +Thu Dec 07 2023 17:02:00 ,16.0875 +Thu Dec 07 2023 17:03:00 ,16.0875 +Thu Dec 07 2023 17:04:00 ,16.0875 +Thu Dec 07 2023 17:05:00 ,16.0875 +Thu Dec 07 2023 17:06:00 ,16.0875 +Thu Dec 07 2023 17:07:00 ,16.0875 +Thu Dec 07 2023 17:08:00 ,16.0875 +Thu Dec 07 2023 17:09:00 ,16.0875 +Thu Dec 07 2023 17:10:00 ,16.0875 +Thu Dec 07 2023 17:11:00 ,16.0875 +Thu Dec 07 2023 17:12:00 ,16.0875 +Thu Dec 07 2023 17:13:00 ,16.0875 +Thu Dec 07 2023 17:14:00 ,16.0875 +Thu Dec 07 2023 17:15:00 ,16.0875 +Thu Dec 07 2023 17:16:00 ,16.0875 +Thu Dec 07 2023 17:17:00 ,16.0875 +Thu Dec 07 2023 17:18:00 ,16.0875 +Thu Dec 07 2023 17:19:00 ,16.0875 +Thu Dec 07 2023 17:20:00 ,16.0875 +Thu Dec 07 2023 17:21:00 ,16.0875 +Thu Dec 07 2023 17:22:00 ,16.0875 +Thu Dec 07 2023 17:23:00 ,16.0875 +Thu Dec 07 2023 17:24:00 ,16.0875 +Thu Dec 07 2023 17:25:00 ,16.0875 +Thu Dec 07 2023 17:26:00 ,16.0875 +Thu Dec 07 2023 17:27:00 ,16.0875 +Thu Dec 07 2023 17:28:00 ,16.0875 +Thu Dec 07 2023 17:29:00 ,16.0875 +Thu Dec 07 2023 17:30:00 ,16.0875 +Thu Dec 07 2023 17:31:00 ,16.0875 +Thu Dec 07 2023 17:32:00 ,16.0875 +Thu Dec 07 2023 17:33:00 ,16.0875 +Thu Dec 07 2023 17:35:00 ,16.0875 +Thu Dec 07 2023 17:36:00 ,16.0875 +Thu Dec 07 2023 17:37:00 ,16.0875 +Thu Dec 07 2023 17:38:00 ,16.0875 +Thu Dec 07 2023 17:39:00 ,16.0875 +Thu Dec 07 2023 17:40:00 ,16.0875 +Thu Dec 07 2023 17:41:00 ,16.0875 +Thu Dec 07 2023 17:42:00 ,16.0875 +Thu Dec 07 2023 17:43:00 ,16.0875 +Thu Dec 07 2023 17:44:00 ,16.0875 +Thu Dec 07 2023 17:45:00 ,16.0875 +Thu Dec 07 2023 17:46:00 ,16.0875 +Thu Dec 07 2023 17:47:00 ,16.0875 +Thu Dec 07 2023 17:48:00 ,16.0875 +Thu Dec 07 2023 17:49:00 ,16.0875 +Thu Dec 07 2023 17:50:00 ,16.0875 +Thu Dec 07 2023 17:51:00 ,16.0875 +Thu Dec 07 2023 17:52:00 ,16.0875 +Thu Dec 07 2023 17:53:00 ,16.0875 +Thu Dec 07 2023 17:54:00 ,16.0875 +Thu Dec 07 2023 17:55:00 ,16.0875 +Thu Dec 07 2023 17:56:00 ,16.0875 +Thu Dec 07 2023 17:57:00 ,16.0875 +Thu Dec 07 2023 17:58:00 ,16.0875 +Thu Dec 07 2023 17:59:00 ,16.0875 +Thu Dec 07 2023 18:00:00 ,16.0875 +Thu Dec 07 2023 18:01:00 ,16.0875 +Thu Dec 07 2023 18:02:00 ,16.0875 +Thu Dec 07 2023 18:03:00 ,16.0875 +Thu Dec 07 2023 18:04:00 ,16.0875 +Thu Dec 07 2023 18:05:00 ,16.0875 +Thu Dec 07 2023 18:06:00 ,16.0875 +Thu Dec 07 2023 18:07:00 ,16.0875 +Thu Dec 07 2023 18:08:00 ,16.0875 +Thu Dec 07 2023 18:09:00 ,16.0875 +Thu Dec 07 2023 18:10:00 ,16.0875 +Thu Dec 07 2023 18:11:00 ,16.0875 +Thu Dec 07 2023 18:12:00 ,16.0875 +Thu Dec 07 2023 18:13:00 ,16.0875 +Thu Dec 07 2023 18:14:00 ,16.0875 +Thu Dec 07 2023 18:15:00 ,16.0875 +Thu Dec 07 2023 18:16:00 ,16.0875 +Thu Dec 07 2023 18:17:00 ,16.0875 +Thu Dec 07 2023 18:18:00 ,16.0875 +Thu Dec 07 2023 18:19:00 ,16.0875 +Thu Dec 07 2023 18:20:00 ,16.0875 +Thu Dec 07 2023 18:21:00 ,16.0875 +Thu Dec 07 2023 18:22:00 ,16.0875 +Thu Dec 07 2023 18:23:00 ,16.0875 +Thu Dec 07 2023 18:24:00 ,16.0875 +Thu Dec 07 2023 18:25:00 ,16.0875 +Thu Dec 07 2023 18:26:00 ,16.0875 +Thu Dec 07 2023 18:27:00 ,16.0875 +Thu Dec 07 2023 18:28:00 ,16.0875 +Thu Dec 07 2023 18:29:00 ,16.0875 +Thu Dec 07 2023 18:30:00 ,16.0875 +Thu Dec 07 2023 18:31:00 ,16.0875 +Thu Dec 07 2023 18:32:00 ,16.0875 +Thu Dec 07 2023 18:33:00 ,16.0875 +Thu Dec 07 2023 18:34:00 ,16.0875 +Thu Dec 07 2023 18:35:00 ,16.0875 +Thu Dec 07 2023 18:36:00 ,16.0875 +Thu Dec 07 2023 18:37:00 ,16.0875 +Thu Dec 07 2023 18:38:00 ,48.425 +Thu Dec 07 2023 18:39:00 ,16.0875 +Thu Dec 07 2023 18:40:00 ,16.0875 +Thu Dec 07 2023 18:41:00 ,16.0875 +Thu Dec 07 2023 18:42:00 ,16.0875 +Thu Dec 07 2023 18:43:00 ,16.0875 +Thu Dec 07 2023 18:44:00 ,16.0875 +Thu Dec 07 2023 18:45:00 ,16.0875 +Thu Dec 07 2023 18:46:00 ,16.0875 +Thu Dec 07 2023 18:47:00 ,16.0875 +Thu Dec 07 2023 18:48:00 ,16.0875 +Thu Dec 07 2023 18:49:00 ,16.0875 +Thu Dec 07 2023 18:50:00 ,16.0875 +Thu Dec 07 2023 18:51:00 ,16.0875 +Thu Dec 07 2023 18:52:00 ,16.0875 +Thu Dec 07 2023 18:53:00 ,16.0875 +Thu Dec 07 2023 18:54:00 ,16.0875 +Thu Dec 07 2023 18:55:00 ,16.0875 +Thu Dec 07 2023 18:56:00 ,16.0875 +Thu Dec 07 2023 18:57:00 ,16.0875 +Thu Dec 07 2023 18:58:00 ,16.0875 +Thu Dec 07 2023 18:59:00 ,16.0875 +Thu Dec 07 2023 19:00:00 ,16.0875 diff --git a/ai/data/sample/Container Memory Utilization.csv b/ai/data/sample/Container Memory Utilization.csv new file mode 100644 index 0000000..1f2f232 --- /dev/null +++ b/ai/data/sample/Container Memory Utilization.csv @@ -0,0 +1,599 @@ +Time,Container Memory Utilization (%) +Thu Dec 07 2023 09:00:00 ,53.99 +Thu Dec 07 2023 09:01:00 ,53.99 +Thu Dec 07 2023 09:02:00 ,53.99 +Thu Dec 07 2023 09:03:00 ,53.99 +Thu Dec 07 2023 09:04:00 ,53.99 +Thu Dec 07 2023 09:05:00 ,53.99 +Thu Dec 07 2023 09:06:00 ,53.99 +Thu Dec 07 2023 09:07:00 ,53.99 +Thu Dec 07 2023 09:08:00 ,53.99 +Thu Dec 07 2023 09:09:00 ,53.99 +Thu Dec 07 2023 09:10:00 ,53.99 +Thu Dec 07 2023 09:11:00 ,53.99 +Thu Dec 07 2023 09:12:00 ,53.99 +Thu Dec 07 2023 09:13:00 ,53.99 +Thu Dec 07 2023 09:14:00 ,53.99 +Thu Dec 07 2023 09:15:00 ,53.99 +Thu Dec 07 2023 09:16:00 ,56.99 +Thu Dec 07 2023 09:17:00 ,56.99 +Thu Dec 07 2023 09:18:00 ,61.99 +Thu Dec 07 2023 09:19:00 ,63.99 +Thu Dec 07 2023 09:20:00 ,62.99 +Thu Dec 07 2023 09:21:00 ,62.99 +Thu Dec 07 2023 09:22:00 ,60.99 +Thu Dec 07 2023 09:23:00 ,61.99 +Thu Dec 07 2023 09:24:00 ,62.99 +Thu Dec 07 2023 09:25:00 ,62.99 +Thu Dec 07 2023 09:26:00 ,57.99 +Thu Dec 07 2023 09:27:00 ,57.99 +Thu Dec 07 2023 09:28:00 ,57.99 +Thu Dec 07 2023 09:29:00 ,57.99 +Thu Dec 07 2023 09:30:00 ,57.99 +Thu Dec 07 2023 09:31:00 ,57.99 +Thu Dec 07 2023 09:32:00 ,57.99 +Thu Dec 07 2023 09:33:00 ,57.99 +Thu Dec 07 2023 09:34:00 ,57.99 +Thu Dec 07 2023 09:35:00 ,57.99 +Thu Dec 07 2023 09:36:00 ,57.99 +Thu Dec 07 2023 09:37:00 ,57.99 +Thu Dec 07 2023 09:38:00 ,59.99 +Thu Dec 07 2023 09:39:00 ,60.99 +Thu Dec 07 2023 09:40:00 ,66.99 +Thu Dec 07 2023 09:41:00 ,67.99 +Thu Dec 07 2023 09:42:00 ,66.99 +Thu Dec 07 2023 09:43:00 ,63.99 +Thu Dec 07 2023 09:44:00 ,60.99 +Thu Dec 07 2023 09:45:00 ,58.99 +Thu Dec 07 2023 09:46:00 ,58.99 +Thu Dec 07 2023 09:47:00 ,58.99 +Thu Dec 07 2023 09:48:00 ,58.99 +Thu Dec 07 2023 09:49:00 ,58.99 +Thu Dec 07 2023 09:50:00 ,58.99 +Thu Dec 07 2023 09:51:00 ,58.99 +Thu Dec 07 2023 09:52:00 ,58.99 +Thu Dec 07 2023 09:53:00 ,58.99 +Thu Dec 07 2023 09:54:00 ,58.99 +Thu Dec 07 2023 09:55:00 ,58.99 +Thu Dec 07 2023 09:56:00 ,57.99 +Thu Dec 07 2023 09:57:00 ,57.99 +Thu Dec 07 2023 09:58:00 ,60.99 +Thu Dec 07 2023 09:59:00 ,63.99 +Thu Dec 07 2023 10:00:00 ,63.99 +Thu Dec 07 2023 10:01:00 ,59.99 +Thu Dec 07 2023 10:02:00 ,59.99 +Thu Dec 07 2023 10:03:00 ,58.99 +Thu Dec 07 2023 10:04:00 ,58.99 +Thu Dec 07 2023 10:05:00 ,58.99 +Thu Dec 07 2023 10:06:00 ,58.99 +Thu Dec 07 2023 10:07:00 ,58.99 +Thu Dec 07 2023 10:08:00 ,58.99 +Thu Dec 07 2023 10:09:00 ,58.99 +Thu Dec 07 2023 10:10:00 ,58.99 +Thu Dec 07 2023 10:11:00 ,58.99 +Thu Dec 07 2023 10:12:00 ,58.99 +Thu Dec 07 2023 10:13:00 ,58.99 +Thu Dec 07 2023 10:14:00 ,58.99 +Thu Dec 07 2023 10:15:00 ,58.99 +Thu Dec 07 2023 10:16:00 ,58.99 +Thu Dec 07 2023 10:17:00 ,58.99 +Thu Dec 07 2023 10:18:00 ,58.99 +Thu Dec 07 2023 10:19:00 ,58.99 +Thu Dec 07 2023 10:20:00 ,58.99 +Thu Dec 07 2023 10:21:00 ,58.99 +Thu Dec 07 2023 10:22:00 ,58.99 +Thu Dec 07 2023 10:23:00 ,58.99 +Thu Dec 07 2023 10:24:00 ,58.99 +Thu Dec 07 2023 10:25:00 ,58.99 +Thu Dec 07 2023 10:26:00 ,58.99 +Thu Dec 07 2023 10:27:00 ,58.99 +Thu Dec 07 2023 10:28:00 ,58.99 +Thu Dec 07 2023 10:29:00 ,58.99 +Thu Dec 07 2023 10:30:00 ,58.99 +Thu Dec 07 2023 10:31:00 ,58.99 +Thu Dec 07 2023 10:32:00 ,58.99 +Thu Dec 07 2023 10:33:00 ,58.99 +Thu Dec 07 2023 10:34:00 ,58.99 +Thu Dec 07 2023 10:35:00 ,58.99 +Thu Dec 07 2023 10:36:00 ,58.99 +Thu Dec 07 2023 10:37:00 ,58.99 +Thu Dec 07 2023 10:38:00 ,58.99 +Thu Dec 07 2023 10:39:00 ,58.99 +Thu Dec 07 2023 10:40:00 ,58.99 +Thu Dec 07 2023 10:41:00 ,58.99 +Thu Dec 07 2023 10:42:00 ,58.99 +Thu Dec 07 2023 10:43:00 ,58.99 +Thu Dec 07 2023 10:44:00 ,58.99 +Thu Dec 07 2023 10:45:00 ,58.99 +Thu Dec 07 2023 10:46:00 ,58.99 +Thu Dec 07 2023 10:47:00 ,58.99 +Thu Dec 07 2023 10:48:00 ,58.99 +Thu Dec 07 2023 10:49:00 ,58.99 +Thu Dec 07 2023 10:50:00 ,58.99 +Thu Dec 07 2023 10:51:00 ,58.99 +Thu Dec 07 2023 10:52:00 ,58.99 +Thu Dec 07 2023 10:53:00 ,58.99 +Thu Dec 07 2023 10:54:00 ,58.99 +Thu Dec 07 2023 10:55:00 ,58.99 +Thu Dec 07 2023 10:56:00 ,58.99 +Thu Dec 07 2023 10:57:00 ,58.99 +Thu Dec 07 2023 10:58:00 ,58.99 +Thu Dec 07 2023 10:59:00 ,58.99 +Thu Dec 07 2023 11:00:00 ,58.99 +Thu Dec 07 2023 11:01:00 ,58.99 +Thu Dec 07 2023 11:03:00 ,58.99 +Thu Dec 07 2023 11:04:00 ,58.99 +Thu Dec 07 2023 11:05:00 ,58.99 +Thu Dec 07 2023 11:06:00 ,58.99 +Thu Dec 07 2023 11:07:00 ,58.99 +Thu Dec 07 2023 11:08:00 ,58.99 +Thu Dec 07 2023 11:09:00 ,58.99 +Thu Dec 07 2023 11:10:00 ,58.99 +Thu Dec 07 2023 11:11:00 ,58.99 +Thu Dec 07 2023 11:12:00 ,58.99 +Thu Dec 07 2023 11:13:00 ,58.99 +Thu Dec 07 2023 11:14:00 ,58.99 +Thu Dec 07 2023 11:15:00 ,58.99 +Thu Dec 07 2023 11:16:00 ,63.99 +Thu Dec 07 2023 11:17:00 ,63.99 +Thu Dec 07 2023 11:18:00 ,62.99 +Thu Dec 07 2023 11:19:00 ,62.99 +Thu Dec 07 2023 11:20:00 ,59.99 +Thu Dec 07 2023 11:21:00 ,59.99 +Thu Dec 07 2023 11:22:00 ,58.99 +Thu Dec 07 2023 11:23:00 ,58.99 +Thu Dec 07 2023 11:24:00 ,58.99 +Thu Dec 07 2023 11:25:00 ,58.99 +Thu Dec 07 2023 11:26:00 ,58.99 +Thu Dec 07 2023 11:27:00 ,58.99 +Thu Dec 07 2023 11:28:00 ,58.99 +Thu Dec 07 2023 11:29:00 ,58.99 +Thu Dec 07 2023 11:30:00 ,58.99 +Thu Dec 07 2023 11:31:00 ,58.99 +Thu Dec 07 2023 11:32:00 ,58.99 +Thu Dec 07 2023 11:33:00 ,58.99 +Thu Dec 07 2023 11:34:00 ,58.99 +Thu Dec 07 2023 11:35:00 ,58.99 +Thu Dec 07 2023 11:36:00 ,58.99 +Thu Dec 07 2023 11:37:00 ,58.99 +Thu Dec 07 2023 11:38:00 ,58.99 +Thu Dec 07 2023 11:39:00 ,58.99 +Thu Dec 07 2023 11:40:00 ,58.99 +Thu Dec 07 2023 11:41:00 ,58.99 +Thu Dec 07 2023 11:42:00 ,58.99 +Thu Dec 07 2023 11:43:00 ,58.99 +Thu Dec 07 2023 11:44:00 ,58.99 +Thu Dec 07 2023 11:45:00 ,57.99 +Thu Dec 07 2023 11:46:00 ,57.99 +Thu Dec 07 2023 11:47:00 ,58.99 +Thu Dec 07 2023 11:48:00 ,57.99 +Thu Dec 07 2023 11:49:00 ,57.99 +Thu Dec 07 2023 11:50:00 ,57.99 +Thu Dec 07 2023 11:51:00 ,57.99 +Thu Dec 07 2023 11:52:00 ,57.99 +Thu Dec 07 2023 11:53:00 ,57.99 +Thu Dec 07 2023 11:54:00 ,57.99 +Thu Dec 07 2023 11:55:00 ,57.99 +Thu Dec 07 2023 11:56:00 ,57.99 +Thu Dec 07 2023 11:57:00 ,57.99 +Thu Dec 07 2023 11:58:00 ,57.99 +Thu Dec 07 2023 11:59:00 ,57.99 +Thu Dec 07 2023 12:00:00 ,57.99 +Thu Dec 07 2023 12:01:00 ,57.99 +Thu Dec 07 2023 12:02:00 ,57.99 +Thu Dec 07 2023 12:03:00 ,57.99 +Thu Dec 07 2023 12:04:00 ,57.99 +Thu Dec 07 2023 12:05:00 ,57.99 +Thu Dec 07 2023 12:06:00 ,57.99 +Thu Dec 07 2023 12:07:00 ,57.99 +Thu Dec 07 2023 12:08:00 ,57.99 +Thu Dec 07 2023 12:09:00 ,57.99 +Thu Dec 07 2023 12:10:00 ,57.99 +Thu Dec 07 2023 12:11:00 ,57.99 +Thu Dec 07 2023 12:12:00 ,57.99 +Thu Dec 07 2023 12:13:00 ,57.99 +Thu Dec 07 2023 12:14:00 ,57.99 +Thu Dec 07 2023 12:15:00 ,57.99 +Thu Dec 07 2023 12:16:00 ,57.99 +Thu Dec 07 2023 12:17:00 ,57.99 +Thu Dec 07 2023 12:18:00 ,57.99 +Thu Dec 07 2023 12:19:00 ,57.99 +Thu Dec 07 2023 12:20:00 ,57.99 +Thu Dec 07 2023 12:21:00 ,57.99 +Thu Dec 07 2023 12:22:00 ,57.99 +Thu Dec 07 2023 12:23:00 ,57.99 +Thu Dec 07 2023 12:24:00 ,57.99 +Thu Dec 07 2023 12:25:00 ,63.99 +Thu Dec 07 2023 12:26:00 ,62.99 +Thu Dec 07 2023 12:27:00 ,62.99 +Thu Dec 07 2023 12:28:00 ,62.99 +Thu Dec 07 2023 12:29:00 ,62.99 +Thu Dec 07 2023 12:30:00 ,61.99 +Thu Dec 07 2023 12:31:00 ,60.99 +Thu Dec 07 2023 12:32:00 ,58.99 +Thu Dec 07 2023 12:33:00 ,58.99 +Thu Dec 07 2023 12:34:00 ,58.99 +Thu Dec 07 2023 12:35:00 ,58.99 +Thu Dec 07 2023 12:36:00 ,58.99 +Thu Dec 07 2023 12:37:00 ,58.99 +Thu Dec 07 2023 12:38:00 ,58.99 +Thu Dec 07 2023 12:39:00 ,58.99 +Thu Dec 07 2023 12:40:00 ,57.99 +Thu Dec 07 2023 12:41:00 ,57.99 +Thu Dec 07 2023 12:42:00 ,57.99 +Thu Dec 07 2023 12:43:00 ,57.99 +Thu Dec 07 2023 12:44:00 ,57.99 +Thu Dec 07 2023 12:45:00 ,57.99 +Thu Dec 07 2023 12:46:00 ,57.99 +Thu Dec 07 2023 12:47:00 ,57.99 +Thu Dec 07 2023 12:48:00 ,57.99 +Thu Dec 07 2023 12:49:00 ,57.99 +Thu Dec 07 2023 12:50:00 ,57.99 +Thu Dec 07 2023 12:51:00 ,57.99 +Thu Dec 07 2023 12:52:00 ,57.99 +Thu Dec 07 2023 12:53:00 ,57.99 +Thu Dec 07 2023 12:54:00 ,57.99 +Thu Dec 07 2023 12:55:00 ,57.99 +Thu Dec 07 2023 12:56:00 ,57.99 +Thu Dec 07 2023 12:57:00 ,57.99 +Thu Dec 07 2023 12:58:00 ,57.99 +Thu Dec 07 2023 12:59:00 ,57.99 +Thu Dec 07 2023 13:00:00 ,57.99 +Thu Dec 07 2023 13:01:00 ,57.99 +Thu Dec 07 2023 13:02:00 ,57.99 +Thu Dec 07 2023 13:03:00 ,57.99 +Thu Dec 07 2023 13:04:00 ,57.99 +Thu Dec 07 2023 13:05:00 ,57.99 +Thu Dec 07 2023 13:06:00 ,57.99 +Thu Dec 07 2023 13:07:00 ,57.99 +Thu Dec 07 2023 13:08:00 ,57.99 +Thu Dec 07 2023 13:09:00 ,57.99 +Thu Dec 07 2023 13:10:00 ,57.99 +Thu Dec 07 2023 13:11:00 ,57.99 +Thu Dec 07 2023 13:12:00 ,57.99 +Thu Dec 07 2023 13:13:00 ,57.99 +Thu Dec 07 2023 13:14:00 ,57.99 +Thu Dec 07 2023 13:15:00 ,57.99 +Thu Dec 07 2023 13:16:00 ,57.99 +Thu Dec 07 2023 13:17:00 ,57.99 +Thu Dec 07 2023 13:18:00 ,57.99 +Thu Dec 07 2023 13:19:00 ,57.99 +Thu Dec 07 2023 13:20:00 ,57.99 +Thu Dec 07 2023 13:21:00 ,57.99 +Thu Dec 07 2023 13:22:00 ,57.99 +Thu Dec 07 2023 13:23:00 ,57.99 +Thu Dec 07 2023 13:24:00 ,57.99 +Thu Dec 07 2023 13:25:00 ,57.99 +Thu Dec 07 2023 13:26:00 ,57.99 +Thu Dec 07 2023 13:27:00 ,57.99 +Thu Dec 07 2023 13:28:00 ,57.99 +Thu Dec 07 2023 13:29:00 ,57.99 +Thu Dec 07 2023 13:30:00 ,57.99 +Thu Dec 07 2023 13:31:00 ,57.99 +Thu Dec 07 2023 13:32:00 ,58.99 +Thu Dec 07 2023 13:33:00 ,58.99 +Thu Dec 07 2023 13:34:00 ,58.99 +Thu Dec 07 2023 13:35:00 ,57.99 +Thu Dec 07 2023 13:36:00 ,57.99 +Thu Dec 07 2023 13:37:00 ,57.99 +Thu Dec 07 2023 13:38:00 ,57.99 +Thu Dec 07 2023 13:39:00 ,57.99 +Thu Dec 07 2023 13:40:00 ,57.99 +Thu Dec 07 2023 13:41:00 ,57.99 +Thu Dec 07 2023 13:43:00 ,57.99 +Thu Dec 07 2023 13:44:00 ,57.99 +Thu Dec 07 2023 13:45:00 ,57.99 +Thu Dec 07 2023 13:46:00 ,57.99 +Thu Dec 07 2023 13:47:00 ,57.99 +Thu Dec 07 2023 13:48:00 ,57.99 +Thu Dec 07 2023 13:49:00 ,57.99 +Thu Dec 07 2023 13:50:00 ,57.99 +Thu Dec 07 2023 13:51:00 ,57.99 +Thu Dec 07 2023 13:52:00 ,57.99 +Thu Dec 07 2023 13:53:00 ,57.99 +Thu Dec 07 2023 13:54:00 ,57.99 +Thu Dec 07 2023 13:55:00 ,57.99 +Thu Dec 07 2023 13:56:00 ,57.99 +Thu Dec 07 2023 13:57:00 ,57.99 +Thu Dec 07 2023 13:58:00 ,57.99 +Thu Dec 07 2023 13:59:00 ,57.99 +Thu Dec 07 2023 14:00:00 ,57.99 +Thu Dec 07 2023 14:01:00 ,57.99 +Thu Dec 07 2023 14:02:00 ,57.99 +Thu Dec 07 2023 14:03:00 ,57.99 +Thu Dec 07 2023 14:04:00 ,57.99 +Thu Dec 07 2023 14:05:00 ,57.99 +Thu Dec 07 2023 14:06:00 ,57.99 +Thu Dec 07 2023 14:07:00 ,57.99 +Thu Dec 07 2023 14:08:00 ,57.99 +Thu Dec 07 2023 14:09:00 ,57.99 +Thu Dec 07 2023 14:10:00 ,57.99 +Thu Dec 07 2023 14:11:00 ,57.99 +Thu Dec 07 2023 14:12:00 ,57.99 +Thu Dec 07 2023 14:13:00 ,57.99 +Thu Dec 07 2023 14:14:00 ,57.99 +Thu Dec 07 2023 14:15:00 ,57.99 +Thu Dec 07 2023 14:16:00 ,57.99 +Thu Dec 07 2023 14:17:00 ,57.99 +Thu Dec 07 2023 14:18:00 ,57.99 +Thu Dec 07 2023 14:19:00 ,57.99 +Thu Dec 07 2023 14:20:00 ,57.99 +Thu Dec 07 2023 14:21:00 ,57.99 +Thu Dec 07 2023 14:22:00 ,57.99 +Thu Dec 07 2023 14:23:00 ,57.99 +Thu Dec 07 2023 14:24:00 ,57.99 +Thu Dec 07 2023 14:25:00 ,57.99 +Thu Dec 07 2023 14:26:00 ,57.99 +Thu Dec 07 2023 14:27:00 ,57.99 +Thu Dec 07 2023 14:28:00 ,57.99 +Thu Dec 07 2023 14:29:00 ,57.99 +Thu Dec 07 2023 14:30:00 ,57.99 +Thu Dec 07 2023 14:31:00 ,57.99 +Thu Dec 07 2023 14:32:00 ,57.99 +Thu Dec 07 2023 14:33:00 ,57.99 +Thu Dec 07 2023 14:34:00 ,57.99 +Thu Dec 07 2023 14:35:00 ,57.99 +Thu Dec 07 2023 14:36:00 ,57.99 +Thu Dec 07 2023 14:37:00 ,57.99 +Thu Dec 07 2023 14:38:00 ,57.99 +Thu Dec 07 2023 14:39:00 ,57.99 +Thu Dec 07 2023 14:40:00 ,57.99 +Thu Dec 07 2023 14:41:00 ,57.99 +Thu Dec 07 2023 14:42:00 ,57.99 +Thu Dec 07 2023 14:43:00 ,57.99 +Thu Dec 07 2023 14:44:00 ,57.99 +Thu Dec 07 2023 14:45:00 ,57.99 +Thu Dec 07 2023 14:46:00 ,57.99 +Thu Dec 07 2023 14:47:00 ,57.99 +Thu Dec 07 2023 14:48:00 ,57.99 +Thu Dec 07 2023 14:49:00 ,57.99 +Thu Dec 07 2023 14:50:00 ,57.99 +Thu Dec 07 2023 14:51:00 ,57.99 +Thu Dec 07 2023 14:52:00 ,57.99 +Thu Dec 07 2023 14:53:00 ,57.99 +Thu Dec 07 2023 14:54:00 ,57.99 +Thu Dec 07 2023 14:55:00 ,57.99 +Thu Dec 07 2023 14:56:00 ,57.99 +Thu Dec 07 2023 14:57:00 ,57.99 +Thu Dec 07 2023 14:58:00 ,57.99 +Thu Dec 07 2023 14:59:00 ,57.99 +Thu Dec 07 2023 15:00:00 ,57.99 +Thu Dec 07 2023 15:01:00 ,57.99 +Thu Dec 07 2023 15:02:00 ,57.99 +Thu Dec 07 2023 15:03:00 ,57.99 +Thu Dec 07 2023 15:04:00 ,57.99 +Thu Dec 07 2023 15:05:00 ,57.99 +Thu Dec 07 2023 15:06:00 ,57.99 +Thu Dec 07 2023 15:07:00 ,57.99 +Thu Dec 07 2023 15:08:00 ,57.99 +Thu Dec 07 2023 15:09:00 ,57.99 +Thu Dec 07 2023 15:10:00 ,57.99 +Thu Dec 07 2023 15:11:00 ,57.99 +Thu Dec 07 2023 15:12:00 ,57.99 +Thu Dec 07 2023 15:13:00 ,57.99 +Thu Dec 07 2023 15:14:00 ,57.99 +Thu Dec 07 2023 15:15:00 ,57.99 +Thu Dec 07 2023 15:16:00 ,57.99 +Thu Dec 07 2023 15:17:00 ,57.99 +Thu Dec 07 2023 15:18:00 ,57.99 +Thu Dec 07 2023 15:19:00 ,57.99 +Thu Dec 07 2023 15:20:00 ,57.99 +Thu Dec 07 2023 15:21:00 ,57.99 +Thu Dec 07 2023 15:22:00 ,57.99 +Thu Dec 07 2023 15:23:00 ,57.99 +Thu Dec 07 2023 15:24:00 ,57.99 +Thu Dec 07 2023 15:25:00 ,57.99 +Thu Dec 07 2023 15:26:00 ,57.99 +Thu Dec 07 2023 15:27:00 ,57.99 +Thu Dec 07 2023 15:28:00 ,57.99 +Thu Dec 07 2023 15:29:00 ,57.99 +Thu Dec 07 2023 15:30:00 ,57.99 +Thu Dec 07 2023 15:31:00 ,57.99 +Thu Dec 07 2023 15:32:00 ,57.99 +Thu Dec 07 2023 15:33:00 ,57.99 +Thu Dec 07 2023 15:34:00 ,57.99 +Thu Dec 07 2023 15:35:00 ,57.99 +Thu Dec 07 2023 15:36:00 ,57.99 +Thu Dec 07 2023 15:37:00 ,57.99 +Thu Dec 07 2023 15:38:00 ,57.99 +Thu Dec 07 2023 15:39:00 ,57.99 +Thu Dec 07 2023 15:40:00 ,57.99 +Thu Dec 07 2023 15:41:00 ,57.99 +Thu Dec 07 2023 15:42:00 ,57.99 +Thu Dec 07 2023 15:43:00 ,57.99 +Thu Dec 07 2023 15:44:00 ,57.99 +Thu Dec 07 2023 15:45:00 ,57.99 +Thu Dec 07 2023 15:46:00 ,57.99 +Thu Dec 07 2023 15:47:00 ,57.99 +Thu Dec 07 2023 15:48:00 ,57.99 +Thu Dec 07 2023 15:49:00 ,57.99 +Thu Dec 07 2023 15:50:00 ,57.99 +Thu Dec 07 2023 15:51:00 ,57.99 +Thu Dec 07 2023 15:52:00 ,57.99 +Thu Dec 07 2023 15:53:00 ,57.99 +Thu Dec 07 2023 15:54:00 ,57.99 +Thu Dec 07 2023 15:55:00 ,57.99 +Thu Dec 07 2023 15:56:00 ,57.99 +Thu Dec 07 2023 15:57:00 ,57.99 +Thu Dec 07 2023 15:58:00 ,57.99 +Thu Dec 07 2023 15:59:00 ,57.99 +Thu Dec 07 2023 16:00:00 ,57.99 +Thu Dec 07 2023 16:01:00 ,57.99 +Thu Dec 07 2023 16:02:00 ,57.99 +Thu Dec 07 2023 16:03:00 ,57.99 +Thu Dec 07 2023 16:04:00 ,57.99 +Thu Dec 07 2023 16:05:00 ,57.99 +Thu Dec 07 2023 16:06:00 ,57.99 +Thu Dec 07 2023 16:07:00 ,57.99 +Thu Dec 07 2023 16:08:00 ,57.99 +Thu Dec 07 2023 16:09:00 ,57.99 +Thu Dec 07 2023 16:10:00 ,57.99 +Thu Dec 07 2023 16:11:00 ,57.99 +Thu Dec 07 2023 16:12:00 ,57.99 +Thu Dec 07 2023 16:13:00 ,57.99 +Thu Dec 07 2023 16:14:00 ,57.99 +Thu Dec 07 2023 16:15:00 ,57.99 +Thu Dec 07 2023 16:17:00 ,57.99 +Thu Dec 07 2023 16:18:00 ,57.99 +Thu Dec 07 2023 16:19:00 ,57.99 +Thu Dec 07 2023 16:20:00 ,57.99 +Thu Dec 07 2023 16:21:00 ,57.99 +Thu Dec 07 2023 16:22:00 ,57.99 +Thu Dec 07 2023 16:23:00 ,57.99 +Thu Dec 07 2023 16:24:00 ,57.99 +Thu Dec 07 2023 16:25:00 ,57.99 +Thu Dec 07 2023 16:26:00 ,57.99 +Thu Dec 07 2023 16:27:00 ,57.99 +Thu Dec 07 2023 16:28:00 ,57.99 +Thu Dec 07 2023 16:29:00 ,57.99 +Thu Dec 07 2023 16:30:00 ,57.99 +Thu Dec 07 2023 16:31:00 ,57.99 +Thu Dec 07 2023 16:32:00 ,57.99 +Thu Dec 07 2023 16:33:00 ,57.99 +Thu Dec 07 2023 16:34:00 ,57.99 +Thu Dec 07 2023 16:35:00 ,57.99 +Thu Dec 07 2023 16:36:00 ,57.99 +Thu Dec 07 2023 16:37:00 ,57.99 +Thu Dec 07 2023 16:38:00 ,57.99 +Thu Dec 07 2023 16:39:00 ,57.99 +Thu Dec 07 2023 16:40:00 ,57.99 +Thu Dec 07 2023 16:41:00 ,57.99 +Thu Dec 07 2023 16:42:00 ,57.99 +Thu Dec 07 2023 16:43:00 ,57.99 +Thu Dec 07 2023 16:44:00 ,57.99 +Thu Dec 07 2023 16:45:00 ,57.99 +Thu Dec 07 2023 16:46:00 ,57.99 +Thu Dec 07 2023 16:47:00 ,57.99 +Thu Dec 07 2023 16:48:00 ,57.99 +Thu Dec 07 2023 16:49:00 ,57.99 +Thu Dec 07 2023 16:50:00 ,57.99 +Thu Dec 07 2023 16:51:00 ,57.99 +Thu Dec 07 2023 16:52:00 ,57.99 +Thu Dec 07 2023 16:53:00 ,57.99 +Thu Dec 07 2023 16:54:00 ,57.99 +Thu Dec 07 2023 16:55:00 ,57.99 +Thu Dec 07 2023 16:56:00 ,57.99 +Thu Dec 07 2023 16:57:00 ,57.99 +Thu Dec 07 2023 16:58:00 ,57.99 +Thu Dec 07 2023 16:59:00 ,57.99 +Thu Dec 07 2023 17:00:00 ,57.99 +Thu Dec 07 2023 17:01:00 ,57.99 +Thu Dec 07 2023 17:02:00 ,57.99 +Thu Dec 07 2023 17:03:00 ,57.99 +Thu Dec 07 2023 17:04:00 ,57.99 +Thu Dec 07 2023 17:05:00 ,57.99 +Thu Dec 07 2023 17:06:00 ,57.99 +Thu Dec 07 2023 17:07:00 ,57.99 +Thu Dec 07 2023 17:08:00 ,57.99 +Thu Dec 07 2023 17:09:00 ,57.99 +Thu Dec 07 2023 17:10:00 ,57.99 +Thu Dec 07 2023 17:11:00 ,57.99 +Thu Dec 07 2023 17:12:00 ,57.99 +Thu Dec 07 2023 17:13:00 ,57.99 +Thu Dec 07 2023 17:14:00 ,57.99 +Thu Dec 07 2023 17:15:00 ,57.99 +Thu Dec 07 2023 17:16:00 ,57.99 +Thu Dec 07 2023 17:17:00 ,57.99 +Thu Dec 07 2023 17:18:00 ,57.99 +Thu Dec 07 2023 17:19:00 ,57.99 +Thu Dec 07 2023 17:20:00 ,57.99 +Thu Dec 07 2023 17:21:00 ,57.99 +Thu Dec 07 2023 17:22:00 ,57.99 +Thu Dec 07 2023 17:23:00 ,57.99 +Thu Dec 07 2023 17:24:00 ,57.99 +Thu Dec 07 2023 17:25:00 ,57.99 +Thu Dec 07 2023 17:26:00 ,57.99 +Thu Dec 07 2023 17:27:00 ,57.99 +Thu Dec 07 2023 17:28:00 ,57.99 +Thu Dec 07 2023 17:29:00 ,57.99 +Thu Dec 07 2023 17:30:00 ,57.99 +Thu Dec 07 2023 17:31:00 ,57.99 +Thu Dec 07 2023 17:32:00 ,57.99 +Thu Dec 07 2023 17:33:00 ,57.99 +Thu Dec 07 2023 17:34:00 ,57.99 +Thu Dec 07 2023 17:35:00 ,57.99 +Thu Dec 07 2023 17:36:00 ,57.99 +Thu Dec 07 2023 17:37:00 ,57.99 +Thu Dec 07 2023 17:38:00 ,57.99 +Thu Dec 07 2023 17:39:00 ,57.99 +Thu Dec 07 2023 17:40:00 ,57.99 +Thu Dec 07 2023 17:41:00 ,57.99 +Thu Dec 07 2023 17:42:00 ,57.99 +Thu Dec 07 2023 17:43:00 ,57.99 +Thu Dec 07 2023 17:44:00 ,57.99 +Thu Dec 07 2023 17:45:00 ,57.99 +Thu Dec 07 2023 17:46:00 ,57.99 +Thu Dec 07 2023 17:47:00 ,57.99 +Thu Dec 07 2023 17:48:00 ,57.99 +Thu Dec 07 2023 17:49:00 ,57.99 +Thu Dec 07 2023 17:50:00 ,57.99 +Thu Dec 07 2023 17:51:00 ,57.99 +Thu Dec 07 2023 17:52:00 ,57.99 +Thu Dec 07 2023 17:53:00 ,57.99 +Thu Dec 07 2023 17:54:00 ,57.99 +Thu Dec 07 2023 17:55:00 ,57.99 +Thu Dec 07 2023 17:56:00 ,57.99 +Thu Dec 07 2023 17:57:00 ,57.99 +Thu Dec 07 2023 17:58:00 ,57.99 +Thu Dec 07 2023 17:59:00 ,57.99 +Thu Dec 07 2023 18:00:00 ,57.99 +Thu Dec 07 2023 18:01:00 ,57.99 +Thu Dec 07 2023 18:02:00 ,57.99 +Thu Dec 07 2023 18:03:00 ,57.99 +Thu Dec 07 2023 18:04:00 ,57.99 +Thu Dec 07 2023 18:05:00 ,57.99 +Thu Dec 07 2023 18:06:00 ,57.99 +Thu Dec 07 2023 18:07:00 ,57.99 +Thu Dec 07 2023 18:08:00 ,57.99 +Thu Dec 07 2023 18:09:00 ,57.99 +Thu Dec 07 2023 18:10:00 ,57.99 +Thu Dec 07 2023 18:11:00 ,57.99 +Thu Dec 07 2023 18:12:00 ,57.99 +Thu Dec 07 2023 18:13:00 ,57.99 +Thu Dec 07 2023 18:14:00 ,57.99 +Thu Dec 07 2023 18:15:00 ,57.99 +Thu Dec 07 2023 18:16:00 ,57.99 +Thu Dec 07 2023 18:17:00 ,57.99 +Thu Dec 07 2023 18:18:00 ,57.99 +Thu Dec 07 2023 18:19:00 ,57.99 +Thu Dec 07 2023 18:20:00 ,57.99 +Thu Dec 07 2023 18:21:00 ,57.99 +Thu Dec 07 2023 18:22:00 ,57.99 +Thu Dec 07 2023 18:23:00 ,57.99 +Thu Dec 07 2023 18:24:00 ,57.99 +Thu Dec 07 2023 18:25:00 ,57.99 +Thu Dec 07 2023 18:26:00 ,57.99 +Thu Dec 07 2023 18:27:00 ,57.99 +Thu Dec 07 2023 18:28:00 ,57.99 +Thu Dec 07 2023 18:29:00 ,57.99 +Thu Dec 07 2023 18:30:00 ,57.99 +Thu Dec 07 2023 18:31:00 ,57.99 +Thu Dec 07 2023 18:32:00 ,57.99 +Thu Dec 07 2023 18:33:00 ,57.99 +Thu Dec 07 2023 18:34:00 ,57.99 +Thu Dec 07 2023 18:35:00 ,57.99 +Thu Dec 07 2023 18:36:00 ,57.99 +Thu Dec 07 2023 18:37:00 ,57.99 +Thu Dec 07 2023 18:38:00 ,57.98 +Thu Dec 07 2023 18:39:00 ,57.98 +Thu Dec 07 2023 18:40:00 ,57.98 +Thu Dec 07 2023 18:41:00 ,57.98 +Thu Dec 07 2023 18:42:00 ,53.99 +Thu Dec 07 2023 18:43:00 ,53.99 +Thu Dec 07 2023 18:44:00 ,53.99 +Thu Dec 07 2023 18:45:00 ,53.99 +Thu Dec 07 2023 18:46:00 ,53.99 +Thu Dec 07 2023 18:47:00 ,53.99 +Thu Dec 07 2023 18:48:00 ,53.99 +Thu Dec 07 2023 18:49:00 ,53.99 +Thu Dec 07 2023 18:50:00 ,53.99 +Thu Dec 07 2023 18:51:00 ,53.99 +Thu Dec 07 2023 18:52:00 ,53.99 +Thu Dec 07 2023 18:53:00 ,53.99 +Thu Dec 07 2023 18:54:00 ,53.99 +Thu Dec 07 2023 18:55:00 ,48.99 +Thu Dec 07 2023 18:56:00 ,48.99 +Thu Dec 07 2023 18:57:00 ,48.99 +Thu Dec 07 2023 18:58:00 ,48.99 +Thu Dec 07 2023 18:59:00 ,48.99 +Thu Dec 07 2023 19:00:00 ,48.99 diff --git a/ai/data/sample/Container Startup Latency.csv b/ai/data/sample/Container Startup Latency.csv new file mode 100644 index 0000000..db0f5cb --- /dev/null +++ b/ai/data/sample/Container Startup Latency.csv @@ -0,0 +1,2 @@ +Time,Container Startup Latency (ms) +Thu Dec 07 2023 18:37:00,4453.863034 diff --git a/ai/data/sample/Instance Count.csv b/ai/data/sample/Instance Count.csv new file mode 100644 index 0000000..6d747e2 --- /dev/null +++ b/ai/data/sample/Instance Count.csv @@ -0,0 +1,602 @@ +Time,Instance Count (active),Instance Count (idle) +Thu Dec 07 2023 09:00:00 ,1,1 +Thu Dec 07 2023 09:01:00 ,1,1 +Thu Dec 07 2023 09:02:00 ,1,1 +Thu Dec 07 2023 09:03:00 ,1,1 +Thu Dec 07 2023 09:04:00 ,1,1 +Thu Dec 07 2023 09:05:00 ,1,1 +Thu Dec 07 2023 09:06:00 ,1,1 +Thu Dec 07 2023 09:07:00 ,1,1 +Thu Dec 07 2023 09:08:00 ,1,1 +Thu Dec 07 2023 09:09:00 ,1,1 +Thu Dec 07 2023 09:10:00 ,1,1 +Thu Dec 07 2023 09:11:00 ,1,1 +Thu Dec 07 2023 09:12:00 ,1,1 +Thu Dec 07 2023 09:13:00 ,1,1 +Thu Dec 07 2023 09:14:00 ,1,1 +Thu Dec 07 2023 09:15:00 ,1,1 +Thu Dec 07 2023 09:16:00 ,1,1 +Thu Dec 07 2023 09:17:00 ,1,1 +Thu Dec 07 2023 09:18:00 ,1,1 +Thu Dec 07 2023 09:19:00 ,1,1 +Thu Dec 07 2023 09:20:00 ,1,1 +Thu Dec 07 2023 09:21:00 ,1,1 +Thu Dec 07 2023 09:22:00 ,1,1 +Thu Dec 07 2023 09:23:00 ,1,1 +Thu Dec 07 2023 09:24:00 ,1,1 +Thu Dec 07 2023 09:25:00 ,1,1 +Thu Dec 07 2023 09:26:00 ,1,1 +Thu Dec 07 2023 09:27:00 ,1,1 +Thu Dec 07 2023 09:28:00 ,1,1 +Thu Dec 07 2023 09:29:00 ,1,1 +Thu Dec 07 2023 09:30:00 ,1,1 +Thu Dec 07 2023 09:31:00 ,1,1 +Thu Dec 07 2023 09:32:00 ,1,1 +Thu Dec 07 2023 09:33:00 ,1,1 +Thu Dec 07 2023 09:34:00 ,1,1 +Thu Dec 07 2023 09:35:00 ,1,1 +Thu Dec 07 2023 09:36:00 ,1,1 +Thu Dec 07 2023 09:37:00 ,1,1 +Thu Dec 07 2023 09:38:00 ,1,1 +Thu Dec 07 2023 09:39:00 ,1,1 +Thu Dec 07 2023 09:40:00 ,1,1 +Thu Dec 07 2023 09:41:00 ,1,1 +Thu Dec 07 2023 09:42:00 ,1,1 +Thu Dec 07 2023 09:43:00 ,1,1 +Thu Dec 07 2023 09:44:00 ,1,1 +Thu Dec 07 2023 09:45:00 ,1,1 +Thu Dec 07 2023 09:46:00 ,1,1 +Thu Dec 07 2023 09:47:00 ,1,1 +Thu Dec 07 2023 09:48:00 ,1,1 +Thu Dec 07 2023 09:49:00 ,1,1 +Thu Dec 07 2023 09:50:00 ,1,1 +Thu Dec 07 2023 09:51:00 ,1,1 +Thu Dec 07 2023 09:52:00 ,1,1 +Thu Dec 07 2023 09:53:00 ,1,1 +Thu Dec 07 2023 09:54:00 ,1,1 +Thu Dec 07 2023 09:55:00 ,1,1 +Thu Dec 07 2023 09:56:00 ,1,1 +Thu Dec 07 2023 09:57:00 ,1,1 +Thu Dec 07 2023 09:58:00 ,1,1 +Thu Dec 07 2023 09:59:00 ,1,1 +Thu Dec 07 2023 10:00:00 ,1,1 +Thu Dec 07 2023 10:01:00 ,1,1 +Thu Dec 07 2023 10:02:00 ,1,1 +Thu Dec 07 2023 10:03:00 ,1,1 +Thu Dec 07 2023 10:04:00 ,1,1 +Thu Dec 07 2023 10:05:00 ,1,1 +Thu Dec 07 2023 10:06:00 ,1,1 +Thu Dec 07 2023 10:07:00 ,1,1 +Thu Dec 07 2023 10:08:00 ,1,1 +Thu Dec 07 2023 10:09:00 ,1,1 +Thu Dec 07 2023 10:10:00 ,1,1 +Thu Dec 07 2023 10:11:00 ,1,1 +Thu Dec 07 2023 10:12:00 ,1,1 +Thu Dec 07 2023 10:13:00 ,1,1 +Thu Dec 07 2023 10:14:00 ,1,1 +Thu Dec 07 2023 10:15:00 ,1,1 +Thu Dec 07 2023 10:16:00 ,1,1 +Thu Dec 07 2023 10:17:00 ,1,1 +Thu Dec 07 2023 10:18:00 ,1,1 +Thu Dec 07 2023 10:19:00 ,1,1 +Thu Dec 07 2023 10:20:00 ,1,1 +Thu Dec 07 2023 10:21:00 ,1,1 +Thu Dec 07 2023 10:22:00 ,1,1 +Thu Dec 07 2023 10:23:00 ,1,1 +Thu Dec 07 2023 10:24:00 ,1,1 +Thu Dec 07 2023 10:25:00 ,1,1 +Thu Dec 07 2023 10:26:00 ,1,1 +Thu Dec 07 2023 10:27:00 ,1,1 +Thu Dec 07 2023 10:28:00 ,1,1 +Thu Dec 07 2023 10:29:00 ,1,1 +Thu Dec 07 2023 10:30:00 ,1,1 +Thu Dec 07 2023 10:31:00 ,1,1 +Thu Dec 07 2023 10:32:00 ,1,1 +Thu Dec 07 2023 10:33:00 ,1,1 +Thu Dec 07 2023 10:34:00 ,1,1 +Thu Dec 07 2023 10:35:00 ,1,1 +Thu Dec 07 2023 10:36:00 ,1,1 +Thu Dec 07 2023 10:37:00 ,1,1 +Thu Dec 07 2023 10:38:00 ,1,1 +Thu Dec 07 2023 10:39:00 ,1,1 +Thu Dec 07 2023 10:40:00 ,1,1 +Thu Dec 07 2023 10:41:00 ,1,1 +Thu Dec 07 2023 10:42:00 ,1,1 +Thu Dec 07 2023 10:43:00 ,1,1 +Thu Dec 07 2023 10:44:00 ,1,1 +Thu Dec 07 2023 10:45:00 ,1,1 +Thu Dec 07 2023 10:46:00 ,1,1 +Thu Dec 07 2023 10:47:00 ,1,1 +Thu Dec 07 2023 10:48:00 ,1,1 +Thu Dec 07 2023 10:49:00 ,1,1 +Thu Dec 07 2023 10:50:00 ,1,1 +Thu Dec 07 2023 10:51:00 ,1,1 +Thu Dec 07 2023 10:52:00 ,1,1 +Thu Dec 07 2023 10:53:00 ,1,1 +Thu Dec 07 2023 10:54:00 ,1,1 +Thu Dec 07 2023 10:55:00 ,1,1 +Thu Dec 07 2023 10:56:00 ,1,1 +Thu Dec 07 2023 10:57:00 ,1,1 +Thu Dec 07 2023 10:58:00 ,1,1 +Thu Dec 07 2023 10:59:00 ,1,1 +Thu Dec 07 2023 11:00:00 ,1,1 +Thu Dec 07 2023 11:01:00 ,1,1 +Thu Dec 07 2023 11:02:00 ,1,1 +Thu Dec 07 2023 11:03:00 ,1,1 +Thu Dec 07 2023 11:04:00 ,1,1 +Thu Dec 07 2023 11:05:00 ,1,1 +Thu Dec 07 2023 11:06:00 ,1,1 +Thu Dec 07 2023 11:07:00 ,1,1 +Thu Dec 07 2023 11:08:00 ,1,1 +Thu Dec 07 2023 11:09:00 ,1,1 +Thu Dec 07 2023 11:10:00 ,1,1 +Thu Dec 07 2023 11:11:00 ,1,1 +Thu Dec 07 2023 11:12:00 ,1,1 +Thu Dec 07 2023 11:13:00 ,1,1 +Thu Dec 07 2023 11:14:00 ,1,1 +Thu Dec 07 2023 11:15:00 ,1,1 +Thu Dec 07 2023 11:16:00 ,1,1 +Thu Dec 07 2023 11:17:00 ,1,1 +Thu Dec 07 2023 11:18:00 ,1,1 +Thu Dec 07 2023 11:19:00 ,1,1 +Thu Dec 07 2023 11:20:00 ,1,1 +Thu Dec 07 2023 11:21:00 ,1,1 +Thu Dec 07 2023 11:22:00 ,1,1 +Thu Dec 07 2023 11:23:00 ,1,1 +Thu Dec 07 2023 11:24:00 ,1,1 +Thu Dec 07 2023 11:25:00 ,1,1 +Thu Dec 07 2023 11:26:00 ,1,1 +Thu Dec 07 2023 11:27:00 ,1,1 +Thu Dec 07 2023 11:28:00 ,1,1 +Thu Dec 07 2023 11:29:00 ,1,1 +Thu Dec 07 2023 11:30:00 ,1,1 +Thu Dec 07 2023 11:31:00 ,1,1 +Thu Dec 07 2023 11:32:00 ,1,1 +Thu Dec 07 2023 11:33:00 ,1,1 +Thu Dec 07 2023 11:34:00 ,1,1 +Thu Dec 07 2023 11:35:00 ,1,1 +Thu Dec 07 2023 11:36:00 ,1,1 +Thu Dec 07 2023 11:37:00 ,1,1 +Thu Dec 07 2023 11:38:00 ,1,1 +Thu Dec 07 2023 11:39:00 ,1,1 +Thu Dec 07 2023 11:40:00 ,1,1 +Thu Dec 07 2023 11:41:00 ,1,1 +Thu Dec 07 2023 11:42:00 ,1,1 +Thu Dec 07 2023 11:43:00 ,1,1 +Thu Dec 07 2023 11:44:00 ,1,1 +Thu Dec 07 2023 11:45:00 ,1,1 +Thu Dec 07 2023 11:46:00 ,1,1 +Thu Dec 07 2023 11:47:00 ,1,1 +Thu Dec 07 2023 11:48:00 ,1,1 +Thu Dec 07 2023 11:49:00 ,1,1 +Thu Dec 07 2023 11:50:00 ,1,1 +Thu Dec 07 2023 11:51:00 ,1,1 +Thu Dec 07 2023 11:52:00 ,1,1 +Thu Dec 07 2023 11:53:00 ,1,1 +Thu Dec 07 2023 11:54:00 ,1,1 +Thu Dec 07 2023 11:55:00 ,1,1 +Thu Dec 07 2023 11:56:00 ,1,1 +Thu Dec 07 2023 11:57:00 ,1,1 +Thu Dec 07 2023 11:58:00 ,1,1 +Thu Dec 07 2023 11:59:00 ,1,1 +Thu Dec 07 2023 12:00:00 ,1,1 +Thu Dec 07 2023 12:01:00 ,1,1 +Thu Dec 07 2023 12:02:00 ,1,1 +Thu Dec 07 2023 12:03:00 ,1,1 +Thu Dec 07 2023 12:04:00 ,1,1 +Thu Dec 07 2023 12:05:00 ,1,1 +Thu Dec 07 2023 12:06:00 ,1,1 +Thu Dec 07 2023 12:07:00 ,1,1 +Thu Dec 07 2023 12:08:00 ,1,1 +Thu Dec 07 2023 12:09:00 ,1,1 +Thu Dec 07 2023 12:10:00 ,1,1 +Thu Dec 07 2023 12:11:00 ,1,1 +Thu Dec 07 2023 12:12:00 ,1,1 +Thu Dec 07 2023 12:13:00 ,1,1 +Thu Dec 07 2023 12:14:00 ,1,1 +Thu Dec 07 2023 12:15:00 ,1,1 +Thu Dec 07 2023 12:16:00 ,1,1 +Thu Dec 07 2023 12:17:00 ,1,1 +Thu Dec 07 2023 12:18:00 ,1,1 +Thu Dec 07 2023 12:19:00 ,1,1 +Thu Dec 07 2023 12:20:00 ,1,1 +Thu Dec 07 2023 12:21:00 ,1,1 +Thu Dec 07 2023 12:22:00 ,1,1 +Thu Dec 07 2023 12:23:00 ,1,1 +Thu Dec 07 2023 12:24:00 ,1,1 +Thu Dec 07 2023 12:25:00 ,1,1 +Thu Dec 07 2023 12:26:00 ,1,1 +Thu Dec 07 2023 12:27:00 ,1,1 +Thu Dec 07 2023 12:28:00 ,1,1 +Thu Dec 07 2023 12:29:00 ,1,1 +Thu Dec 07 2023 12:30:00 ,1,1 +Thu Dec 07 2023 12:31:00 ,1,1 +Thu Dec 07 2023 12:32:00 ,1,1 +Thu Dec 07 2023 12:33:00 ,1,1 +Thu Dec 07 2023 12:34:00 ,1,1 +Thu Dec 07 2023 12:35:00 ,1,1 +Thu Dec 07 2023 12:36:00 ,1,1 +Thu Dec 07 2023 12:37:00 ,1,1 +Thu Dec 07 2023 12:38:00 ,1,1 +Thu Dec 07 2023 12:39:00 ,1,1 +Thu Dec 07 2023 12:40:00 ,1,1 +Thu Dec 07 2023 12:41:00 ,1,1 +Thu Dec 07 2023 12:42:00 ,1,1 +Thu Dec 07 2023 12:43:00 ,1,1 +Thu Dec 07 2023 12:44:00 ,1,1 +Thu Dec 07 2023 12:45:00 ,1,1 +Thu Dec 07 2023 12:46:00 ,1,1 +Thu Dec 07 2023 12:47:00 ,1,1 +Thu Dec 07 2023 12:48:00 ,1,1 +Thu Dec 07 2023 12:49:00 ,1,1 +Thu Dec 07 2023 12:50:00 ,1,1 +Thu Dec 07 2023 12:51:00 ,1,1 +Thu Dec 07 2023 12:52:00 ,1,1 +Thu Dec 07 2023 12:53:00 ,1,1 +Thu Dec 07 2023 12:54:00 ,1,1 +Thu Dec 07 2023 12:55:00 ,1,1 +Thu Dec 07 2023 12:56:00 ,1,1 +Thu Dec 07 2023 12:57:00 ,1,1 +Thu Dec 07 2023 12:58:00 ,1,1 +Thu Dec 07 2023 12:59:00 ,1,1 +Thu Dec 07 2023 13:00:00 ,1,1 +Thu Dec 07 2023 13:01:00 ,1,1 +Thu Dec 07 2023 13:02:00 ,1,1 +Thu Dec 07 2023 13:03:00 ,1,1 +Thu Dec 07 2023 13:04:00 ,1,1 +Thu Dec 07 2023 13:05:00 ,1,1 +Thu Dec 07 2023 13:06:00 ,1,1 +Thu Dec 07 2023 13:07:00 ,1,1 +Thu Dec 07 2023 13:08:00 ,1,1 +Thu Dec 07 2023 13:09:00 ,1,1 +Thu Dec 07 2023 13:10:00 ,1,1 +Thu Dec 07 2023 13:11:00 ,1,1 +Thu Dec 07 2023 13:12:00 ,1,1 +Thu Dec 07 2023 13:13:00 ,1,1 +Thu Dec 07 2023 13:14:00 ,1,1 +Thu Dec 07 2023 13:15:00 ,1,1 +Thu Dec 07 2023 13:16:00 ,1,1 +Thu Dec 07 2023 13:17:00 ,1,1 +Thu Dec 07 2023 13:18:00 ,1,1 +Thu Dec 07 2023 13:19:00 ,1,1 +Thu Dec 07 2023 13:20:00 ,1,1 +Thu Dec 07 2023 13:21:00 ,1,1 +Thu Dec 07 2023 13:22:00 ,1,1 +Thu Dec 07 2023 13:23:00 ,1,1 +Thu Dec 07 2023 13:24:00 ,1,1 +Thu Dec 07 2023 13:25:00 ,1,1 +Thu Dec 07 2023 13:26:00 ,1,1 +Thu Dec 07 2023 13:27:00 ,1,1 +Thu Dec 07 2023 13:28:00 ,1,1 +Thu Dec 07 2023 13:29:00 ,1,1 +Thu Dec 07 2023 13:30:00 ,1,1 +Thu Dec 07 2023 13:31:00 ,1,1 +Thu Dec 07 2023 13:32:00 ,1,1 +Thu Dec 07 2023 13:33:00 ,1,1 +Thu Dec 07 2023 13:34:00 ,1,1 +Thu Dec 07 2023 13:35:00 ,1,1 +Thu Dec 07 2023 13:36:00 ,1,1 +Thu Dec 07 2023 13:37:00 ,1,1 +Thu Dec 07 2023 13:38:00 ,1,1 +Thu Dec 07 2023 13:39:00 ,1,1 +Thu Dec 07 2023 13:40:00 ,1,1 +Thu Dec 07 2023 13:41:00 ,1,1 +Thu Dec 07 2023 13:42:00 ,1,1 +Thu Dec 07 2023 13:43:00 ,1,1 +Thu Dec 07 2023 13:44:00 ,1,1 +Thu Dec 07 2023 13:45:00 ,1,1 +Thu Dec 07 2023 13:46:00 ,1,1 +Thu Dec 07 2023 13:47:00 ,1,1 +Thu Dec 07 2023 13:48:00 ,1,1 +Thu Dec 07 2023 13:49:00 ,1,1 +Thu Dec 07 2023 13:50:00 ,1,1 +Thu Dec 07 2023 13:51:00 ,1,1 +Thu Dec 07 2023 13:52:00 ,1,1 +Thu Dec 07 2023 13:53:00 ,1,1 +Thu Dec 07 2023 13:54:00 ,1,1 +Thu Dec 07 2023 13:55:00 ,1,1 +Thu Dec 07 2023 13:56:00 ,1,1 +Thu Dec 07 2023 13:57:00 ,1,1 +Thu Dec 07 2023 13:58:00 ,1,1 +Thu Dec 07 2023 13:59:00 ,1,1 +Thu Dec 07 2023 14:00:00 ,1,1 +Thu Dec 07 2023 14:01:00 ,1,1 +Thu Dec 07 2023 14:02:00 ,1,1 +Thu Dec 07 2023 14:03:00 ,1,1 +Thu Dec 07 2023 14:04:00 ,1,1 +Thu Dec 07 2023 14:05:00 ,1,1 +Thu Dec 07 2023 14:06:00 ,1,1 +Thu Dec 07 2023 14:07:00 ,1,1 +Thu Dec 07 2023 14:08:00 ,1,1 +Thu Dec 07 2023 14:09:00 ,1,1 +Thu Dec 07 2023 14:10:00 ,1,1 +Thu Dec 07 2023 14:11:00 ,1,1 +Thu Dec 07 2023 14:12:00 ,1,1 +Thu Dec 07 2023 14:13:00 ,1,1 +Thu Dec 07 2023 14:14:00 ,1,1 +Thu Dec 07 2023 14:15:00 ,1,1 +Thu Dec 07 2023 14:16:00 ,1,1 +Thu Dec 07 2023 14:17:00 ,1,1 +Thu Dec 07 2023 14:18:00 ,1,1 +Thu Dec 07 2023 14:19:00 ,1,1 +Thu Dec 07 2023 14:20:00 ,1,1 +Thu Dec 07 2023 14:21:00 ,1,1 +Thu Dec 07 2023 14:22:00 ,1,1 +Thu Dec 07 2023 14:23:00 ,1,1 +Thu Dec 07 2023 14:24:00 ,1,1 +Thu Dec 07 2023 14:25:00 ,1,1 +Thu Dec 07 2023 14:26:00 ,1,1 +Thu Dec 07 2023 14:27:00 ,1,1 +Thu Dec 07 2023 14:28:00 ,1,1 +Thu Dec 07 2023 14:29:00 ,1,1 +Thu Dec 07 2023 14:30:00 ,1,1 +Thu Dec 07 2023 14:31:00 ,1,1 +Thu Dec 07 2023 14:32:00 ,1,1 +Thu Dec 07 2023 14:33:00 ,1,1 +Thu Dec 07 2023 14:34:00 ,1,1 +Thu Dec 07 2023 14:35:00 ,1,1 +Thu Dec 07 2023 14:36:00 ,1,1 +Thu Dec 07 2023 14:37:00 ,1,1 +Thu Dec 07 2023 14:38:00 ,1,1 +Thu Dec 07 2023 14:39:00 ,1,1 +Thu Dec 07 2023 14:40:00 ,1,1 +Thu Dec 07 2023 14:41:00 ,1,1 +Thu Dec 07 2023 14:42:00 ,1,1 +Thu Dec 07 2023 14:43:00 ,1,1 +Thu Dec 07 2023 14:44:00 ,1,1 +Thu Dec 07 2023 14:45:00 ,1,1 +Thu Dec 07 2023 14:46:00 ,1,1 +Thu Dec 07 2023 14:47:00 ,1,1 +Thu Dec 07 2023 14:48:00 ,1,1 +Thu Dec 07 2023 14:49:00 ,1,1 +Thu Dec 07 2023 14:50:00 ,1,1 +Thu Dec 07 2023 14:51:00 ,1,1 +Thu Dec 07 2023 14:52:00 ,1,1 +Thu Dec 07 2023 14:53:00 ,1,1 +Thu Dec 07 2023 14:54:00 ,1,1 +Thu Dec 07 2023 14:55:00 ,1,1 +Thu Dec 07 2023 14:56:00 ,1,1 +Thu Dec 07 2023 14:57:00 ,1,1 +Thu Dec 07 2023 14:58:00 ,1,1 +Thu Dec 07 2023 14:59:00 ,1,1 +Thu Dec 07 2023 15:00:00 ,1,1 +Thu Dec 07 2023 15:01:00 ,1,1 +Thu Dec 07 2023 15:02:00 ,1,1 +Thu Dec 07 2023 15:03:00 ,1,1 +Thu Dec 07 2023 15:04:00 ,1,1 +Thu Dec 07 2023 15:05:00 ,1,1 +Thu Dec 07 2023 15:06:00 ,1,1 +Thu Dec 07 2023 15:07:00 ,1,1 +Thu Dec 07 2023 15:08:00 ,1,1 +Thu Dec 07 2023 15:09:00 ,1,1 +Thu Dec 07 2023 15:10:00 ,1,1 +Thu Dec 07 2023 15:11:00 ,1,1 +Thu Dec 07 2023 15:12:00 ,1,1 +Thu Dec 07 2023 15:13:00 ,1,1 +Thu Dec 07 2023 15:14:00 ,1,1 +Thu Dec 07 2023 15:15:00 ,1,1 +Thu Dec 07 2023 15:16:00 ,1,1 +Thu Dec 07 2023 15:17:00 ,1,1 +Thu Dec 07 2023 15:18:00 ,1,1 +Thu Dec 07 2023 15:19:00 ,1,1 +Thu Dec 07 2023 15:20:00 ,1,1 +Thu Dec 07 2023 15:21:00 ,1,1 +Thu Dec 07 2023 15:22:00 ,1,1 +Thu Dec 07 2023 15:23:00 ,1,1 +Thu Dec 07 2023 15:24:00 ,1,1 +Thu Dec 07 2023 15:25:00 ,1,1 +Thu Dec 07 2023 15:26:00 ,1,1 +Thu Dec 07 2023 15:27:00 ,1,1 +Thu Dec 07 2023 15:28:00 ,1,1 +Thu Dec 07 2023 15:29:00 ,1,1 +Thu Dec 07 2023 15:30:00 ,1,1 +Thu Dec 07 2023 15:31:00 ,1,1 +Thu Dec 07 2023 15:32:00 ,1,1 +Thu Dec 07 2023 15:33:00 ,1,1 +Thu Dec 07 2023 15:34:00 ,1,1 +Thu Dec 07 2023 15:35:00 ,1,1 +Thu Dec 07 2023 15:36:00 ,1,1 +Thu Dec 07 2023 15:37:00 ,1,1 +Thu Dec 07 2023 15:38:00 ,1,1 +Thu Dec 07 2023 15:39:00 ,1,1 +Thu Dec 07 2023 15:40:00 ,1,1 +Thu Dec 07 2023 15:41:00 ,1,1 +Thu Dec 07 2023 15:42:00 ,1,1 +Thu Dec 07 2023 15:43:00 ,1,1 +Thu Dec 07 2023 15:44:00 ,1,1 +Thu Dec 07 2023 15:45:00 ,1,1 +Thu Dec 07 2023 15:46:00 ,1,1 +Thu Dec 07 2023 15:47:00 ,1,1 +Thu Dec 07 2023 15:48:00 ,1,1 +Thu Dec 07 2023 15:49:00 ,1,1 +Thu Dec 07 2023 15:50:00 ,1,1 +Thu Dec 07 2023 15:51:00 ,1,1 +Thu Dec 07 2023 15:52:00 ,1,1 +Thu Dec 07 2023 15:53:00 ,1,1 +Thu Dec 07 2023 15:54:00 ,1,1 +Thu Dec 07 2023 15:55:00 ,1,1 +Thu Dec 07 2023 15:56:00 ,1,1 +Thu Dec 07 2023 15:57:00 ,1,1 +Thu Dec 07 2023 15:58:00 ,1,1 +Thu Dec 07 2023 15:59:00 ,1,1 +Thu Dec 07 2023 16:00:00 ,1,1 +Thu Dec 07 2023 16:01:00 ,1,1 +Thu Dec 07 2023 16:02:00 ,1,1 +Thu Dec 07 2023 16:03:00 ,1,1 +Thu Dec 07 2023 16:04:00 ,1,1 +Thu Dec 07 2023 16:05:00 ,1,1 +Thu Dec 07 2023 16:06:00 ,1,1 +Thu Dec 07 2023 16:07:00 ,1,1 +Thu Dec 07 2023 16:08:00 ,1,1 +Thu Dec 07 2023 16:09:00 ,1,1 +Thu Dec 07 2023 16:10:00 ,1,1 +Thu Dec 07 2023 16:11:00 ,1,1 +Thu Dec 07 2023 16:12:00 ,1,1 +Thu Dec 07 2023 16:13:00 ,1,1 +Thu Dec 07 2023 16:14:00 ,1,1 +Thu Dec 07 2023 16:15:00 ,1,1 +Thu Dec 07 2023 16:16:00 ,1,1 +Thu Dec 07 2023 16:17:00 ,1,1 +Thu Dec 07 2023 16:18:00 ,1,1 +Thu Dec 07 2023 16:19:00 ,1,1 +Thu Dec 07 2023 16:20:00 ,1,1 +Thu Dec 07 2023 16:21:00 ,1,1 +Thu Dec 07 2023 16:22:00 ,1,1 +Thu Dec 07 2023 16:23:00 ,1,1 +Thu Dec 07 2023 16:24:00 ,1,1 +Thu Dec 07 2023 16:25:00 ,1,1 +Thu Dec 07 2023 16:26:00 ,1,1 +Thu Dec 07 2023 16:27:00 ,1,1 +Thu Dec 07 2023 16:28:00 ,1,1 +Thu Dec 07 2023 16:29:00 ,1,1 +Thu Dec 07 2023 16:30:00 ,1,1 +Thu Dec 07 2023 16:31:00 ,1,1 +Thu Dec 07 2023 16:32:00 ,1,1 +Thu Dec 07 2023 16:33:00 ,1,1 +Thu Dec 07 2023 16:34:00 ,1,1 +Thu Dec 07 2023 16:35:00 ,1,1 +Thu Dec 07 2023 16:36:00 ,1,1 +Thu Dec 07 2023 16:37:00 ,1,1 +Thu Dec 07 2023 16:38:00 ,1,1 +Thu Dec 07 2023 16:39:00 ,1,1 +Thu Dec 07 2023 16:40:00 ,1,1 +Thu Dec 07 2023 16:41:00 ,1,1 +Thu Dec 07 2023 16:42:00 ,1,1 +Thu Dec 07 2023 16:43:00 ,1,1 +Thu Dec 07 2023 16:44:00 ,1,1 +Thu Dec 07 2023 16:45:00 ,1,1 +Thu Dec 07 2023 16:46:00 ,1,1 +Thu Dec 07 2023 16:47:00 ,1,1 +Thu Dec 07 2023 16:48:00 ,1,1 +Thu Dec 07 2023 16:49:00 ,1,1 +Thu Dec 07 2023 16:50:00 ,1,1 +Thu Dec 07 2023 16:51:00 ,1,1 +Thu Dec 07 2023 16:52:00 ,1,1 +Thu Dec 07 2023 16:53:00 ,1,1 +Thu Dec 07 2023 16:54:00 ,1,1 +Thu Dec 07 2023 16:55:00 ,1,1 +Thu Dec 07 2023 16:56:00 ,1,1 +Thu Dec 07 2023 16:57:00 ,1,1 +Thu Dec 07 2023 16:58:00 ,1,1 +Thu Dec 07 2023 16:59:00 ,1,1 +Thu Dec 07 2023 17:00:00 ,1,1 +Thu Dec 07 2023 17:01:00 ,1,1 +Thu Dec 07 2023 17:02:00 ,1,1 +Thu Dec 07 2023 17:03:00 ,1,1 +Thu Dec 07 2023 17:04:00 ,1,1 +Thu Dec 07 2023 17:05:00 ,1,1 +Thu Dec 07 2023 17:06:00 ,1,1 +Thu Dec 07 2023 17:07:00 ,1,1 +Thu Dec 07 2023 17:08:00 ,1,1 +Thu Dec 07 2023 17:09:00 ,1,1 +Thu Dec 07 2023 17:10:00 ,1,1 +Thu Dec 07 2023 17:11:00 ,1,1 +Thu Dec 07 2023 17:12:00 ,1,1 +Thu Dec 07 2023 17:13:00 ,1,1 +Thu Dec 07 2023 17:14:00 ,1,1 +Thu Dec 07 2023 17:15:00 ,1,1 +Thu Dec 07 2023 17:16:00 ,1,1 +Thu Dec 07 2023 17:17:00 ,1,1 +Thu Dec 07 2023 17:18:00 ,1,1 +Thu Dec 07 2023 17:19:00 ,1,1 +Thu Dec 07 2023 17:20:00 ,1,1 +Thu Dec 07 2023 17:21:00 ,1,1 +Thu Dec 07 2023 17:22:00 ,1,1 +Thu Dec 07 2023 17:23:00 ,1,1 +Thu Dec 07 2023 17:24:00 ,1,1 +Thu Dec 07 2023 17:25:00 ,1,1 +Thu Dec 07 2023 17:26:00 ,1,1 +Thu Dec 07 2023 17:27:00 ,1,1 +Thu Dec 07 2023 17:28:00 ,1,1 +Thu Dec 07 2023 17:29:00 ,1,1 +Thu Dec 07 2023 17:30:00 ,1,1 +Thu Dec 07 2023 17:31:00 ,1,1 +Thu Dec 07 2023 17:32:00 ,1,1 +Thu Dec 07 2023 17:33:00 ,1,1 +Thu Dec 07 2023 17:34:00 ,1,1 +Thu Dec 07 2023 17:35:00 ,1,1 +Thu Dec 07 2023 17:36:00 ,1,1 +Thu Dec 07 2023 17:37:00 ,1,1 +Thu Dec 07 2023 17:38:00 ,1,1 +Thu Dec 07 2023 17:39:00 ,1,1 +Thu Dec 07 2023 17:40:00 ,1,1 +Thu Dec 07 2023 17:41:00 ,1,1 +Thu Dec 07 2023 17:42:00 ,1,1 +Thu Dec 07 2023 17:43:00 ,1,1 +Thu Dec 07 2023 17:44:00 ,1,1 +Thu Dec 07 2023 17:45:00 ,1,1 +Thu Dec 07 2023 17:46:00 ,1,1 +Thu Dec 07 2023 17:47:00 ,1,1 +Thu Dec 07 2023 17:48:00 ,1,1 +Thu Dec 07 2023 17:49:00 ,1,1 +Thu Dec 07 2023 17:50:00 ,1,1 +Thu Dec 07 2023 17:51:00 ,1,1 +Thu Dec 07 2023 17:52:00 ,1,1 +Thu Dec 07 2023 17:53:00 ,1,1 +Thu Dec 07 2023 17:54:00 ,1,1 +Thu Dec 07 2023 17:55:00 ,1,1 +Thu Dec 07 2023 17:56:00 ,1,1 +Thu Dec 07 2023 17:57:00 ,1,1 +Thu Dec 07 2023 17:58:00 ,1,1 +Thu Dec 07 2023 17:59:00 ,1,1 +Thu Dec 07 2023 18:00:00 ,1,1 +Thu Dec 07 2023 18:01:00 ,1,1 +Thu Dec 07 2023 18:02:00 ,1,1 +Thu Dec 07 2023 18:03:00 ,1,1 +Thu Dec 07 2023 18:04:00 ,1,1 +Thu Dec 07 2023 18:05:00 ,1,1 +Thu Dec 07 2023 18:06:00 ,1,1 +Thu Dec 07 2023 18:07:00 ,1,1 +Thu Dec 07 2023 18:08:00 ,1,1 +Thu Dec 07 2023 18:09:00 ,1,1 +Thu Dec 07 2023 18:10:00 ,1,1 +Thu Dec 07 2023 18:11:00 ,1,1 +Thu Dec 07 2023 18:12:00 ,1,1 +Thu Dec 07 2023 18:13:00 ,1,1 +Thu Dec 07 2023 18:14:00 ,1,1 +Thu Dec 07 2023 18:15:00 ,1,1 +Thu Dec 07 2023 18:16:00 ,1,1 +Thu Dec 07 2023 18:17:00 ,1,1 +Thu Dec 07 2023 18:18:00 ,1,1 +Thu Dec 07 2023 18:19:00 ,1,1 +Thu Dec 07 2023 18:20:00 ,1,1 +Thu Dec 07 2023 18:21:00 ,1,1 +Thu Dec 07 2023 18:22:00 ,1,1 +Thu Dec 07 2023 18:23:00 ,1,1 +Thu Dec 07 2023 18:24:00 ,1,1 +Thu Dec 07 2023 18:25:00 ,1,1 +Thu Dec 07 2023 18:26:00 ,1,1 +Thu Dec 07 2023 18:27:00 ,1,1 +Thu Dec 07 2023 18:28:00 ,1,1 +Thu Dec 07 2023 18:29:00 ,1,1 +Thu Dec 07 2023 18:30:00 ,1,1 +Thu Dec 07 2023 18:31:00 ,1,1 +Thu Dec 07 2023 18:32:00 ,1,1 +Thu Dec 07 2023 18:33:00 ,1,1 +Thu Dec 07 2023 18:34:00 ,1,1 +Thu Dec 07 2023 18:35:00 ,1,1 +Thu Dec 07 2023 18:36:00 ,1,1 +Thu Dec 07 2023 18:37:00 ,1,1 +Thu Dec 07 2023 18:38:00 ,2,1 +Thu Dec 07 2023 18:39:00 ,2,0 +Thu Dec 07 2023 18:40:00 ,2,0 +Thu Dec 07 2023 18:41:00 ,2,0 +Thu Dec 07 2023 18:42:00 ,1,1 +Thu Dec 07 2023 18:43:00 ,1,1 +Thu Dec 07 2023 18:44:00 ,1,1 +Thu Dec 07 2023 18:45:00 ,1,1 +Thu Dec 07 2023 18:46:00 ,1,1 +Thu Dec 07 2023 18:47:00 ,1,1 +Thu Dec 07 2023 18:48:00 ,1,1 +Thu Dec 07 2023 18:49:00 ,1,1 +Thu Dec 07 2023 18:50:00 ,1,1 +Thu Dec 07 2023 18:51:00 ,1,1 +Thu Dec 07 2023 18:52:00 ,1,1 +Thu Dec 07 2023 18:53:00 ,1,1 +Thu Dec 07 2023 18:54:00 ,1,1 +Thu Dec 07 2023 18:55:00 ,1,1 +Thu Dec 07 2023 18:56:00 ,1,1 +Thu Dec 07 2023 18:57:00 ,1,1 +Thu Dec 07 2023 18:58:00 ,1,1 +Thu Dec 07 2023 18:59:00 ,1,1 +Thu Dec 07 2023 19:00:00 ,1,1 diff --git a/ai/data/sample/Request Count.csv b/ai/data/sample/Request Count.csv new file mode 100644 index 0000000..eb7bb74 --- /dev/null +++ b/ai/data/sample/Request Count.csv @@ -0,0 +1,602 @@ +Time,Request Count (1xx),Request Count (2xx),Request Count (3xx),Request Count (4xx) +Thu Dec 07 2023 09:00:00 ,0,0,0,4 +Thu Dec 07 2023 09:01:00 ,1,0,0,4 +Thu Dec 07 2023 09:02:00 ,0,0,0,4 +Thu Dec 07 2023 09:03:00 ,0,0,0,4 +Thu Dec 07 2023 09:04:00 ,0,0,0,3 +Thu Dec 07 2023 09:05:00 ,0,0,0,4 +Thu Dec 07 2023 09:06:00 ,1,0,0,4 +Thu Dec 07 2023 09:07:00 ,0,0,0,3 +Thu Dec 07 2023 09:08:00 ,0,0,0,4 +Thu Dec 07 2023 09:09:00 ,0,0,0,3 +Thu Dec 07 2023 09:10:00 ,0,0,0,4 +Thu Dec 07 2023 09:11:00 ,0,0,0,4 +Thu Dec 07 2023 09:12:00 ,1,0,0,4 +Thu Dec 07 2023 09:13:00 ,0,0,0,4 +Thu Dec 07 2023 09:14:00 ,0,5,0,4 +Thu Dec 07 2023 09:15:00 ,0,14,1,3 +Thu Dec 07 2023 09:16:00 ,0,5,0,4 +Thu Dec 07 2023 09:17:00 ,1,121,2,6 +Thu Dec 07 2023 09:18:00 ,0,59,0,4 +Thu Dec 07 2023 09:19:00 ,0,32,2,5 +Thu Dec 07 2023 09:20:00 ,1,24,1,4 +Thu Dec 07 2023 09:21:00 ,3,18,5,4 +Thu Dec 07 2023 09:22:00 ,2,29,3,6 +Thu Dec 07 2023 09:23:00 ,1,36,5,3 +Thu Dec 07 2023 09:24:00 ,0,0,0,4 +Thu Dec 07 2023 09:25:00 ,1,0,0,4 +Thu Dec 07 2023 09:26:00 ,0,0,0,3 +Thu Dec 07 2023 09:27:00 ,2,0,0,5 +Thu Dec 07 2023 09:28:00 ,0,0,0,3 +Thu Dec 07 2023 09:29:00 ,0,0,0,4 +Thu Dec 07 2023 09:30:00 ,1,0,0,4 +Thu Dec 07 2023 09:31:00 ,0,0,0,4 +Thu Dec 07 2023 09:32:00 ,2,0,0,4 +Thu Dec 07 2023 09:33:00 ,0,0,0,5 +Thu Dec 07 2023 09:34:00 ,0,0,0,4 +Thu Dec 07 2023 09:35:00 ,1,0,0,3 +Thu Dec 07 2023 09:36:00 ,0,2,0,4 +Thu Dec 07 2023 09:37:00 ,2,20,0,4 +Thu Dec 07 2023 09:38:00 ,0,24,0,4 +Thu Dec 07 2023 09:39:00 ,0,119,1,4 +Thu Dec 07 2023 09:40:00 ,1,164,1,4 +Thu Dec 07 2023 09:41:00 ,2,107,0,5 +Thu Dec 07 2023 09:42:00 ,2,0,0,4 +Thu Dec 07 2023 09:43:00 ,0,0,0,4 +Thu Dec 07 2023 09:44:00 ,0,0,0,4 +Thu Dec 07 2023 09:45:00 ,1,0,0,4 +Thu Dec 07 2023 09:46:00 ,0,0,0,3 +Thu Dec 07 2023 09:47:00 ,2,0,0,4 +Thu Dec 07 2023 09:48:00 ,0,0,0,4 +Thu Dec 07 2023 09:49:00 ,0,0,0,4 +Thu Dec 07 2023 09:50:00 ,1,4,0,4 +Thu Dec 07 2023 09:51:00 ,0,11,0,4 +Thu Dec 07 2023 09:52:00 ,2,0,0,4 +Thu Dec 07 2023 09:53:00 ,0,0,0,5 +Thu Dec 07 2023 09:54:00 ,0,0,0,3 +Thu Dec 07 2023 09:55:00 ,1,0,0,4 +Thu Dec 07 2023 09:56:00 ,0,3,0,3 +Thu Dec 07 2023 09:57:00 ,2,22,0,4 +Thu Dec 07 2023 09:58:00 ,0,16,2,3 +Thu Dec 07 2023 09:59:00 ,0,41,2,5 +Thu Dec 07 2023 10:00:00 ,1,0,0,4 +Thu Dec 07 2023 10:01:00 ,0,0,0,4 +Thu Dec 07 2023 10:02:00 ,2,0,0,3 +Thu Dec 07 2023 10:03:00 ,0,0,0,4 +Thu Dec 07 2023 10:04:00 ,1,0,0,4 +Thu Dec 07 2023 10:05:00 ,0,0,0,3 +Thu Dec 07 2023 10:06:00 ,1,0,0,4 +Thu Dec 07 2023 10:07:00 ,2,0,0,4 +Thu Dec 07 2023 10:08:00 ,0,0,0,4 +Thu Dec 07 2023 10:09:00 ,1,0,0,3 +Thu Dec 07 2023 10:10:00 ,0,0,0,4 +Thu Dec 07 2023 10:11:00 ,1,0,0,3 +Thu Dec 07 2023 10:12:00 ,2,0,0,5 +Thu Dec 07 2023 10:13:00 ,0,0,0,3 +Thu Dec 07 2023 10:14:00 ,1,0,0,4 +Thu Dec 07 2023 10:15:00 ,0,0,0,4 +Thu Dec 07 2023 10:16:00 ,1,0,0,3 +Thu Dec 07 2023 10:17:00 ,2,0,0,5 +Thu Dec 07 2023 10:18:00 ,0,0,0,3 +Thu Dec 07 2023 10:19:00 ,1,0,0,4 +Thu Dec 07 2023 10:20:00 ,0,0,0,4 +Thu Dec 07 2023 10:21:00 ,1,0,0,3 +Thu Dec 07 2023 10:22:00 ,1,0,0,4 +Thu Dec 07 2023 10:23:00 ,1,0,0,4 +Thu Dec 07 2023 10:24:00 ,1,0,0,4 +Thu Dec 07 2023 10:25:00 ,0,0,0,4 +Thu Dec 07 2023 10:26:00 ,1,0,0,4 +Thu Dec 07 2023 10:27:00 ,1,0,0,3 +Thu Dec 07 2023 10:28:00 ,1,0,0,4 +Thu Dec 07 2023 10:29:00 ,1,0,0,4 +Thu Dec 07 2023 10:30:00 ,0,0,0,3 +Thu Dec 07 2023 10:31:00 ,1,0,0,4 +Thu Dec 07 2023 10:32:00 ,1,0,0,3 +Thu Dec 07 2023 10:33:00 ,1,0,0,4 +Thu Dec 07 2023 10:34:00 ,1,0,0,3 +Thu Dec 07 2023 10:35:00 ,0,0,0,4 +Thu Dec 07 2023 10:36:00 ,1,0,0,4 +Thu Dec 07 2023 10:37:00 ,1,0,0,3 +Thu Dec 07 2023 10:38:00 ,1,0,0,4 +Thu Dec 07 2023 10:39:00 ,1,0,0,3 +Thu Dec 07 2023 10:40:00 ,0,0,0,3 +Thu Dec 07 2023 10:41:00 ,1,0,0,4 +Thu Dec 07 2023 10:42:00 ,1,0,0,4 +Thu Dec 07 2023 10:43:00 ,1,0,0,5 +Thu Dec 07 2023 10:44:00 ,1,0,0,4 +Thu Dec 07 2023 10:45:00 ,0,0,0,4 +Thu Dec 07 2023 10:46:00 ,1,0,0,4 +Thu Dec 07 2023 10:47:00 ,1,0,0,3 +Thu Dec 07 2023 10:48:00 ,2,0,0,5 +Thu Dec 07 2023 10:49:00 ,1,0,0,3 +Thu Dec 07 2023 10:50:00 ,0,0,0,4 +Thu Dec 07 2023 10:51:00 ,0,0,0,4 +Thu Dec 07 2023 10:52:00 ,1,0,0,3 +Thu Dec 07 2023 10:53:00 ,2,0,0,4 +Thu Dec 07 2023 10:54:00 ,1,0,0,4 +Thu Dec 07 2023 10:55:00 ,0,0,0,1 +Thu Dec 07 2023 10:56:00 ,0,0,0,4 +Thu Dec 07 2023 10:57:00 ,1,0,0,3 +Thu Dec 07 2023 10:58:00 ,2,0,0,4 +Thu Dec 07 2023 10:59:00 ,2,0,0,3 +Thu Dec 07 2023 11:00:00 ,2,0,0,4 +Thu Dec 07 2023 11:01:00 ,0,0,0,4 +Thu Dec 07 2023 11:02:00 ,0,0,0,4 +Thu Dec 07 2023 11:03:00 ,0,0,0,3 +Thu Dec 07 2023 11:04:00 ,1,0,0,4 +Thu Dec 07 2023 11:05:00 ,3,0,0,4 +Thu Dec 07 2023 11:06:00 ,0,0,0,4 +Thu Dec 07 2023 11:07:00 ,0,0,0,4 +Thu Dec 07 2023 11:08:00 ,0,0,0,4 +Thu Dec 07 2023 11:09:00 ,0,0,0,3 +Thu Dec 07 2023 11:10:00 ,4,0,0,4 +Thu Dec 07 2023 11:11:00 ,0,0,0,3 +Thu Dec 07 2023 11:12:00 ,0,2,1,4 +Thu Dec 07 2023 11:13:00 ,1,8,4,4 +Thu Dec 07 2023 11:14:00 ,0,3,0,4 +Thu Dec 07 2023 11:15:00 ,4,40,8,5 +Thu Dec 07 2023 11:16:00 ,0,14,0,4 +Thu Dec 07 2023 11:17:00 ,0,20,2,4 +Thu Dec 07 2023 11:18:00 ,1,1,2,4 +Thu Dec 07 2023 11:19:00 ,0,0,0,3 +Thu Dec 07 2023 11:20:00 ,2,0,0,4 +Thu Dec 07 2023 11:21:00 ,1,0,0,3 +Thu Dec 07 2023 11:22:00 ,0,0,0,4 +Thu Dec 07 2023 11:23:00 ,1,0,0,5 +Thu Dec 07 2023 11:24:00 ,0,0,0,3 +Thu Dec 07 2023 11:25:00 ,2,0,0,4 +Thu Dec 07 2023 11:26:00 ,1,0,0,4 +Thu Dec 07 2023 11:27:00 ,0,0,0,3 +Thu Dec 07 2023 11:28:00 ,1,0,0,5 +Thu Dec 07 2023 11:29:00 ,0,0,0,5 +Thu Dec 07 2023 11:30:00 ,2,0,0,4 +Thu Dec 07 2023 11:31:00 ,1,0,0,4 +Thu Dec 07 2023 11:32:00 ,0,0,0,4 +Thu Dec 07 2023 11:33:00 ,1,0,0,4 +Thu Dec 07 2023 11:34:00 ,0,0,0,3 +Thu Dec 07 2023 11:35:00 ,2,0,0,4 +Thu Dec 07 2023 11:36:00 ,1,0,0,4 +Thu Dec 07 2023 11:37:00 ,0,0,0,4 +Thu Dec 07 2023 11:38:00 ,1,0,0,4 +Thu Dec 07 2023 11:39:00 ,0,0,0,4 +Thu Dec 07 2023 11:40:00 ,2,0,0,4 +Thu Dec 07 2023 11:41:00 ,1,0,0,4 +Thu Dec 07 2023 11:42:00 ,0,0,0,4 +Thu Dec 07 2023 11:43:00 ,1,0,0,4 +Thu Dec 07 2023 11:44:00 ,0,0,0,3 +Thu Dec 07 2023 11:45:00 ,2,0,0,4 +Thu Dec 07 2023 11:46:00 ,1,0,0,4 +Thu Dec 07 2023 11:47:00 ,0,0,0,4 +Thu Dec 07 2023 11:48:00 ,1,0,0,4 +Thu Dec 07 2023 11:49:00 ,0,0,0,3 +Thu Dec 07 2023 11:50:00 ,2,0,0,4 +Thu Dec 07 2023 11:51:00 ,1,0,0,4 +Thu Dec 07 2023 11:52:00 ,0,0,0,4 +Thu Dec 07 2023 11:53:00 ,1,0,0,4 +Thu Dec 07 2023 11:54:00 ,0,0,0,4 +Thu Dec 07 2023 11:55:00 ,0,0,0,4 +Thu Dec 07 2023 11:56:00 ,3,0,0,4 +Thu Dec 07 2023 11:57:00 ,0,0,0,4 +Thu Dec 07 2023 11:58:00 ,1,0,0,3 +Thu Dec 07 2023 11:59:00 ,0,0,0,4 +Thu Dec 07 2023 12:00:00 ,0,0,0,5 +Thu Dec 07 2023 12:01:00 ,3,0,0,4 +Thu Dec 07 2023 12:02:00 ,1,0,0,3 +Thu Dec 07 2023 12:03:00 ,2,0,0,4 +Thu Dec 07 2023 12:04:00 ,0,0,0,4 +Thu Dec 07 2023 12:05:00 ,0,0,0,5 +Thu Dec 07 2023 12:06:00 ,1,0,0,4 +Thu Dec 07 2023 12:07:00 ,1,0,0,3 +Thu Dec 07 2023 12:08:00 ,1,0,0,4 +Thu Dec 07 2023 12:09:00 ,0,0,0,4 +Thu Dec 07 2023 12:10:00 ,0,0,0,4 +Thu Dec 07 2023 12:11:00 ,1,0,0,3 +Thu Dec 07 2023 12:12:00 ,1,0,0,4 +Thu Dec 07 2023 12:13:00 ,1,0,0,4 +Thu Dec 07 2023 12:14:00 ,0,0,0,4 +Thu Dec 07 2023 12:15:00 ,0,0,0,4 +Thu Dec 07 2023 12:16:00 ,1,0,0,3 +Thu Dec 07 2023 12:17:00 ,1,0,0,4 +Thu Dec 07 2023 12:18:00 ,1,0,0,5 +Thu Dec 07 2023 12:19:00 ,0,0,0,3 +Thu Dec 07 2023 12:20:00 ,0,0,0,4 +Thu Dec 07 2023 12:21:00 ,1,0,0,4 +Thu Dec 07 2023 12:22:00 ,1,0,0,4 +Thu Dec 07 2023 12:23:00 ,0,0,0,4 +Thu Dec 07 2023 12:24:00 ,1,21,0,3 +Thu Dec 07 2023 12:25:00 ,0,42,0,3 +Thu Dec 07 2023 12:26:00 ,1,41,0,5 +Thu Dec 07 2023 12:27:00 ,2,44,5,4 +Thu Dec 07 2023 12:28:00 ,0,38,0,4 +Thu Dec 07 2023 12:29:00 ,1,0,0,5 +Thu Dec 07 2023 12:30:00 ,0,0,0,3 +Thu Dec 07 2023 12:31:00 ,1,0,0,4 +Thu Dec 07 2023 12:32:00 ,2,0,0,3 +Thu Dec 07 2023 12:33:00 ,0,0,0,4 +Thu Dec 07 2023 12:34:00 ,1,0,0,5 +Thu Dec 07 2023 12:35:00 ,0,0,0,4 +Thu Dec 07 2023 12:36:00 ,1,0,0,4 +Thu Dec 07 2023 12:37:00 ,2,0,0,3 +Thu Dec 07 2023 12:38:00 ,0,0,0,4 +Thu Dec 07 2023 12:39:00 ,1,0,0,4 +Thu Dec 07 2023 12:40:00 ,0,0,0,4 +Thu Dec 07 2023 12:41:00 ,1,0,0,4 +Thu Dec 07 2023 12:42:00 ,1,0,0,4 +Thu Dec 07 2023 12:43:00 ,1,0,0,4 +Thu Dec 07 2023 12:44:00 ,1,0,0,4 +Thu Dec 07 2023 12:45:00 ,0,0,0,4 +Thu Dec 07 2023 12:46:00 ,1,0,0,3 +Thu Dec 07 2023 12:47:00 ,1,0,0,4 +Thu Dec 07 2023 12:48:00 ,1,0,0,4 +Thu Dec 07 2023 12:49:00 ,1,0,0,5 +Thu Dec 07 2023 12:50:00 ,0,0,0,3 +Thu Dec 07 2023 12:51:00 ,1,0,0,4 +Thu Dec 07 2023 12:52:00 ,1,0,0,4 +Thu Dec 07 2023 12:53:00 ,1,0,0,3 +Thu Dec 07 2023 12:54:00 ,1,0,0,4 +Thu Dec 07 2023 12:55:00 ,0,0,0,4 +Thu Dec 07 2023 12:56:00 ,1,0,0,4 +Thu Dec 07 2023 12:57:00 ,1,0,0,3 +Thu Dec 07 2023 12:58:00 ,1,0,0,4 +Thu Dec 07 2023 12:59:00 ,1,0,0,4 +Thu Dec 07 2023 13:00:00 ,0,0,0,4 +Thu Dec 07 2023 13:01:00 ,1,0,0,4 +Thu Dec 07 2023 13:02:00 ,0,0,0,4 +Thu Dec 07 2023 13:03:00 ,2,0,0,4 +Thu Dec 07 2023 13:04:00 ,1,0,0,4 +Thu Dec 07 2023 13:05:00 ,0,0,0,4 +Thu Dec 07 2023 13:06:00 ,0,0,0,4 +Thu Dec 07 2023 13:07:00 ,1,0,0,4 +Thu Dec 07 2023 13:08:00 ,2,0,0,3 +Thu Dec 07 2023 13:09:00 ,1,0,0,4 +Thu Dec 07 2023 13:10:00 ,0,0,0,5 +Thu Dec 07 2023 13:11:00 ,0,0,0,3 +Thu Dec 07 2023 13:12:00 ,1,0,0,4 +Thu Dec 07 2023 13:13:00 ,2,0,0,4 +Thu Dec 07 2023 13:14:00 ,1,0,0,4 +Thu Dec 07 2023 13:15:00 ,0,0,0,5 +Thu Dec 07 2023 13:16:00 ,0,0,0,3 +Thu Dec 07 2023 13:17:00 ,1,0,0,4 +Thu Dec 07 2023 13:18:00 ,2,0,0,4 +Thu Dec 07 2023 13:19:00 ,1,0,0,5 +Thu Dec 07 2023 13:20:00 ,0,0,0,3 +Thu Dec 07 2023 13:21:00 ,0,0,0,4 +Thu Dec 07 2023 13:22:00 ,1,0,0,4 +Thu Dec 07 2023 13:23:00 ,2,0,0,4 +Thu Dec 07 2023 13:24:00 ,1,0,1,4 +Thu Dec 07 2023 13:25:00 ,0,0,4,4 +Thu Dec 07 2023 13:26:00 ,0,0,0,4 +Thu Dec 07 2023 13:27:00 ,1,0,0,3 +Thu Dec 07 2023 13:28:00 ,2,0,0,4 +Thu Dec 07 2023 13:29:00 ,1,0,0,4 +Thu Dec 07 2023 13:30:00 ,0,0,0,4 +Thu Dec 07 2023 13:31:00 ,1,62,7,3 +Thu Dec 07 2023 13:32:00 ,0,0,0,4 +Thu Dec 07 2023 13:33:00 ,2,0,0,3 +Thu Dec 07 2023 13:34:00 ,1,0,0,4 +Thu Dec 07 2023 13:35:00 ,0,0,0,4 +Thu Dec 07 2023 13:36:00 ,0,0,0,4 +Thu Dec 07 2023 13:37:00 ,0,0,0,3 +Thu Dec 07 2023 13:38:00 ,2,0,0,4 +Thu Dec 07 2023 13:39:00 ,0,0,0,5 +Thu Dec 07 2023 13:40:00 ,1,0,0,4 +Thu Dec 07 2023 13:41:00 ,0,0,0,4 +Thu Dec 07 2023 13:42:00 ,0,0,0,4 +Thu Dec 07 2023 13:43:00 ,2,0,0,4 +Thu Dec 07 2023 13:44:00 ,0,0,0,3 +Thu Dec 07 2023 13:45:00 ,1,0,0,4 +Thu Dec 07 2023 13:46:00 ,0,0,0,4 +Thu Dec 07 2023 13:47:00 ,0,0,0,5 +Thu Dec 07 2023 13:48:00 ,2,0,0,4 +Thu Dec 07 2023 13:49:00 ,0,0,0,4 +Thu Dec 07 2023 13:50:00 ,1,0,0,4 +Thu Dec 07 2023 13:51:00 ,0,0,0,3 +Thu Dec 07 2023 13:52:00 ,0,0,0,4 +Thu Dec 07 2023 13:53:00 ,2,0,0,3 +Thu Dec 07 2023 13:54:00 ,0,0,0,4 +Thu Dec 07 2023 13:55:00 ,1,0,0,4 +Thu Dec 07 2023 13:56:00 ,0,0,0,4 +Thu Dec 07 2023 13:57:00 ,0,0,0,4 +Thu Dec 07 2023 13:58:00 ,1,0,0,4 +Thu Dec 07 2023 13:59:00 ,1,0,0,4 +Thu Dec 07 2023 14:00:00 ,1,0,0,4 +Thu Dec 07 2023 14:01:00 ,0,0,0,3 +Thu Dec 07 2023 14:02:00 ,0,0,0,4 +Thu Dec 07 2023 14:03:00 ,1,0,0,4 +Thu Dec 07 2023 14:04:00 ,1,0,0,4 +Thu Dec 07 2023 14:05:00 ,1,0,0,4 +Thu Dec 07 2023 14:06:00 ,0,0,0,3 +Thu Dec 07 2023 14:07:00 ,0,0,0,3 +Thu Dec 07 2023 14:08:00 ,1,0,0,4 +Thu Dec 07 2023 14:09:00 ,1,0,0,4 +Thu Dec 07 2023 14:10:00 ,1,0,0,4 +Thu Dec 07 2023 14:11:00 ,0,0,0,4 +Thu Dec 07 2023 14:12:00 ,0,0,0,4 +Thu Dec 07 2023 14:13:00 ,1,0,0,4 +Thu Dec 07 2023 14:14:00 ,1,0,0,4 +Thu Dec 07 2023 14:15:00 ,1,0,0,3 +Thu Dec 07 2023 14:16:00 ,0,0,0,4 +Thu Dec 07 2023 14:17:00 ,0,0,0,3 +Thu Dec 07 2023 14:18:00 ,0,0,0,4 +Thu Dec 07 2023 14:19:00 ,2,0,0,4 +Thu Dec 07 2023 14:20:00 ,1,0,0,3 +Thu Dec 07 2023 14:21:00 ,0,0,0,3 +Thu Dec 07 2023 14:22:00 ,0,0,0,4 +Thu Dec 07 2023 14:23:00 ,0,0,0,4 +Thu Dec 07 2023 14:24:00 ,2,0,0,4 +Thu Dec 07 2023 14:25:00 ,1,0,0,4 +Thu Dec 07 2023 14:26:00 ,0,0,0,4 +Thu Dec 07 2023 14:27:00 ,0,0,0,4 +Thu Dec 07 2023 14:28:00 ,0,0,0,4 +Thu Dec 07 2023 14:29:00 ,2,0,0,4 +Thu Dec 07 2023 14:30:00 ,1,0,0,3 +Thu Dec 07 2023 14:31:00 ,0,0,0,4 +Thu Dec 07 2023 14:32:00 ,0,0,0,4 +Thu Dec 07 2023 14:33:00 ,0,0,0,4 +Thu Dec 07 2023 14:34:00 ,2,0,0,4 +Thu Dec 07 2023 14:35:00 ,1,0,0,4 +Thu Dec 07 2023 14:36:00 ,0,0,0,4 +Thu Dec 07 2023 14:37:00 ,0,0,0,4 +Thu Dec 07 2023 14:38:00 ,0,0,0,4 +Thu Dec 07 2023 14:39:00 ,2,0,0,4 +Thu Dec 07 2023 14:40:00 ,1,0,0,4 +Thu Dec 07 2023 14:41:00 ,0,0,0,3 +Thu Dec 07 2023 14:42:00 ,0,0,0,4 +Thu Dec 07 2023 14:43:00 ,0,0,0,4 +Thu Dec 07 2023 14:44:00 ,2,0,0,3 +Thu Dec 07 2023 14:45:00 ,1,0,0,5 +Thu Dec 07 2023 14:46:00 ,0,0,0,4 +Thu Dec 07 2023 14:47:00 ,0,0,0,3 +Thu Dec 07 2023 14:48:00 ,0,0,0,4 +Thu Dec 07 2023 14:49:00 ,2,0,0,4 +Thu Dec 07 2023 14:50:00 ,1,0,0,5 +Thu Dec 07 2023 14:51:00 ,0,0,0,3 +Thu Dec 07 2023 14:52:00 ,0,0,0,4 +Thu Dec 07 2023 14:53:00 ,0,0,0,4 +Thu Dec 07 2023 14:54:00 ,2,0,0,4 +Thu Dec 07 2023 14:55:00 ,0,0,0,4 +Thu Dec 07 2023 14:56:00 ,1,0,0,3 +Thu Dec 07 2023 14:57:00 ,0,0,0,4 +Thu Dec 07 2023 14:58:00 ,0,0,0,4 +Thu Dec 07 2023 14:59:00 ,2,0,0,4 +Thu Dec 07 2023 15:00:00 ,0,0,0,4 +Thu Dec 07 2023 15:01:00 ,1,0,0,4 +Thu Dec 07 2023 15:02:00 ,0,0,0,5 +Thu Dec 07 2023 15:03:00 ,0,0,0,3 +Thu Dec 07 2023 15:04:00 ,2,0,0,4 +Thu Dec 07 2023 15:05:00 ,0,0,0,4 +Thu Dec 07 2023 15:06:00 ,1,0,0,4 +Thu Dec 07 2023 15:07:00 ,0,0,0,4 +Thu Dec 07 2023 15:08:00 ,0,0,0,4 +Thu Dec 07 2023 15:09:00 ,1,0,0,4 +Thu Dec 07 2023 15:10:00 ,1,0,0,3 +Thu Dec 07 2023 15:11:00 ,1,0,0,4 +Thu Dec 07 2023 15:12:00 ,0,0,0,5 +Thu Dec 07 2023 15:13:00 ,0,0,0,4 +Thu Dec 07 2023 15:14:00 ,1,0,0,4 +Thu Dec 07 2023 15:15:00 ,1,0,0,3 +Thu Dec 07 2023 15:16:00 ,1,0,0,4 +Thu Dec 07 2023 15:17:00 ,0,0,0,4 +Thu Dec 07 2023 15:18:00 ,0,0,0,4 +Thu Dec 07 2023 15:19:00 ,1,0,0,4 +Thu Dec 07 2023 15:20:00 ,1,0,0,4 +Thu Dec 07 2023 15:21:00 ,1,0,0,4 +Thu Dec 07 2023 15:22:00 ,0,0,0,4 +Thu Dec 07 2023 15:23:00 ,0,0,0,4 +Thu Dec 07 2023 15:24:00 ,1,0,0,4 +Thu Dec 07 2023 15:25:00 ,1,0,0,3 +Thu Dec 07 2023 15:26:00 ,1,0,0,4 +Thu Dec 07 2023 15:27:00 ,0,0,0,4 +Thu Dec 07 2023 15:28:00 ,0,0,0,4 +Thu Dec 07 2023 15:29:00 ,0,0,0,3 +Thu Dec 07 2023 15:30:00 ,2,0,0,4 +Thu Dec 07 2023 15:31:00 ,1,0,0,4 +Thu Dec 07 2023 15:32:00 ,0,0,0,3 +Thu Dec 07 2023 15:33:00 ,0,0,0,4 +Thu Dec 07 2023 15:34:00 ,0,0,0,4 +Thu Dec 07 2023 15:35:00 ,2,0,0,3 +Thu Dec 07 2023 15:36:00 ,1,0,0,4 +Thu Dec 07 2023 15:37:00 ,0,0,0,4 +Thu Dec 07 2023 15:38:00 ,0,0,0,3 +Thu Dec 07 2023 15:39:00 ,0,0,0,4 +Thu Dec 07 2023 15:40:00 ,2,0,0,3 +Thu Dec 07 2023 15:41:00 ,1,0,0,4 +Thu Dec 07 2023 15:42:00 ,0,0,0,4 +Thu Dec 07 2023 15:43:00 ,0,0,0,3 +Thu Dec 07 2023 15:44:00 ,0,0,0,4 +Thu Dec 07 2023 15:45:00 ,2,0,0,4 +Thu Dec 07 2023 15:46:00 ,1,0,0,3 +Thu Dec 07 2023 15:47:00 ,0,0,0,5 +Thu Dec 07 2023 15:48:00 ,0,0,0,4 +Thu Dec 07 2023 15:49:00 ,0,0,0,4 +Thu Dec 07 2023 15:50:00 ,2,0,0,3 +Thu Dec 07 2023 15:51:00 ,1,0,0,4 +Thu Dec 07 2023 15:52:00 ,0,0,0,4 +Thu Dec 07 2023 15:53:00 ,0,0,0,4 +Thu Dec 07 2023 15:54:00 ,0,0,0,3 +Thu Dec 07 2023 15:55:00 ,2,0,0,4 +Thu Dec 07 2023 15:56:00 ,1,0,0,5 +Thu Dec 07 2023 15:57:00 ,0,0,0,4 +Thu Dec 07 2023 15:58:00 ,0,0,0,4 +Thu Dec 07 2023 15:59:00 ,0,0,0,4 +Thu Dec 07 2023 16:00:00 ,2,0,0,4 +Thu Dec 07 2023 16:01:00 ,1,0,0,4 +Thu Dec 07 2023 16:02:00 ,0,0,0,3 +Thu Dec 07 2023 16:03:00 ,0,0,0,4 +Thu Dec 07 2023 16:04:00 ,0,0,0,4 +Thu Dec 07 2023 16:05:00 ,2,0,0,4 +Thu Dec 07 2023 16:06:00 ,0,0,0,4 +Thu Dec 07 2023 16:07:00 ,1,0,0,4 +Thu Dec 07 2023 16:08:00 ,0,0,0,4 +Thu Dec 07 2023 16:09:00 ,0,0,0,4 +Thu Dec 07 2023 16:10:00 ,2,0,0,4 +Thu Dec 07 2023 16:11:00 ,0,0,0,3 +Thu Dec 07 2023 16:12:00 ,1,0,0,4 +Thu Dec 07 2023 16:13:00 ,0,0,0,4 +Thu Dec 07 2023 16:14:00 ,0,0,0,4 +Thu Dec 07 2023 16:15:00 ,2,0,0,4 +Thu Dec 07 2023 16:16:00 ,0,0,0,4 +Thu Dec 07 2023 16:17:00 ,1,0,0,4 +Thu Dec 07 2023 16:18:00 ,0,0,0,4 +Thu Dec 07 2023 16:19:00 ,0,0,0,3 +Thu Dec 07 2023 16:20:00 ,2,0,0,4 +Thu Dec 07 2023 16:21:00 ,0,0,0,4 +Thu Dec 07 2023 16:22:00 ,1,0,0,5 +Thu Dec 07 2023 16:23:00 ,0,0,0,3 +Thu Dec 07 2023 16:24:00 ,0,0,0,4 +Thu Dec 07 2023 16:25:00 ,1,0,0,4 +Thu Dec 07 2023 16:26:00 ,1,0,0,3 +Thu Dec 07 2023 16:27:00 ,1,0,0,4 +Thu Dec 07 2023 16:28:00 ,0,0,0,4 +Thu Dec 07 2023 16:29:00 ,0,0,0,4 +Thu Dec 07 2023 16:30:00 ,1,0,0,4 +Thu Dec 07 2023 16:31:00 ,1,0,0,4 +Thu Dec 07 2023 16:32:00 ,1,0,0,3 +Thu Dec 07 2023 16:33:00 ,0,0,0,4 +Thu Dec 07 2023 16:34:00 ,0,0,0,4 +Thu Dec 07 2023 16:35:00 ,1,0,0,4 +Thu Dec 07 2023 16:36:00 ,1,0,0,4 +Thu Dec 07 2023 16:37:00 ,1,0,0,4 +Thu Dec 07 2023 16:38:00 ,0,0,0,4 +Thu Dec 07 2023 16:39:00 ,0,0,0,4 +Thu Dec 07 2023 16:40:00 ,1,0,0,4 +Thu Dec 07 2023 16:41:00 ,1,0,0,4 +Thu Dec 07 2023 16:42:00 ,1,0,0,4 +Thu Dec 07 2023 16:43:00 ,0,0,0,4 +Thu Dec 07 2023 16:44:00 ,0,0,0,4 +Thu Dec 07 2023 16:45:00 ,0,0,0,3 +Thu Dec 07 2023 16:46:00 ,2,0,0,4 +Thu Dec 07 2023 16:47:00 ,1,0,0,4 +Thu Dec 07 2023 16:48:00 ,0,0,0,5 +Thu Dec 07 2023 16:49:00 ,0,0,0,4 +Thu Dec 07 2023 16:50:00 ,0,0,0,3 +Thu Dec 07 2023 16:51:00 ,2,0,0,4 +Thu Dec 07 2023 16:52:00 ,1,0,0,4 +Thu Dec 07 2023 16:53:00 ,0,0,0,4 +Thu Dec 07 2023 16:54:00 ,0,0,0,3 +Thu Dec 07 2023 16:55:00 ,0,0,0,5 +Thu Dec 07 2023 16:56:00 ,2,0,0,3 +Thu Dec 07 2023 16:57:00 ,1,0,0,5 +Thu Dec 07 2023 16:58:00 ,0,0,0,3 +Thu Dec 07 2023 16:59:00 ,0,0,0,4 +Thu Dec 07 2023 17:00:00 ,0,0,0,3 +Thu Dec 07 2023 17:01:00 ,2,0,0,4 +Thu Dec 07 2023 17:02:00 ,1,0,0,4 +Thu Dec 07 2023 17:03:00 ,0,0,0,3 +Thu Dec 07 2023 17:04:00 ,0,0,0,4 +Thu Dec 07 2023 17:05:00 ,0,0,0,4 +Thu Dec 07 2023 17:06:00 ,2,0,0,4 +Thu Dec 07 2023 17:07:00 ,1,0,0,3 +Thu Dec 07 2023 17:08:00 ,0,0,0,5 +Thu Dec 07 2023 17:09:00 ,0,0,0,3 +Thu Dec 07 2023 17:10:00 ,0,0,0,4 +Thu Dec 07 2023 17:11:00 ,2,0,0,4 +Thu Dec 07 2023 17:12:00 ,1,0,0,4 +Thu Dec 07 2023 17:13:00 ,0,0,0,4 +Thu Dec 07 2023 17:14:00 ,0,0,0,4 +Thu Dec 07 2023 17:15:00 ,0,0,0,3 +Thu Dec 07 2023 17:16:00 ,2,0,0,4 +Thu Dec 07 2023 17:17:00 ,1,0,0,4 +Thu Dec 07 2023 17:18:00 ,0,0,0,4 +Thu Dec 07 2023 17:19:00 ,0,0,0,4 +Thu Dec 07 2023 17:20:00 ,0,0,0,4 +Thu Dec 07 2023 17:21:00 ,2,0,0,5 +Thu Dec 07 2023 17:22:00 ,0,0,0,4 +Thu Dec 07 2023 17:23:00 ,1,0,0,4 +Thu Dec 07 2023 17:24:00 ,0,0,0,4 +Thu Dec 07 2023 17:25:00 ,0,0,0,3 +Thu Dec 07 2023 17:26:00 ,2,0,0,4 +Thu Dec 07 2023 17:27:00 ,0,0,0,4 +Thu Dec 07 2023 17:28:00 ,1,0,0,4 +Thu Dec 07 2023 17:29:00 ,0,0,0,4 +Thu Dec 07 2023 17:30:00 ,0,0,0,4 +Thu Dec 07 2023 17:31:00 ,2,0,0,4 +Thu Dec 07 2023 17:32:00 ,0,0,0,4 +Thu Dec 07 2023 17:33:00 ,1,0,0,5 +Thu Dec 07 2023 17:34:00 ,0,0,0,3 +Thu Dec 07 2023 17:35:00 ,0,0,0,4 +Thu Dec 07 2023 17:36:00 ,1,0,0,3 +Thu Dec 07 2023 17:37:00 ,1,0,0,3 +Thu Dec 07 2023 17:38:00 ,1,0,0,5 +Thu Dec 07 2023 17:39:00 ,0,0,0,4 +Thu Dec 07 2023 17:40:00 ,0,0,0,3 +Thu Dec 07 2023 17:41:00 ,1,0,0,4 +Thu Dec 07 2023 17:42:00 ,1,0,0,4 +Thu Dec 07 2023 17:43:00 ,1,0,0,4 +Thu Dec 07 2023 17:44:00 ,0,0,0,4 +Thu Dec 07 2023 17:45:00 ,0,0,0,5 +Thu Dec 07 2023 17:46:00 ,1,0,0,4 +Thu Dec 07 2023 17:47:00 ,1,0,0,4 +Thu Dec 07 2023 17:48:00 ,1,0,0,3 +Thu Dec 07 2023 17:49:00 ,0,0,0,4 +Thu Dec 07 2023 17:50:00 ,0,0,0,4 +Thu Dec 07 2023 17:51:00 ,1,0,0,4 +Thu Dec 07 2023 17:52:00 ,1,0,0,4 +Thu Dec 07 2023 17:53:00 ,1,0,0,4 +Thu Dec 07 2023 17:54:00 ,0,0,0,4 +Thu Dec 07 2023 17:55:00 ,0,0,0,4 +Thu Dec 07 2023 17:56:00 ,1,0,0,3 +Thu Dec 07 2023 17:57:00 ,1,0,0,4 +Thu Dec 07 2023 17:58:00 ,1,0,0,4 +Thu Dec 07 2023 17:59:00 ,0,0,0,3 +Thu Dec 07 2023 18:00:00 ,0,0,0,4 +Thu Dec 07 2023 18:01:00 ,0,0,0,3 +Thu Dec 07 2023 18:02:00 ,2,0,0,4 +Thu Dec 07 2023 18:03:00 ,1,0,0,4 +Thu Dec 07 2023 18:04:00 ,0,0,0,4 +Thu Dec 07 2023 18:05:00 ,0,0,0,4 +Thu Dec 07 2023 18:06:00 ,0,0,0,4 +Thu Dec 07 2023 18:07:00 ,2,0,0,3 +Thu Dec 07 2023 18:08:00 ,1,0,0,4 +Thu Dec 07 2023 18:09:00 ,0,0,0,4 +Thu Dec 07 2023 18:10:00 ,0,0,0,4 +Thu Dec 07 2023 18:11:00 ,0,0,0,4 +Thu Dec 07 2023 18:12:00 ,2,0,0,4 +Thu Dec 07 2023 18:13:00 ,1,0,0,3 +Thu Dec 07 2023 18:14:00 ,0,0,0,3 +Thu Dec 07 2023 18:15:00 ,0,0,0,4 +Thu Dec 07 2023 18:16:00 ,0,0,0,5 +Thu Dec 07 2023 18:17:00 ,2,0,0,4 +Thu Dec 07 2023 18:18:00 ,1,0,0,3 +Thu Dec 07 2023 18:19:00 ,0,0,0,4 +Thu Dec 07 2023 18:20:00 ,0,0,0,4 +Thu Dec 07 2023 18:21:00 ,0,0,0,4 +Thu Dec 07 2023 18:22:00 ,2,0,0,3 +Thu Dec 07 2023 18:23:00 ,1,0,0,4 +Thu Dec 07 2023 18:24:00 ,0,0,0,4 +Thu Dec 07 2023 18:25:00 ,0,0,0,3 +Thu Dec 07 2023 18:26:00 ,0,0,0,4 +Thu Dec 07 2023 18:27:00 ,2,0,0,5 +Thu Dec 07 2023 18:28:00 ,1,0,0,4 +Thu Dec 07 2023 18:29:00 ,0,0,0,4 +Thu Dec 07 2023 18:30:00 ,0,0,0,4 +Thu Dec 07 2023 18:31:00 ,0,0,0,4 +Thu Dec 07 2023 18:32:00 ,2,0,0,4 +Thu Dec 07 2023 18:33:00 ,1,0,0,4 +Thu Dec 07 2023 18:34:00 ,0,0,0,4 +Thu Dec 07 2023 18:35:00 ,0,0,0,4 +Thu Dec 07 2023 18:36:00 ,0,0,0,4 +Thu Dec 07 2023 18:37:00 ,2,0,0,3 +Thu Dec 07 2023 18:38:00 ,0,0,0,5 +Thu Dec 07 2023 18:39:00 ,1,0,0,3 +Thu Dec 07 2023 18:40:00 ,0,0,0,4 +Thu Dec 07 2023 18:41:00 ,0,0,0,3 +Thu Dec 07 2023 18:42:00 ,2,0,0,4 +Thu Dec 07 2023 18:43:00 ,0,0,0,4 +Thu Dec 07 2023 18:44:00 ,1,0,0,3 +Thu Dec 07 2023 18:45:00 ,0,0,0,4 +Thu Dec 07 2023 18:46:00 ,0,0,0,5 +Thu Dec 07 2023 18:47:00 ,2,0,0,4 +Thu Dec 07 2023 18:48:00 ,0,0,0,4 +Thu Dec 07 2023 18:49:00 ,1,0,0,3 +Thu Dec 07 2023 18:50:00 ,0,0,0,4 +Thu Dec 07 2023 18:51:00 ,0,0,0,4 +Thu Dec 07 2023 18:52:00 ,2,0,0,4 +Thu Dec 07 2023 18:53:00 ,0,0,0,3 +Thu Dec 07 2023 18:54:00 ,1,0,0,4 +Thu Dec 07 2023 18:55:00 ,0,0,0,3 +Thu Dec 07 2023 18:56:00 ,0,0,0,4 +Thu Dec 07 2023 18:57:00 ,2,0,0,3 +Thu Dec 07 2023 18:58:00 ,0,0,0,4 +Thu Dec 07 2023 18:59:00 ,1,0,0,3 +Thu Dec 07 2023 19:00:00 ,0,0,0,3 diff --git a/ai/data/sample/Request Latency.csv b/ai/data/sample/Request Latency.csv new file mode 100644 index 0000000..237fcb6 --- /dev/null +++ b/ai/data/sample/Request Latency.csv @@ -0,0 +1,602 @@ +Time,Request Latency (ms) +Thu Dec 07 2023 09:00:00 ,19.41630856 +Thu Dec 07 2023 09:01:00 ,323462.6322 +Thu Dec 07 2023 09:02:00 ,17.6511896 +Thu Dec 07 2023 09:03:00 ,17.6511896 +Thu Dec 07 2023 09:04:00 ,17.6672947 +Thu Dec 07 2023 09:05:00 ,16.075818 +Thu Dec 07 2023 09:06:00 ,323758.0318 +Thu Dec 07 2023 09:07:00 ,17.6833998 +Thu Dec 07 2023 09:08:00 ,16.08557867 +Thu Dec 07 2023 09:09:00 ,17.6672947 +Thu Dec 07 2023 09:10:00 ,25.84310669 +Thu Dec 07 2023 09:11:00 ,17.6511896 +Thu Dec 07 2023 09:12:00 ,323462.6322 +Thu Dec 07 2023 09:13:00 ,17.6511896 +Thu Dec 07 2023 09:14:00 ,16.075818 +Thu Dec 07 2023 09:15:00 ,142.7022868 +Thu Dec 07 2023 09:16:00 ,31.2701591 +Thu Dec 07 2023 09:17:00 ,298058.261 +Thu Dec 07 2023 09:18:00 ,1176.256346 +Thu Dec 07 2023 09:19:00 ,2005.917502 +Thu Dec 07 2023 09:20:00 ,26421.49501 +Thu Dec 07 2023 09:21:00 ,216692.3292 +Thu Dec 07 2023 09:22:00 ,313123.6439 +Thu Dec 07 2023 09:23:00 ,10043.29102 +Thu Dec 07 2023 09:24:00 ,73.32974945 +Thu Dec 07 2023 09:25:00 ,323462.6322 +Thu Dec 07 2023 09:26:00 ,17.6995049 +Thu Dec 07 2023 09:27:00 ,324053.4315 +Thu Dec 07 2023 09:28:00 ,21.35793942 +Thu Dec 07 2023 09:29:00 ,25.84310669 +Thu Dec 07 2023 09:30:00 ,323462.6322 +Thu Dec 07 2023 09:31:00 ,21.39691376 +Thu Dec 07 2023 09:32:00 ,324053.4315 +Thu Dec 07 2023 09:33:00 ,60.88109458 +Thu Dec 07 2023 09:34:00 ,21.35793942 +Thu Dec 07 2023 09:35:00 ,323758.0318 +Thu Dec 07 2023 09:36:00 ,19.41630856 +Thu Dec 07 2023 09:37:00 ,322133.3337 +Thu Dec 07 2023 09:38:00 ,185.6616401 +Thu Dec 07 2023 09:39:00 ,878.2331411 +Thu Dec 07 2023 09:40:00 ,880.5225441 +Thu Dec 07 2023 09:41:00 ,122544.9494 +Thu Dec 07 2023 09:42:00 ,317259.2392 +Thu Dec 07 2023 09:43:00 ,17.6511896 +Thu Dec 07 2023 09:44:00 ,19.41630856 +Thu Dec 07 2023 09:45:00 ,323462.6322 +Thu Dec 07 2023 09:46:00 ,19.43402417 +Thu Dec 07 2023 09:47:00 ,323462.6322 +Thu Dec 07 2023 09:48:00 ,323462.6322 +Thu Dec 07 2023 09:49:00 ,17.6511896 +Thu Dec 07 2023 09:50:00 ,323462.6322 +Thu Dec 07 2023 09:51:00 ,207.4908424 +Thu Dec 07 2023 09:52:00 ,323462.6322 +Thu Dec 07 2023 09:53:00 ,323167.2325 +Thu Dec 07 2023 09:54:00 ,16.0831385 +Thu Dec 07 2023 09:55:00 ,323462.6322 +Thu Dec 07 2023 09:56:00 ,17.6672947 +Thu Dec 07 2023 09:57:00 ,316963.8395 +Thu Dec 07 2023 09:58:00 ,873.9568994 +Thu Dec 07 2023 09:59:00 ,779.1992706 +Thu Dec 07 2023 10:00:00 ,323167.2325 +Thu Dec 07 2023 10:01:00 ,25.84310669 +Thu Dec 07 2023 10:02:00 ,324201.1313 +Thu Dec 07 2023 10:03:00 ,23.53660513 +Thu Dec 07 2023 10:04:00 ,323462.6322 +Thu Dec 07 2023 10:05:00 ,21.37742659 +Thu Dec 07 2023 10:06:00 ,323462.6322 +Thu Dec 07 2023 10:07:00 ,323462.6322 +Thu Dec 07 2023 10:08:00 ,323462.6322 +Thu Dec 07 2023 10:09:00 ,323758.0318 +Thu Dec 07 2023 10:10:00 ,28.42741736 +Thu Dec 07 2023 10:11:00 ,323758.0318 +Thu Dec 07 2023 10:12:00 ,323167.2325 +Thu Dec 07 2023 10:13:00 ,323462.6322 +Thu Dec 07 2023 10:14:00 ,323462.6322 +Thu Dec 07 2023 10:15:00 ,19.41630856 +Thu Dec 07 2023 10:16:00 ,323758.0318 +Thu Dec 07 2023 10:17:00 ,323167.2325 +Thu Dec 07 2023 10:18:00 ,323758.0318 +Thu Dec 07 2023 10:19:00 ,323462.6322 +Thu Dec 07 2023 10:20:00 ,55.39699432 +Thu Dec 07 2023 10:21:00 ,323758.0318 +Thu Dec 07 2023 10:22:00 ,323462.6322 +Thu Dec 07 2023 10:23:00 ,323462.6322 +Thu Dec 07 2023 10:24:00 ,323462.6322 +Thu Dec 07 2023 10:25:00 ,21.35793942 +Thu Dec 07 2023 10:26:00 ,323462.6322 +Thu Dec 07 2023 10:27:00 ,323758.0318 +Thu Dec 07 2023 10:28:00 ,323462.6322 +Thu Dec 07 2023 10:29:00 ,323462.6322 +Thu Dec 07 2023 10:30:00 ,17.69145235 +Thu Dec 07 2023 10:31:00 ,323462.6322 +Thu Dec 07 2023 10:32:00 ,323758.0318 +Thu Dec 07 2023 10:33:00 ,323462.6322 +Thu Dec 07 2023 10:34:00 ,323758.0318 +Thu Dec 07 2023 10:35:00 ,19.45173978 +Thu Dec 07 2023 10:36:00 ,323462.6322 +Thu Dec 07 2023 10:37:00 ,323758.0318 +Thu Dec 07 2023 10:38:00 ,323462.6322 +Thu Dec 07 2023 10:39:00 ,323758.0318 +Thu Dec 07 2023 10:40:00 ,19.46059759 +Thu Dec 07 2023 10:41:00 ,323462.6322 +Thu Dec 07 2023 10:42:00 ,323462.6322 +Thu Dec 07 2023 10:43:00 ,323167.2325 +Thu Dec 07 2023 10:44:00 ,323462.6322 +Thu Dec 07 2023 10:45:00 ,17.6995049 +Thu Dec 07 2023 10:46:00 ,323167.2325 +Thu Dec 07 2023 10:47:00 ,28.45335479 +Thu Dec 07 2023 10:48:00 ,323905.7316 +Thu Dec 07 2023 10:49:00 ,323462.6322 +Thu Dec 07 2023 10:50:00 ,37.83689251 +Thu Dec 07 2023 10:51:00 ,21.37742659 +Thu Dec 07 2023 10:52:00 ,17.6511896 +Thu Dec 07 2023 10:53:00 ,324250.3646 +Thu Dec 07 2023 10:54:00 ,323462.6322 +Thu Dec 07 2023 10:55:00 ,17.6995049 +Thu Dec 07 2023 10:56:00 ,21.35793942 +Thu Dec 07 2023 10:57:00 ,17.6672947 +Thu Dec 07 2023 10:58:00 ,324250.3646 +Thu Dec 07 2023 10:59:00 ,323758.0318 +Thu Dec 07 2023 11:00:00 ,136929.1753 +Thu Dec 07 2023 11:01:00 ,21.35793942 +Thu Dec 07 2023 11:02:00 ,19.41630856 +Thu Dec 07 2023 11:03:00 ,19.46059759 +Thu Dec 07 2023 11:04:00 ,323462.6322 +Thu Dec 07 2023 11:05:00 ,324250.3646 +Thu Dec 07 2023 11:06:00 ,323462.6322 +Thu Dec 07 2023 11:07:00 ,34.39717501 +Thu Dec 07 2023 11:08:00 ,23.49373336 +Thu Dec 07 2023 11:09:00 ,21.35793942 +Thu Dec 07 2023 11:10:00 ,324250.3646 +Thu Dec 07 2023 11:11:00 ,323758.0318 +Thu Dec 07 2023 11:12:00 ,21.35793942 +Thu Dec 07 2023 11:13:00 ,148968.4194 +Thu Dec 07 2023 11:14:00 ,31.15603443 +Thu Dec 07 2023 11:15:00 ,319474.7367 +Thu Dec 07 2023 11:16:00 ,313714.4432 +Thu Dec 07 2023 11:17:00 ,142.9644867 +Thu Dec 07 2023 11:18:00 ,320508.6355 +Thu Dec 07 2023 11:19:00 ,21.37742659 +Thu Dec 07 2023 11:20:00 ,323462.6322 +Thu Dec 07 2023 11:21:00 ,324201.1313 +Thu Dec 07 2023 11:22:00 ,19.41630856 +Thu Dec 07 2023 11:23:00 ,323167.2325 +Thu Dec 07 2023 11:24:00 ,19.43402417 +Thu Dec 07 2023 11:25:00 ,323462.6322 +Thu Dec 07 2023 11:26:00 ,324053.4315 +Thu Dec 07 2023 11:27:00 ,17.6672947 +Thu Dec 07 2023 11:28:00 ,323167.2325 +Thu Dec 07 2023 11:29:00 ,19.41630856 +Thu Dec 07 2023 11:30:00 ,323167.2325 +Thu Dec 07 2023 11:31:00 ,324053.4315 +Thu Dec 07 2023 11:32:00 ,16.08557867 +Thu Dec 07 2023 11:33:00 ,323462.6322 +Thu Dec 07 2023 11:34:00 ,19.43402417 +Thu Dec 07 2023 11:35:00 ,323462.6322 +Thu Dec 07 2023 11:36:00 ,324053.4315 +Thu Dec 07 2023 11:37:00 ,19.41630856 +Thu Dec 07 2023 11:38:00 ,323462.6322 +Thu Dec 07 2023 11:39:00 ,23.49373336 +Thu Dec 07 2023 11:40:00 ,323462.6322 +Thu Dec 07 2023 11:41:00 ,324053.4315 +Thu Dec 07 2023 11:42:00 ,19.41630856 +Thu Dec 07 2023 11:43:00 ,323462.6322 +Thu Dec 07 2023 11:44:00 ,17.6672947 +Thu Dec 07 2023 11:45:00 ,323462.6322 +Thu Dec 07 2023 11:46:00 ,324053.4315 +Thu Dec 07 2023 11:47:00 ,19.41630856 +Thu Dec 07 2023 11:48:00 ,323462.6322 +Thu Dec 07 2023 11:49:00 ,19.43402417 +Thu Dec 07 2023 11:50:00 ,323462.6322 +Thu Dec 07 2023 11:51:00 ,324053.4315 +Thu Dec 07 2023 11:52:00 ,21.35793942 +Thu Dec 07 2023 11:53:00 ,323758.0318 +Thu Dec 07 2023 11:54:00 ,19.44288198 +Thu Dec 07 2023 11:55:00 ,17.69413653 +Thu Dec 07 2023 11:56:00 ,324250.3646 +Thu Dec 07 2023 11:57:00 ,25.84310669 +Thu Dec 07 2023 11:58:00 ,323758.0318 +Thu Dec 07 2023 11:59:00 ,17.6833998 +Thu Dec 07 2023 12:00:00 ,17.6350845 +Thu Dec 07 2023 12:01:00 ,324250.3646 +Thu Dec 07 2023 12:02:00 ,52937.0253 +Thu Dec 07 2023 12:03:00 ,323167.2325 +Thu Dec 07 2023 12:04:00 ,19.41630856 +Thu Dec 07 2023 12:05:00 ,19.39859295 +Thu Dec 07 2023 12:06:00 ,323462.6322 +Thu Dec 07 2023 12:07:00 ,323758.0318 +Thu Dec 07 2023 12:08:00 ,323462.6322 +Thu Dec 07 2023 12:09:00 ,19.41630856 +Thu Dec 07 2023 12:10:00 ,17.6511896 +Thu Dec 07 2023 12:11:00 ,323758.0318 +Thu Dec 07 2023 12:12:00 ,323462.6322 +Thu Dec 07 2023 12:13:00 ,323462.6322 +Thu Dec 07 2023 12:14:00 ,19.41630856 +Thu Dec 07 2023 12:15:00 ,16.075818 +Thu Dec 07 2023 12:16:00 ,323758.0318 +Thu Dec 07 2023 12:17:00 ,323462.6322 +Thu Dec 07 2023 12:18:00 ,323167.2325 +Thu Dec 07 2023 12:19:00 ,19.43402417 +Thu Dec 07 2023 12:20:00 ,17.6511896 +Thu Dec 07 2023 12:21:00 ,323462.6322 +Thu Dec 07 2023 12:22:00 ,323462.6322 +Thu Dec 07 2023 12:23:00 ,19.41630856 +Thu Dec 07 2023 12:24:00 ,320213.2358 +Thu Dec 07 2023 12:25:00 ,1025.472161 +Thu Dec 07 2023 12:26:00 ,310169.6473 +Thu Dec 07 2023 12:27:00 ,5706.934501 +Thu Dec 07 2023 12:28:00 ,306329.4516 +Thu Dec 07 2023 12:29:00 ,323167.2325 +Thu Dec 07 2023 12:30:00 ,16.061177 +Thu Dec 07 2023 12:31:00 ,323462.6322 +Thu Dec 07 2023 12:32:00 ,324201.1313 +Thu Dec 07 2023 12:33:00 ,323462.6322 +Thu Dec 07 2023 12:34:00 ,323462.6322 +Thu Dec 07 2023 12:35:00 ,19.39859295 +Thu Dec 07 2023 12:36:00 ,323462.6322 +Thu Dec 07 2023 12:37:00 ,324201.1313 +Thu Dec 07 2023 12:38:00 ,323462.6322 +Thu Dec 07 2023 12:39:00 ,323462.6322 +Thu Dec 07 2023 12:40:00 ,25.84310669 +Thu Dec 07 2023 12:41:00 ,323462.6322 +Thu Dec 07 2023 12:42:00 ,323462.6322 +Thu Dec 07 2023 12:43:00 ,323462.6322 +Thu Dec 07 2023 12:44:00 ,323462.6322 +Thu Dec 07 2023 12:45:00 ,31.2701591 +Thu Dec 07 2023 12:46:00 ,323758.0318 +Thu Dec 07 2023 12:47:00 ,323462.6322 +Thu Dec 07 2023 12:48:00 ,323462.6322 +Thu Dec 07 2023 12:49:00 ,323462.6322 +Thu Dec 07 2023 12:50:00 ,14.62325333 +Thu Dec 07 2023 12:51:00 ,323462.6322 +Thu Dec 07 2023 12:52:00 ,323462.6322 +Thu Dec 07 2023 12:53:00 ,323758.0318 +Thu Dec 07 2023 12:54:00 ,323462.6322 +Thu Dec 07 2023 12:55:00 ,21.35793942 +Thu Dec 07 2023 12:56:00 ,323462.6322 +Thu Dec 07 2023 12:57:00 ,323758.0318 +Thu Dec 07 2023 12:58:00 ,323462.6322 +Thu Dec 07 2023 12:59:00 ,323462.6322 +Thu Dec 07 2023 13:00:00 ,16.046536 +Thu Dec 07 2023 13:01:00 ,323462.6322 +Thu Dec 07 2023 13:02:00 ,16.061177 +Thu Dec 07 2023 13:03:00 ,324053.4315 +Thu Dec 07 2023 13:04:00 ,323167.2325 +Thu Dec 07 2023 13:05:00 ,21.35793942 +Thu Dec 07 2023 13:06:00 ,19.41630856 +Thu Dec 07 2023 13:07:00 ,323462.6322 +Thu Dec 07 2023 13:08:00 ,324201.1313 +Thu Dec 07 2023 13:09:00 ,323462.6322 +Thu Dec 07 2023 13:10:00 ,19.39859295 +Thu Dec 07 2023 13:11:00 ,17.6672947 +Thu Dec 07 2023 13:12:00 ,323462.6322 +Thu Dec 07 2023 13:13:00 ,324053.4315 +Thu Dec 07 2023 13:14:00 ,323462.6322 +Thu Dec 07 2023 13:15:00 ,19.39859295 +Thu Dec 07 2023 13:16:00 ,16.0831385 +Thu Dec 07 2023 13:17:00 ,323462.6322 +Thu Dec 07 2023 13:18:00 ,324053.4315 +Thu Dec 07 2023 13:19:00 ,323462.6322 +Thu Dec 07 2023 13:20:00 ,25.84310669 +Thu Dec 07 2023 13:21:00 ,17.6833998 +Thu Dec 07 2023 13:22:00 ,323462.6322 +Thu Dec 07 2023 13:23:00 ,324053.4315 +Thu Dec 07 2023 13:24:00 ,323462.6322 +Thu Dec 07 2023 13:25:00 ,15.973331 +Thu Dec 07 2023 13:26:00 ,19.41630856 +Thu Dec 07 2023 13:27:00 ,323758.0318 +Thu Dec 07 2023 13:28:00 ,324053.4315 +Thu Dec 07 2023 13:29:00 ,323462.6322 +Thu Dec 07 2023 13:30:00 ,17.6833998 +Thu Dec 07 2023 13:31:00 ,232147.2942 +Thu Dec 07 2023 13:32:00 ,206.7230687 +Thu Dec 07 2023 13:33:00 ,324201.1313 +Thu Dec 07 2023 13:34:00 ,323462.6322 +Thu Dec 07 2023 13:35:00 ,21.35793942 +Thu Dec 07 2023 13:36:00 ,16.090459 +Thu Dec 07 2023 13:37:00 ,21.35793942 +Thu Dec 07 2023 13:38:00 ,323462.6322 +Thu Dec 07 2023 13:39:00 ,323167.2325 +Thu Dec 07 2023 13:40:00 ,323462.6322 +Thu Dec 07 2023 13:41:00 ,28.42741736 +Thu Dec 07 2023 13:42:00 ,21.35793942 +Thu Dec 07 2023 13:43:00 ,323462.6322 +Thu Dec 07 2023 13:44:00 ,323758.0318 +Thu Dec 07 2023 13:45:00 ,323462.6322 +Thu Dec 07 2023 13:46:00 ,19.45173978 +Thu Dec 07 2023 13:47:00 ,16.08557867 +Thu Dec 07 2023 13:48:00 ,323167.2325 +Thu Dec 07 2023 13:49:00 ,323462.6322 +Thu Dec 07 2023 13:50:00 ,323462.6322 +Thu Dec 07 2023 13:51:00 ,16.0831385 +Thu Dec 07 2023 13:52:00 ,17.6511896 +Thu Dec 07 2023 13:53:00 ,323758.0318 +Thu Dec 07 2023 13:54:00 ,323462.6322 +Thu Dec 07 2023 13:55:00 ,323462.6322 +Thu Dec 07 2023 13:56:00 ,19.41630856 +Thu Dec 07 2023 13:57:00 ,17.69413653 +Thu Dec 07 2023 13:58:00 ,323462.6322 +Thu Dec 07 2023 13:59:00 ,323462.6322 +Thu Dec 07 2023 14:00:00 ,323462.6322 +Thu Dec 07 2023 14:01:00 ,16.061177 +Thu Dec 07 2023 14:02:00 ,16.075818 +Thu Dec 07 2023 14:03:00 ,323462.6322 +Thu Dec 07 2023 14:04:00 ,323462.6322 +Thu Dec 07 2023 14:05:00 ,323462.6322 +Thu Dec 07 2023 14:06:00 ,19.43402417 +Thu Dec 07 2023 14:07:00 ,17.69145235 +Thu Dec 07 2023 14:08:00 ,323462.6322 +Thu Dec 07 2023 14:09:00 ,323462.6322 +Thu Dec 07 2023 14:10:00 ,323462.6322 +Thu Dec 07 2023 14:11:00 ,21.39691376 +Thu Dec 07 2023 14:12:00 ,21.35793942 +Thu Dec 07 2023 14:13:00 ,323462.6322 +Thu Dec 07 2023 14:14:00 ,323462.6322 +Thu Dec 07 2023 14:15:00 ,323758.0318 +Thu Dec 07 2023 14:16:00 ,25.84310669 +Thu Dec 07 2023 14:17:00 ,16.061177 +Thu Dec 07 2023 14:18:00 ,16.08557867 +Thu Dec 07 2023 14:19:00 ,324053.4315 +Thu Dec 07 2023 14:20:00 ,323758.0318 +Thu Dec 07 2023 14:21:00 ,16.061177 +Thu Dec 07 2023 14:22:00 ,19.41630856 +Thu Dec 07 2023 14:23:00 ,28.42741736 +Thu Dec 07 2023 14:24:00 ,324053.4315 +Thu Dec 07 2023 14:25:00 ,323758.0318 +Thu Dec 07 2023 14:26:00 ,17.68876817 +Thu Dec 07 2023 14:27:00 ,17.6511896 +Thu Dec 07 2023 14:28:00 ,17.6833998 +Thu Dec 07 2023 14:29:00 ,324053.4315 +Thu Dec 07 2023 14:30:00 ,323758.0318 +Thu Dec 07 2023 14:31:00 ,16.08557867 +Thu Dec 07 2023 14:32:00 ,17.6511896 +Thu Dec 07 2023 14:33:00 ,17.69413653 +Thu Dec 07 2023 14:34:00 ,324053.4315 +Thu Dec 07 2023 14:35:00 ,323462.6322 +Thu Dec 07 2023 14:36:00 ,16.046536 +Thu Dec 07 2023 14:37:00 ,25.84310669 +Thu Dec 07 2023 14:38:00 ,19.41630856 +Thu Dec 07 2023 14:39:00 ,324053.4315 +Thu Dec 07 2023 14:40:00 ,323758.0318 +Thu Dec 07 2023 14:41:00 ,17.6833998 +Thu Dec 07 2023 14:42:00 ,31.2701591 +Thu Dec 07 2023 14:43:00 ,21.35793942 +Thu Dec 07 2023 14:44:00 ,324201.1313 +Thu Dec 07 2023 14:45:00 ,323462.6322 +Thu Dec 07 2023 14:46:00 ,19.39859295 +Thu Dec 07 2023 14:47:00 ,17.6672947 +Thu Dec 07 2023 14:48:00 ,17.6672947 +Thu Dec 07 2023 14:49:00 ,323905.7316 +Thu Dec 07 2023 14:50:00 ,323167.2325 +Thu Dec 07 2023 14:51:00 ,25.86668617 +Thu Dec 07 2023 14:52:00 ,17.69413653 +Thu Dec 07 2023 14:53:00 ,19.41630856 +Thu Dec 07 2023 14:54:00 ,323462.6322 +Thu Dec 07 2023 14:55:00 ,323462.6322 +Thu Dec 07 2023 14:56:00 ,323758.0318 +Thu Dec 07 2023 14:57:00 ,21.35793942 +Thu Dec 07 2023 14:58:00 ,17.6672947 +Thu Dec 07 2023 14:59:00 ,323167.2325 +Thu Dec 07 2023 15:00:00 ,323462.6322 +Thu Dec 07 2023 15:01:00 ,323462.6322 +Thu Dec 07 2023 15:02:00 ,17.6511896 +Thu Dec 07 2023 15:03:00 ,16.046536 +Thu Dec 07 2023 15:04:00 ,323462.6322 +Thu Dec 07 2023 15:05:00 ,323462.6322 +Thu Dec 07 2023 15:06:00 ,323462.6322 +Thu Dec 07 2023 15:07:00 ,19.41630856 +Thu Dec 07 2023 15:08:00 ,17.6511896 +Thu Dec 07 2023 15:09:00 ,323462.6322 +Thu Dec 07 2023 15:10:00 ,323758.0318 +Thu Dec 07 2023 15:11:00 ,323462.6322 +Thu Dec 07 2023 15:12:00 ,31.24162793 +Thu Dec 07 2023 15:13:00 ,21.35793942 +Thu Dec 07 2023 15:14:00 ,323758.0318 +Thu Dec 07 2023 15:15:00 ,323462.6322 +Thu Dec 07 2023 15:16:00 ,323462.6322 +Thu Dec 07 2023 15:17:00 ,25.84310669 +Thu Dec 07 2023 15:18:00 ,31.2701591 +Thu Dec 07 2023 15:19:00 ,323462.6322 +Thu Dec 07 2023 15:20:00 ,323462.6322 +Thu Dec 07 2023 15:21:00 ,323462.6322 +Thu Dec 07 2023 15:22:00 ,19.41630856 +Thu Dec 07 2023 15:23:00 ,21.35793942 +Thu Dec 07 2023 15:24:00 ,323462.6322 +Thu Dec 07 2023 15:25:00 ,323758.0318 +Thu Dec 07 2023 15:26:00 ,323462.6322 +Thu Dec 07 2023 15:27:00 ,19.41630856 +Thu Dec 07 2023 15:28:00 ,19.41630856 +Thu Dec 07 2023 15:29:00 ,16.0831385 +Thu Dec 07 2023 15:30:00 ,324053.4315 +Thu Dec 07 2023 15:31:00 ,323462.6322 +Thu Dec 07 2023 15:32:00 ,17.6672947 +Thu Dec 07 2023 15:33:00 ,21.35793942 +Thu Dec 07 2023 15:34:00 ,16.061177 +Thu Dec 07 2023 15:35:00 ,324053.4315 +Thu Dec 07 2023 15:36:00 ,323462.6322 +Thu Dec 07 2023 15:37:00 ,17.6511896 +Thu Dec 07 2023 15:38:00 ,31.29869027 +Thu Dec 07 2023 15:39:00 ,19.41630856 +Thu Dec 07 2023 15:40:00 ,324201.1313 +Thu Dec 07 2023 15:41:00 ,323462.6322 +Thu Dec 07 2023 15:42:00 ,16.08557867 +Thu Dec 07 2023 15:43:00 ,16.0831385 +Thu Dec 07 2023 15:44:00 ,17.6511896 +Thu Dec 07 2023 15:45:00 ,324053.4315 +Thu Dec 07 2023 15:46:00 ,323758.0318 +Thu Dec 07 2023 15:47:00 ,16.090459 +Thu Dec 07 2023 15:48:00 ,17.6833998 +Thu Dec 07 2023 15:49:00 ,19.41630856 +Thu Dec 07 2023 15:50:00 ,324201.1313 +Thu Dec 07 2023 15:51:00 ,323462.6322 +Thu Dec 07 2023 15:52:00 ,17.6511896 +Thu Dec 07 2023 15:53:00 ,16.075818 +Thu Dec 07 2023 15:54:00 ,17.6672947 +Thu Dec 07 2023 15:55:00 ,324053.4315 +Thu Dec 07 2023 15:56:00 ,323462.6322 +Thu Dec 07 2023 15:57:00 ,19.39859295 +Thu Dec 07 2023 15:58:00 ,16.08557867 +Thu Dec 07 2023 15:59:00 ,25.84310669 +Thu Dec 07 2023 16:00:00 ,324053.4315 +Thu Dec 07 2023 16:01:00 ,323462.6322 +Thu Dec 07 2023 16:02:00 ,19.43402417 +Thu Dec 07 2023 16:03:00 ,21.35793942 +Thu Dec 07 2023 16:04:00 ,19.41630856 +Thu Dec 07 2023 16:05:00 ,324053.4315 +Thu Dec 07 2023 16:06:00 ,17.6511896 +Thu Dec 07 2023 16:07:00 ,323462.6322 +Thu Dec 07 2023 16:08:00 ,21.35793942 +Thu Dec 07 2023 16:09:00 ,21.35793942 +Thu Dec 07 2023 16:10:00 ,323462.6322 +Thu Dec 07 2023 16:11:00 ,323758.0318 +Thu Dec 07 2023 16:12:00 ,323462.6322 +Thu Dec 07 2023 16:13:00 ,17.69145235 +Thu Dec 07 2023 16:14:00 ,17.67534725 +Thu Dec 07 2023 16:15:00 ,323462.6322 +Thu Dec 07 2023 16:16:00 ,323462.6322 +Thu Dec 07 2023 16:17:00 ,323462.6322 +Thu Dec 07 2023 16:18:00 ,19.41630856 +Thu Dec 07 2023 16:19:00 ,23.51516925 +Thu Dec 07 2023 16:20:00 ,323462.6322 +Thu Dec 07 2023 16:21:00 ,323462.6322 +Thu Dec 07 2023 16:22:00 ,323462.6322 +Thu Dec 07 2023 16:23:00 ,17.6511896 +Thu Dec 07 2023 16:24:00 ,25.84310669 +Thu Dec 07 2023 16:25:00 ,323462.6322 +Thu Dec 07 2023 16:26:00 ,323758.0318 +Thu Dec 07 2023 16:27:00 ,323462.6322 +Thu Dec 07 2023 16:28:00 ,21.35793942 +Thu Dec 07 2023 16:29:00 ,19.46355019 +Thu Dec 07 2023 16:30:00 ,323462.6322 +Thu Dec 07 2023 16:31:00 ,323462.6322 +Thu Dec 07 2023 16:32:00 ,323758.0318 +Thu Dec 07 2023 16:33:00 ,17.6833998 +Thu Dec 07 2023 16:34:00 ,31.2701591 +Thu Dec 07 2023 16:35:00 ,323462.6322 +Thu Dec 07 2023 16:36:00 ,323462.6322 +Thu Dec 07 2023 16:37:00 ,323462.6322 +Thu Dec 07 2023 16:38:00 ,19.41630856 +Thu Dec 07 2023 16:39:00 ,21.35793942 +Thu Dec 07 2023 16:40:00 ,323462.6322 +Thu Dec 07 2023 16:41:00 ,323462.6322 +Thu Dec 07 2023 16:42:00 ,323462.6322 +Thu Dec 07 2023 16:43:00 ,17.6833998 +Thu Dec 07 2023 16:44:00 ,16.08557867 +Thu Dec 07 2023 16:45:00 ,16.061177 +Thu Dec 07 2023 16:46:00 ,324053.4315 +Thu Dec 07 2023 16:47:00 ,323462.6322 +Thu Dec 07 2023 16:48:00 ,19.41630856 +Thu Dec 07 2023 16:49:00 ,21.35793942 +Thu Dec 07 2023 16:50:00 ,16.046536 +Thu Dec 07 2023 16:51:00 ,324053.4315 +Thu Dec 07 2023 16:52:00 ,323462.6322 +Thu Dec 07 2023 16:53:00 ,17.6511896 +Thu Dec 07 2023 16:54:00 ,16.0831385 +Thu Dec 07 2023 16:55:00 ,17.6833998 +Thu Dec 07 2023 16:56:00 ,324053.4315 +Thu Dec 07 2023 16:57:00 ,323462.6322 +Thu Dec 07 2023 16:58:00 ,17.6511896 +Thu Dec 07 2023 16:59:00 ,19.41630856 +Thu Dec 07 2023 17:00:00 ,17.69145235 +Thu Dec 07 2023 17:01:00 ,324053.4315 +Thu Dec 07 2023 17:02:00 ,323462.6322 +Thu Dec 07 2023 17:03:00 ,21.37742659 +Thu Dec 07 2023 17:04:00 ,21.35793942 +Thu Dec 07 2023 17:05:00 ,17.6672947 +Thu Dec 07 2023 17:06:00 ,323905.7316 +Thu Dec 07 2023 17:07:00 ,323758.0318 +Thu Dec 07 2023 17:08:00 ,17.67534725 +Thu Dec 07 2023 17:09:00 ,17.6672947 +Thu Dec 07 2023 17:10:00 ,17.6511896 +Thu Dec 07 2023 17:11:00 ,324053.4315 +Thu Dec 07 2023 17:12:00 ,323462.6322 +Thu Dec 07 2023 17:13:00 ,17.6511896 +Thu Dec 07 2023 17:14:00 ,16.075818 +Thu Dec 07 2023 17:15:00 ,23.51516925 +Thu Dec 07 2023 17:16:00 ,324053.4315 +Thu Dec 07 2023 17:17:00 ,323462.6322 +Thu Dec 07 2023 17:18:00 ,16.061177 +Thu Dec 07 2023 17:19:00 ,19.39859295 +Thu Dec 07 2023 17:20:00 ,17.6511896 +Thu Dec 07 2023 17:21:00 ,323905.7316 +Thu Dec 07 2023 17:22:00 ,17.6511896 +Thu Dec 07 2023 17:23:00 ,323462.6322 +Thu Dec 07 2023 17:24:00 ,19.41630856 +Thu Dec 07 2023 17:25:00 ,19.43402417 +Thu Dec 07 2023 17:26:00 ,323462.6322 +Thu Dec 07 2023 17:27:00 ,323462.6322 +Thu Dec 07 2023 17:28:00 ,323462.6322 +Thu Dec 07 2023 17:29:00 ,21.35793942 +Thu Dec 07 2023 17:30:00 ,23.49373336 +Thu Dec 07 2023 17:31:00 ,323462.6322 +Thu Dec 07 2023 17:32:00 ,323462.6322 +Thu Dec 07 2023 17:33:00 ,323167.2325 +Thu Dec 07 2023 17:34:00 ,17.6672947 +Thu Dec 07 2023 17:35:00 ,17.6833998 +Thu Dec 07 2023 17:36:00 ,323758.0318 +Thu Dec 07 2023 17:37:00 ,323758.0318 +Thu Dec 07 2023 17:38:00 ,323462.6322 +Thu Dec 07 2023 17:39:00 ,19.41630856 +Thu Dec 07 2023 17:40:00 ,31.2701591 +Thu Dec 07 2023 17:41:00 ,323462.6322 +Thu Dec 07 2023 17:42:00 ,323462.6322 +Thu Dec 07 2023 17:43:00 ,323462.6322 +Thu Dec 07 2023 17:44:00 ,21.35793942 +Thu Dec 07 2023 17:45:00 ,21.33845225 +Thu Dec 07 2023 17:46:00 ,323462.6322 +Thu Dec 07 2023 17:47:00 ,323462.6322 +Thu Dec 07 2023 17:48:00 ,323758.0318 +Thu Dec 07 2023 17:49:00 ,17.6833998 +Thu Dec 07 2023 17:50:00 ,16.075818 +Thu Dec 07 2023 17:51:00 ,323462.6322 +Thu Dec 07 2023 17:52:00 ,323462.6322 +Thu Dec 07 2023 17:53:00 ,323462.6322 +Thu Dec 07 2023 17:54:00 ,17.6511896 +Thu Dec 07 2023 17:55:00 ,16.075818 +Thu Dec 07 2023 17:56:00 ,323758.0318 +Thu Dec 07 2023 17:57:00 ,323758.0318 +Thu Dec 07 2023 17:58:00 ,323167.2325 +Thu Dec 07 2023 17:59:00 ,19.43402417 +Thu Dec 07 2023 18:00:00 ,19.41630856 +Thu Dec 07 2023 18:01:00 ,17.6672947 +Thu Dec 07 2023 18:02:00 ,324053.4315 +Thu Dec 07 2023 18:03:00 ,323462.6322 +Thu Dec 07 2023 18:04:00 ,17.6511896 +Thu Dec 07 2023 18:05:00 ,17.6511896 +Thu Dec 07 2023 18:06:00 ,16.075818 +Thu Dec 07 2023 18:07:00 ,324201.1313 +Thu Dec 07 2023 18:08:00 ,323462.6322 +Thu Dec 07 2023 18:09:00 ,19.41630856 +Thu Dec 07 2023 18:10:00 ,17.6833998 +Thu Dec 07 2023 18:11:00 ,17.6833998 +Thu Dec 07 2023 18:12:00 ,324053.4315 +Thu Dec 07 2023 18:13:00 ,323758.0318 +Thu Dec 07 2023 18:14:00 ,16.061177 +Thu Dec 07 2023 18:15:00 ,19.41630856 +Thu Dec 07 2023 18:16:00 ,17.6350845 +Thu Dec 07 2023 18:17:00 ,324053.4315 +Thu Dec 07 2023 18:18:00 ,323462.6322 +Thu Dec 07 2023 18:19:00 ,17.6833998 +Thu Dec 07 2023 18:20:00 ,14.62325333 +Thu Dec 07 2023 18:21:00 ,23.49373336 +Thu Dec 07 2023 18:22:00 ,324201.1313 +Thu Dec 07 2023 18:23:00 ,323462.6322 +Thu Dec 07 2023 18:24:00 ,25.84310669 +Thu Dec 07 2023 18:25:00 ,31.2701591 +Thu Dec 07 2023 18:26:00 ,17.69413653 +Thu Dec 07 2023 18:27:00 ,324053.4315 +Thu Dec 07 2023 18:28:00 ,323167.2325 +Thu Dec 07 2023 18:29:00 ,23.49373336 +Thu Dec 07 2023 18:30:00 ,14.62325333 +Thu Dec 07 2023 18:31:00 ,17.6833998 +Thu Dec 07 2023 18:32:00 ,324053.4315 +Thu Dec 07 2023 18:33:00 ,323462.6322 +Thu Dec 07 2023 18:34:00 ,17.6833998 +Thu Dec 07 2023 18:35:00 ,17.69145235 +Thu Dec 07 2023 18:36:00 ,19.41630856 +Thu Dec 07 2023 18:37:00 ,323462.6322 +Thu Dec 07 2023 18:38:00 ,323758.0318 +Thu Dec 07 2023 18:39:00 ,323462.6322 +Thu Dec 07 2023 18:40:00 ,21.35793942 +Thu Dec 07 2023 18:41:00 ,19.41630856 +Thu Dec 07 2023 18:42:00 ,323758.0318 +Thu Dec 07 2023 18:43:00 ,323462.6322 +Thu Dec 07 2023 18:44:00 ,323758.0318 +Thu Dec 07 2023 18:45:00 ,21.35793942 +Thu Dec 07 2023 18:46:00 ,19.41630856 +Thu Dec 07 2023 18:47:00 ,323167.2325 +Thu Dec 07 2023 18:48:00 ,323462.6322 +Thu Dec 07 2023 18:49:00 ,323462.6322 +Thu Dec 07 2023 18:50:00 ,16.0831385 +Thu Dec 07 2023 18:51:00 ,21.39691376 +Thu Dec 07 2023 18:52:00 ,323462.6322 +Thu Dec 07 2023 18:53:00 ,323758.0318 +Thu Dec 07 2023 18:54:00 ,323462.6322 +Thu Dec 07 2023 18:55:00 ,19.41630856 +Thu Dec 07 2023 18:56:00 ,16.090459 +Thu Dec 07 2023 18:57:00 ,323758.0318 +Thu Dec 07 2023 18:58:00 ,323462.6322 +Thu Dec 07 2023 18:59:00 ,323758.0318 +Thu Dec 07 2023 19:00:00 ,19.43402417 From 0d37b5543038bbd569db30aa56302e571f1d9f72 Mon Sep 17 00:00:00 2001 From: Jerry Lee Date: Wed, 24 Jan 2024 18:13:04 +0800 Subject: [PATCH 27/44] feat: Add data preprocessing function and requirements.txt --- ai/preprocess.py | 21 +++++++++++++++++++++ ai/requirements.txt | 5 +++++ 2 files changed, 26 insertions(+) create mode 100644 ai/preprocess.py create mode 100644 ai/requirements.txt diff --git a/ai/preprocess.py b/ai/preprocess.py new file mode 100644 index 0000000..8c0dae8 --- /dev/null +++ b/ai/preprocess.py @@ -0,0 +1,21 @@ +import os + +import pandas as pd + + +def preprocess_official_log_data(data_dir: str) -> pd.DataFrame: + log_df = pd.DataFrame() + for filename in os.listdir(data_dir): + # Skip the container startup latency file + if filename == "Container Startup Latency.csv": + continue + + if log_df.empty: + log_df = pd.read_csv(os.path.join(data_dir, filename)) + else: + tmp_df = pd.read_csv(os.path.join(data_dir, filename)) + + # Merge log_df and tmp_df along the "Time" column + log_df = pd.merge(log_df, tmp_df, on="Time") + + return log_df diff --git a/ai/requirements.txt b/ai/requirements.txt new file mode 100644 index 0000000..47ac82a --- /dev/null +++ b/ai/requirements.txt @@ -0,0 +1,5 @@ +google-cloud-aiplatform==1.39.0 +langchain==0.1.3 +pandas==2.2.0 +python-dotenv==1.0.1 +langchain_google_vertexai==0.0.2 From ff2f6469b25757ee83eda8dd282336f634bdcfe9 Mon Sep 17 00:00:00 2001 From: jason810496 <810496@email.wlsh.tyc.edu.tw> Date: Wed, 24 Jan 2024 23:46:50 +0800 Subject: [PATCH 28/44] feat : sync log debug --- monitor/Makefile | 12 ++++ monitor/poetry.lock | 28 ++++++++- monitor/pyproject.toml | 1 + monitor/sync_service/log.py | 118 ++++++++++++++++++++++++++++++++++++ 4 files changed, 157 insertions(+), 2 deletions(-) create mode 100644 monitor/Makefile create mode 100644 monitor/sync_service/log.py diff --git a/monitor/Makefile b/monitor/Makefile new file mode 100644 index 0000000..23204c1 --- /dev/null +++ b/monitor/Makefile @@ -0,0 +1,12 @@ +access-token: + gcloud auth print-access-token + +access-token-env: + printf "ACCESS_TOKEN=" > .env/dev.env + gcloud auth print-access-token >> .env/dev.env + +sdk-auth-init: + gcloud auth application-default login + + +.PHONY: access-token \ No newline at end of file diff --git a/monitor/poetry.lock b/monitor/poetry.lock index 977de05..f5d87ed 100644 --- a/monitor/poetry.lock +++ b/monitor/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. [[package]] name = "cachetools" @@ -561,6 +561,20 @@ files = [ [package.dependencies] pyasn1 = ">=0.4.6,<0.6.0" +[[package]] +name = "python-dotenv" +version = "1.0.1" +description = "Read key-value pairs from a .env file and set them as environment variables" +optional = false +python-versions = ">=3.8" +files = [ + {file = "python-dotenv-1.0.1.tar.gz", hash = "sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca"}, + {file = "python_dotenv-1.0.1-py3-none-any.whl", hash = "sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a"}, +] + +[package.extras] +cli = ["click (>=5.0)"] + [[package]] name = "pyyaml" version = "6.0.1" @@ -573,6 +587,7 @@ files = [ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, @@ -580,8 +595,15 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, @@ -598,6 +620,7 @@ files = [ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, @@ -605,6 +628,7 @@ files = [ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, @@ -726,4 +750,4 @@ test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess [metadata] lock-version = "2.0" python-versions = "^3.11" -content-hash = "df893032b6cf949dd77e9e78dd1c951da80494bd425ab973a8ef99b0a50e4502" +content-hash = "bba0501d3dbe1d645fa9d250fa7a97112af8025e907fdf895ec1305ddb3cb9b6" diff --git a/monitor/pyproject.toml b/monitor/pyproject.toml index c928996..a36d93d 100644 --- a/monitor/pyproject.toml +++ b/monitor/pyproject.toml @@ -12,6 +12,7 @@ ruff = "^0.1.14" google-cloud-run = "^0.10.1" google-cloud-logging = "^3.9.0" google-cloud-monitoring = "^2.18.0" +python-dotenv = "^1.0.1" [build-system] diff --git a/monitor/sync_service/log.py b/monitor/sync_service/log.py new file mode 100644 index 0000000..4f5a1bf --- /dev/null +++ b/monitor/sync_service/log.py @@ -0,0 +1,118 @@ +import os +from dotenv import load_dotenv +from google.cloud import logging +from google.cloud.logging_v2 import LogEntry + +load_dotenv(".env/dev.env") + +project_id = "tsmccareerhack2024-icsd-grp5" +project_name = f"projects/{project_id}" +access_token = os.getenv("ACCESS_TOKEN") + + +# create credentials object +# https://googleapis.dev/python/google-auth/latest/reference/google.auth.credentials.html#google.auth.credentials.Credentials + + +def get_cloud_run_logs(service_name): + client = logging.Client() + logger = client.logger(service_name) + logs = logger.list_entries() + + for log in logs: + print(log.payload) + + +def get_all_avaliable_logs(): + # gcloud logging logs list + + # return + # projects/[PROJECT_ID]/logs/[LOG_ID] + # logger_name == logger_id + pass + + +def list_all_log_entries(): + """ + logger_name == logger_id + """ + # logger_name = "run.googleapis.com%2Fvarlog%2Fsystem" + # logger_name = "projects/tsmccareerhack2024-icsd-grp5/logs/run.googleapis.com%2Fstdout" + logger_name = ( + "projects/tsmccareerhack2024-icsd-grp5/logs/run.googleapis.com%2Fstderr" + ) + + logging_client = logging.Client() + logger = logging_client.logger(logger_name) + + print("Listing entries for logger {}:".format(logger.name)) + + for entry in logger.list_entries(): + timestamp = entry.timestamp.isoformat() + print("* {}: {}".format(timestamp, entry.payload)) + + +def get_log_entry_cmd(): + # https://cloud.google.com/run/docs/logging#viewing-logs-gcloud + # gcloud beta run services logs tail SERVICE --project PROJECT-ID + # - SERVICE: The name of the Cloud Run service name + # - PROJECT-ID: The project ID of the Cloud Run service + + # SERVICE : consumer-sentry + # gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=SERVICE" --project PROJECT-ID --limit 10 + # gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=consumer-sentry" --project tsmccareerhack2024-icsd-grp5 --limit 10 + pass + + +def get_log_entry_sdk(): + # https://cloud.google.com/run/docs/logging#viewing-logs-sdk + # + pass + + +def get_enque_deque_log(): + # resource.type="cloud_run_revision" + # resource.labels.revision_name="consumer-sentry-00004-864" + # resource.labels.service_name="consumer-sentry" + # severity=DEFAULT + # logName="projects/tsmccareerhack2024-icsd-grp5/logs/run.googleapis.com%2Fstdout" + pass + + +def tail_log_entry(): + """ + resource.type="cloud_run_revision" + resource.labels.revision_name="consumer-sentry-00004-864" + resource.labels.service_name="consumer-sentry" + severity=DEFAULT + logName="projects/tsmccareerhack2024-icsd-grp5/logs/run.googleapis.com%2Fstderr" + """ + + client = logging.Client() + logger_name = "run.googleapis.com%2Fstderr" + logger = client.logger(logger_name) + + resource_type = '"cloud_run_revision"' + revision_name = '"consumer-sentry-00004-864"' + service_name = '"consumer-sentry"' + severity = '"DEFAULT"' + + query: LogEntry = logger.list_entries( + filter_=f"resource.type={resource_type} AND resource.labels.revision_name={revision_name} AND resource.labels.service_name={service_name} AND severity={severity}", + max_results=10, + order_by=logging.DESCENDING, + ) + + for entry in query: + print(entry.payload) + + +# REST API +# https://cloud.google.com/logging/docs/reference/v2/rest +# https://cloud.google.com/logging/docs/reference/v2/rest#rest-resource:-v2.entries + +if __name__ == "__main__": + # get_cloud_run_logs("consumer-sentry") + # list_all_log_entries() + + tail_log_entry() From 414417dc83c35c46ef8bfab863e0a462050e4f3d Mon Sep 17 00:00:00 2001 From: peterxcli Date: Thu, 25 Jan 2024 01:12:52 +0800 Subject: [PATCH 29/44] feat: implement the `increase` and `update` functionality of `instance count` and `cpu, ram` --- monitor/auto_scaling/cloud_run_api.py | 185 +++++++++++++++++++++----- 1 file changed, 150 insertions(+), 35 deletions(-) diff --git a/monitor/auto_scaling/cloud_run_api.py b/monitor/auto_scaling/cloud_run_api.py index f952b88..c52e8ae 100644 --- a/monitor/auto_scaling/cloud_run_api.py +++ b/monitor/auto_scaling/cloud_run_api.py @@ -1,9 +1,12 @@ +import logging +import random import time from google.cloud import monitoring_v3, run_v2 project_id = "tsmccareerhack2024-icsd-grp5" project_name = f"projects/{project_id}" +location = "us-central1" class CloudRunManager: @@ -15,64 +18,176 @@ def __init__( self.cloud_run_client = run_client self.monitoring_client = monitoring_client - def adjust_cpu_ram(self, instance_id, cpu=None, ram=None): + def get_service(self, service_id): + """ + Gets the configuration of a cloud run. + + :param service_id: The name of the cloud run which you named it in the create form. (e.g. consumer) + """ + service_name = ( + f"projects/{project_id}/locations/{location}/services/{service_id}" + ) + return self.cloud_run_client.get_service(name=service_name) + + def adjust_cpu_ram(self, service_id, cpu: float, ram: float, ram_unit="M"): """ Adjusts the CPU and RAM of a cloud instance. - :param instance_id: ID of the instance to adjust. + :param service_id: The name of the cloud run which you named it in the create form. (e.g. consumer) :param cpu: New CPU configuration. :param ram: New RAM configuration. + :param ram_unit (optional): The unit of RAM. (e.g. M, G) """ - # https://github.com/googleapis/google-cloud-python/blob/main/packages/google-cloud-run/google/cloud/run_v2/types/service.py#L502 - # https://github.com/googleapis/google-cloud-python/blob/main/packages/google-cloud-run/google/cloud/run_v2/types/revision_template.py#L144 - # https://github.com/googleapis/google-cloud-python/blob/main/packages/google-cloud-run/google/cloud/run_v2/types/k8s_min.py#L164 - request = run_v2.UpdateServiceRequest( - service=run_v2.Service( - name=instance_id, - template=run_v2.RevisionTemplate( - containers=[ - run_v2.Container( - resources=run_v2.ResourceRequirements( - limits={"cpu": cpu, "memory": ram} - ) - ) - ] - ), - ) + service_name = ( + f"projects/{project_id}/locations/{location}/services/{service_id}" ) + # Retrieve the current configuration of the service + current_service = self.cloud_run_client.get_service(name=service_name) + # Modify only the resource requirements + for container in current_service.template.containers: + container.resources = run_v2.ResourceRequirements() + container.resources.limits = { + "cpu": f"{cpu}", + "memory": f"{ram}{ram_unit}", + } + # Update the service with the modified configuration + request = run_v2.UpdateServiceRequest(service=current_service) operation = self.cloud_run_client.update_service(request=request) + print("Updating service with new CPU and RAM ...") - response = operation.result() # Blocks until operation is complete - return response + try: + response: run_v2.Service = operation.result(timeout=30) # noqa: F841 + return True + except Exception: + return False - def adjust_instance_count(self, instance_id, new_count): + def increase_cpu_ram( + self, service_id, cpu_delta: float = 0, ram_delta: float = 0, ram_unit="M" + ): + """ + Adjusts the CPU and RAM of a cloud instance. + + :param service_id: The name of the cloud run which you named it in the create form. (e.g. consumer) + :param cpu_delta: The Delta of current CPU configuration. (unit: no unit, number only, e.g. 1, 69, 420) + :param ram_delta: The Delta of current RAM configuration. (unit: MB) + :param ram_unit (optional): The unit of RAM. (e.g. M, G) + """ + service_name = ( + f"projects/{project_id}/locations/{location}/services/{service_id}" + ) + current_service = self.cloud_run_client.get_service(name=service_name) + # Modify the resource requirements + for container in current_service.template.containers: + original_cpu = container.resources.limits["cpu"] + original_ram = container.resources.limits["memory"] + try: + original_cpu = float( + "".join(c for c in original_cpu if c.isdigit() or c == ".") + ) + except Exception: + original_cpu = 0 + try: + original_ram = float( + "".join(c for c in original_ram if c.isdigit() or c == ".") + ) + except Exception: + original_ram = 0 + container.resources = run_v2.ResourceRequirements() + container.resources.limits = { + "cpu": f"{original_cpu + cpu_delta}", + "memory": f"{original_ram + ram_delta}{ram_unit}", + } + # Update the service with the modified configuration + request = run_v2.UpdateServiceRequest(service=current_service) + + # Wait for the operation to complete + operation = self.cloud_run_client.update_service(request=request) + print("Updating service with new CPU and RAM ...") + + try: + response: run_v2.Service = operation.result(timeout=30) # noqa: F841 + return True + except Exception: + return False + + def adjust_instance_count(self, service_id: str, new_count: int): """ Adjusts the number of running instances. + :param service_id: The name of the cloud run which you named it in the create form. (e.g. consumer) :param new_count: The target number of instances. """ - # https://github.com/googleapis/google-cloud-python/blob/main/packages/google-cloud-run/google/cloud/run_v2/types/service.py#L502 - # https://github.com/googleapis/google-cloud-python/blob/main/packages/google-cloud-run/google/cloud/run_v2/types/revision_template.py#L33 - # https://github.com/googleapis/google-cloud-python/blob/313f5672c1d16681dd4db2c4a995c5668259ea7d/packages/google-cloud-run/google/cloud/run_v2/types/vendor_settings.py#L213 - request = run_v2.UpdateServiceRequest( - service=run_v2.Service( - name=instance_id, - template=run_v2.RevisionTemplate( - scale=run_v2.RevisionScaling( - min_instance_count=new_count, max_instance_count=new_count - ) + + service_name = ( + f"projects/{project_id}/locations/{location}/services/{service_id}" + ) + # Retrieve the current configuration of the service + current_service = self.cloud_run_client.get_service(name=service_name) + + # Modify only the scaling parameters + current_service.template.scaling.min_instance_count = new_count + current_service.template.scaling.max_instance_count = new_count + + for container in current_service.template.containers: + container.env = [ + run_v2.EnvVar( + name="CURRENT_INSTANCE_COUNT", + value=f"{new_count}", ), - ) + ] + request = run_v2.UpdateServiceRequest(service=current_service) + + operation = self.cloud_run_client.update_service(request=request) + print(f"Updating service with new instance count: {new_count} ...") + try: + response: run_v2.Service = operation.result( # noqa: F841 + timeout=30 + ) # Blocks until operation is complete + return True + + except Exception: + return False + + def increase_instance_count(self, service_id: str, delta: int): + """ + Adjusts the number of running instances. + + :param service_id: The name of the cloud run which you named it in the create form. (e.g. consumer) + :param delta: The delta of the number of instances. + """ + + service_name = ( + f"projects/{project_id}/locations/{location}/services/{service_id}" ) + # Retrieve the current configuration of the service + current_service = self.cloud_run_client.get_service(name=service_name) + new_count = current_service.template.scaling.min_instance_count + delta + # Modify only the scaling parameters + current_service.template.scaling.min_instance_count = new_count + current_service.template.scaling.max_instance_count = new_count + + for container in current_service.template.containers: + container.env = [ + run_v2.EnvVar( + name="CURRENT_INSTANCE_COUNT", + value=f"{current_service.template.scaling.min_instance_count}", + ), + ] + request = run_v2.UpdateServiceRequest(service=current_service) operation = self.cloud_run_client.update_service(request=request) + print(f"Updating service with new instance count: {new_count} ...") + try: + response: run_v2.Service = operation.result( # noqa: F841 + timeout=30 + ) # Blocks until operation is complete + return True - response = operation.result() # Blocks until operation is complete - return response + except Exception: + return False def deploy_image(self, drone_id, image): - # self.client. """ Deploys a new image to a cloud run. From 02e4f4fbd09ca67ede4f8ca582cf54f0737ac18f Mon Sep 17 00:00:00 2001 From: peterxcli Date: Thu, 25 Jan 2024 01:35:09 +0800 Subject: [PATCH 30/44] fix: update CPU and RAM basic type and number checking in cpu and mem operation --- monitor/auto_scaling/cloud_run_api.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/monitor/auto_scaling/cloud_run_api.py b/monitor/auto_scaling/cloud_run_api.py index c52e8ae..516349d 100644 --- a/monitor/auto_scaling/cloud_run_api.py +++ b/monitor/auto_scaling/cloud_run_api.py @@ -63,7 +63,7 @@ def adjust_cpu_ram(self, service_id, cpu: float, ram: float, ram_unit="M"): return False def increase_cpu_ram( - self, service_id, cpu_delta: float = 0, ram_delta: float = 0, ram_unit="M" + self, service_id, cpu_delta: float = 0, ram_delta: int = 0, ram_unit="M" ): """ Adjusts the CPU and RAM of a cloud instance. @@ -88,16 +88,23 @@ def increase_cpu_ram( except Exception: original_cpu = 0 try: - original_ram = float( + original_ram = int( "".join(c for c in original_ram if c.isdigit() or c == ".") ) except Exception: original_ram = 0 container.resources = run_v2.ResourceRequirements() + new_cpu = ( + (original_cpu + cpu_delta) > 1 and int(original_cpu + cpu_delta) or 0.5 + ) + new_ram = original_ram + ram_delta container.resources.limits = { - "cpu": f"{original_cpu + cpu_delta}", - "memory": f"{original_ram + ram_delta}{ram_unit}", + "cpu": f"{new_cpu}", + "memory": f"{new_ram}{ram_unit}", } + print( + f"Container {container.name} CPU: {new_cpu}, RAM: {new_ram}{ram_unit}" + ) # Update the service with the modified configuration request = run_v2.UpdateServiceRequest(service=current_service) From 4c4ff76245e18eccb841182b89a95f7e30ed1952 Mon Sep 17 00:00:00 2001 From: peterxcli Date: Thu, 25 Jan 2024 01:35:28 +0800 Subject: [PATCH 31/44] docs: add python cloud run sdk docs --- monitor/README.md | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/monitor/README.md b/monitor/README.md index dadf19e..a99b81b 100644 --- a/monitor/README.md +++ b/monitor/README.md @@ -6,6 +6,20 @@ gcloud auth application-default login ``` +## Manipulate Cloud Run Service With Python SDK + +### Adjust `CPU` and `Memory` of Cloud Run Service + +- +- +- + +### Adjust `INSTANCE COUNT` of Cloud Run Service + +- +- +- + ## Reference ### Cloud Run API @@ -26,4 +40,4 @@ gcloud auth application-default login #### Metrics API - [cloud run metrics api](https://cloud.google.com/monitoring/api/metrics_gcp#gcp-run) -- [python sdk for metrics](https://cloud.google.com/monitoring/docs/reference/libraries#client-libraries-install-python) \ No newline at end of file +- [python sdk for metrics](https://cloud.google.com/monitoring/docs/reference/libraries#client-libraries-install-python) From d2810ee87c0f7e9d338a74b5f88f932d974064f3 Mon Sep 17 00:00:00 2001 From: peterxcli Date: Thu, 25 Jan 2024 01:36:21 +0800 Subject: [PATCH 32/44] chore: add cloud run manager test code to provide more understandability --- monitor/auto_scaling/cloud_run_api.py | 43 +++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/monitor/auto_scaling/cloud_run_api.py b/monitor/auto_scaling/cloud_run_api.py index 516349d..f5ea5cb 100644 --- a/monitor/auto_scaling/cloud_run_api.py +++ b/monitor/auto_scaling/cloud_run_api.py @@ -256,5 +256,44 @@ def get_metrics( run_v2.ServicesClient(), monitoring_v3.MetricServiceClient() ) - metric = run_manager.get_metrics("consumer") - print(metric) + # run_manager.increase_cpu_ram("consumer", cpu_delta=1, ram_delta=69) + run_manager.increase_instance_count("consumer", 69) + + # metric = run_manager.get_metrics("consumer") + # print(metric) + while True: + command = input("Enter command: ") + if command == "adjust cpu": + desired_cpu = random.choice([0.5, 1, 2, 4, 6, 8]) + desired_ram = random.randint(2000, 10000) + print( + f"Adjusting CPU to {desired_cpu} and RAM to {desired_ram} for consumer" + ) + print( + run_manager.adjust_cpu_ram( + "consumer", + cpu=desired_cpu, + ram=desired_ram, + ) + ) + elif command == "deploy image": + print( + run_manager.deploy_image( + "consumer", "gcr.io/tsmccareerhack2024-icsd-grp5/consumer:latest" + ) + ) + elif command == "scale up": + desired_count = random.randint(1, 5) + print(f"Scaling instance count to {desired_count} for consumer") + res = run_manager.adjust_instance_count("consumer", desired_count) + if res is None: + print("Failed to scale up") + else: + print("Successfully scaled up") + elif command == "scale down": + print("Scaling instance count to 0 for consumer") + print(run_manager.adjust_instance_count("consumer", 0)) + elif command == "exit": + break + else: + logging.warn("Invalid command") From 46bf51a9428a0ea0cfb4916aee6657b71a1587d4 Mon Sep 17 00:00:00 2001 From: Jerry Lee Date: Thu, 25 Jan 2024 02:02:02 +0800 Subject: [PATCH 33/44] refactor: Update preprocess function --- ai/preprocess.py | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/ai/preprocess.py b/ai/preprocess.py index 8c0dae8..d7f6df6 100644 --- a/ai/preprocess.py +++ b/ai/preprocess.py @@ -3,19 +3,15 @@ import pandas as pd -def preprocess_official_log_data(data_dir: str) -> pd.DataFrame: - log_df = pd.DataFrame() +def preprocess_metric_data(data_dir: str) -> pd.DataFrame: + metric_df = pd.DataFrame() for filename in os.listdir(data_dir): - # Skip the container startup latency file - if filename == "Container Startup Latency.csv": - continue - - if log_df.empty: - log_df = pd.read_csv(os.path.join(data_dir, filename)) + if metric_df.empty: + metric_df = pd.read_csv(os.path.join(data_dir, filename)) else: tmp_df = pd.read_csv(os.path.join(data_dir, filename)) - # Merge log_df and tmp_df along the "Time" column - log_df = pd.merge(log_df, tmp_df, on="Time") + # Merge metric_df and tmp_df along the "Time" column + metric_df = pd.merge(metric_df, tmp_df, on="Time", how="outer") - return log_df + return metric_df From 451e4338bc818365f4e23311acc5a62ec1b7aabc Mon Sep 17 00:00:00 2001 From: Jerry Lee Date: Thu, 25 Jan 2024 02:02:38 +0800 Subject: [PATCH 34/44] feat: Add functions to use LLM to analyze metric data --- ai/analyze.py | 154 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 154 insertions(+) create mode 100644 ai/analyze.py diff --git a/ai/analyze.py b/ai/analyze.py new file mode 100644 index 0000000..35c1019 --- /dev/null +++ b/ai/analyze.py @@ -0,0 +1,154 @@ +import pandas as pd +from langchain.output_parsers import ResponseSchema, StructuredOutputParser +from langchain.prompts import PromptTemplate +from langchain_google_vertexai import VertexAI + + +def analyze_cpu_usage(metric_df) -> str: + feedback = "" + label = "Container CPU Utilization (%)" + for i in range(len(metric_df) - 1): + curr_entry = metric_df.iloc[i][label] + next_entry = metric_df.iloc[i + 1][label] + if ( + not pd.isna(curr_entry) + and not pd.isna(next_entry) + and curr_entry > 60.0 + and next_entry > 60.0 + ): + feedback += f"\ +- ERROR: Container CPU Utilization (%) is above 60% for two minutes, at {metric_df.iloc[i]['Time']} and {metric_df.iloc[i + 1]['Time']}\n" + + if feedback == "": + feedback = f"- INFO: Container CPU Utilization (%) is below 60% over the last {len(metric_df)} minutes.\n" + + return feedback + + +def analyze_mem_usage(metric_df) -> str: + feedback = "" + label = "Container Memory Utilization (%)" + for i in range(len(metric_df) - 1): + curr_entry = metric_df.iloc[i][label] + next_entry = metric_df.iloc[i + 1][label] + if ( + not pd.isna(curr_entry) + and not pd.isna(next_entry) + and curr_entry > 60.0 + and next_entry > 60.0 + ): + feedback += f"\ +- ERROR: Container Memory Utilization (%) is above 60% for two minutes, at {metric_df.iloc[i]['Time']} and {metric_df.iloc[i + 1]['Time']}\n" + + if feedback == "": + feedback = f"- INFO: Container Memory Utilization (%) is below 60% over the last {len(metric_df)} minutes.\n" + + return feedback + + +def analyze_restart(metric_df) -> str: + feedback = "" + for _, row in metric_df.iterrows(): + if not pd.isna(row["Container Startup Latency (ms)"]): + feedback += f"\ +- ERROR: Cloud run restarted at {row['Time']}, with Container Startup Latency (ms) of {row['Container Startup Latency (ms)']} ms\n" + + if feedback == "": + feedback = f"- INFO: Cloud run did not restart over the last {len(metric_df)} minutes.\n" + + return feedback + + +def analyze_instance_count(metric_df) -> str: + feedback = "" + for _, row in metric_df.iterrows(): + if pd.isna(row["Instance Count (active)"]): + continue + + total_instance_count = ( + row["Instance Count (active)"] + row["Instance Count (idle)"] + ) + if total_instance_count > 2: + feedback += f"\ +- ERROR: Total instance count is above 2 at {row['Time']}, with Instance Count (active) of {int(row['Instance Count (active)'])} and Instance Count (idle) of {int(row['Instance Count (idle)'])}\n" + + if feedback == "": + feedback = f"- INFO: Total instance count is less than or equal to 2 over the last {len(metric_df)} minutes.\n" + + return feedback + + +def analyze_by_rule(metric_df: pd.DataFrame) -> str: + feedback = "" + feedback += analyze_cpu_usage(metric_df) + feedback += analyze_mem_usage(metric_df) + feedback += analyze_restart(metric_df) + feedback += analyze_instance_count(metric_df) + + return feedback + + +def analyze_by_llm(metric_df: pd.DataFrame) -> dict: + # Analysis feedback by heuristic rules + heuristic_feedback = analyze_by_rule(metric_df) + + # Define response schema + severity_schema = ResponseSchema( + name="severity", + description='Severity level of the analysis feedback. \ +Use "ERROR" if the analysis detects errors, "WARNING" for potential issues, or "INFO" if no problems are identified.', + ) + message_schema = ResponseSchema( + name="message", + description="In-depth analysis feedback based on provided metrics(The description can span multiple lines, use '\\n' to separate lines.)", + ) + response_schema = [severity_schema, message_schema] + output_parser = StructuredOutputParser.from_response_schemas(response_schema) + format_instruction = output_parser.get_format_instructions() + + # Define the model and prompt template + llm = VertexAI( + model_name="text-bison@001", + temperature=0, + max_output_tokens=512, + top_p=0.8, + top_k=40, + ) + prompt_template = PromptTemplate.from_template( + """\ +The following text contains metric data for a Google Cloud Run application. \ +This data is presented in CSV format and encompasses the most recent {time_span} minutes: +{metric_data} + +The following text is a heuristic analysis feedback of the metric data: +{heuristic_feedback} + +The heuristic analysis feedback is based on the following rules: +- CPU limit > 60% (lasts 2 minutes) +- Memory limit > 60% (lasts 2 minutes) +- Cloud run re-start +- Instance count > 2 +- Fail response (4xx, 5xx) + +Based on the provided metrics, an in-depth \ +analysis is required to evaluate the cloud resource status and the operational health of the system. The analysis \ +should identify and report any errors, anticipate potential problems, and propose appropriate remediation strategies. + +{format_instruction} +""" + ) + + # Invoke the model + chain = prompt_template | llm + feedback = chain.invoke( + { + "time_span": len(metric_df), + "metric_data": metric_df.to_string(), + "heuristic_feedback": heuristic_feedback, + "format_instruction": format_instruction, + } + ) + + # Parse the feedback to a dictionary + feedback_dict = output_parser.parse(feedback) + return feedback_dict From ecdd9aa1c0d99781d8340e196cc7909c701fda8f Mon Sep 17 00:00:00 2001 From: peterxcli Date: Thu, 25 Jan 2024 02:13:11 +0800 Subject: [PATCH 35/44] move cloudrun manager to service --- monitor/{auto_scaling/cloud_run_api.py => service/cloudrun.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename monitor/{auto_scaling/cloud_run_api.py => service/cloudrun.py} (100%) diff --git a/monitor/auto_scaling/cloud_run_api.py b/monitor/service/cloudrun.py similarity index 100% rename from monitor/auto_scaling/cloud_run_api.py rename to monitor/service/cloudrun.py From 3660c748c7283cbe81380d46158e1e4fcb6258de Mon Sep 17 00:00:00 2001 From: peterxcli Date: Thu, 25 Jan 2024 14:24:47 +0800 Subject: [PATCH 36/44] refactor: set CloudRunManager class to include project_id and location as parameters --- monitor/service/cloudrun.py | 38 +++++++++++++++++-------------------- 1 file changed, 17 insertions(+), 21 deletions(-) diff --git a/monitor/service/cloudrun.py b/monitor/service/cloudrun.py index f5ea5cb..97b8d0b 100644 --- a/monitor/service/cloudrun.py +++ b/monitor/service/cloudrun.py @@ -4,19 +4,20 @@ from google.cloud import monitoring_v3, run_v2 -project_id = "tsmccareerhack2024-icsd-grp5" -project_name = f"projects/{project_id}" -location = "us-central1" - class CloudRunManager: def __init__( self, run_client: run_v2.ServicesClient, monitoring_client: monitoring_v3.MetricServiceClient, + project_id="tsmccareerhack2024-icsd-grp5", + location="us-central1", ): self.cloud_run_client = run_client self.monitoring_client = monitoring_client + self.project_id = project_id + self.project_name = f"projects/{project_id}" + self.location = location def get_service(self, service_id): """ @@ -24,9 +25,7 @@ def get_service(self, service_id): :param service_id: The name of the cloud run which you named it in the create form. (e.g. consumer) """ - service_name = ( - f"projects/{project_id}/locations/{location}/services/{service_id}" - ) + service_name = f"projects/{self.project_id}/locations/{self.location}/services/{service_id}" return self.cloud_run_client.get_service(name=service_name) def adjust_cpu_ram(self, service_id, cpu: float, ram: float, ram_unit="M"): @@ -38,9 +37,7 @@ def adjust_cpu_ram(self, service_id, cpu: float, ram: float, ram_unit="M"): :param ram: New RAM configuration. :param ram_unit (optional): The unit of RAM. (e.g. M, G) """ - service_name = ( - f"projects/{project_id}/locations/{location}/services/{service_id}" - ) + service_name = f"projects/{self.project_id}/locations/{self.location}/services/{service_id}" # Retrieve the current configuration of the service current_service = self.cloud_run_client.get_service(name=service_name) # Modify only the resource requirements @@ -73,9 +70,7 @@ def increase_cpu_ram( :param ram_delta: The Delta of current RAM configuration. (unit: MB) :param ram_unit (optional): The unit of RAM. (e.g. M, G) """ - service_name = ( - f"projects/{project_id}/locations/{location}/services/{service_id}" - ) + service_name = f"projects/{self.project_id}/locations/{self.location}/services/{service_id}" current_service = self.cloud_run_client.get_service(name=service_name) # Modify the resource requirements for container in current_service.template.containers: @@ -126,9 +121,7 @@ def adjust_instance_count(self, service_id: str, new_count: int): :param new_count: The target number of instances. """ - service_name = ( - f"projects/{project_id}/locations/{location}/services/{service_id}" - ) + service_name = f"projects/{self.project_id}/locations/{self.location}/services/{service_id}" # Retrieve the current configuration of the service current_service = self.cloud_run_client.get_service(name=service_name) @@ -164,9 +157,7 @@ def increase_instance_count(self, service_id: str, delta: int): :param delta: The delta of the number of instances. """ - service_name = ( - f"projects/{project_id}/locations/{location}/services/{service_id}" - ) + service_name = f"projects/{self.project_id}/locations/{self.location}/services/{service_id}" # Retrieve the current configuration of the service current_service = self.cloud_run_client.get_service(name=service_name) new_count = current_service.template.scaling.min_instance_count + delta @@ -233,7 +224,7 @@ def get_metrics( # TODO: currently only gets CPU utilization, add more metrics return self.monitoring_client.list_time_series( request=monitoring_v3.ListTimeSeriesRequest( - name=f"projects/{project_id}", + name=f"projects/{self.project_id}", filter=f'metric.type="run.googleapis.com/container/cpu/utilizations" AND resource.label."configuration_name"="{instance_name}"', aggregation=monitoring_v3.Aggregation( alignment_period={"seconds": 60}, @@ -251,9 +242,14 @@ def get_metrics( if __name__ == "__main__": + project_id = "tsmccareerhack2024-icsd-grp5" + location = "us-central1" monitoring_client = monitoring_v3.MetricServiceClient() run_manager = CloudRunManager( - run_v2.ServicesClient(), monitoring_v3.MetricServiceClient() + run_client=run_v2.ServicesClient(), + monitoring_client=monitoring_v3.MetricServiceClient(), + project_id=project_id, + location=location, ) # run_manager.increase_cpu_ram("consumer", cpu_delta=1, ram_delta=69) From dd008fc04669b842285eeadd89be5990c40463a0 Mon Sep 17 00:00:00 2001 From: peterxcli Date: Thu, 25 Jan 2024 14:33:32 +0800 Subject: [PATCH 37/44] chore: add discord dependencies --- monitor/poetry.lock | 440 +++++++++++++++++++++++++++++++++++++++-- monitor/pyproject.toml | 1 + 2 files changed, 426 insertions(+), 15 deletions(-) diff --git a/monitor/poetry.lock b/monitor/poetry.lock index f5d87ed..1c8cbff 100644 --- a/monitor/poetry.lock +++ b/monitor/poetry.lock @@ -1,4 +1,132 @@ -# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. + +[[package]] +name = "aiohttp" +version = "3.9.1" +description = "Async http client/server framework (asyncio)" +optional = false +python-versions = ">=3.8" +files = [ + {file = "aiohttp-3.9.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e1f80197f8b0b846a8d5cf7b7ec6084493950d0882cc5537fb7b96a69e3c8590"}, + {file = "aiohttp-3.9.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c72444d17777865734aa1a4d167794c34b63e5883abb90356a0364a28904e6c0"}, + {file = "aiohttp-3.9.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9b05d5cbe9dafcdc733262c3a99ccf63d2f7ce02543620d2bd8db4d4f7a22f83"}, + {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c4fa235d534b3547184831c624c0b7c1e262cd1de847d95085ec94c16fddcd5"}, + {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:289ba9ae8e88d0ba16062ecf02dd730b34186ea3b1e7489046fc338bdc3361c4"}, + {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bff7e2811814fa2271be95ab6e84c9436d027a0e59665de60edf44e529a42c1f"}, + {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81b77f868814346662c96ab36b875d7814ebf82340d3284a31681085c051320f"}, + {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3b9c7426923bb7bd66d409da46c41e3fb40f5caf679da624439b9eba92043fa6"}, + {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8d44e7bf06b0c0a70a20f9100af9fcfd7f6d9d3913e37754c12d424179b4e48f"}, + {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:22698f01ff5653fe66d16ffb7658f582a0ac084d7da1323e39fd9eab326a1f26"}, + {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ca7ca5abfbfe8d39e653870fbe8d7710be7a857f8a8386fc9de1aae2e02ce7e4"}, + {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:8d7f98fde213f74561be1d6d3fa353656197f75d4edfbb3d94c9eb9b0fc47f5d"}, + {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5216b6082c624b55cfe79af5d538e499cd5f5b976820eac31951fb4325974501"}, + {file = "aiohttp-3.9.1-cp310-cp310-win32.whl", hash = "sha256:0e7ba7ff228c0d9a2cd66194e90f2bca6e0abca810b786901a569c0de082f489"}, + {file = "aiohttp-3.9.1-cp310-cp310-win_amd64.whl", hash = "sha256:c7e939f1ae428a86e4abbb9a7c4732bf4706048818dfd979e5e2839ce0159f23"}, + {file = "aiohttp-3.9.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:df9cf74b9bc03d586fc53ba470828d7b77ce51b0582d1d0b5b2fb673c0baa32d"}, + {file = "aiohttp-3.9.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ecca113f19d5e74048c001934045a2b9368d77b0b17691d905af18bd1c21275e"}, + {file = "aiohttp-3.9.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8cef8710fb849d97c533f259103f09bac167a008d7131d7b2b0e3a33269185c0"}, + {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bea94403a21eb94c93386d559bce297381609153e418a3ffc7d6bf772f59cc35"}, + {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91c742ca59045dce7ba76cab6e223e41d2c70d79e82c284a96411f8645e2afff"}, + {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6c93b7c2e52061f0925c3382d5cb8980e40f91c989563d3d32ca280069fd6a87"}, + {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee2527134f95e106cc1653e9ac78846f3a2ec1004cf20ef4e02038035a74544d"}, + {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11ff168d752cb41e8492817e10fb4f85828f6a0142b9726a30c27c35a1835f01"}, + {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b8c3a67eb87394386847d188996920f33b01b32155f0a94f36ca0e0c635bf3e3"}, + {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c7b5d5d64e2a14e35a9240b33b89389e0035e6de8dbb7ffa50d10d8b65c57449"}, + {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:69985d50a2b6f709412d944ffb2e97d0be154ea90600b7a921f95a87d6f108a2"}, + {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:c9110c06eaaac7e1f5562caf481f18ccf8f6fdf4c3323feab28a93d34cc646bd"}, + {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d737e69d193dac7296365a6dcb73bbbf53bb760ab25a3727716bbd42022e8d7a"}, + {file = "aiohttp-3.9.1-cp311-cp311-win32.whl", hash = "sha256:4ee8caa925aebc1e64e98432d78ea8de67b2272252b0a931d2ac3bd876ad5544"}, + {file = "aiohttp-3.9.1-cp311-cp311-win_amd64.whl", hash = "sha256:a34086c5cc285be878622e0a6ab897a986a6e8bf5b67ecb377015f06ed316587"}, + {file = "aiohttp-3.9.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f800164276eec54e0af5c99feb9494c295118fc10a11b997bbb1348ba1a52065"}, + {file = "aiohttp-3.9.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:500f1c59906cd142d452074f3811614be04819a38ae2b3239a48b82649c08821"}, + {file = "aiohttp-3.9.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0b0a6a36ed7e164c6df1e18ee47afbd1990ce47cb428739d6c99aaabfaf1b3af"}, + {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69da0f3ed3496808e8cbc5123a866c41c12c15baaaead96d256477edf168eb57"}, + {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:176df045597e674fa950bf5ae536be85699e04cea68fa3a616cf75e413737eb5"}, + {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b796b44111f0cab6bbf66214186e44734b5baab949cb5fb56154142a92989aeb"}, + {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f27fdaadce22f2ef950fc10dcdf8048407c3b42b73779e48a4e76b3c35bca26c"}, + {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bcb6532b9814ea7c5a6a3299747c49de30e84472fa72821b07f5a9818bce0f66"}, + {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:54631fb69a6e44b2ba522f7c22a6fb2667a02fd97d636048478db2fd8c4e98fe"}, + {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:4b4c452d0190c5a820d3f5c0f3cd8a28ace48c54053e24da9d6041bf81113183"}, + {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:cae4c0c2ca800c793cae07ef3d40794625471040a87e1ba392039639ad61ab5b"}, + {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:565760d6812b8d78d416c3c7cfdf5362fbe0d0d25b82fed75d0d29e18d7fc30f"}, + {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:54311eb54f3a0c45efb9ed0d0a8f43d1bc6060d773f6973efd90037a51cd0a3f"}, + {file = "aiohttp-3.9.1-cp312-cp312-win32.whl", hash = "sha256:85c3e3c9cb1d480e0b9a64c658cd66b3cfb8e721636ab8b0e746e2d79a7a9eed"}, + {file = "aiohttp-3.9.1-cp312-cp312-win_amd64.whl", hash = "sha256:11cb254e397a82efb1805d12561e80124928e04e9c4483587ce7390b3866d213"}, + {file = "aiohttp-3.9.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8a22a34bc594d9d24621091d1b91511001a7eea91d6652ea495ce06e27381f70"}, + {file = "aiohttp-3.9.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:598db66eaf2e04aa0c8900a63b0101fdc5e6b8a7ddd805c56d86efb54eb66672"}, + {file = "aiohttp-3.9.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2c9376e2b09895c8ca8b95362283365eb5c03bdc8428ade80a864160605715f1"}, + {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41473de252e1797c2d2293804e389a6d6986ef37cbb4a25208de537ae32141dd"}, + {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9c5857612c9813796960c00767645cb5da815af16dafb32d70c72a8390bbf690"}, + {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ffcd828e37dc219a72c9012ec44ad2e7e3066bec6ff3aaa19e7d435dbf4032ca"}, + {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:219a16763dc0294842188ac8a12262b5671817042b35d45e44fd0a697d8c8361"}, + {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f694dc8a6a3112059258a725a4ebe9acac5fe62f11c77ac4dcf896edfa78ca28"}, + {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:bcc0ea8d5b74a41b621ad4a13d96c36079c81628ccc0b30cfb1603e3dfa3a014"}, + {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:90ec72d231169b4b8d6085be13023ece8fa9b1bb495e4398d847e25218e0f431"}, + {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:cf2a0ac0615842b849f40c4d7f304986a242f1e68286dbf3bd7a835e4f83acfd"}, + {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:0e49b08eafa4f5707ecfb321ab9592717a319e37938e301d462f79b4e860c32a"}, + {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2c59e0076ea31c08553e868cec02d22191c086f00b44610f8ab7363a11a5d9d8"}, + {file = "aiohttp-3.9.1-cp38-cp38-win32.whl", hash = "sha256:4831df72b053b1eed31eb00a2e1aff6896fb4485301d4ccb208cac264b648db4"}, + {file = "aiohttp-3.9.1-cp38-cp38-win_amd64.whl", hash = "sha256:3135713c5562731ee18f58d3ad1bf41e1d8883eb68b363f2ffde5b2ea4b84cc7"}, + {file = "aiohttp-3.9.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:cfeadf42840c1e870dc2042a232a8748e75a36b52d78968cda6736de55582766"}, + {file = "aiohttp-3.9.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:70907533db712f7aa791effb38efa96f044ce3d4e850e2d7691abd759f4f0ae0"}, + {file = "aiohttp-3.9.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cdefe289681507187e375a5064c7599f52c40343a8701761c802c1853a504558"}, + {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7481f581251bb5558ba9f635db70908819caa221fc79ee52a7f58392778c636"}, + {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:49f0c1b3c2842556e5de35f122fc0f0b721334ceb6e78c3719693364d4af8499"}, + {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0d406b01a9f5a7e232d1b0d161b40c05275ffbcbd772dc18c1d5a570961a1ca4"}, + {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d8e4450e7fe24d86e86b23cc209e0023177b6d59502e33807b732d2deb6975f"}, + {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c0266cd6f005e99f3f51e583012de2778e65af6b73860038b968a0a8888487a"}, + {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab221850108a4a063c5b8a70f00dd7a1975e5a1713f87f4ab26a46e5feac5a0e"}, + {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c88a15f272a0ad3d7773cf3a37cc7b7d077cbfc8e331675cf1346e849d97a4e5"}, + {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:237533179d9747080bcaad4d02083ce295c0d2eab3e9e8ce103411a4312991a0"}, + {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:02ab6006ec3c3463b528374c4cdce86434e7b89ad355e7bf29e2f16b46c7dd6f"}, + {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04fa38875e53eb7e354ece1607b1d2fdee2d175ea4e4d745f6ec9f751fe20c7c"}, + {file = "aiohttp-3.9.1-cp39-cp39-win32.whl", hash = "sha256:82eefaf1a996060602f3cc1112d93ba8b201dbf5d8fd9611227de2003dddb3b7"}, + {file = "aiohttp-3.9.1-cp39-cp39-win_amd64.whl", hash = "sha256:9b05d33ff8e6b269e30a7957bd3244ffbce2a7a35a81b81c382629b80af1a8bf"}, + {file = "aiohttp-3.9.1.tar.gz", hash = "sha256:8fc49a87ac269d4529da45871e2ffb6874e87779c3d0e2ccd813c0899221239d"}, +] + +[package.dependencies] +aiosignal = ">=1.1.2" +attrs = ">=17.3.0" +frozenlist = ">=1.1.1" +multidict = ">=4.5,<7.0" +yarl = ">=1.0,<2.0" + +[package.extras] +speedups = ["Brotli", "aiodns", "brotlicffi"] + +[[package]] +name = "aiosignal" +version = "1.3.1" +description = "aiosignal: a list of registered asynchronous callbacks" +optional = false +python-versions = ">=3.7" +files = [ + {file = "aiosignal-1.3.1-py3-none-any.whl", hash = "sha256:f8376fb07dd1e86a584e4fcdec80b36b7f81aac666ebc724e2c090300dd83b17"}, + {file = "aiosignal-1.3.1.tar.gz", hash = "sha256:54cd96e15e1649b75d6c87526a6ff0b6c1b0dd3459f43d9ca11d48c339b68cfc"}, +] + +[package.dependencies] +frozenlist = ">=1.1.0" + +[[package]] +name = "attrs" +version = "23.2.0" +description = "Classes Without Boilerplate" +optional = false +python-versions = ">=3.7" +files = [ + {file = "attrs-23.2.0-py3-none-any.whl", hash = "sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1"}, + {file = "attrs-23.2.0.tar.gz", hash = "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30"}, +] + +[package.extras] +cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] +dev = ["attrs[tests]", "pre-commit"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] +tests = ["attrs[tests-no-zope]", "zope-interface"] +tests-mypy = ["mypy (>=1.6)", "pytest-mypy-plugins"] +tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist[psutil]"] [[package]] name = "cachetools" @@ -132,6 +260,26 @@ files = [ {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, ] +[[package]] +name = "discord-py" +version = "2.3.2" +description = "A Python wrapper for the Discord API" +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "discord.py-2.3.2-py3-none-any.whl", hash = "sha256:9da4679fc3cb10c64b388284700dc998663e0e57328283bbfcfc2525ec5960a6"}, + {file = "discord.py-2.3.2.tar.gz", hash = "sha256:4560f70f2eddba7e83370ecebd237ac09fbb4980dc66507482b0c0e5b8f76b9c"}, +] + +[package.dependencies] +aiohttp = ">=3.7.4,<4" + +[package.extras] +docs = ["sphinx (==4.4.0)", "sphinxcontrib-trio (==1.1.2)", "sphinxcontrib-websupport", "typing-extensions (>=4.3,<5)"] +speed = ["Brotli", "aiodns (>=1.1)", "cchardet (==2.1.7)", "orjson (>=3.5.4)"] +test = ["coverage[toml]", "pytest", "pytest-asyncio", "pytest-cov", "pytest-mock", "typing-extensions (>=4.3,<5)"] +voice = ["PyNaCl (>=1.3.0,<1.6)"] + [[package]] name = "distlib" version = "0.3.8" @@ -159,6 +307,92 @@ docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1 testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"] typing = ["typing-extensions (>=4.8)"] +[[package]] +name = "frozenlist" +version = "1.4.1" +description = "A list-like structure which implements collections.abc.MutableSequence" +optional = false +python-versions = ">=3.8" +files = [ + {file = "frozenlist-1.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f9aa1878d1083b276b0196f2dfbe00c9b7e752475ed3b682025ff20c1c1f51ac"}, + {file = "frozenlist-1.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:29acab3f66f0f24674b7dc4736477bcd4bc3ad4b896f5f45379a67bce8b96868"}, + {file = "frozenlist-1.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:74fb4bee6880b529a0c6560885fce4dc95936920f9f20f53d99a213f7bf66776"}, + {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:590344787a90ae57d62511dd7c736ed56b428f04cd8c161fcc5e7232c130c69a"}, + {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:068b63f23b17df8569b7fdca5517edef76171cf3897eb68beb01341131fbd2ad"}, + {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c849d495bf5154cd8da18a9eb15db127d4dba2968d88831aff6f0331ea9bd4c"}, + {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9750cc7fe1ae3b1611bb8cfc3f9ec11d532244235d75901fb6b8e42ce9229dfe"}, + {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9b2de4cf0cdd5bd2dee4c4f63a653c61d2408055ab77b151c1957f221cabf2a"}, + {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0633c8d5337cb5c77acbccc6357ac49a1770b8c487e5b3505c57b949b4b82e98"}, + {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:27657df69e8801be6c3638054e202a135c7f299267f1a55ed3a598934f6c0d75"}, + {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:f9a3ea26252bd92f570600098783d1371354d89d5f6b7dfd87359d669f2109b5"}, + {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:4f57dab5fe3407b6c0c1cc907ac98e8a189f9e418f3b6e54d65a718aaafe3950"}, + {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e02a0e11cf6597299b9f3bbd3f93d79217cb90cfd1411aec33848b13f5c656cc"}, + {file = "frozenlist-1.4.1-cp310-cp310-win32.whl", hash = "sha256:a828c57f00f729620a442881cc60e57cfcec6842ba38e1b19fd3e47ac0ff8dc1"}, + {file = "frozenlist-1.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:f56e2333dda1fe0f909e7cc59f021eba0d2307bc6f012a1ccf2beca6ba362439"}, + {file = "frozenlist-1.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a0cb6f11204443f27a1628b0e460f37fb30f624be6051d490fa7d7e26d4af3d0"}, + {file = "frozenlist-1.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b46c8ae3a8f1f41a0d2ef350c0b6e65822d80772fe46b653ab6b6274f61d4a49"}, + {file = "frozenlist-1.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fde5bd59ab5357e3853313127f4d3565fc7dad314a74d7b5d43c22c6a5ed2ced"}, + {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:722e1124aec435320ae01ee3ac7bec11a5d47f25d0ed6328f2273d287bc3abb0"}, + {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2471c201b70d58a0f0c1f91261542a03d9a5e088ed3dc6c160d614c01649c106"}, + {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c757a9dd70d72b076d6f68efdbb9bc943665ae954dad2801b874c8c69e185068"}, + {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f146e0911cb2f1da549fc58fc7bcd2b836a44b79ef871980d605ec392ff6b0d2"}, + {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f9c515e7914626b2a2e1e311794b4c35720a0be87af52b79ff8e1429fc25f19"}, + {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c302220494f5c1ebeb0912ea782bcd5e2f8308037b3c7553fad0e48ebad6ad82"}, + {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:442acde1e068288a4ba7acfe05f5f343e19fac87bfc96d89eb886b0363e977ec"}, + {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:1b280e6507ea8a4fa0c0a7150b4e526a8d113989e28eaaef946cc77ffd7efc0a"}, + {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:fe1a06da377e3a1062ae5fe0926e12b84eceb8a50b350ddca72dc85015873f74"}, + {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:db9e724bebd621d9beca794f2a4ff1d26eed5965b004a97f1f1685a173b869c2"}, + {file = "frozenlist-1.4.1-cp311-cp311-win32.whl", hash = "sha256:e774d53b1a477a67838a904131c4b0eef6b3d8a651f8b138b04f748fccfefe17"}, + {file = "frozenlist-1.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:fb3c2db03683b5767dedb5769b8a40ebb47d6f7f45b1b3e3b4b51ec8ad9d9825"}, + {file = "frozenlist-1.4.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:1979bc0aeb89b33b588c51c54ab0161791149f2461ea7c7c946d95d5f93b56ae"}, + {file = "frozenlist-1.4.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:cc7b01b3754ea68a62bd77ce6020afaffb44a590c2289089289363472d13aedb"}, + {file = "frozenlist-1.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c9c92be9fd329ac801cc420e08452b70e7aeab94ea4233a4804f0915c14eba9b"}, + {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c3894db91f5a489fc8fa6a9991820f368f0b3cbdb9cd8849547ccfab3392d86"}, + {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ba60bb19387e13597fb059f32cd4d59445d7b18b69a745b8f8e5db0346f33480"}, + {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8aefbba5f69d42246543407ed2461db31006b0f76c4e32dfd6f42215a2c41d09"}, + {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780d3a35680ced9ce682fbcf4cb9c2bad3136eeff760ab33707b71db84664e3a"}, + {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9acbb16f06fe7f52f441bb6f413ebae6c37baa6ef9edd49cdd567216da8600cd"}, + {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:23b701e65c7b36e4bf15546a89279bd4d8675faabc287d06bbcfac7d3c33e1e6"}, + {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:3e0153a805a98f5ada7e09826255ba99fb4f7524bb81bf6b47fb702666484ae1"}, + {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:dd9b1baec094d91bf36ec729445f7769d0d0cf6b64d04d86e45baf89e2b9059b"}, + {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:1a4471094e146b6790f61b98616ab8e44f72661879cc63fa1049d13ef711e71e"}, + {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5667ed53d68d91920defdf4035d1cdaa3c3121dc0b113255124bcfada1cfa1b8"}, + {file = "frozenlist-1.4.1-cp312-cp312-win32.whl", hash = "sha256:beee944ae828747fd7cb216a70f120767fc9f4f00bacae8543c14a6831673f89"}, + {file = "frozenlist-1.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:64536573d0a2cb6e625cf309984e2d873979709f2cf22839bf2d61790b448ad5"}, + {file = "frozenlist-1.4.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:20b51fa3f588ff2fe658663db52a41a4f7aa6c04f6201449c6c7c476bd255c0d"}, + {file = "frozenlist-1.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:410478a0c562d1a5bcc2f7ea448359fcb050ed48b3c6f6f4f18c313a9bdb1826"}, + {file = "frozenlist-1.4.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c6321c9efe29975232da3bd0af0ad216800a47e93d763ce64f291917a381b8eb"}, + {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48f6a4533887e189dae092f1cf981f2e3885175f7a0f33c91fb5b7b682b6bab6"}, + {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6eb73fa5426ea69ee0e012fb59cdc76a15b1283d6e32e4f8dc4482ec67d1194d"}, + {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fbeb989b5cc29e8daf7f976b421c220f1b8c731cbf22b9130d8815418ea45887"}, + {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:32453c1de775c889eb4e22f1197fe3bdfe457d16476ea407472b9442e6295f7a"}, + {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:693945278a31f2086d9bf3df0fe8254bbeaef1fe71e1351c3bd730aa7d31c41b"}, + {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:1d0ce09d36d53bbbe566fe296965b23b961764c0bcf3ce2fa45f463745c04701"}, + {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3a670dc61eb0d0eb7080890c13de3066790f9049b47b0de04007090807c776b0"}, + {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:dca69045298ce5c11fd539682cff879cc1e664c245d1c64da929813e54241d11"}, + {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a06339f38e9ed3a64e4c4e43aec7f59084033647f908e4259d279a52d3757d09"}, + {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b7f2f9f912dca3934c1baec2e4585a674ef16fe00218d833856408c48d5beee7"}, + {file = "frozenlist-1.4.1-cp38-cp38-win32.whl", hash = "sha256:e7004be74cbb7d9f34553a5ce5fb08be14fb33bc86f332fb71cbe5216362a497"}, + {file = "frozenlist-1.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:5a7d70357e7cee13f470c7883a063aae5fe209a493c57d86eb7f5a6f910fae09"}, + {file = "frozenlist-1.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bfa4a17e17ce9abf47a74ae02f32d014c5e9404b6d9ac7f729e01562bbee601e"}, + {file = "frozenlist-1.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b7e3ed87d4138356775346e6845cccbe66cd9e207f3cd11d2f0b9fd13681359d"}, + {file = "frozenlist-1.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c99169d4ff810155ca50b4da3b075cbde79752443117d89429595c2e8e37fed8"}, + {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edb678da49d9f72c9f6c609fbe41a5dfb9a9282f9e6a2253d5a91e0fc382d7c0"}, + {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6db4667b187a6742b33afbbaf05a7bc551ffcf1ced0000a571aedbb4aa42fc7b"}, + {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55fdc093b5a3cb41d420884cdaf37a1e74c3c37a31f46e66286d9145d2063bd0"}, + {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82e8211d69a4f4bc360ea22cd6555f8e61a1bd211d1d5d39d3d228b48c83a897"}, + {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89aa2c2eeb20957be2d950b85974b30a01a762f3308cd02bb15e1ad632e22dc7"}, + {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9d3e0c25a2350080e9319724dede4f31f43a6c9779be48021a7f4ebde8b2d742"}, + {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7268252af60904bf52c26173cbadc3a071cece75f873705419c8681f24d3edea"}, + {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:0c250a29735d4f15321007fb02865f0e6b6a41a6b88f1f523ca1596ab5f50bd5"}, + {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:96ec70beabbd3b10e8bfe52616a13561e58fe84c0101dd031dc78f250d5128b9"}, + {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:23b2d7679b73fe0e5a4560b672a39f98dfc6f60df63823b0a9970525325b95f6"}, + {file = "frozenlist-1.4.1-cp39-cp39-win32.whl", hash = "sha256:a7496bfe1da7fb1a4e1cc23bb67c58fab69311cc7d32b5a99c2007b4b2a0e932"}, + {file = "frozenlist-1.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:e6a20a581f9ce92d389a8c7d7c3dd47c81fd5d6e655c8dddf341e14aa48659d0"}, + {file = "frozenlist-1.4.1-py3-none-any.whl", hash = "sha256:04ced3e6a46b4cfffe20f9ae482818e34eba9b5fb0ce4056e4cc9b6e212d09b7"}, + {file = "frozenlist-1.4.1.tar.gz", hash = "sha256:c037a86e8513059a2613aaba4d817bb90b9d9b6b69aace3ce9c877e8c8ed402b"}, +] + [[package]] name = "google-api-core" version = "2.15.0" @@ -185,13 +419,13 @@ grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] [[package]] name = "google-auth" -version = "2.26.2" +version = "2.27.0" description = "Google Authentication Library" optional = false python-versions = ">=3.7" files = [ - {file = "google-auth-2.26.2.tar.gz", hash = "sha256:97327dbbf58cccb58fc5a1712bba403ae76668e64814eb30f7316f7e27126b81"}, - {file = "google_auth-2.26.2-py2.py3-none-any.whl", hash = "sha256:3f445c8ce9b61ed6459aad86d8ccdba4a9afed841b2d1451a11ef4db08957424"}, + {file = "google-auth-2.27.0.tar.gz", hash = "sha256:e863a56ccc2d8efa83df7a80272601e43487fa9a728a376205c86c26aaefa821"}, + {file = "google_auth-2.27.0-py2.py3-none-any.whl", hash = "sha256:8e4bad367015430ff253fe49d500fdc3396c1a434db5740828c728e45bcce245"}, ] [package.dependencies] @@ -452,6 +686,89 @@ files = [ {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"}, ] +[[package]] +name = "multidict" +version = "6.0.4" +description = "multidict implementation" +optional = false +python-versions = ">=3.7" +files = [ + {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b1a97283e0c85772d613878028fec909f003993e1007eafa715b24b377cb9b8"}, + {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eeb6dcc05e911516ae3d1f207d4b0520d07f54484c49dfc294d6e7d63b734171"}, + {file = "multidict-6.0.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d6d635d5209b82a3492508cf5b365f3446afb65ae7ebd755e70e18f287b0adf7"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c048099e4c9e9d615545e2001d3d8a4380bd403e1a0578734e0d31703d1b0c0b"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ea20853c6dbbb53ed34cb4d080382169b6f4554d394015f1bef35e881bf83547"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:16d232d4e5396c2efbbf4f6d4df89bfa905eb0d4dc5b3549d872ab898451f569"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36c63aaa167f6c6b04ef2c85704e93af16c11d20de1d133e39de6a0e84582a93"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:64bdf1086b6043bf519869678f5f2757f473dee970d7abf6da91ec00acb9cb98"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:43644e38f42e3af682690876cff722d301ac585c5b9e1eacc013b7a3f7b696a0"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7582a1d1030e15422262de9f58711774e02fa80df0d1578995c76214f6954988"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ddff9c4e225a63a5afab9dd15590432c22e8057e1a9a13d28ed128ecf047bbdc"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ee2a1ece51b9b9e7752e742cfb661d2a29e7bcdba2d27e66e28a99f1890e4fa0"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a2e4369eb3d47d2034032a26c7a80fcb21a2cb22e1173d761a162f11e562caa5"}, + {file = "multidict-6.0.4-cp310-cp310-win32.whl", hash = "sha256:574b7eae1ab267e5f8285f0fe881f17efe4b98c39a40858247720935b893bba8"}, + {file = "multidict-6.0.4-cp310-cp310-win_amd64.whl", hash = "sha256:4dcbb0906e38440fa3e325df2359ac6cb043df8e58c965bb45f4e406ecb162cc"}, + {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0dfad7a5a1e39c53ed00d2dd0c2e36aed4650936dc18fd9a1826a5ae1cad6f03"}, + {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:64da238a09d6039e3bd39bb3aee9c21a5e34f28bfa5aa22518581f910ff94af3"}, + {file = "multidict-6.0.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ff959bee35038c4624250473988b24f846cbeb2c6639de3602c073f10410ceba"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01a3a55bd90018c9c080fbb0b9f4891db37d148a0a18722b42f94694f8b6d4c9"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c5cb09abb18c1ea940fb99360ea0396f34d46566f157122c92dfa069d3e0e982"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:666daae833559deb2d609afa4490b85830ab0dfca811a98b70a205621a6109fe"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11bdf3f5e1518b24530b8241529d2050014c884cf18b6fc69c0c2b30ca248710"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d18748f2d30f94f498e852c67d61261c643b349b9d2a581131725595c45ec6c"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:458f37be2d9e4c95e2d8866a851663cbc76e865b78395090786f6cd9b3bbf4f4"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:b1a2eeedcead3a41694130495593a559a668f382eee0727352b9a41e1c45759a"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7d6ae9d593ef8641544d6263c7fa6408cc90370c8cb2bbb65f8d43e5b0351d9c"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5979b5632c3e3534e42ca6ff856bb24b2e3071b37861c2c727ce220d80eee9ed"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dcfe792765fab89c365123c81046ad4103fcabbc4f56d1c1997e6715e8015461"}, + {file = "multidict-6.0.4-cp311-cp311-win32.whl", hash = "sha256:3601a3cece3819534b11d4efc1eb76047488fddd0c85a3948099d5da4d504636"}, + {file = "multidict-6.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:81a4f0b34bd92df3da93315c6a59034df95866014ac08535fc819f043bfd51f0"}, + {file = "multidict-6.0.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:67040058f37a2a51ed8ea8f6b0e6ee5bd78ca67f169ce6122f3e2ec80dfe9b78"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:853888594621e6604c978ce2a0444a1e6e70c8d253ab65ba11657659dcc9100f"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:39ff62e7d0f26c248b15e364517a72932a611a9b75f35b45be078d81bdb86603"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af048912e045a2dc732847d33821a9d84ba553f5c5f028adbd364dd4765092ac"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e8b901e607795ec06c9e42530788c45ac21ef3aaa11dbd0c69de543bfb79a9"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62501642008a8b9871ddfccbf83e4222cf8ac0d5aeedf73da36153ef2ec222d2"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:99b76c052e9f1bc0721f7541e5e8c05db3941eb9ebe7b8553c625ef88d6eefde"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:509eac6cf09c794aa27bcacfd4d62c885cce62bef7b2c3e8b2e49d365b5003fe"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:21a12c4eb6ddc9952c415f24eef97e3e55ba3af61f67c7bc388dcdec1404a067"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:5cad9430ab3e2e4fa4a2ef4450f548768400a2ac635841bc2a56a2052cdbeb87"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ab55edc2e84460694295f401215f4a58597f8f7c9466faec545093045476327d"}, + {file = "multidict-6.0.4-cp37-cp37m-win32.whl", hash = "sha256:5a4dcf02b908c3b8b17a45fb0f15b695bf117a67b76b7ad18b73cf8e92608775"}, + {file = "multidict-6.0.4-cp37-cp37m-win_amd64.whl", hash = "sha256:6ed5f161328b7df384d71b07317f4d8656434e34591f20552c7bcef27b0ab88e"}, + {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5fc1b16f586f049820c5c5b17bb4ee7583092fa0d1c4e28b5239181ff9532e0c"}, + {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1502e24330eb681bdaa3eb70d6358e818e8e8f908a22a1851dfd4e15bc2f8161"}, + {file = "multidict-6.0.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b692f419760c0e65d060959df05f2a531945af31fda0c8a3b3195d4efd06de11"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45e1ecb0379bfaab5eef059f50115b54571acfbe422a14f668fc8c27ba410e7e"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ddd3915998d93fbcd2566ddf9cf62cdb35c9e093075f862935573d265cf8f65d"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:59d43b61c59d82f2effb39a93c48b845efe23a3852d201ed2d24ba830d0b4cf2"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc8e1d0c705233c5dd0c5e6460fbad7827d5d36f310a0fadfd45cc3029762258"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6aa0418fcc838522256761b3415822626f866758ee0bc6632c9486b179d0b52"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6748717bb10339c4760c1e63da040f5f29f5ed6e59d76daee30305894069a660"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4d1a3d7ef5e96b1c9e92f973e43aa5e5b96c659c9bc3124acbbd81b0b9c8a951"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4372381634485bec7e46718edc71528024fcdc6f835baefe517b34a33c731d60"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:fc35cb4676846ef752816d5be2193a1e8367b4c1397b74a565a9d0389c433a1d"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:4b9d9e4e2b37daddb5c23ea33a3417901fa7c7b3dee2d855f63ee67a0b21e5b1"}, + {file = "multidict-6.0.4-cp38-cp38-win32.whl", hash = "sha256:e41b7e2b59679edfa309e8db64fdf22399eec4b0b24694e1b2104fb789207779"}, + {file = "multidict-6.0.4-cp38-cp38-win_amd64.whl", hash = "sha256:d6c254ba6e45d8e72739281ebc46ea5eb5f101234f3ce171f0e9f5cc86991480"}, + {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:16ab77bbeb596e14212e7bab8429f24c1579234a3a462105cda4a66904998664"}, + {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc779e9e6f7fda81b3f9aa58e3a6091d49ad528b11ed19f6621408806204ad35"}, + {file = "multidict-6.0.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ceef517eca3e03c1cceb22030a3e39cb399ac86bff4e426d4fc6ae49052cc60"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:281af09f488903fde97923c7744bb001a9b23b039a909460d0f14edc7bf59706"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:52f2dffc8acaba9a2f27174c41c9e57f60b907bb9f096b36b1a1f3be71c6284d"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b41156839806aecb3641f3208c0dafd3ac7775b9c4c422d82ee2a45c34ba81ca"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5e3fc56f88cc98ef8139255cf8cd63eb2c586531e43310ff859d6bb3a6b51f1"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8316a77808c501004802f9beebde51c9f857054a0c871bd6da8280e718444449"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f70b98cd94886b49d91170ef23ec5c0e8ebb6f242d734ed7ed677b24d50c82cf"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bf6774e60d67a9efe02b3616fee22441d86fab4c6d335f9d2051d19d90a40063"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:e69924bfcdda39b722ef4d9aa762b2dd38e4632b3641b1d9a57ca9cd18f2f83a"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:6b181d8c23da913d4ff585afd1155a0e1194c0b50c54fcfe286f70cdaf2b7176"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:52509b5be062d9eafc8170e53026fbc54cf3b32759a23d07fd935fb04fc22d95"}, + {file = "multidict-6.0.4-cp39-cp39-win32.whl", hash = "sha256:27c523fbfbdfd19c6867af7346332b62b586eed663887392cff78d614f9ec313"}, + {file = "multidict-6.0.4-cp39-cp39-win_amd64.whl", hash = "sha256:33029f5734336aa0d4c0384525da0387ef89148dc7191aae00ca5fb23d7aafc2"}, + {file = "multidict-6.0.4.tar.gz", hash = "sha256:3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49"}, +] + [[package]] name = "nodeenv" version = "1.8.0" @@ -587,7 +904,6 @@ files = [ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, - {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, @@ -595,15 +911,8 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, - {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, - {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, - {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, - {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, @@ -620,7 +929,6 @@ files = [ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, - {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, @@ -628,7 +936,6 @@ files = [ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, - {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, @@ -747,7 +1054,110 @@ platformdirs = ">=3.9.1,<5" docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] +[[package]] +name = "yarl" +version = "1.9.4" +description = "Yet another URL library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "yarl-1.9.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a8c1df72eb746f4136fe9a2e72b0c9dc1da1cbd23b5372f94b5820ff8ae30e0e"}, + {file = "yarl-1.9.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a3a6ed1d525bfb91b3fc9b690c5a21bb52de28c018530ad85093cc488bee2dd2"}, + {file = "yarl-1.9.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c38c9ddb6103ceae4e4498f9c08fac9b590c5c71b0370f98714768e22ac6fa66"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9e09c9d74f4566e905a0b8fa668c58109f7624db96a2171f21747abc7524234"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8477c1ee4bd47c57d49621a062121c3023609f7a13b8a46953eb6c9716ca392"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5ff2c858f5f6a42c2a8e751100f237c5e869cbde669a724f2062d4c4ef93551"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:357495293086c5b6d34ca9616a43d329317feab7917518bc97a08f9e55648455"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54525ae423d7b7a8ee81ba189f131054defdb122cde31ff17477951464c1691c"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:801e9264d19643548651b9db361ce3287176671fb0117f96b5ac0ee1c3530d53"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e516dc8baf7b380e6c1c26792610230f37147bb754d6426462ab115a02944385"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:7d5aaac37d19b2904bb9dfe12cdb08c8443e7ba7d2852894ad448d4b8f442863"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:54beabb809ffcacbd9d28ac57b0db46e42a6e341a030293fb3185c409e626b8b"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bac8d525a8dbc2a1507ec731d2867025d11ceadcb4dd421423a5d42c56818541"}, + {file = "yarl-1.9.4-cp310-cp310-win32.whl", hash = "sha256:7855426dfbddac81896b6e533ebefc0af2f132d4a47340cee6d22cac7190022d"}, + {file = "yarl-1.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:848cd2a1df56ddbffeb375535fb62c9d1645dde33ca4d51341378b3f5954429b"}, + {file = "yarl-1.9.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:35a2b9396879ce32754bd457d31a51ff0a9d426fd9e0e3c33394bf4b9036b099"}, + {file = "yarl-1.9.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c7d56b293cc071e82532f70adcbd8b61909eec973ae9d2d1f9b233f3d943f2c"}, + {file = "yarl-1.9.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d8a1c6c0be645c745a081c192e747c5de06e944a0d21245f4cf7c05e457c36e0"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b3c1ffe10069f655ea2d731808e76e0f452fc6c749bea04781daf18e6039525"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:549d19c84c55d11687ddbd47eeb348a89df9cb30e1993f1b128f4685cd0ebbf8"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7409f968456111140c1c95301cadf071bd30a81cbd7ab829169fb9e3d72eae9"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e23a6d84d9d1738dbc6e38167776107e63307dfc8ad108e580548d1f2c587f42"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d8b889777de69897406c9fb0b76cdf2fd0f31267861ae7501d93003d55f54fbe"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:03caa9507d3d3c83bca08650678e25364e1843b484f19986a527630ca376ecce"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4e9035df8d0880b2f1c7f5031f33f69e071dfe72ee9310cfc76f7b605958ceb9"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:c0ec0ed476f77db9fb29bca17f0a8fcc7bc97ad4c6c1d8959c507decb22e8572"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:ee04010f26d5102399bd17f8df8bc38dc7ccd7701dc77f4a68c5b8d733406958"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:49a180c2e0743d5d6e0b4d1a9e5f633c62eca3f8a86ba5dd3c471060e352ca98"}, + {file = "yarl-1.9.4-cp311-cp311-win32.whl", hash = "sha256:81eb57278deb6098a5b62e88ad8281b2ba09f2f1147c4767522353eaa6260b31"}, + {file = "yarl-1.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:d1d2532b340b692880261c15aee4dc94dd22ca5d61b9db9a8a361953d36410b1"}, + {file = "yarl-1.9.4-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0d2454f0aef65ea81037759be5ca9947539667eecebca092733b2eb43c965a81"}, + {file = "yarl-1.9.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:44d8ffbb9c06e5a7f529f38f53eda23e50d1ed33c6c869e01481d3fafa6b8142"}, + {file = "yarl-1.9.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:aaaea1e536f98754a6e5c56091baa1b6ce2f2700cc4a00b0d49eca8dea471074"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3777ce5536d17989c91696db1d459574e9a9bd37660ea7ee4d3344579bb6f129"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fc5fc1eeb029757349ad26bbc5880557389a03fa6ada41703db5e068881e5f2"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea65804b5dc88dacd4a40279af0cdadcfe74b3e5b4c897aa0d81cf86927fee78"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa102d6d280a5455ad6a0f9e6d769989638718e938a6a0a2ff3f4a7ff8c62cc4"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09efe4615ada057ba2d30df871d2f668af661e971dfeedf0c159927d48bbeff0"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:008d3e808d03ef28542372d01057fd09168419cdc8f848efe2804f894ae03e51"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:6f5cb257bc2ec58f437da2b37a8cd48f666db96d47b8a3115c29f316313654ff"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:992f18e0ea248ee03b5a6e8b3b4738850ae7dbb172cc41c966462801cbf62cf7"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:0e9d124c191d5b881060a9e5060627694c3bdd1fe24c5eecc8d5d7d0eb6faabc"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3986b6f41ad22988e53d5778f91855dc0399b043fc8946d4f2e68af22ee9ff10"}, + {file = "yarl-1.9.4-cp312-cp312-win32.whl", hash = "sha256:4b21516d181cd77ebd06ce160ef8cc2a5e9ad35fb1c5930882baff5ac865eee7"}, + {file = "yarl-1.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:a9bd00dc3bc395a662900f33f74feb3e757429e545d831eef5bb280252631984"}, + {file = "yarl-1.9.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:63b20738b5aac74e239622d2fe30df4fca4942a86e31bf47a81a0e94c14df94f"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7d7f7de27b8944f1fee2c26a88b4dabc2409d2fea7a9ed3df79b67277644e17"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c74018551e31269d56fab81a728f683667e7c28c04e807ba08f8c9e3bba32f14"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ca06675212f94e7a610e85ca36948bb8fc023e458dd6c63ef71abfd482481aa5"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5aef935237d60a51a62b86249839b51345f47564208c6ee615ed2a40878dccdd"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b134fd795e2322b7684155b7855cc99409d10b2e408056db2b93b51a52accc7"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d25039a474c4c72a5ad4b52495056f843a7ff07b632c1b92ea9043a3d9950f6e"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f7d6b36dd2e029b6bcb8a13cf19664c7b8e19ab3a58e0fefbb5b8461447ed5ec"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:957b4774373cf6f709359e5c8c4a0af9f6d7875db657adb0feaf8d6cb3c3964c"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:d7eeb6d22331e2fd42fce928a81c697c9ee2d51400bd1a28803965883e13cead"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:6a962e04b8f91f8c4e5917e518d17958e3bdee71fd1d8b88cdce74dd0ebbf434"}, + {file = "yarl-1.9.4-cp37-cp37m-win32.whl", hash = "sha256:f3bc6af6e2b8f92eced34ef6a96ffb248e863af20ef4fde9448cc8c9b858b749"}, + {file = "yarl-1.9.4-cp37-cp37m-win_amd64.whl", hash = "sha256:ad4d7a90a92e528aadf4965d685c17dacff3df282db1121136c382dc0b6014d2"}, + {file = "yarl-1.9.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ec61d826d80fc293ed46c9dd26995921e3a82146feacd952ef0757236fc137be"}, + {file = "yarl-1.9.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8be9e837ea9113676e5754b43b940b50cce76d9ed7d2461df1af39a8ee674d9f"}, + {file = "yarl-1.9.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:bef596fdaa8f26e3d66af846bbe77057237cb6e8efff8cd7cc8dff9a62278bbf"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d47552b6e52c3319fede1b60b3de120fe83bde9b7bddad11a69fb0af7db32f1"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84fc30f71689d7fc9168b92788abc977dc8cefa806909565fc2951d02f6b7d57"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4aa9741085f635934f3a2583e16fcf62ba835719a8b2b28fb2917bb0537c1dfa"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:206a55215e6d05dbc6c98ce598a59e6fbd0c493e2de4ea6cc2f4934d5a18d130"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07574b007ee20e5c375a8fe4a0789fad26db905f9813be0f9fef5a68080de559"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5a2e2433eb9344a163aced6a5f6c9222c0786e5a9e9cac2c89f0b28433f56e23"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6ad6d10ed9b67a382b45f29ea028f92d25bc0bc1daf6c5b801b90b5aa70fb9ec"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:6fe79f998a4052d79e1c30eeb7d6c1c1056ad33300f682465e1b4e9b5a188b78"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a825ec844298c791fd28ed14ed1bffc56a98d15b8c58a20e0e08c1f5f2bea1be"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8619d6915b3b0b34420cf9b2bb6d81ef59d984cb0fde7544e9ece32b4b3043c3"}, + {file = "yarl-1.9.4-cp38-cp38-win32.whl", hash = "sha256:686a0c2f85f83463272ddffd4deb5e591c98aac1897d65e92319f729c320eece"}, + {file = "yarl-1.9.4-cp38-cp38-win_amd64.whl", hash = "sha256:a00862fb23195b6b8322f7d781b0dc1d82cb3bcac346d1e38689370cc1cc398b"}, + {file = "yarl-1.9.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:604f31d97fa493083ea21bd9b92c419012531c4e17ea6da0f65cacdcf5d0bd27"}, + {file = "yarl-1.9.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8a854227cf581330ffa2c4824d96e52ee621dd571078a252c25e3a3b3d94a1b1"}, + {file = "yarl-1.9.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ba6f52cbc7809cd8d74604cce9c14868306ae4aa0282016b641c661f981a6e91"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a6327976c7c2f4ee6816eff196e25385ccc02cb81427952414a64811037bbc8b"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8397a3817d7dcdd14bb266283cd1d6fc7264a48c186b986f32e86d86d35fbac5"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0381b4ce23ff92f8170080c97678040fc5b08da85e9e292292aba67fdac6c34"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23d32a2594cb5d565d358a92e151315d1b2268bc10f4610d098f96b147370136"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ddb2a5c08a4eaaba605340fdee8fc08e406c56617566d9643ad8bf6852778fc7"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:26a1dc6285e03f3cc9e839a2da83bcbf31dcb0d004c72d0730e755b33466c30e"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:18580f672e44ce1238b82f7fb87d727c4a131f3a9d33a5e0e82b793362bf18b4"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:29e0f83f37610f173eb7e7b5562dd71467993495e568e708d99e9d1944f561ec"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:1f23e4fe1e8794f74b6027d7cf19dc25f8b63af1483d91d595d4a07eca1fb26c"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:db8e58b9d79200c76956cefd14d5c90af54416ff5353c5bfd7cbe58818e26ef0"}, + {file = "yarl-1.9.4-cp39-cp39-win32.whl", hash = "sha256:c7224cab95645c7ab53791022ae77a4509472613e839dab722a72abe5a684575"}, + {file = "yarl-1.9.4-cp39-cp39-win_amd64.whl", hash = "sha256:824d6c50492add5da9374875ce72db7a0733b29c2394890aef23d533106e2b15"}, + {file = "yarl-1.9.4-py3-none-any.whl", hash = "sha256:928cecb0ef9d5a7946eb6ff58417ad2fe9375762382f1bf5c55e61645f2c43ad"}, + {file = "yarl-1.9.4.tar.gz", hash = "sha256:566db86717cf8080b99b58b083b773a908ae40f06681e87e589a976faf8246bf"}, +] + +[package.dependencies] +idna = ">=2.0" +multidict = ">=4.0" + [metadata] lock-version = "2.0" python-versions = "^3.11" -content-hash = "bba0501d3dbe1d645fa9d250fa7a97112af8025e907fdf895ec1305ddb3cb9b6" +content-hash = "2dd4c88fb67b6e1e63445e3b83760af9d4f572ea4db1368b81e83e30e9d2ca7b" diff --git a/monitor/pyproject.toml b/monitor/pyproject.toml index a36d93d..407d531 100644 --- a/monitor/pyproject.toml +++ b/monitor/pyproject.toml @@ -13,6 +13,7 @@ google-cloud-run = "^0.10.1" google-cloud-logging = "^3.9.0" google-cloud-monitoring = "^2.18.0" python-dotenv = "^1.0.1" +discord-py = "^2.3.2" [build-system] From ea249808ee0b365bcd5bf8a4e11a430deb2555ad Mon Sep 17 00:00:00 2001 From: peterxcli Date: Thu, 25 Jan 2024 14:38:47 +0800 Subject: [PATCH 38/44] refator: CloudRunManager set runner and monitor client default in init and move log.py to service folder --- monitor/service/cloudrun.py | 4 ++-- monitor/{sync_service => service}/log.py | 0 2 files changed, 2 insertions(+), 2 deletions(-) rename monitor/{sync_service => service}/log.py (100%) diff --git a/monitor/service/cloudrun.py b/monitor/service/cloudrun.py index 97b8d0b..eacfa7e 100644 --- a/monitor/service/cloudrun.py +++ b/monitor/service/cloudrun.py @@ -8,8 +8,8 @@ class CloudRunManager: def __init__( self, - run_client: run_v2.ServicesClient, - monitoring_client: monitoring_v3.MetricServiceClient, + run_client: run_v2.ServicesClient = run_v2.ServicesClient(), + monitoring_client: monitoring_v3.MetricServiceClient = monitoring_v3.MetricServiceClient(), project_id="tsmccareerhack2024-icsd-grp5", location="us-central1", ): diff --git a/monitor/sync_service/log.py b/monitor/service/log.py similarity index 100% rename from monitor/sync_service/log.py rename to monitor/service/log.py From 72a050efb7c6a693d3310acde46427628a9abe1b Mon Sep 17 00:00:00 2001 From: peterxcli Date: Thu, 25 Jan 2024 14:39:36 +0800 Subject: [PATCH 39/44] chore: add __init__.py in service --- monitor/service/__init__.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 monitor/service/__init__.py diff --git a/monitor/service/__init__.py b/monitor/service/__init__.py new file mode 100644 index 0000000..e69de29 From 3786548a074f0d1782e362d7caedc3fab24c3960 Mon Sep 17 00:00:00 2001 From: peterxcli Date: Thu, 25 Jan 2024 15:48:27 +0800 Subject: [PATCH 40/44] refactor: move poetry files to project root --- monitor/poetry.lock => poetry.lock | 1034 +++++++++++++++++++++- monitor/pyproject.toml => pyproject.toml | 6 +- 2 files changed, 1038 insertions(+), 2 deletions(-) rename monitor/poetry.lock => poetry.lock (53%) rename monitor/pyproject.toml => pyproject.toml (78%) diff --git a/monitor/poetry.lock b/poetry.lock similarity index 53% rename from monitor/poetry.lock rename to poetry.lock index 1c8cbff..8138761 100644 --- a/monitor/poetry.lock +++ b/poetry.lock @@ -109,6 +109,37 @@ files = [ [package.dependencies] frozenlist = ">=1.1.0" +[[package]] +name = "annotated-types" +version = "0.6.0" +description = "Reusable constraint types to use with typing.Annotated" +optional = false +python-versions = ">=3.8" +files = [ + {file = "annotated_types-0.6.0-py3-none-any.whl", hash = "sha256:0641064de18ba7a25dee8f96403ebc39113d0cb953a01429249d5c7564666a43"}, + {file = "annotated_types-0.6.0.tar.gz", hash = "sha256:563339e807e53ffd9c267e99fc6d9ea23eb8443c08f112651963e24e22f84a5d"}, +] + +[[package]] +name = "anyio" +version = "4.2.0" +description = "High level compatibility layer for multiple asynchronous event loop implementations" +optional = false +python-versions = ">=3.8" +files = [ + {file = "anyio-4.2.0-py3-none-any.whl", hash = "sha256:745843b39e829e108e518c489b31dc757de7d2131d53fac32bd8df268227bfee"}, + {file = "anyio-4.2.0.tar.gz", hash = "sha256:e1875bb4b4e2de1669f4bc7869b6d3f54231cdced71605e6e64c9be77e3be50f"}, +] + +[package.dependencies] +idna = ">=2.8" +sniffio = ">=1.1" + +[package.extras] +doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] +trio = ["trio (>=0.23)"] + [[package]] name = "attrs" version = "23.2.0" @@ -260,6 +291,21 @@ files = [ {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, ] +[[package]] +name = "dataclasses-json" +version = "0.6.3" +description = "Easily serialize dataclasses to and from JSON." +optional = false +python-versions = ">=3.7,<4.0" +files = [ + {file = "dataclasses_json-0.6.3-py3-none-any.whl", hash = "sha256:4aeb343357997396f6bca1acae64e486c3a723d8f5c76301888abeccf0c45176"}, + {file = "dataclasses_json-0.6.3.tar.gz", hash = "sha256:35cb40aae824736fdf959801356641836365219cfe14caeb115c39136f775d2a"}, +] + +[package.dependencies] +marshmallow = ">=3.18.0,<4.0.0" +typing-inspect = ">=0.4.0,<1" + [[package]] name = "discord-py" version = "2.3.2" @@ -440,6 +486,46 @@ pyopenssl = ["cryptography (>=38.0.3)", "pyopenssl (>=20.0.0)"] reauth = ["pyu2f (>=0.1.5)"] requests = ["requests (>=2.20.0,<3.0.0.dev0)"] +[[package]] +name = "google-cloud-aiplatform" +version = "1.39.0" +description = "Vertex AI API client library" +optional = false +python-versions = ">=3.8" +files = [ + {file = "google-cloud-aiplatform-1.39.0.tar.gz", hash = "sha256:62d6accbf9035895736910bc980f0b2a819d5841ae8bc0c981457cc16c49ecd1"}, + {file = "google_cloud_aiplatform-1.39.0-py2.py3-none-any.whl", hash = "sha256:d7b5c44fbb10d34c7941c5f7aadf7ff480c1469e37eac5b305bc9821fa49f7ee"}, +] + +[package.dependencies] +google-api-core = {version = ">=1.32.0,<2.0.dev0 || >=2.8.dev0,<3.0.0dev", extras = ["grpc"]} +google-cloud-bigquery = ">=1.15.0,<4.0.0dev" +google-cloud-resource-manager = ">=1.3.3,<3.0.0dev" +google-cloud-storage = ">=1.32.0,<3.0.0dev" +packaging = ">=14.3" +proto-plus = ">=1.22.0,<2.0.0dev" +protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev" +setuptools = {version = "*", markers = "python_version >= \"3.12\""} +shapely = "<3.0.0dev" + +[package.extras] +autologging = ["mlflow (>=1.27.0,<=2.1.1)"] +cloud-profiler = ["tensorboard-plugin-profile (>=2.4.0,<3.0.0dev)", "tensorflow (>=2.4.0,<3.0.0dev)", "werkzeug (>=2.0.0,<2.1.0dev)"] +datasets = ["pyarrow (>=10.0.1)", "pyarrow (>=3.0.0,<8.0dev)"] +endpoint = ["requests (>=2.28.1)"] +full = ["cloudpickle (<3.0)", "docker (>=5.0.3)", "explainable-ai-sdk (>=1.0.0)", "fastapi (>=0.71.0,<0.103.1)", "google-cloud-bigquery", "google-cloud-bigquery-storage", "google-cloud-logging (<4.0)", "google-vizier (==0.0.11)", "google-vizier (==0.0.4)", "google-vizier (>=0.0.14)", "google-vizier (>=0.1.6)", "httpx (>=0.23.0,<0.25.0)", "lit-nlp (==0.4.0)", "mlflow (>=1.27.0,<=2.1.1)", "numpy (>=1.15.0)", "pandas (>=1.0.0)", "pyarrow (>=10.0.1)", "pyarrow (>=3.0.0,<8.0dev)", "pyarrow (>=6.0.1)", "pydantic (<2)", "pyyaml (==5.3.1)", "ray[default] (>=2.4,<2.5)", "ray[default] (>=2.5,<2.5.1)", "requests (>=2.28.1)", "starlette (>=0.17.1)", "tensorflow (>=2.3.0,<2.15.0)", "tensorflow (>=2.3.0,<3.0.0dev)", "urllib3 (>=1.21.1,<1.27)", "uvicorn[standard] (>=0.16.0)"] +lit = ["explainable-ai-sdk (>=1.0.0)", "lit-nlp (==0.4.0)", "pandas (>=1.0.0)", "tensorflow (>=2.3.0,<3.0.0dev)"] +metadata = ["numpy (>=1.15.0)", "pandas (>=1.0.0)"] +pipelines = ["pyyaml (==5.3.1)"] +prediction = ["docker (>=5.0.3)", "fastapi (>=0.71.0,<0.103.1)", "httpx (>=0.23.0,<0.25.0)", "starlette (>=0.17.1)", "uvicorn[standard] (>=0.16.0)"] +preview = ["cloudpickle (<3.0)", "google-cloud-logging (<4.0)"] +private-endpoints = ["requests (>=2.28.1)", "urllib3 (>=1.21.1,<1.27)"] +ray = ["google-cloud-bigquery", "google-cloud-bigquery-storage", "pandas (>=1.0.0)", "pyarrow (>=6.0.1)", "pydantic (<2)", "ray[default] (>=2.4,<2.5)", "ray[default] (>=2.5,<2.5.1)"] +tensorboard = ["tensorflow (>=2.3.0,<2.15.0)"] +testing = ["bigframes", "cloudpickle (<3.0)", "docker (>=5.0.3)", "explainable-ai-sdk (>=1.0.0)", "fastapi (>=0.71.0,<0.103.1)", "google-cloud-bigquery", "google-cloud-bigquery-storage", "google-cloud-logging (<4.0)", "google-vizier (==0.0.11)", "google-vizier (==0.0.4)", "google-vizier (>=0.0.14)", "google-vizier (>=0.1.6)", "grpcio-testing", "httpx (>=0.23.0,<0.25.0)", "ipython", "kfp", "lit-nlp (==0.4.0)", "mlflow (>=1.27.0,<=2.1.1)", "numpy (>=1.15.0)", "pandas (>=1.0.0)", "pyarrow (>=10.0.1)", "pyarrow (>=3.0.0,<8.0dev)", "pyarrow (>=6.0.1)", "pydantic (<2)", "pyfakefs", "pytest-asyncio", "pytest-xdist", "pyyaml (==5.3.1)", "ray[default] (>=2.4,<2.5)", "ray[default] (>=2.5,<2.5.1)", "requests (>=2.28.1)", "requests-toolbelt (<1.0.0)", "scikit-learn", "starlette (>=0.17.1)", "tensorboard-plugin-profile (>=2.4.0,<3.0.0dev)", "tensorflow (>=2.3.0,<2.15.0)", "tensorflow (>=2.3.0,<3.0.0dev)", "tensorflow (>=2.3.0,<=2.12.0)", "tensorflow (>=2.4.0,<3.0.0dev)", "torch (>=2.0.0,<2.1.0)", "urllib3 (>=1.21.1,<1.27)", "uvicorn[standard] (>=0.16.0)", "werkzeug (>=2.0.0,<2.1.0dev)", "xgboost", "xgboost-ray"] +vizier = ["google-vizier (==0.0.11)", "google-vizier (==0.0.4)", "google-vizier (>=0.0.14)", "google-vizier (>=0.1.6)"] +xai = ["tensorflow (>=2.3.0,<3.0.0dev)"] + [[package]] name = "google-cloud-appengine-logging" version = "1.4.0" @@ -471,6 +557,36 @@ files = [ googleapis-common-protos = ">=1.56.2,<2.0dev" protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev" +[[package]] +name = "google-cloud-bigquery" +version = "3.17.0" +description = "Google BigQuery API client library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "google-cloud-bigquery-3.17.0.tar.gz", hash = "sha256:c5617295fc3dec730d16cc5385ab944b123b31d62fa409bd055a4bf3edf83f49"}, + {file = "google_cloud_bigquery-3.17.0-py2.py3-none-any.whl", hash = "sha256:89f208a3b7aba0f8a78d7864cb9a559595383974cda1d2f488acfee6feda7c62"}, +] + +[package.dependencies] +google-api-core = ">=1.31.5,<2.0.dev0 || >2.3.0,<3.0.0dev" +google-cloud-core = ">=1.6.0,<3.0.0dev" +google-resumable-media = ">=0.6.0,<3.0dev" +packaging = ">=20.0.0" +python-dateutil = ">=2.7.2,<3.0dev" +requests = ">=2.21.0,<3.0.0dev" + +[package.extras] +all = ["Shapely (>=1.8.4,<3.0.0dev)", "db-dtypes (>=0.3.0,<2.0.0dev)", "geopandas (>=0.9.0,<1.0dev)", "google-cloud-bigquery-storage (>=2.6.0,<3.0.0dev)", "grpcio (>=1.47.0,<2.0dev)", "grpcio (>=1.49.1,<2.0dev)", "importlib-metadata (>=1.0.0)", "ipykernel (>=6.0.0)", "ipython (>=7.23.1,!=8.1.0)", "ipywidgets (>=7.7.0)", "opentelemetry-api (>=1.1.0)", "opentelemetry-instrumentation (>=0.20b0)", "opentelemetry-sdk (>=1.1.0)", "pandas (>=1.1.0)", "proto-plus (>=1.15.0,<2.0.0dev)", "protobuf (>=3.19.5,!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<5.0.0dev)", "pyarrow (>=3.0.0)", "tqdm (>=4.7.4,<5.0.0dev)"] +bigquery-v2 = ["proto-plus (>=1.15.0,<2.0.0dev)", "protobuf (>=3.19.5,!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<5.0.0dev)"] +bqstorage = ["google-cloud-bigquery-storage (>=2.6.0,<3.0.0dev)", "grpcio (>=1.47.0,<2.0dev)", "grpcio (>=1.49.1,<2.0dev)", "pyarrow (>=3.0.0)"] +geopandas = ["Shapely (>=1.8.4,<3.0.0dev)", "geopandas (>=0.9.0,<1.0dev)"] +ipython = ["ipykernel (>=6.0.0)", "ipython (>=7.23.1,!=8.1.0)"] +ipywidgets = ["ipykernel (>=6.0.0)", "ipywidgets (>=7.7.0)"] +opentelemetry = ["opentelemetry-api (>=1.1.0)", "opentelemetry-instrumentation (>=0.20b0)", "opentelemetry-sdk (>=1.1.0)"] +pandas = ["db-dtypes (>=0.3.0,<2.0.0dev)", "importlib-metadata (>=1.0.0)", "pandas (>=1.1.0)", "pyarrow (>=3.0.0)"] +tqdm = ["tqdm (>=4.7.4,<5.0.0dev)"] + [[package]] name = "google-cloud-core" version = "2.4.1" @@ -528,6 +644,23 @@ protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4 [package.extras] pandas = ["pandas (>=0.23.2)"] +[[package]] +name = "google-cloud-resource-manager" +version = "1.11.0" +description = "Google Cloud Resource Manager API client library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "google-cloud-resource-manager-1.11.0.tar.gz", hash = "sha256:a64ba6bb595634ecd2472b8b0322e8f012a76327756659a2dde9f392d7fa1af2"}, + {file = "google_cloud_resource_manager-1.11.0-py2.py3-none-any.whl", hash = "sha256:bafde909b1d434a620eefcd144b14fcccb72f268afcf158c5bcfcdce5e04a72b"}, +] + +[package.dependencies] +google-api-core = {version = ">=1.34.0,<2.0.dev0 || >=2.11.dev0,<3.0.0dev", extras = ["grpc"]} +grpc-google-iam-v1 = ">=0.12.4,<1.0.0dev" +proto-plus = ">=1.22.3,<2.0.0dev" +protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev" + [[package]] name = "google-cloud-run" version = "0.10.1" @@ -545,6 +678,126 @@ grpc-google-iam-v1 = ">=0.12.4,<1.0.0dev" proto-plus = ">=1.22.3,<2.0.0dev" protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev" +[[package]] +name = "google-cloud-storage" +version = "2.14.0" +description = "Google Cloud Storage API client library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "google-cloud-storage-2.14.0.tar.gz", hash = "sha256:2d23fcf59b55e7b45336729c148bb1c464468c69d5efbaee30f7201dd90eb97e"}, + {file = "google_cloud_storage-2.14.0-py2.py3-none-any.whl", hash = "sha256:8641243bbf2a2042c16a6399551fbb13f062cbc9a2de38d6c0bb5426962e9dbd"}, +] + +[package.dependencies] +google-api-core = ">=1.31.5,<2.0.dev0 || >2.3.0,<3.0.0dev" +google-auth = ">=2.23.3,<3.0dev" +google-cloud-core = ">=2.3.0,<3.0dev" +google-crc32c = ">=1.0,<2.0dev" +google-resumable-media = ">=2.6.0" +requests = ">=2.18.0,<3.0.0dev" + +[package.extras] +protobuf = ["protobuf (<5.0.0dev)"] + +[[package]] +name = "google-crc32c" +version = "1.5.0" +description = "A python wrapper of the C library 'Google CRC32C'" +optional = false +python-versions = ">=3.7" +files = [ + {file = "google-crc32c-1.5.0.tar.gz", hash = "sha256:89284716bc6a5a415d4eaa11b1726d2d60a0cd12aadf5439828353662ede9dd7"}, + {file = "google_crc32c-1.5.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:596d1f98fc70232fcb6590c439f43b350cb762fb5d61ce7b0e9db4539654cc13"}, + {file = "google_crc32c-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:be82c3c8cfb15b30f36768797a640e800513793d6ae1724aaaafe5bf86f8f346"}, + {file = "google_crc32c-1.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:461665ff58895f508e2866824a47bdee72497b091c730071f2b7575d5762ab65"}, + {file = "google_crc32c-1.5.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2096eddb4e7c7bdae4bd69ad364e55e07b8316653234a56552d9c988bd2d61b"}, + {file = "google_crc32c-1.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:116a7c3c616dd14a3de8c64a965828b197e5f2d121fedd2f8c5585c547e87b02"}, + {file = "google_crc32c-1.5.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:5829b792bf5822fd0a6f6eb34c5f81dd074f01d570ed7f36aa101d6fc7a0a6e4"}, + {file = "google_crc32c-1.5.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:64e52e2b3970bd891309c113b54cf0e4384762c934d5ae56e283f9a0afcd953e"}, + {file = "google_crc32c-1.5.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:02ebb8bf46c13e36998aeaad1de9b48f4caf545e91d14041270d9dca767b780c"}, + {file = "google_crc32c-1.5.0-cp310-cp310-win32.whl", hash = "sha256:2e920d506ec85eb4ba50cd4228c2bec05642894d4c73c59b3a2fe20346bd00ee"}, + {file = "google_crc32c-1.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:07eb3c611ce363c51a933bf6bd7f8e3878a51d124acfc89452a75120bc436289"}, + {file = "google_crc32c-1.5.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:cae0274952c079886567f3f4f685bcaf5708f0a23a5f5216fdab71f81a6c0273"}, + {file = "google_crc32c-1.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1034d91442ead5a95b5aaef90dbfaca8633b0247d1e41621d1e9f9db88c36298"}, + {file = "google_crc32c-1.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7c42c70cd1d362284289c6273adda4c6af8039a8ae12dc451dcd61cdabb8ab57"}, + {file = "google_crc32c-1.5.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8485b340a6a9e76c62a7dce3c98e5f102c9219f4cfbf896a00cf48caf078d438"}, + {file = "google_crc32c-1.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77e2fd3057c9d78e225fa0a2160f96b64a824de17840351b26825b0848022906"}, + {file = "google_crc32c-1.5.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f583edb943cf2e09c60441b910d6a20b4d9d626c75a36c8fcac01a6c96c01183"}, + {file = "google_crc32c-1.5.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:a1fd716e7a01f8e717490fbe2e431d2905ab8aa598b9b12f8d10abebb36b04dd"}, + {file = "google_crc32c-1.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:72218785ce41b9cfd2fc1d6a017dc1ff7acfc4c17d01053265c41a2c0cc39b8c"}, + {file = "google_crc32c-1.5.0-cp311-cp311-win32.whl", hash = "sha256:66741ef4ee08ea0b2cc3c86916ab66b6aef03768525627fd6a1b34968b4e3709"}, + {file = "google_crc32c-1.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:ba1eb1843304b1e5537e1fca632fa894d6f6deca8d6389636ee5b4797affb968"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:98cb4d057f285bd80d8778ebc4fde6b4d509ac3f331758fb1528b733215443ae"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fd8536e902db7e365f49e7d9029283403974ccf29b13fc7028b97e2295b33556"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:19e0a019d2c4dcc5e598cd4a4bc7b008546b0358bd322537c74ad47a5386884f"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02c65b9817512edc6a4ae7c7e987fea799d2e0ee40c53ec573a692bee24de876"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6ac08d24c1f16bd2bf5eca8eaf8304812f44af5cfe5062006ec676e7e1d50afc"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:3359fc442a743e870f4588fcf5dcbc1bf929df1fad8fb9905cd94e5edb02e84c"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1e986b206dae4476f41bcec1faa057851f3889503a70e1bdb2378d406223994a"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:de06adc872bcd8c2a4e0dc51250e9e65ef2ca91be023b9d13ebd67c2ba552e1e"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-win32.whl", hash = "sha256:d3515f198eaa2f0ed49f8819d5732d70698c3fa37384146079b3799b97667a94"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-win_amd64.whl", hash = "sha256:67b741654b851abafb7bc625b6d1cdd520a379074e64b6a128e3b688c3c04740"}, + {file = "google_crc32c-1.5.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:c02ec1c5856179f171e032a31d6f8bf84e5a75c45c33b2e20a3de353b266ebd8"}, + {file = "google_crc32c-1.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:edfedb64740750e1a3b16152620220f51d58ff1b4abceb339ca92e934775c27a"}, + {file = "google_crc32c-1.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:84e6e8cd997930fc66d5bb4fde61e2b62ba19d62b7abd7a69920406f9ecca946"}, + {file = "google_crc32c-1.5.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:024894d9d3cfbc5943f8f230e23950cd4906b2fe004c72e29b209420a1e6b05a"}, + {file = "google_crc32c-1.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:998679bf62b7fb599d2878aa3ed06b9ce688b8974893e7223c60db155f26bd8d"}, + {file = "google_crc32c-1.5.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:83c681c526a3439b5cf94f7420471705bbf96262f49a6fe546a6db5f687a3d4a"}, + {file = "google_crc32c-1.5.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4c6fdd4fccbec90cc8a01fc00773fcd5fa28db683c116ee3cb35cd5da9ef6c37"}, + {file = "google_crc32c-1.5.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5ae44e10a8e3407dbe138984f21e536583f2bba1be9491239f942c2464ac0894"}, + {file = "google_crc32c-1.5.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:37933ec6e693e51a5b07505bd05de57eee12f3e8c32b07da7e73669398e6630a"}, + {file = "google_crc32c-1.5.0-cp38-cp38-win32.whl", hash = "sha256:fe70e325aa68fa4b5edf7d1a4b6f691eb04bbccac0ace68e34820d283b5f80d4"}, + {file = "google_crc32c-1.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:74dea7751d98034887dbd821b7aae3e1d36eda111d6ca36c206c44478035709c"}, + {file = "google_crc32c-1.5.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c6c777a480337ac14f38564ac88ae82d4cd238bf293f0a22295b66eb89ffced7"}, + {file = "google_crc32c-1.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:759ce4851a4bb15ecabae28f4d2e18983c244eddd767f560165563bf9aefbc8d"}, + {file = "google_crc32c-1.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f13cae8cc389a440def0c8c52057f37359014ccbc9dc1f0827936bcd367c6100"}, + {file = "google_crc32c-1.5.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e560628513ed34759456a416bf86b54b2476c59144a9138165c9a1575801d0d9"}, + {file = "google_crc32c-1.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1674e4307fa3024fc897ca774e9c7562c957af85df55efe2988ed9056dc4e57"}, + {file = "google_crc32c-1.5.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:278d2ed7c16cfc075c91378c4f47924c0625f5fc84b2d50d921b18b7975bd210"}, + {file = "google_crc32c-1.5.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d5280312b9af0976231f9e317c20e4a61cd2f9629b7bfea6a693d1878a264ebd"}, + {file = "google_crc32c-1.5.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:8b87e1a59c38f275c0e3676fc2ab6d59eccecfd460be267ac360cc31f7bcde96"}, + {file = "google_crc32c-1.5.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7c074fece789b5034b9b1404a1f8208fc2d4c6ce9decdd16e8220c5a793e6f61"}, + {file = "google_crc32c-1.5.0-cp39-cp39-win32.whl", hash = "sha256:7f57f14606cd1dd0f0de396e1e53824c371e9544a822648cd76c034d209b559c"}, + {file = "google_crc32c-1.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:a2355cba1f4ad8b6988a4ca3feed5bff33f6af2d7f134852cf279c2aebfde541"}, + {file = "google_crc32c-1.5.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f314013e7dcd5cf45ab1945d92e713eec788166262ae8deb2cfacd53def27325"}, + {file = "google_crc32c-1.5.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3b747a674c20a67343cb61d43fdd9207ce5da6a99f629c6e2541aa0e89215bcd"}, + {file = "google_crc32c-1.5.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8f24ed114432de109aa9fd317278518a5af2d31ac2ea6b952b2f7782b43da091"}, + {file = "google_crc32c-1.5.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8667b48e7a7ef66afba2c81e1094ef526388d35b873966d8a9a447974ed9178"}, + {file = "google_crc32c-1.5.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:1c7abdac90433b09bad6c43a43af253e688c9cfc1c86d332aed13f9a7c7f65e2"}, + {file = "google_crc32c-1.5.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6f998db4e71b645350b9ac28a2167e6632c239963ca9da411523bb439c5c514d"}, + {file = "google_crc32c-1.5.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c99616c853bb585301df6de07ca2cadad344fd1ada6d62bb30aec05219c45d2"}, + {file = "google_crc32c-1.5.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2ad40e31093a4af319dadf503b2467ccdc8f67c72e4bcba97f8c10cb078207b5"}, + {file = "google_crc32c-1.5.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cd67cf24a553339d5062eff51013780a00d6f97a39ca062781d06b3a73b15462"}, + {file = "google_crc32c-1.5.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:398af5e3ba9cf768787eef45c803ff9614cc3e22a5b2f7d7ae116df8b11e3314"}, + {file = "google_crc32c-1.5.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:b1f8133c9a275df5613a451e73f36c2aea4fe13c5c8997e22cf355ebd7bd0728"}, + {file = "google_crc32c-1.5.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9ba053c5f50430a3fcfd36f75aff9caeba0440b2d076afdb79a318d6ca245f88"}, + {file = "google_crc32c-1.5.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:272d3892a1e1a2dbc39cc5cde96834c236d5327e2122d3aaa19f6614531bb6eb"}, + {file = "google_crc32c-1.5.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:635f5d4dd18758a1fbd1049a8e8d2fee4ffed124462d837d1a02a0e009c3ab31"}, + {file = "google_crc32c-1.5.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c672d99a345849301784604bfeaeba4db0c7aae50b95be04dd651fd2a7310b93"}, +] + +[package.extras] +testing = ["pytest"] + +[[package]] +name = "google-resumable-media" +version = "2.7.0" +description = "Utilities for Google Media Downloads and Resumable Uploads" +optional = false +python-versions = ">= 3.7" +files = [ + {file = "google-resumable-media-2.7.0.tar.gz", hash = "sha256:5f18f5fa9836f4b083162064a1c2c98c17239bfda9ca50ad970ccf905f3e625b"}, + {file = "google_resumable_media-2.7.0-py2.py3-none-any.whl", hash = "sha256:79543cfe433b63fd81c0844b7803aba1bb8950b47bedf7d980c38fa123937e08"}, +] + +[package.dependencies] +google-crc32c = ">=1.0,<2.0dev" + +[package.extras] +aiohttp = ["aiohttp (>=3.6.2,<4.0.0dev)", "google-auth (>=1.22.0,<2.0dev)"] +requests = ["requests (>=2.18.0,<3.0.0dev)"] + [[package]] name = "googleapis-common-protos" version = "1.62.0" @@ -563,6 +816,77 @@ protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.1 || >4.21.1,<4 [package.extras] grpc = ["grpcio (>=1.44.0,<2.0.0.dev0)"] +[[package]] +name = "greenlet" +version = "3.0.3" +description = "Lightweight in-process concurrent programming" +optional = false +python-versions = ">=3.7" +files = [ + {file = "greenlet-3.0.3-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:9da2bd29ed9e4f15955dd1595ad7bc9320308a3b766ef7f837e23ad4b4aac31a"}, + {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d353cadd6083fdb056bb46ed07e4340b0869c305c8ca54ef9da3421acbdf6881"}, + {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dca1e2f3ca00b84a396bc1bce13dd21f680f035314d2379c4160c98153b2059b"}, + {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3ed7fb269f15dc662787f4119ec300ad0702fa1b19d2135a37c2c4de6fadfd4a"}, + {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd4f49ae60e10adbc94b45c0b5e6a179acc1736cf7a90160b404076ee283cf83"}, + {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:73a411ef564e0e097dbe7e866bb2dda0f027e072b04da387282b02c308807405"}, + {file = "greenlet-3.0.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7f362975f2d179f9e26928c5b517524e89dd48530a0202570d55ad6ca5d8a56f"}, + {file = "greenlet-3.0.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:649dde7de1a5eceb258f9cb00bdf50e978c9db1b996964cd80703614c86495eb"}, + {file = "greenlet-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:68834da854554926fbedd38c76e60c4a2e3198c6fbed520b106a8986445caaf9"}, + {file = "greenlet-3.0.3-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:b1b5667cced97081bf57b8fa1d6bfca67814b0afd38208d52538316e9422fc61"}, + {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:52f59dd9c96ad2fc0d5724107444f76eb20aaccb675bf825df6435acb7703559"}, + {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:afaff6cf5200befd5cec055b07d1c0a5a06c040fe5ad148abcd11ba6ab9b114e"}, + {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fe754d231288e1e64323cfad462fcee8f0288654c10bdf4f603a39ed923bef33"}, + {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2797aa5aedac23af156bbb5a6aa2cd3427ada2972c828244eb7d1b9255846379"}, + {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b7f009caad047246ed379e1c4dbcb8b020f0a390667ea74d2387be2998f58a22"}, + {file = "greenlet-3.0.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c5e1536de2aad7bf62e27baf79225d0d64360d4168cf2e6becb91baf1ed074f3"}, + {file = "greenlet-3.0.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:894393ce10ceac937e56ec00bb71c4c2f8209ad516e96033e4b3b1de270e200d"}, + {file = "greenlet-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:1ea188d4f49089fc6fb283845ab18a2518d279c7cd9da1065d7a84e991748728"}, + {file = "greenlet-3.0.3-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:70fb482fdf2c707765ab5f0b6655e9cfcf3780d8d87355a063547b41177599be"}, + {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4d1ac74f5c0c0524e4a24335350edad7e5f03b9532da7ea4d3c54d527784f2e"}, + {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:149e94a2dd82d19838fe4b2259f1b6b9957d5ba1b25640d2380bea9c5df37676"}, + {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:15d79dd26056573940fcb8c7413d84118086f2ec1a8acdfa854631084393efcc"}, + {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:881b7db1ebff4ba09aaaeae6aa491daeb226c8150fc20e836ad00041bcb11230"}, + {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fcd2469d6a2cf298f198f0487e0a5b1a47a42ca0fa4dfd1b6862c999f018ebbf"}, + {file = "greenlet-3.0.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1f672519db1796ca0d8753f9e78ec02355e862d0998193038c7073045899f305"}, + {file = "greenlet-3.0.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2516a9957eed41dd8f1ec0c604f1cdc86758b587d964668b5b196a9db5bfcde6"}, + {file = "greenlet-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:bba5387a6975598857d86de9eac14210a49d554a77eb8261cc68b7d082f78ce2"}, + {file = "greenlet-3.0.3-cp37-cp37m-macosx_11_0_universal2.whl", hash = "sha256:5b51e85cb5ceda94e79d019ed36b35386e8c37d22f07d6a751cb659b180d5274"}, + {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:daf3cb43b7cf2ba96d614252ce1684c1bccee6b2183a01328c98d36fcd7d5cb0"}, + {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:99bf650dc5d69546e076f413a87481ee1d2d09aaaaaca058c9251b6d8c14783f"}, + {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dd6e660effd852586b6a8478a1d244b8dc90ab5b1321751d2ea15deb49ed414"}, + {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3391d1e16e2a5a1507d83e4a8b100f4ee626e8eca43cf2cadb543de69827c4c"}, + {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e1f145462f1fa6e4a4ae3c0f782e580ce44d57c8f2c7aae1b6fa88c0b2efdb41"}, + {file = "greenlet-3.0.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1a7191e42732df52cb5f39d3527217e7ab73cae2cb3694d241e18f53d84ea9a7"}, + {file = "greenlet-3.0.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0448abc479fab28b00cb472d278828b3ccca164531daab4e970a0458786055d6"}, + {file = "greenlet-3.0.3-cp37-cp37m-win32.whl", hash = "sha256:b542be2440edc2d48547b5923c408cbe0fc94afb9f18741faa6ae970dbcb9b6d"}, + {file = "greenlet-3.0.3-cp37-cp37m-win_amd64.whl", hash = "sha256:01bc7ea167cf943b4c802068e178bbf70ae2e8c080467070d01bfa02f337ee67"}, + {file = "greenlet-3.0.3-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:1996cb9306c8595335bb157d133daf5cf9f693ef413e7673cb07e3e5871379ca"}, + {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ddc0f794e6ad661e321caa8d2f0a55ce01213c74722587256fb6566049a8b04"}, + {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c9db1c18f0eaad2f804728c67d6c610778456e3e1cc4ab4bbd5eeb8e6053c6fc"}, + {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7170375bcc99f1a2fbd9c306f5be8764eaf3ac6b5cb968862cad4c7057756506"}, + {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b66c9c1e7ccabad3a7d037b2bcb740122a7b17a53734b7d72a344ce39882a1b"}, + {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:098d86f528c855ead3479afe84b49242e174ed262456c342d70fc7f972bc13c4"}, + {file = "greenlet-3.0.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:81bb9c6d52e8321f09c3d165b2a78c680506d9af285bfccbad9fb7ad5a5da3e5"}, + {file = "greenlet-3.0.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fd096eb7ffef17c456cfa587523c5f92321ae02427ff955bebe9e3c63bc9f0da"}, + {file = "greenlet-3.0.3-cp38-cp38-win32.whl", hash = "sha256:d46677c85c5ba00a9cb6f7a00b2bfa6f812192d2c9f7d9c4f6a55b60216712f3"}, + {file = "greenlet-3.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:419b386f84949bf0e7c73e6032e3457b82a787c1ab4a0e43732898a761cc9dbf"}, + {file = "greenlet-3.0.3-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:da70d4d51c8b306bb7a031d5cff6cc25ad253affe89b70352af5f1cb68e74b53"}, + {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:086152f8fbc5955df88382e8a75984e2bb1c892ad2e3c80a2508954e52295257"}, + {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d73a9fe764d77f87f8ec26a0c85144d6a951a6c438dfe50487df5595c6373eac"}, + {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7dcbe92cc99f08c8dd11f930de4d99ef756c3591a5377d1d9cd7dd5e896da71"}, + {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1551a8195c0d4a68fac7a4325efac0d541b48def35feb49d803674ac32582f61"}, + {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:64d7675ad83578e3fc149b617a444fab8efdafc9385471f868eb5ff83e446b8b"}, + {file = "greenlet-3.0.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b37eef18ea55f2ffd8f00ff8fe7c8d3818abd3e25fb73fae2ca3b672e333a7a6"}, + {file = "greenlet-3.0.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:77457465d89b8263bca14759d7c1684df840b6811b2499838cc5b040a8b5b113"}, + {file = "greenlet-3.0.3-cp39-cp39-win32.whl", hash = "sha256:57e8974f23e47dac22b83436bdcf23080ade568ce77df33159e019d161ce1d1e"}, + {file = "greenlet-3.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:c5ee858cfe08f34712f548c3c363e807e7186f03ad7a5039ebadb29e8c6be067"}, + {file = "greenlet-3.0.3.tar.gz", hash = "sha256:43374442353259554ce33599da8b692d5aa96f8976d567d4badf263371fbe491"}, +] + +[package.extras] +docs = ["Sphinx", "furo"] +test = ["objgraph", "psutil"] + [[package]] name = "grpc-google-iam-v1" version = "0.13.0" @@ -686,6 +1010,173 @@ files = [ {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"}, ] +[[package]] +name = "jsonpatch" +version = "1.33" +description = "Apply JSON-Patches (RFC 6902)" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" +files = [ + {file = "jsonpatch-1.33-py2.py3-none-any.whl", hash = "sha256:0ae28c0cd062bbd8b8ecc26d7d164fbbea9652a1a3693f3b956c1eae5145dade"}, + {file = "jsonpatch-1.33.tar.gz", hash = "sha256:9fcd4009c41e6d12348b4a0ff2563ba56a2923a7dfee731d004e212e1ee5030c"}, +] + +[package.dependencies] +jsonpointer = ">=1.9" + +[[package]] +name = "jsonpointer" +version = "2.4" +description = "Identify specific nodes in a JSON document (RFC 6901)" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" +files = [ + {file = "jsonpointer-2.4-py2.py3-none-any.whl", hash = "sha256:15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a"}, + {file = "jsonpointer-2.4.tar.gz", hash = "sha256:585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88"}, +] + +[[package]] +name = "langchain" +version = "0.1.3" +description = "Building applications with LLMs through composability" +optional = false +python-versions = ">=3.8.1,<4.0" +files = [ + {file = "langchain-0.1.3-py3-none-any.whl", hash = "sha256:9802bc17a068518295fd282eb833543793c11d222caf9a0b1c7058fe59b951f3"}, + {file = "langchain-0.1.3.tar.gz", hash = "sha256:7cdebf1bb14181aa614a21b373232c423b0fef06bb97a488a833e11c01524d4a"}, +] + +[package.dependencies] +aiohttp = ">=3.8.3,<4.0.0" +dataclasses-json = ">=0.5.7,<0.7" +jsonpatch = ">=1.33,<2.0" +langchain-community = ">=0.0.14,<0.1" +langchain-core = ">=0.1.14,<0.2" +langsmith = ">=0.0.83,<0.1" +numpy = ">=1,<2" +pydantic = ">=1,<3" +PyYAML = ">=5.3" +requests = ">=2,<3" +SQLAlchemy = ">=1.4,<3" +tenacity = ">=8.1.0,<9.0.0" + +[package.extras] +azure = ["azure-ai-formrecognizer (>=3.2.1,<4.0.0)", "azure-ai-textanalytics (>=5.3.0,<6.0.0)", "azure-ai-vision (>=0.11.1b1,<0.12.0)", "azure-cognitiveservices-speech (>=1.28.0,<2.0.0)", "azure-core (>=1.26.4,<2.0.0)", "azure-cosmos (>=4.4.0b1,<5.0.0)", "azure-identity (>=1.12.0,<2.0.0)", "azure-search-documents (==11.4.0b8)", "openai (<2)"] +clarifai = ["clarifai (>=9.1.0)"] +cli = ["typer (>=0.9.0,<0.10.0)"] +cohere = ["cohere (>=4,<5)"] +docarray = ["docarray[hnswlib] (>=0.32.0,<0.33.0)"] +embeddings = ["sentence-transformers (>=2,<3)"] +extended-testing = ["aiosqlite (>=0.19.0,<0.20.0)", "aleph-alpha-client (>=2.15.0,<3.0.0)", "anthropic (>=0.3.11,<0.4.0)", "arxiv (>=1.4,<2.0)", "assemblyai (>=0.17.0,<0.18.0)", "atlassian-python-api (>=3.36.0,<4.0.0)", "beautifulsoup4 (>=4,<5)", "bibtexparser (>=1.4.0,<2.0.0)", "cassio (>=0.1.0,<0.2.0)", "chardet (>=5.1.0,<6.0.0)", "cohere (>=4,<5)", "couchbase (>=4.1.9,<5.0.0)", "dashvector (>=1.0.1,<2.0.0)", "databricks-vectorsearch (>=0.21,<0.22)", "datasets (>=2.15.0,<3.0.0)", "dgml-utils (>=0.3.0,<0.4.0)", "esprima (>=4.0.1,<5.0.0)", "faiss-cpu (>=1,<2)", "feedparser (>=6.0.10,<7.0.0)", "fireworks-ai (>=0.9.0,<0.10.0)", "geopandas (>=0.13.1,<0.14.0)", "gitpython (>=3.1.32,<4.0.0)", "google-cloud-documentai (>=2.20.1,<3.0.0)", "gql (>=3.4.1,<4.0.0)", "hologres-vector (>=0.0.6,<0.0.7)", "html2text (>=2020.1.16,<2021.0.0)", "javelin-sdk (>=0.1.8,<0.2.0)", "jinja2 (>=3,<4)", "jq (>=1.4.1,<2.0.0)", "jsonschema (>1)", "langchain-openai (>=0.0.2,<0.1)", "lxml (>=4.9.2,<5.0.0)", "markdownify (>=0.11.6,<0.12.0)", "motor (>=3.3.1,<4.0.0)", "msal (>=1.25.0,<2.0.0)", "mwparserfromhell (>=0.6.4,<0.7.0)", "mwxml (>=0.3.3,<0.4.0)", "newspaper3k (>=0.2.8,<0.3.0)", "numexpr (>=2.8.6,<3.0.0)", "openai (<2)", "openapi-pydantic (>=0.3.2,<0.4.0)", "pandas (>=2.0.1,<3.0.0)", "pdfminer-six (>=20221105,<20221106)", "pgvector (>=0.1.6,<0.2.0)", "praw (>=7.7.1,<8.0.0)", "psychicapi (>=0.8.0,<0.9.0)", "py-trello (>=0.19.0,<0.20.0)", "pymupdf (>=1.22.3,<2.0.0)", "pypdf (>=3.4.0,<4.0.0)", "pypdfium2 (>=4.10.0,<5.0.0)", "pyspark (>=3.4.0,<4.0.0)", "rank-bm25 (>=0.2.2,<0.3.0)", "rapidfuzz (>=3.1.1,<4.0.0)", "rapidocr-onnxruntime (>=1.3.2,<2.0.0)", "requests-toolbelt (>=1.0.0,<2.0.0)", "rspace_client (>=2.5.0,<3.0.0)", "scikit-learn (>=1.2.2,<2.0.0)", "sqlite-vss (>=0.1.2,<0.2.0)", "streamlit (>=1.18.0,<2.0.0)", "sympy (>=1.12,<2.0)", "telethon (>=1.28.5,<2.0.0)", "timescale-vector (>=0.0.1,<0.0.2)", "tqdm (>=4.48.0)", "upstash-redis (>=0.15.0,<0.16.0)", "xata (>=1.0.0a7,<2.0.0)", "xmltodict (>=0.13.0,<0.14.0)"] +javascript = ["esprima (>=4.0.1,<5.0.0)"] +llms = ["clarifai (>=9.1.0)", "cohere (>=4,<5)", "huggingface_hub (>=0,<1)", "manifest-ml (>=0.0.1,<0.0.2)", "nlpcloud (>=1,<2)", "openai (<2)", "openlm (>=0.0.5,<0.0.6)", "torch (>=1,<3)", "transformers (>=4,<5)"] +openai = ["openai (<2)", "tiktoken (>=0.3.2,<0.6.0)"] +qdrant = ["qdrant-client (>=1.3.1,<2.0.0)"] +text-helpers = ["chardet (>=5.1.0,<6.0.0)"] + +[[package]] +name = "langchain-community" +version = "0.0.15" +description = "Community contributed LangChain integrations." +optional = false +python-versions = ">=3.8.1,<4.0" +files = [ + {file = "langchain_community-0.0.15-py3-none-any.whl", hash = "sha256:2b830c79366e192aed2a997a11a69b62505fb2ee8d08a85f3df7bd3ab62473f1"}, + {file = "langchain_community-0.0.15.tar.gz", hash = "sha256:b027d7765661300edced958228e78077780d96332efe63c5949bc5e435cc7c2b"}, +] + +[package.dependencies] +aiohttp = ">=3.8.3,<4.0.0" +dataclasses-json = ">=0.5.7,<0.7" +langchain-core = ">=0.1.14,<0.2" +langsmith = ">=0.0.83,<0.1" +numpy = ">=1,<2" +PyYAML = ">=5.3" +requests = ">=2,<3" +SQLAlchemy = ">=1.4,<3" +tenacity = ">=8.1.0,<9.0.0" + +[package.extras] +cli = ["typer (>=0.9.0,<0.10.0)"] +extended-testing = ["aiosqlite (>=0.19.0,<0.20.0)", "aleph-alpha-client (>=2.15.0,<3.0.0)", "anthropic (>=0.3.11,<0.4.0)", "arxiv (>=1.4,<2.0)", "assemblyai (>=0.17.0,<0.18.0)", "atlassian-python-api (>=3.36.0,<4.0.0)", "azure-ai-documentintelligence (>=1.0.0b1,<2.0.0)", "beautifulsoup4 (>=4,<5)", "bibtexparser (>=1.4.0,<2.0.0)", "cassio (>=0.1.0,<0.2.0)", "chardet (>=5.1.0,<6.0.0)", "cohere (>=4,<5)", "dashvector (>=1.0.1,<2.0.0)", "databricks-vectorsearch (>=0.21,<0.22)", "datasets (>=2.15.0,<3.0.0)", "dgml-utils (>=0.3.0,<0.4.0)", "elasticsearch (>=8.12.0,<9.0.0)", "esprima (>=4.0.1,<5.0.0)", "faiss-cpu (>=1,<2)", "feedparser (>=6.0.10,<7.0.0)", "fireworks-ai (>=0.9.0,<0.10.0)", "geopandas (>=0.13.1,<0.14.0)", "gitpython (>=3.1.32,<4.0.0)", "google-cloud-documentai (>=2.20.1,<3.0.0)", "gql (>=3.4.1,<4.0.0)", "gradientai (>=1.4.0,<2.0.0)", "hologres-vector (>=0.0.6,<0.0.7)", "html2text (>=2020.1.16,<2021.0.0)", "javelin-sdk (>=0.1.8,<0.2.0)", "jinja2 (>=3,<4)", "jq (>=1.4.1,<2.0.0)", "jsonschema (>1)", "lxml (>=4.9.2,<5.0.0)", "markdownify (>=0.11.6,<0.12.0)", "motor (>=3.3.1,<4.0.0)", "msal (>=1.25.0,<2.0.0)", "mwparserfromhell (>=0.6.4,<0.7.0)", "mwxml (>=0.3.3,<0.4.0)", "newspaper3k (>=0.2.8,<0.3.0)", "numexpr (>=2.8.6,<3.0.0)", "openai (<2)", "openapi-pydantic (>=0.3.2,<0.4.0)", "oracle-ads (>=2.9.1,<3.0.0)", "pandas (>=2.0.1,<3.0.0)", "pdfminer-six (>=20221105,<20221106)", "pgvector (>=0.1.6,<0.2.0)", "praw (>=7.7.1,<8.0.0)", "psychicapi (>=0.8.0,<0.9.0)", "py-trello (>=0.19.0,<0.20.0)", "pymupdf (>=1.22.3,<2.0.0)", "pypdf (>=3.4.0,<4.0.0)", "pypdfium2 (>=4.10.0,<5.0.0)", "pyspark (>=3.4.0,<4.0.0)", "rank-bm25 (>=0.2.2,<0.3.0)", "rapidfuzz (>=3.1.1,<4.0.0)", "rapidocr-onnxruntime (>=1.3.2,<2.0.0)", "requests-toolbelt (>=1.0.0,<2.0.0)", "rspace_client (>=2.5.0,<3.0.0)", "scikit-learn (>=1.2.2,<2.0.0)", "sqlite-vss (>=0.1.2,<0.2.0)", "streamlit (>=1.18.0,<2.0.0)", "sympy (>=1.12,<2.0)", "telethon (>=1.28.5,<2.0.0)", "timescale-vector (>=0.0.1,<0.0.2)", "tqdm (>=4.48.0)", "upstash-redis (>=0.15.0,<0.16.0)", "xata (>=1.0.0a7,<2.0.0)", "xmltodict (>=0.13.0,<0.14.0)", "zhipuai (>=1.0.7,<2.0.0)"] + +[[package]] +name = "langchain-core" +version = "0.1.15" +description = "Building applications with LLMs through composability" +optional = false +python-versions = ">=3.8.1,<4.0" +files = [ + {file = "langchain_core-0.1.15-py3-none-any.whl", hash = "sha256:eb2e6a81400a98e8d27638ede158c0dc4245ca8e69578138f5ef4c913258ff95"}, + {file = "langchain_core-0.1.15.tar.gz", hash = "sha256:129c0e92ef9a31971766496a9fade429217bd56d16bb6d0024d27925f26187d6"}, +] + +[package.dependencies] +anyio = ">=3,<5" +jsonpatch = ">=1.33,<2.0" +langsmith = ">=0.0.83,<0.1" +packaging = ">=23.2,<24.0" +pydantic = ">=1,<3" +PyYAML = ">=5.3" +requests = ">=2,<3" +tenacity = ">=8.1.0,<9.0.0" + +[package.extras] +extended-testing = ["jinja2 (>=3,<4)"] + +[[package]] +name = "langchain-google-vertexai" +version = "0.0.2" +description = "An integration package connecting GoogleVertexAI and LangChain" +optional = false +python-versions = ">=3.8.1,<4.0" +files = [ + {file = "langchain_google_vertexai-0.0.2-py3-none-any.whl", hash = "sha256:dcc15f07472b0af3e8f2c00fe9a94cbfff987c855e6de121128a9858faaba533"}, + {file = "langchain_google_vertexai-0.0.2.tar.gz", hash = "sha256:ba94cdecf87c37badc845fc1ea2e1e93b6dc6bc9ecc0a33e2a8c39b0e32791ff"}, +] + +[package.dependencies] +google-cloud-aiplatform = ">=1.39.0,<2.0.0" +google-cloud-storage = ">=2.14.0,<3.0.0" +langchain-core = ">=0.1.7,<0.2" +types-protobuf = ">=4.24.0.4,<5.0.0.0" +types-requests = ">=2.31.0.20231231,<3.0.0.0" + +[[package]] +name = "langsmith" +version = "0.0.83" +description = "Client library to connect to the LangSmith LLM Tracing and Evaluation Platform." +optional = false +python-versions = ">=3.8.1,<4.0" +files = [ + {file = "langsmith-0.0.83-py3-none-any.whl", hash = "sha256:a5bb7ac58c19a415a9d5f51db56dd32ee2cd7343a00825bbc2018312eb3d122a"}, + {file = "langsmith-0.0.83.tar.gz", hash = "sha256:94427846b334ad9bdbec3266fee12903fe9f5448f628667689d0412012aaf392"}, +] + +[package.dependencies] +pydantic = ">=1,<3" +requests = ">=2,<3" + +[[package]] +name = "marshmallow" +version = "3.20.2" +description = "A lightweight library for converting complex datatypes to and from native Python datatypes." +optional = false +python-versions = ">=3.8" +files = [ + {file = "marshmallow-3.20.2-py3-none-any.whl", hash = "sha256:c21d4b98fee747c130e6bc8f45c4b3199ea66bc00c12ee1f639f0aeca034d5e9"}, + {file = "marshmallow-3.20.2.tar.gz", hash = "sha256:4c1daff273513dc5eb24b219a8035559dc573c8f322558ef85f5438ddd1236dd"}, +] + +[package.dependencies] +packaging = ">=17.0" + +[package.extras] +dev = ["pre-commit (>=2.4,<4.0)", "pytest", "pytz", "simplejson", "tox"] +docs = ["alabaster (==0.7.15)", "autodocsumm (==0.2.12)", "sphinx (==7.2.6)", "sphinx-issues (==3.0.1)", "sphinx-version-warning (==1.1.2)"] +lint = ["pre-commit (>=2.4,<4.0)"] +tests = ["pytest", "pytz", "simplejson"] + [[package]] name = "multidict" version = "6.0.4" @@ -769,6 +1260,17 @@ files = [ {file = "multidict-6.0.4.tar.gz", hash = "sha256:3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49"}, ] +[[package]] +name = "mypy-extensions" +version = "1.0.0" +description = "Type system extensions for programs checked with the mypy type checker." +optional = false +python-versions = ">=3.5" +files = [ + {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, + {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, +] + [[package]] name = "nodeenv" version = "1.8.0" @@ -783,6 +1285,133 @@ files = [ [package.dependencies] setuptools = "*" +[[package]] +name = "numpy" +version = "1.26.3" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = ">=3.9" +files = [ + {file = "numpy-1.26.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:806dd64230dbbfaca8a27faa64e2f414bf1c6622ab78cc4264f7f5f028fee3bf"}, + {file = "numpy-1.26.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02f98011ba4ab17f46f80f7f8f1c291ee7d855fcef0a5a98db80767a468c85cd"}, + {file = "numpy-1.26.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d45b3ec2faed4baca41c76617fcdcfa4f684ff7a151ce6fc78ad3b6e85af0a6"}, + {file = "numpy-1.26.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bdd2b45bf079d9ad90377048e2747a0c82351989a2165821f0c96831b4a2a54b"}, + {file = "numpy-1.26.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:211ddd1e94817ed2d175b60b6374120244a4dd2287f4ece45d49228b4d529178"}, + {file = "numpy-1.26.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b1240f767f69d7c4c8a29adde2310b871153df9b26b5cb2b54a561ac85146485"}, + {file = "numpy-1.26.3-cp310-cp310-win32.whl", hash = "sha256:21a9484e75ad018974a2fdaa216524d64ed4212e418e0a551a2d83403b0531d3"}, + {file = "numpy-1.26.3-cp310-cp310-win_amd64.whl", hash = "sha256:9e1591f6ae98bcfac2a4bbf9221c0b92ab49762228f38287f6eeb5f3f55905ce"}, + {file = "numpy-1.26.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b831295e5472954104ecb46cd98c08b98b49c69fdb7040483aff799a755a7374"}, + {file = "numpy-1.26.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9e87562b91f68dd8b1c39149d0323b42e0082db7ddb8e934ab4c292094d575d6"}, + {file = "numpy-1.26.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c66d6fec467e8c0f975818c1796d25c53521124b7cfb760114be0abad53a0a2"}, + {file = "numpy-1.26.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f25e2811a9c932e43943a2615e65fc487a0b6b49218899e62e426e7f0a57eeda"}, + {file = "numpy-1.26.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:af36e0aa45e25c9f57bf684b1175e59ea05d9a7d3e8e87b7ae1a1da246f2767e"}, + {file = "numpy-1.26.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:51c7f1b344f302067b02e0f5b5d2daa9ed4a721cf49f070280ac202738ea7f00"}, + {file = "numpy-1.26.3-cp311-cp311-win32.whl", hash = "sha256:7ca4f24341df071877849eb2034948459ce3a07915c2734f1abb4018d9c49d7b"}, + {file = "numpy-1.26.3-cp311-cp311-win_amd64.whl", hash = "sha256:39763aee6dfdd4878032361b30b2b12593fb445ddb66bbac802e2113eb8a6ac4"}, + {file = "numpy-1.26.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a7081fd19a6d573e1a05e600c82a1c421011db7935ed0d5c483e9dd96b99cf13"}, + {file = "numpy-1.26.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:12c70ac274b32bc00c7f61b515126c9205323703abb99cd41836e8125ea0043e"}, + {file = "numpy-1.26.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f784e13e598e9594750b2ef6729bcd5a47f6cfe4a12cca13def35e06d8163e3"}, + {file = "numpy-1.26.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f24750ef94d56ce6e33e4019a8a4d68cfdb1ef661a52cdaee628a56d2437419"}, + {file = "numpy-1.26.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:77810ef29e0fb1d289d225cabb9ee6cf4d11978a00bb99f7f8ec2132a84e0166"}, + {file = "numpy-1.26.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8ed07a90f5450d99dad60d3799f9c03c6566709bd53b497eb9ccad9a55867f36"}, + {file = "numpy-1.26.3-cp312-cp312-win32.whl", hash = "sha256:f73497e8c38295aaa4741bdfa4fda1a5aedda5473074369eca10626835445511"}, + {file = "numpy-1.26.3-cp312-cp312-win_amd64.whl", hash = "sha256:da4b0c6c699a0ad73c810736303f7fbae483bcb012e38d7eb06a5e3b432c981b"}, + {file = "numpy-1.26.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1666f634cb3c80ccbd77ec97bc17337718f56d6658acf5d3b906ca03e90ce87f"}, + {file = "numpy-1.26.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:18c3319a7d39b2c6a9e3bb75aab2304ab79a811ac0168a671a62e6346c29b03f"}, + {file = "numpy-1.26.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b7e807d6888da0db6e7e75838444d62495e2b588b99e90dd80c3459594e857b"}, + {file = "numpy-1.26.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4d362e17bcb0011738c2d83e0a65ea8ce627057b2fdda37678f4374a382a137"}, + {file = "numpy-1.26.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b8c275f0ae90069496068c714387b4a0eba5d531aace269559ff2b43655edd58"}, + {file = "numpy-1.26.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:cc0743f0302b94f397a4a65a660d4cd24267439eb16493fb3caad2e4389bccbb"}, + {file = "numpy-1.26.3-cp39-cp39-win32.whl", hash = "sha256:9bc6d1a7f8cedd519c4b7b1156d98e051b726bf160715b769106661d567b3f03"}, + {file = "numpy-1.26.3-cp39-cp39-win_amd64.whl", hash = "sha256:867e3644e208c8922a3be26fc6bbf112a035f50f0a86497f98f228c50c607bb2"}, + {file = "numpy-1.26.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3c67423b3703f8fbd90f5adaa37f85b5794d3366948efe9a5190a5f3a83fc34e"}, + {file = "numpy-1.26.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46f47ee566d98849323f01b349d58f2557f02167ee301e5e28809a8c0e27a2d0"}, + {file = "numpy-1.26.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a8474703bffc65ca15853d5fd4d06b18138ae90c17c8d12169968e998e448bb5"}, + {file = "numpy-1.26.3.tar.gz", hash = "sha256:697df43e2b6310ecc9d95f05d5ef20eacc09c7c4ecc9da3f235d39e71b7da1e4"}, +] + +[[package]] +name = "packaging" +version = "23.2" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.7" +files = [ + {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, + {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, +] + +[[package]] +name = "pandas" +version = "2.2.0" +description = "Powerful data structures for data analysis, time series, and statistics" +optional = false +python-versions = ">=3.9" +files = [ + {file = "pandas-2.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8108ee1712bb4fa2c16981fba7e68b3f6ea330277f5ca34fa8d557e986a11670"}, + {file = "pandas-2.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:736da9ad4033aeab51d067fc3bd69a0ba36f5a60f66a527b3d72e2030e63280a"}, + {file = "pandas-2.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38e0b4fc3ddceb56ec8a287313bc22abe17ab0eb184069f08fc6a9352a769b18"}, + {file = "pandas-2.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20404d2adefe92aed3b38da41d0847a143a09be982a31b85bc7dd565bdba0f4e"}, + {file = "pandas-2.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7ea3ee3f125032bfcade3a4cf85131ed064b4f8dd23e5ce6fa16473e48ebcaf5"}, + {file = "pandas-2.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f9670b3ac00a387620489dfc1bca66db47a787f4e55911f1293063a78b108df1"}, + {file = "pandas-2.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:5a946f210383c7e6d16312d30b238fd508d80d927014f3b33fb5b15c2f895430"}, + {file = "pandas-2.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a1b438fa26b208005c997e78672f1aa8138f67002e833312e6230f3e57fa87d5"}, + {file = "pandas-2.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8ce2fbc8d9bf303ce54a476116165220a1fedf15985b09656b4b4275300e920b"}, + {file = "pandas-2.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2707514a7bec41a4ab81f2ccce8b382961a29fbe9492eab1305bb075b2b1ff4f"}, + {file = "pandas-2.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85793cbdc2d5bc32620dc8ffa715423f0c680dacacf55056ba13454a5be5de88"}, + {file = "pandas-2.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:cfd6c2491dc821b10c716ad6776e7ab311f7df5d16038d0b7458bc0b67dc10f3"}, + {file = "pandas-2.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a146b9dcacc3123aa2b399df1a284de5f46287a4ab4fbfc237eac98a92ebcb71"}, + {file = "pandas-2.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:fbc1b53c0e1fdf16388c33c3cca160f798d38aea2978004dd3f4d3dec56454c9"}, + {file = "pandas-2.2.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a41d06f308a024981dcaa6c41f2f2be46a6b186b902c94c2674e8cb5c42985bc"}, + {file = "pandas-2.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:159205c99d7a5ce89ecfc37cb08ed179de7783737cea403b295b5eda8e9c56d1"}, + {file = "pandas-2.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb1e1f3861ea9132b32f2133788f3b14911b68102d562715d71bd0013bc45440"}, + {file = "pandas-2.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:761cb99b42a69005dec2b08854fb1d4888fdf7b05db23a8c5a099e4b886a2106"}, + {file = "pandas-2.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a20628faaf444da122b2a64b1e5360cde100ee6283ae8effa0d8745153809a2e"}, + {file = "pandas-2.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f5be5d03ea2073627e7111f61b9f1f0d9625dc3c4d8dda72cc827b0c58a1d042"}, + {file = "pandas-2.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:a626795722d893ed6aacb64d2401d017ddc8a2341b49e0384ab9bf7112bdec30"}, + {file = "pandas-2.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9f66419d4a41132eb7e9a73dcec9486cf5019f52d90dd35547af11bc58f8637d"}, + {file = "pandas-2.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:57abcaeda83fb80d447f28ab0cc7b32b13978f6f733875ebd1ed14f8fbc0f4ab"}, + {file = "pandas-2.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e60f1f7dba3c2d5ca159e18c46a34e7ca7247a73b5dd1a22b6d59707ed6b899a"}, + {file = "pandas-2.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb61dc8567b798b969bcc1fc964788f5a68214d333cade8319c7ab33e2b5d88a"}, + {file = "pandas-2.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:52826b5f4ed658fa2b729264d63f6732b8b29949c7fd234510d57c61dbeadfcd"}, + {file = "pandas-2.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bde2bc699dbd80d7bc7f9cab1e23a95c4375de615860ca089f34e7c64f4a8de7"}, + {file = "pandas-2.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:3de918a754bbf2da2381e8a3dcc45eede8cd7775b047b923f9006d5f876802ae"}, + {file = "pandas-2.2.0.tar.gz", hash = "sha256:30b83f7c3eb217fb4d1b494a57a2fda5444f17834f5df2de6b2ffff68dc3c8e2"}, +] + +[package.dependencies] +numpy = [ + {version = ">=1.23.2,<2", markers = "python_version == \"3.11\""}, + {version = ">=1.26.0,<2", markers = "python_version >= \"3.12\""}, +] +python-dateutil = ">=2.8.2" +pytz = ">=2020.1" +tzdata = ">=2022.7" + +[package.extras] +all = ["PyQt5 (>=5.15.9)", "SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)", "beautifulsoup4 (>=4.11.2)", "bottleneck (>=1.3.6)", "dataframe-api-compat (>=0.1.7)", "fastparquet (>=2022.12.0)", "fsspec (>=2022.11.0)", "gcsfs (>=2022.11.0)", "html5lib (>=1.1)", "hypothesis (>=6.46.1)", "jinja2 (>=3.1.2)", "lxml (>=4.9.2)", "matplotlib (>=3.6.3)", "numba (>=0.56.4)", "numexpr (>=2.8.4)", "odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "pandas-gbq (>=0.19.0)", "psycopg2 (>=2.9.6)", "pyarrow (>=10.0.1)", "pymysql (>=1.0.2)", "pyreadstat (>=1.2.0)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "qtpy (>=2.3.0)", "s3fs (>=2022.11.0)", "scipy (>=1.10.0)", "tables (>=3.8.0)", "tabulate (>=0.9.0)", "xarray (>=2022.12.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)", "zstandard (>=0.19.0)"] +aws = ["s3fs (>=2022.11.0)"] +clipboard = ["PyQt5 (>=5.15.9)", "qtpy (>=2.3.0)"] +compression = ["zstandard (>=0.19.0)"] +computation = ["scipy (>=1.10.0)", "xarray (>=2022.12.0)"] +consortium-standard = ["dataframe-api-compat (>=0.1.7)"] +excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)"] +feather = ["pyarrow (>=10.0.1)"] +fss = ["fsspec (>=2022.11.0)"] +gcp = ["gcsfs (>=2022.11.0)", "pandas-gbq (>=0.19.0)"] +hdf5 = ["tables (>=3.8.0)"] +html = ["beautifulsoup4 (>=4.11.2)", "html5lib (>=1.1)", "lxml (>=4.9.2)"] +mysql = ["SQLAlchemy (>=2.0.0)", "pymysql (>=1.0.2)"] +output-formatting = ["jinja2 (>=3.1.2)", "tabulate (>=0.9.0)"] +parquet = ["pyarrow (>=10.0.1)"] +performance = ["bottleneck (>=1.3.6)", "numba (>=0.56.4)", "numexpr (>=2.8.4)"] +plot = ["matplotlib (>=3.6.3)"] +postgresql = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "psycopg2 (>=2.9.6)"] +spss = ["pyreadstat (>=1.2.0)"] +sql-other = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)"] +test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)"] +xml = ["lxml (>=4.9.2)"] + [[package]] name = "platformdirs" version = "4.1.0" @@ -878,6 +1507,156 @@ files = [ [package.dependencies] pyasn1 = ">=0.4.6,<0.6.0" +[[package]] +name = "pydantic" +version = "2.5.3" +description = "Data validation using Python type hints" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pydantic-2.5.3-py3-none-any.whl", hash = "sha256:d0caf5954bee831b6bfe7e338c32b9e30c85dfe080c843680783ac2b631673b4"}, + {file = "pydantic-2.5.3.tar.gz", hash = "sha256:b3ef57c62535b0941697cce638c08900d87fcb67e29cfa99e8a68f747f393f7a"}, +] + +[package.dependencies] +annotated-types = ">=0.4.0" +pydantic-core = "2.14.6" +typing-extensions = ">=4.6.1" + +[package.extras] +email = ["email-validator (>=2.0.0)"] + +[[package]] +name = "pydantic-core" +version = "2.14.6" +description = "" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pydantic_core-2.14.6-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:72f9a942d739f09cd42fffe5dc759928217649f070056f03c70df14f5770acf9"}, + {file = "pydantic_core-2.14.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6a31d98c0d69776c2576dda4b77b8e0c69ad08e8b539c25c7d0ca0dc19a50d6c"}, + {file = "pydantic_core-2.14.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5aa90562bc079c6c290f0512b21768967f9968e4cfea84ea4ff5af5d917016e4"}, + {file = "pydantic_core-2.14.6-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:370ffecb5316ed23b667d99ce4debe53ea664b99cc37bfa2af47bc769056d534"}, + {file = "pydantic_core-2.14.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f85f3843bdb1fe80e8c206fe6eed7a1caeae897e496542cee499c374a85c6e08"}, + {file = "pydantic_core-2.14.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9862bf828112e19685b76ca499b379338fd4c5c269d897e218b2ae8fcb80139d"}, + {file = "pydantic_core-2.14.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:036137b5ad0cb0004c75b579445a1efccd072387a36c7f217bb8efd1afbe5245"}, + {file = "pydantic_core-2.14.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:92879bce89f91f4b2416eba4429c7b5ca22c45ef4a499c39f0c5c69257522c7c"}, + {file = "pydantic_core-2.14.6-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0c08de15d50fa190d577e8591f0329a643eeaed696d7771760295998aca6bc66"}, + {file = "pydantic_core-2.14.6-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:36099c69f6b14fc2c49d7996cbf4f87ec4f0e66d1c74aa05228583225a07b590"}, + {file = "pydantic_core-2.14.6-cp310-none-win32.whl", hash = "sha256:7be719e4d2ae6c314f72844ba9d69e38dff342bc360379f7c8537c48e23034b7"}, + {file = "pydantic_core-2.14.6-cp310-none-win_amd64.whl", hash = "sha256:36fa402dcdc8ea7f1b0ddcf0df4254cc6b2e08f8cd80e7010d4c4ae6e86b2a87"}, + {file = "pydantic_core-2.14.6-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:dea7fcd62915fb150cdc373212141a30037e11b761fbced340e9db3379b892d4"}, + {file = "pydantic_core-2.14.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ffff855100bc066ff2cd3aa4a60bc9534661816b110f0243e59503ec2df38421"}, + {file = "pydantic_core-2.14.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b027c86c66b8627eb90e57aee1f526df77dc6d8b354ec498be9a757d513b92b"}, + {file = "pydantic_core-2.14.6-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:00b1087dabcee0b0ffd104f9f53d7d3eaddfaa314cdd6726143af6bc713aa27e"}, + {file = "pydantic_core-2.14.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:75ec284328b60a4e91010c1acade0c30584f28a1f345bc8f72fe8b9e46ec6a96"}, + {file = "pydantic_core-2.14.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7e1f4744eea1501404b20b0ac059ff7e3f96a97d3e3f48ce27a139e053bb370b"}, + {file = "pydantic_core-2.14.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2602177668f89b38b9f84b7b3435d0a72511ddef45dc14446811759b82235a1"}, + {file = "pydantic_core-2.14.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6c8edaea3089bf908dd27da8f5d9e395c5b4dc092dbcce9b65e7156099b4b937"}, + {file = "pydantic_core-2.14.6-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:478e9e7b360dfec451daafe286998d4a1eeaecf6d69c427b834ae771cad4b622"}, + {file = "pydantic_core-2.14.6-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:b6ca36c12a5120bad343eef193cc0122928c5c7466121da7c20f41160ba00ba2"}, + {file = "pydantic_core-2.14.6-cp311-none-win32.whl", hash = "sha256:2b8719037e570639e6b665a4050add43134d80b687288ba3ade18b22bbb29dd2"}, + {file = "pydantic_core-2.14.6-cp311-none-win_amd64.whl", hash = "sha256:78ee52ecc088c61cce32b2d30a826f929e1708f7b9247dc3b921aec367dc1b23"}, + {file = "pydantic_core-2.14.6-cp311-none-win_arm64.whl", hash = "sha256:a19b794f8fe6569472ff77602437ec4430f9b2b9ec7a1105cfd2232f9ba355e6"}, + {file = "pydantic_core-2.14.6-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:667aa2eac9cd0700af1ddb38b7b1ef246d8cf94c85637cbb03d7757ca4c3fdec"}, + {file = "pydantic_core-2.14.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cdee837710ef6b56ebd20245b83799fce40b265b3b406e51e8ccc5b85b9099b7"}, + {file = "pydantic_core-2.14.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c5bcf3414367e29f83fd66f7de64509a8fd2368b1edf4351e862910727d3e51"}, + {file = "pydantic_core-2.14.6-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:26a92ae76f75d1915806b77cf459811e772d8f71fd1e4339c99750f0e7f6324f"}, + {file = "pydantic_core-2.14.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a983cca5ed1dd9a35e9e42ebf9f278d344603bfcb174ff99a5815f953925140a"}, + {file = "pydantic_core-2.14.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cb92f9061657287eded380d7dc455bbf115430b3aa4741bdc662d02977e7d0af"}, + {file = "pydantic_core-2.14.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4ace1e220b078c8e48e82c081e35002038657e4b37d403ce940fa679e57113b"}, + {file = "pydantic_core-2.14.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ef633add81832f4b56d3b4c9408b43d530dfca29e68fb1b797dcb861a2c734cd"}, + {file = "pydantic_core-2.14.6-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7e90d6cc4aad2cc1f5e16ed56e46cebf4877c62403a311af20459c15da76fd91"}, + {file = "pydantic_core-2.14.6-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e8a5ac97ea521d7bde7621d86c30e86b798cdecd985723c4ed737a2aa9e77d0c"}, + {file = "pydantic_core-2.14.6-cp312-none-win32.whl", hash = "sha256:f27207e8ca3e5e021e2402ba942e5b4c629718e665c81b8b306f3c8b1ddbb786"}, + {file = "pydantic_core-2.14.6-cp312-none-win_amd64.whl", hash = "sha256:b3e5fe4538001bb82e2295b8d2a39356a84694c97cb73a566dc36328b9f83b40"}, + {file = "pydantic_core-2.14.6-cp312-none-win_arm64.whl", hash = "sha256:64634ccf9d671c6be242a664a33c4acf12882670b09b3f163cd00a24cffbd74e"}, + {file = "pydantic_core-2.14.6-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:24368e31be2c88bd69340fbfe741b405302993242ccb476c5c3ff48aeee1afe0"}, + {file = "pydantic_core-2.14.6-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:e33b0834f1cf779aa839975f9d8755a7c2420510c0fa1e9fa0497de77cd35d2c"}, + {file = "pydantic_core-2.14.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6af4b3f52cc65f8a0bc8b1cd9676f8c21ef3e9132f21fed250f6958bd7223bed"}, + {file = "pydantic_core-2.14.6-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d15687d7d7f40333bd8266f3814c591c2e2cd263fa2116e314f60d82086e353a"}, + {file = "pydantic_core-2.14.6-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:095b707bb287bfd534044166ab767bec70a9bba3175dcdc3371782175c14e43c"}, + {file = "pydantic_core-2.14.6-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:94fc0e6621e07d1e91c44e016cc0b189b48db053061cc22d6298a611de8071bb"}, + {file = "pydantic_core-2.14.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ce830e480f6774608dedfd4a90c42aac4a7af0a711f1b52f807130c2e434c06"}, + {file = "pydantic_core-2.14.6-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a306cdd2ad3a7d795d8e617a58c3a2ed0f76c8496fb7621b6cd514eb1532cae8"}, + {file = "pydantic_core-2.14.6-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:2f5fa187bde8524b1e37ba894db13aadd64faa884657473b03a019f625cee9a8"}, + {file = "pydantic_core-2.14.6-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:438027a975cc213a47c5d70672e0d29776082155cfae540c4e225716586be75e"}, + {file = "pydantic_core-2.14.6-cp37-none-win32.whl", hash = "sha256:f96ae96a060a8072ceff4cfde89d261837b4294a4f28b84a28765470d502ccc6"}, + {file = "pydantic_core-2.14.6-cp37-none-win_amd64.whl", hash = "sha256:e646c0e282e960345314f42f2cea5e0b5f56938c093541ea6dbf11aec2862391"}, + {file = "pydantic_core-2.14.6-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:db453f2da3f59a348f514cfbfeb042393b68720787bbef2b4c6068ea362c8149"}, + {file = "pydantic_core-2.14.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3860c62057acd95cc84044e758e47b18dcd8871a328ebc8ccdefd18b0d26a21b"}, + {file = "pydantic_core-2.14.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:36026d8f99c58d7044413e1b819a67ca0e0b8ebe0f25e775e6c3d1fabb3c38fb"}, + {file = "pydantic_core-2.14.6-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8ed1af8692bd8d2a29d702f1a2e6065416d76897d726e45a1775b1444f5928a7"}, + {file = "pydantic_core-2.14.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:314ccc4264ce7d854941231cf71b592e30d8d368a71e50197c905874feacc8a8"}, + {file = "pydantic_core-2.14.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:982487f8931067a32e72d40ab6b47b1628a9c5d344be7f1a4e668fb462d2da42"}, + {file = "pydantic_core-2.14.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2dbe357bc4ddda078f79d2a36fc1dd0494a7f2fad83a0a684465b6f24b46fe80"}, + {file = "pydantic_core-2.14.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2f6ffc6701a0eb28648c845f4945a194dc7ab3c651f535b81793251e1185ac3d"}, + {file = "pydantic_core-2.14.6-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7f5025db12fc6de7bc1104d826d5aee1d172f9ba6ca936bf6474c2148ac336c1"}, + {file = "pydantic_core-2.14.6-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:dab03ed811ed1c71d700ed08bde8431cf429bbe59e423394f0f4055f1ca0ea60"}, + {file = "pydantic_core-2.14.6-cp38-none-win32.whl", hash = "sha256:dfcbebdb3c4b6f739a91769aea5ed615023f3c88cb70df812849aef634c25fbe"}, + {file = "pydantic_core-2.14.6-cp38-none-win_amd64.whl", hash = "sha256:99b14dbea2fdb563d8b5a57c9badfcd72083f6006caf8e126b491519c7d64ca8"}, + {file = "pydantic_core-2.14.6-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:4ce8299b481bcb68e5c82002b96e411796b844d72b3e92a3fbedfe8e19813eab"}, + {file = "pydantic_core-2.14.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b9a9d92f10772d2a181b5ca339dee066ab7d1c9a34ae2421b2a52556e719756f"}, + {file = "pydantic_core-2.14.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fd9e98b408384989ea4ab60206b8e100d8687da18b5c813c11e92fd8212a98e0"}, + {file = "pydantic_core-2.14.6-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4f86f1f318e56f5cbb282fe61eb84767aee743ebe32c7c0834690ebea50c0a6b"}, + {file = "pydantic_core-2.14.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:86ce5fcfc3accf3a07a729779d0b86c5d0309a4764c897d86c11089be61da160"}, + {file = "pydantic_core-2.14.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3dcf1978be02153c6a31692d4fbcc2a3f1db9da36039ead23173bc256ee3b91b"}, + {file = "pydantic_core-2.14.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eedf97be7bc3dbc8addcef4142f4b4164066df0c6f36397ae4aaed3eb187d8ab"}, + {file = "pydantic_core-2.14.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d5f916acf8afbcab6bacbb376ba7dc61f845367901ecd5e328fc4d4aef2fcab0"}, + {file = "pydantic_core-2.14.6-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:8a14c192c1d724c3acbfb3f10a958c55a2638391319ce8078cb36c02283959b9"}, + {file = "pydantic_core-2.14.6-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0348b1dc6b76041516e8a854ff95b21c55f5a411c3297d2ca52f5528e49d8411"}, + {file = "pydantic_core-2.14.6-cp39-none-win32.whl", hash = "sha256:de2a0645a923ba57c5527497daf8ec5df69c6eadf869e9cd46e86349146e5975"}, + {file = "pydantic_core-2.14.6-cp39-none-win_amd64.whl", hash = "sha256:aca48506a9c20f68ee61c87f2008f81f8ee99f8d7f0104bff3c47e2d148f89d9"}, + {file = "pydantic_core-2.14.6-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:d5c28525c19f5bb1e09511669bb57353d22b94cf8b65f3a8d141c389a55dec95"}, + {file = "pydantic_core-2.14.6-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:78d0768ee59baa3de0f4adac9e3748b4b1fffc52143caebddfd5ea2961595277"}, + {file = "pydantic_core-2.14.6-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b93785eadaef932e4fe9c6e12ba67beb1b3f1e5495631419c784ab87e975670"}, + {file = "pydantic_core-2.14.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a874f21f87c485310944b2b2734cd6d318765bcbb7515eead33af9641816506e"}, + {file = "pydantic_core-2.14.6-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b89f4477d915ea43b4ceea6756f63f0288941b6443a2b28c69004fe07fde0d0d"}, + {file = "pydantic_core-2.14.6-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:172de779e2a153d36ee690dbc49c6db568d7b33b18dc56b69a7514aecbcf380d"}, + {file = "pydantic_core-2.14.6-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:dfcebb950aa7e667ec226a442722134539e77c575f6cfaa423f24371bb8d2e94"}, + {file = "pydantic_core-2.14.6-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:55a23dcd98c858c0db44fc5c04fc7ed81c4b4d33c653a7c45ddaebf6563a2f66"}, + {file = "pydantic_core-2.14.6-pp37-pypy37_pp73-macosx_10_7_x86_64.whl", hash = "sha256:4241204e4b36ab5ae466ecec5c4c16527a054c69f99bba20f6f75232a6a534e2"}, + {file = "pydantic_core-2.14.6-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e574de99d735b3fc8364cba9912c2bec2da78775eba95cbb225ef7dda6acea24"}, + {file = "pydantic_core-2.14.6-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1302a54f87b5cd8528e4d6d1bf2133b6aa7c6122ff8e9dc5220fbc1e07bffebd"}, + {file = "pydantic_core-2.14.6-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f8e81e4b55930e5ffab4a68db1af431629cf2e4066dbdbfef65348b8ab804ea8"}, + {file = "pydantic_core-2.14.6-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:c99462ffc538717b3e60151dfaf91125f637e801f5ab008f81c402f1dff0cd0f"}, + {file = "pydantic_core-2.14.6-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:e4cf2d5829f6963a5483ec01578ee76d329eb5caf330ecd05b3edd697e7d768a"}, + {file = "pydantic_core-2.14.6-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:cf10b7d58ae4a1f07fccbf4a0a956d705356fea05fb4c70608bb6fa81d103cda"}, + {file = "pydantic_core-2.14.6-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:399ac0891c284fa8eb998bcfa323f2234858f5d2efca3950ae58c8f88830f145"}, + {file = "pydantic_core-2.14.6-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c6a5c79b28003543db3ba67d1df336f253a87d3112dac3a51b94f7d48e4c0e1"}, + {file = "pydantic_core-2.14.6-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:599c87d79cab2a6a2a9df4aefe0455e61e7d2aeede2f8577c1b7c0aec643ee8e"}, + {file = "pydantic_core-2.14.6-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:43e166ad47ba900f2542a80d83f9fc65fe99eb63ceec4debec160ae729824052"}, + {file = "pydantic_core-2.14.6-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:3a0b5db001b98e1c649dd55afa928e75aa4087e587b9524a4992316fa23c9fba"}, + {file = "pydantic_core-2.14.6-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:747265448cb57a9f37572a488a57d873fd96bf51e5bb7edb52cfb37124516da4"}, + {file = "pydantic_core-2.14.6-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:7ebe3416785f65c28f4f9441e916bfc8a54179c8dea73c23023f7086fa601c5d"}, + {file = "pydantic_core-2.14.6-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:86c963186ca5e50d5c8287b1d1c9d3f8f024cbe343d048c5bd282aec2d8641f2"}, + {file = "pydantic_core-2.14.6-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:e0641b506486f0b4cd1500a2a65740243e8670a2549bb02bc4556a83af84ae03"}, + {file = "pydantic_core-2.14.6-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71d72ca5eaaa8d38c8df16b7deb1a2da4f650c41b58bb142f3fb75d5ad4a611f"}, + {file = "pydantic_core-2.14.6-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27e524624eace5c59af499cd97dc18bb201dc6a7a2da24bfc66ef151c69a5f2a"}, + {file = "pydantic_core-2.14.6-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a3dde6cac75e0b0902778978d3b1646ca9f438654395a362cb21d9ad34b24acf"}, + {file = "pydantic_core-2.14.6-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:00646784f6cd993b1e1c0e7b0fdcbccc375d539db95555477771c27555e3c556"}, + {file = "pydantic_core-2.14.6-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:23598acb8ccaa3d1d875ef3b35cb6376535095e9405d91a3d57a8c7db5d29341"}, + {file = "pydantic_core-2.14.6-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7f41533d7e3cf9520065f610b41ac1c76bc2161415955fbcead4981b22c7611e"}, + {file = "pydantic_core-2.14.6.tar.gz", hash = "sha256:1fd0c1d395372843fba13a51c28e3bb9d59bd7aebfeb17358ffaaa1e4dbbe948"}, +] + +[package.dependencies] +typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" + +[[package]] +name = "python-dateutil" +version = "2.8.2" +description = "Extensions to the standard Python datetime module" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +files = [ + {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, + {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, +] + +[package.dependencies] +six = ">=1.5" + [[package]] name = "python-dotenv" version = "1.0.1" @@ -892,6 +1671,17 @@ files = [ [package.extras] cli = ["click (>=5.0)"] +[[package]] +name = "pytz" +version = "2023.3.post1" +description = "World timezone definitions, modern and historical" +optional = false +python-versions = "*" +files = [ + {file = "pytz-2023.3.post1-py2.py3-none-any.whl", hash = "sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7"}, + {file = "pytz-2023.3.post1.tar.gz", hash = "sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b"}, +] + [[package]] name = "pyyaml" version = "6.0.1" @@ -1018,6 +1808,248 @@ docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] +[[package]] +name = "shapely" +version = "2.0.2" +description = "Manipulation and analysis of geometric objects" +optional = false +python-versions = ">=3.7" +files = [ + {file = "shapely-2.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:6ca8cffbe84ddde8f52b297b53f8e0687bd31141abb2c373fd8a9f032df415d6"}, + {file = "shapely-2.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:baa14fc27771e180c06b499a0a7ba697c7988c7b2b6cba9a929a19a4d2762de3"}, + {file = "shapely-2.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:36480e32c434d168cdf2f5e9862c84aaf4d714a43a8465ae3ce8ff327f0affb7"}, + {file = "shapely-2.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ef753200cbffd4f652efb2c528c5474e5a14341a473994d90ad0606522a46a2"}, + {file = "shapely-2.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9a41ff4323fc9d6257759c26eb1cf3a61ebc7e611e024e6091f42977303fd3a"}, + {file = "shapely-2.0.2-cp310-cp310-win32.whl", hash = "sha256:72b5997272ae8c25f0fd5b3b967b3237e87fab7978b8d6cd5fa748770f0c5d68"}, + {file = "shapely-2.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:34eac2337cbd67650248761b140d2535855d21b969d76d76123317882d3a0c1a"}, + {file = "shapely-2.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5b0c052709c8a257c93b0d4943b0b7a3035f87e2d6a8ac9407b6a992d206422f"}, + {file = "shapely-2.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2d217e56ae067e87b4e1731d0dc62eebe887ced729ba5c2d4590e9e3e9fdbd88"}, + {file = "shapely-2.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:94ac128ae2ab4edd0bffcd4e566411ea7bdc738aeaf92c32a8a836abad725f9f"}, + {file = "shapely-2.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa3ee28f5e63a130ec5af4dc3c4cb9c21c5788bb13c15e89190d163b14f9fb89"}, + {file = "shapely-2.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:737dba15011e5a9b54a8302f1748b62daa207c9bc06f820cd0ad32a041f1c6f2"}, + {file = "shapely-2.0.2-cp311-cp311-win32.whl", hash = "sha256:45ac6906cff0765455a7b49c1670af6e230c419507c13e2f75db638c8fc6f3bd"}, + {file = "shapely-2.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:dc9342fc82e374130db86a955c3c4525bfbf315a248af8277a913f30911bed9e"}, + {file = "shapely-2.0.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:06f193091a7c6112fc08dfd195a1e3846a64306f890b151fa8c63b3e3624202c"}, + {file = "shapely-2.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:eebe544df5c018134f3c23b6515877f7e4cd72851f88a8d0c18464f414d141a2"}, + {file = "shapely-2.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7e92e7c255f89f5cdf777690313311f422aa8ada9a3205b187113274e0135cd8"}, + {file = "shapely-2.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be46d5509b9251dd9087768eaf35a71360de6afac82ce87c636990a0871aa18b"}, + {file = "shapely-2.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5533a925d8e211d07636ffc2fdd9a7f9f13d54686d00577eeb11d16f00be9c4"}, + {file = "shapely-2.0.2-cp312-cp312-win32.whl", hash = "sha256:084b023dae8ad3d5b98acee9d3bf098fdf688eb0bb9b1401e8b075f6a627b611"}, + {file = "shapely-2.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:ea84d1cdbcf31e619d672b53c4532f06253894185ee7acb8ceb78f5f33cbe033"}, + {file = "shapely-2.0.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ed1e99702125e7baccf401830a3b94d810d5c70b329b765fe93451fe14cf565b"}, + {file = "shapely-2.0.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e7d897e6bdc6bc64f7f65155dbbb30e49acaabbd0d9266b9b4041f87d6e52b3a"}, + {file = "shapely-2.0.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0521d76d1e8af01e712db71da9096b484f081e539d4f4a8c97342e7971d5e1b4"}, + {file = "shapely-2.0.2-cp37-cp37m-win32.whl", hash = "sha256:5324be299d4c533ecfcfd43424dfd12f9428fd6f12cda38a4316da001d6ef0ea"}, + {file = "shapely-2.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:78128357a0cee573257a0c2c388d4b7bf13cb7dbe5b3fe5d26d45ebbe2a39e25"}, + {file = "shapely-2.0.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:87dc2be34ac3a3a4a319b963c507ac06682978a5e6c93d71917618b14f13066e"}, + {file = "shapely-2.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:42997ac806e4583dad51c80a32d38570fd9a3d4778f5e2c98f9090aa7db0fe91"}, + {file = "shapely-2.0.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ccfd5fa10a37e67dbafc601c1ddbcbbfef70d34c3f6b0efc866ddbdb55893a6c"}, + {file = "shapely-2.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e7c95d3379ae3abb74058938a9fcbc478c6b2e28d20dace38f8b5c587dde90aa"}, + {file = "shapely-2.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a21353d28209fb0d8cc083e08ca53c52666e0d8a1f9bbe23b6063967d89ed24"}, + {file = "shapely-2.0.2-cp38-cp38-win32.whl", hash = "sha256:03e63a99dfe6bd3beb8d5f41ec2086585bb969991d603f9aeac335ad396a06d4"}, + {file = "shapely-2.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:c6fd29fbd9cd76350bd5cc14c49de394a31770aed02d74203e23b928f3d2f1aa"}, + {file = "shapely-2.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:1f217d28ecb48e593beae20a0082a95bd9898d82d14b8fcb497edf6bff9a44d7"}, + {file = "shapely-2.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:394e5085b49334fd5b94fa89c086edfb39c3ecab7f669e8b2a4298b9d523b3a5"}, + {file = "shapely-2.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fd3ad17b64466a033848c26cb5b509625c87d07dcf39a1541461cacdb8f7e91c"}, + {file = "shapely-2.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d41a116fcad58048d7143ddb01285e1a8780df6dc1f56c3b1e1b7f12ed296651"}, + {file = "shapely-2.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dea9a0651333cf96ef5bb2035044e3ad6a54f87d90e50fe4c2636debf1b77abc"}, + {file = "shapely-2.0.2-cp39-cp39-win32.whl", hash = "sha256:b8eb0a92f7b8c74f9d8fdd1b40d395113f59bd8132ca1348ebcc1f5aece94b96"}, + {file = "shapely-2.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:794affd80ca0f2c536fc948a3afa90bd8fb61ebe37fe873483ae818e7f21def4"}, + {file = "shapely-2.0.2.tar.gz", hash = "sha256:1713cc04c171baffc5b259ba8531c58acc2a301707b7f021d88a15ed090649e7"}, +] + +[package.dependencies] +numpy = ">=1.14" + +[package.extras] +docs = ["matplotlib", "numpydoc (==1.1.*)", "sphinx", "sphinx-book-theme", "sphinx-remove-toctrees"] +test = ["pytest", "pytest-cov"] + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] + +[[package]] +name = "sniffio" +version = "1.3.0" +description = "Sniff out which async library your code is running under" +optional = false +python-versions = ">=3.7" +files = [ + {file = "sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"}, + {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, +] + +[[package]] +name = "sqlalchemy" +version = "2.0.25" +description = "Database Abstraction Library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "SQLAlchemy-2.0.25-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4344d059265cc8b1b1be351bfb88749294b87a8b2bbe21dfbe066c4199541ebd"}, + {file = "SQLAlchemy-2.0.25-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6f9e2e59cbcc6ba1488404aad43de005d05ca56e069477b33ff74e91b6319735"}, + {file = "SQLAlchemy-2.0.25-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:84daa0a2055df9ca0f148a64fdde12ac635e30edbca80e87df9b3aaf419e144a"}, + {file = "SQLAlchemy-2.0.25-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc8b7dabe8e67c4832891a5d322cec6d44ef02f432b4588390017f5cec186a84"}, + {file = "SQLAlchemy-2.0.25-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:f5693145220517b5f42393e07a6898acdfe820e136c98663b971906120549da5"}, + {file = "SQLAlchemy-2.0.25-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:db854730a25db7c956423bb9fb4bdd1216c839a689bf9cc15fada0a7fb2f4570"}, + {file = "SQLAlchemy-2.0.25-cp310-cp310-win32.whl", hash = "sha256:14a6f68e8fc96e5e8f5647ef6cda6250c780612a573d99e4d881581432ef1669"}, + {file = "SQLAlchemy-2.0.25-cp310-cp310-win_amd64.whl", hash = "sha256:87f6e732bccd7dcf1741c00f1ecf33797383128bd1c90144ac8adc02cbb98643"}, + {file = "SQLAlchemy-2.0.25-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:342d365988ba88ada8af320d43df4e0b13a694dbd75951f537b2d5e4cb5cd002"}, + {file = "SQLAlchemy-2.0.25-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f37c0caf14b9e9b9e8f6dbc81bc56db06acb4363eba5a633167781a48ef036ed"}, + {file = "SQLAlchemy-2.0.25-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa9373708763ef46782d10e950b49d0235bfe58facebd76917d3f5cbf5971aed"}, + {file = "SQLAlchemy-2.0.25-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d24f571990c05f6b36a396218f251f3e0dda916e0c687ef6fdca5072743208f5"}, + {file = "SQLAlchemy-2.0.25-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:75432b5b14dc2fff43c50435e248b45c7cdadef73388e5610852b95280ffd0e9"}, + {file = "SQLAlchemy-2.0.25-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:884272dcd3ad97f47702965a0e902b540541890f468d24bd1d98bcfe41c3f018"}, + {file = "SQLAlchemy-2.0.25-cp311-cp311-win32.whl", hash = "sha256:e607cdd99cbf9bb80391f54446b86e16eea6ad309361942bf88318bcd452363c"}, + {file = "SQLAlchemy-2.0.25-cp311-cp311-win_amd64.whl", hash = "sha256:7d505815ac340568fd03f719446a589162d55c52f08abd77ba8964fbb7eb5b5f"}, + {file = "SQLAlchemy-2.0.25-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:0dacf67aee53b16f365c589ce72e766efaabd2b145f9de7c917777b575e3659d"}, + {file = "SQLAlchemy-2.0.25-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b801154027107461ee992ff4b5c09aa7cc6ec91ddfe50d02bca344918c3265c6"}, + {file = "SQLAlchemy-2.0.25-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59a21853f5daeb50412d459cfb13cb82c089ad4c04ec208cd14dddd99fc23b39"}, + {file = "SQLAlchemy-2.0.25-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:29049e2c299b5ace92cbed0c1610a7a236f3baf4c6b66eb9547c01179f638ec5"}, + {file = "SQLAlchemy-2.0.25-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b64b183d610b424a160b0d4d880995e935208fc043d0302dd29fee32d1ee3f95"}, + {file = "SQLAlchemy-2.0.25-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4f7a7d7fcc675d3d85fbf3b3828ecd5990b8d61bd6de3f1b260080b3beccf215"}, + {file = "SQLAlchemy-2.0.25-cp312-cp312-win32.whl", hash = "sha256:cf18ff7fc9941b8fc23437cc3e68ed4ebeff3599eec6ef5eebf305f3d2e9a7c2"}, + {file = "SQLAlchemy-2.0.25-cp312-cp312-win_amd64.whl", hash = "sha256:91f7d9d1c4dd1f4f6e092874c128c11165eafcf7c963128f79e28f8445de82d5"}, + {file = "SQLAlchemy-2.0.25-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:bb209a73b8307f8fe4fe46f6ad5979649be01607f11af1eb94aa9e8a3aaf77f0"}, + {file = "SQLAlchemy-2.0.25-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:798f717ae7c806d67145f6ae94dc7c342d3222d3b9a311a784f371a4333212c7"}, + {file = "SQLAlchemy-2.0.25-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fdd402169aa00df3142149940b3bf9ce7dde075928c1886d9a1df63d4b8de62"}, + {file = "SQLAlchemy-2.0.25-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:0d3cab3076af2e4aa5693f89622bef7fa770c6fec967143e4da7508b3dceb9b9"}, + {file = "SQLAlchemy-2.0.25-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:74b080c897563f81062b74e44f5a72fa44c2b373741a9ade701d5f789a10ba23"}, + {file = "SQLAlchemy-2.0.25-cp37-cp37m-win32.whl", hash = "sha256:87d91043ea0dc65ee583026cb18e1b458d8ec5fc0a93637126b5fc0bc3ea68c4"}, + {file = "SQLAlchemy-2.0.25-cp37-cp37m-win_amd64.whl", hash = "sha256:75f99202324383d613ddd1f7455ac908dca9c2dd729ec8584c9541dd41822a2c"}, + {file = "SQLAlchemy-2.0.25-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:420362338681eec03f53467804541a854617faed7272fe71a1bfdb07336a381e"}, + {file = "SQLAlchemy-2.0.25-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7c88f0c7dcc5f99bdb34b4fd9b69b93c89f893f454f40219fe923a3a2fd11625"}, + {file = "SQLAlchemy-2.0.25-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3be4987e3ee9d9a380b66393b77a4cd6d742480c951a1c56a23c335caca4ce3"}, + {file = "SQLAlchemy-2.0.25-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2a159111a0f58fb034c93eeba211b4141137ec4b0a6e75789ab7a3ef3c7e7e3"}, + {file = "SQLAlchemy-2.0.25-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8b8cb63d3ea63b29074dcd29da4dc6a97ad1349151f2d2949495418fd6e48db9"}, + {file = "SQLAlchemy-2.0.25-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:736ea78cd06de6c21ecba7416499e7236a22374561493b456a1f7ffbe3f6cdb4"}, + {file = "SQLAlchemy-2.0.25-cp38-cp38-win32.whl", hash = "sha256:10331f129982a19df4284ceac6fe87353ca3ca6b4ca77ff7d697209ae0a5915e"}, + {file = "SQLAlchemy-2.0.25-cp38-cp38-win_amd64.whl", hash = "sha256:c55731c116806836a5d678a70c84cb13f2cedba920212ba7dcad53260997666d"}, + {file = "SQLAlchemy-2.0.25-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:605b6b059f4b57b277f75ace81cc5bc6335efcbcc4ccb9066695e515dbdb3900"}, + {file = "SQLAlchemy-2.0.25-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:665f0a3954635b5b777a55111ababf44b4fc12b1f3ba0a435b602b6387ffd7cf"}, + {file = "SQLAlchemy-2.0.25-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ecf6d4cda1f9f6cb0b45803a01ea7f034e2f1aed9475e883410812d9f9e3cfcf"}, + {file = "SQLAlchemy-2.0.25-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c51db269513917394faec5e5c00d6f83829742ba62e2ac4fa5c98d58be91662f"}, + {file = "SQLAlchemy-2.0.25-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:790f533fa5c8901a62b6fef5811d48980adeb2f51f1290ade8b5e7ba990ba3de"}, + {file = "SQLAlchemy-2.0.25-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1b1180cda6df7af84fe72e4530f192231b1f29a7496951db4ff38dac1687202d"}, + {file = "SQLAlchemy-2.0.25-cp39-cp39-win32.whl", hash = "sha256:555651adbb503ac7f4cb35834c5e4ae0819aab2cd24857a123370764dc7d7e24"}, + {file = "SQLAlchemy-2.0.25-cp39-cp39-win_amd64.whl", hash = "sha256:dc55990143cbd853a5d038c05e79284baedf3e299661389654551bd02a6a68d7"}, + {file = "SQLAlchemy-2.0.25-py3-none-any.whl", hash = "sha256:a86b4240e67d4753dc3092d9511886795b3c2852abe599cffe108952f7af7ac3"}, + {file = "SQLAlchemy-2.0.25.tar.gz", hash = "sha256:a2c69a7664fb2d54b8682dd774c3b54f67f84fa123cf84dda2a5f40dcaa04e08"}, +] + +[package.dependencies] +greenlet = {version = "!=0.4.17", markers = "platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\""} +typing-extensions = ">=4.6.0" + +[package.extras] +aiomysql = ["aiomysql (>=0.2.0)", "greenlet (!=0.4.17)"] +aioodbc = ["aioodbc", "greenlet (!=0.4.17)"] +aiosqlite = ["aiosqlite", "greenlet (!=0.4.17)", "typing_extensions (!=3.10.0.1)"] +asyncio = ["greenlet (!=0.4.17)"] +asyncmy = ["asyncmy (>=0.2.3,!=0.2.4,!=0.2.6)", "greenlet (!=0.4.17)"] +mariadb-connector = ["mariadb (>=1.0.1,!=1.1.2,!=1.1.5)"] +mssql = ["pyodbc"] +mssql-pymssql = ["pymssql"] +mssql-pyodbc = ["pyodbc"] +mypy = ["mypy (>=0.910)"] +mysql = ["mysqlclient (>=1.4.0)"] +mysql-connector = ["mysql-connector-python"] +oracle = ["cx_oracle (>=8)"] +oracle-oracledb = ["oracledb (>=1.0.1)"] +postgresql = ["psycopg2 (>=2.7)"] +postgresql-asyncpg = ["asyncpg", "greenlet (!=0.4.17)"] +postgresql-pg8000 = ["pg8000 (>=1.29.1)"] +postgresql-psycopg = ["psycopg (>=3.0.7)"] +postgresql-psycopg2binary = ["psycopg2-binary"] +postgresql-psycopg2cffi = ["psycopg2cffi"] +postgresql-psycopgbinary = ["psycopg[binary] (>=3.0.7)"] +pymysql = ["pymysql"] +sqlcipher = ["sqlcipher3_binary"] + +[[package]] +name = "tenacity" +version = "8.2.3" +description = "Retry code until it succeeds" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tenacity-8.2.3-py3-none-any.whl", hash = "sha256:ce510e327a630c9e1beaf17d42e6ffacc88185044ad85cf74c0a8887c6a0f88c"}, + {file = "tenacity-8.2.3.tar.gz", hash = "sha256:5398ef0d78e63f40007c1fb4c0bff96e1911394d2fa8d194f77619c05ff6cc8a"}, +] + +[package.extras] +doc = ["reno", "sphinx", "tornado (>=4.5)"] + +[[package]] +name = "types-protobuf" +version = "4.24.0.20240106" +description = "Typing stubs for protobuf" +optional = false +python-versions = ">=3.8" +files = [ + {file = "types-protobuf-4.24.0.20240106.tar.gz", hash = "sha256:024f034f3b5e2bb2bbff55ebc4d591ed0d2280d90faceedcb148b9e714a3f3ee"}, + {file = "types_protobuf-4.24.0.20240106-py3-none-any.whl", hash = "sha256:0612ef3156bd80567460a15ac7c109b313f6022f1fee04b4d922ab2789baab79"}, +] + +[[package]] +name = "types-requests" +version = "2.31.0.20240125" +description = "Typing stubs for requests" +optional = false +python-versions = ">=3.8" +files = [ + {file = "types-requests-2.31.0.20240125.tar.gz", hash = "sha256:03a28ce1d7cd54199148e043b2079cdded22d6795d19a2c2a6791a4b2b5e2eb5"}, + {file = "types_requests-2.31.0.20240125-py3-none-any.whl", hash = "sha256:9592a9a4cb92d6d75d9b491a41477272b710e021011a2a3061157e2fb1f1a5d1"}, +] + +[package.dependencies] +urllib3 = ">=2" + +[[package]] +name = "typing-extensions" +version = "4.9.0" +description = "Backported and Experimental Type Hints for Python 3.8+" +optional = false +python-versions = ">=3.8" +files = [ + {file = "typing_extensions-4.9.0-py3-none-any.whl", hash = "sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd"}, + {file = "typing_extensions-4.9.0.tar.gz", hash = "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783"}, +] + +[[package]] +name = "typing-inspect" +version = "0.9.0" +description = "Runtime inspection utilities for typing module." +optional = false +python-versions = "*" +files = [ + {file = "typing_inspect-0.9.0-py3-none-any.whl", hash = "sha256:9ee6fc59062311ef8547596ab6b955e1b8aa46242d854bfc78f4f6b0eff35f9f"}, + {file = "typing_inspect-0.9.0.tar.gz", hash = "sha256:b23fc42ff6f6ef6954e4852c1fb512cdd18dbea03134f91f856a95ccc9461f78"}, +] + +[package.dependencies] +mypy-extensions = ">=0.3.0" +typing-extensions = ">=3.7.4" + +[[package]] +name = "tzdata" +version = "2023.4" +description = "Provider of IANA time zone data" +optional = false +python-versions = ">=2" +files = [ + {file = "tzdata-2023.4-py2.py3-none-any.whl", hash = "sha256:aa3ace4329eeacda5b7beb7ea08ece826c28d761cda36e747cfbf97996d39bf3"}, + {file = "tzdata-2023.4.tar.gz", hash = "sha256:dd54c94f294765522c77399649b4fefd95522479a664a0cec87f41bebc6148c9"}, +] + [[package]] name = "urllib3" version = "2.1.0" @@ -1160,4 +2192,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = "^3.11" -content-hash = "2dd4c88fb67b6e1e63445e3b83760af9d4f572ea4db1368b81e83e30e9d2ca7b" +content-hash = "79505ef7520d43f032214142bc074d5d9c6b94f310b61488463dd9bbbe3d1246" diff --git a/monitor/pyproject.toml b/pyproject.toml similarity index 78% rename from monitor/pyproject.toml rename to pyproject.toml index 407d531..500e0e4 100644 --- a/monitor/pyproject.toml +++ b/pyproject.toml @@ -12,8 +12,12 @@ ruff = "^0.1.14" google-cloud-run = "^0.10.1" google-cloud-logging = "^3.9.0" google-cloud-monitoring = "^2.18.0" -python-dotenv = "^1.0.1" +python-dotenv = "1.0.1" discord-py = "^2.3.2" +google-cloud-aiplatform = "1.39.0" +langchain = "0.1.3" +pandas = "2.2.0" +langchain-google-vertexai = "0.0.2" [build-system] From 465394b2c4e05dd9a8b5d8fd0656e15db5e81de4 Mon Sep 17 00:00:00 2001 From: peterxcli Date: Thu, 25 Jan 2024 15:49:48 +0800 Subject: [PATCH 41/44] change tail log func to return generator and logging library version --- monitor/service/log.py | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/monitor/service/log.py b/monitor/service/log.py index 4f5a1bf..83b3f41 100644 --- a/monitor/service/log.py +++ b/monitor/service/log.py @@ -1,7 +1,7 @@ import os + from dotenv import load_dotenv -from google.cloud import logging -from google.cloud.logging_v2 import LogEntry +from google.cloud import logging_v2 load_dotenv(".env/dev.env") @@ -15,7 +15,7 @@ def get_cloud_run_logs(service_name): - client = logging.Client() + client = logging_v2.Client() logger = client.logger(service_name) logs = logger.list_entries() @@ -42,7 +42,7 @@ def list_all_log_entries(): "projects/tsmccareerhack2024-icsd-grp5/logs/run.googleapis.com%2Fstderr" ) - logging_client = logging.Client() + logging_client = logging_v2.Client() logger = logging_client.logger(logger_name) print("Listing entries for logger {}:".format(logger.name)) @@ -79,7 +79,7 @@ def get_enque_deque_log(): pass -def tail_log_entry(): +def tail_log_entry(service_name): """ resource.type="cloud_run_revision" resource.labels.revision_name="consumer-sentry-00004-864" @@ -88,23 +88,22 @@ def tail_log_entry(): logName="projects/tsmccareerhack2024-icsd-grp5/logs/run.googleapis.com%2Fstderr" """ - client = logging.Client() + client = logging_v2.Client() logger_name = "run.googleapis.com%2Fstderr" logger = client.logger(logger_name) resource_type = '"cloud_run_revision"' - revision_name = '"consumer-sentry-00004-864"' - service_name = '"consumer-sentry"' + # revision_name = '"consumer-sentry-00004-864"' severity = '"DEFAULT"' - query: LogEntry = logger.list_entries( - filter_=f"resource.type={resource_type} AND resource.labels.revision_name={revision_name} AND resource.labels.service_name={service_name} AND severity={severity}", + query: logging_v2.LogEntry = logger.list_entries( + filter_=f"resource.type={resource_type} AND resource.labels.service_name={service_name}", max_results=10, - order_by=logging.DESCENDING, + order_by=logging_v2.DESCENDING, ) for entry in query: - print(entry.payload) + yield f"{entry.timestamp} {entry.payload}" # REST API From 0dc2d7494839597b7f599c73d96e63e373dcc742 Mon Sep 17 00:00:00 2001 From: peterxcli Date: Thu, 25 Jan 2024 15:50:11 +0800 Subject: [PATCH 42/44] feat: add a runner to the monitor process --- monitor_runner.py | 52 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 monitor_runner.py diff --git a/monitor_runner.py b/monitor_runner.py new file mode 100644 index 0000000..525299b --- /dev/null +++ b/monitor_runner.py @@ -0,0 +1,52 @@ +import re +import time + +import pandas as pd + +from ai.analyze import ( # noqa: F401 + analyze_by_llm, + analyze_cpu_usage, + analyze_instance_count, + analyze_mem_usage, + analyze_restart, +) +from monitor.service import cloudrun, log + +cloudrun.CloudRunManager() + + +def parser(line): + pattern = r"(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d+\+\d{2}:\d{2}) (\w+): +(\d+\.\d+),(\d+\.\d+),(\d+),(\d+\.\d+)" + + match = re.match(pattern, line) + if match: + parsed_data = [match.groups()] + + df = pd.DataFrame( + parsed_data, + columns=["time", "level", "cpu", "ram", "remain_count", "avg_exe_time"], + ) + + df["time"] = pd.to_datetime(df["time"]) + df[["cpu", "ram", "avg_exe_time"]] = df[["cpu", "ram", "avg_exe_time"]].astype( + float + ) + df["remain_count"] = df["remain_count"].astype(int) + + return df + + +if __name__ == "__main__": + print("Running monitor runner...") + logDF = pd.DataFrame() + while True: + for log_line in log.tail_log_entry(service_name="consumer-sentry"): + # print(log) + # print("separator") + parse_df = parser(log_line) + logDF = pd.concat([logDF, parse_df], ignore_index=True) + with open("log_data.csv", "w") as f: + logDF.to_csv(f, index=False) + # analyze_by_llm(logDF) #TODO: fix: if key not exist, ignore that key + # analyze_by_llm() + time.sleep(10) From 9eb6d66e1df2a7e5bb61a233e81310005d8c8078 Mon Sep 17 00:00:00 2001 From: peterxcli Date: Thu, 25 Jan 2024 17:36:27 +0800 Subject: [PATCH 43/44] chore: regenerate poetry lock for consumer --- consumer/poetry.lock | 620 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 620 insertions(+) create mode 100644 consumer/poetry.lock diff --git a/consumer/poetry.lock b/consumer/poetry.lock new file mode 100644 index 0000000..f921a5d --- /dev/null +++ b/consumer/poetry.lock @@ -0,0 +1,620 @@ +# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. + +[[package]] +name = "annotated-types" +version = "0.6.0" +description = "Reusable constraint types to use with typing.Annotated" +optional = false +python-versions = ">=3.8" +files = [ + {file = "annotated_types-0.6.0-py3-none-any.whl", hash = "sha256:0641064de18ba7a25dee8f96403ebc39113d0cb953a01429249d5c7564666a43"}, + {file = "annotated_types-0.6.0.tar.gz", hash = "sha256:563339e807e53ffd9c267e99fc6d9ea23eb8443c08f112651963e24e22f84a5d"}, +] + +[[package]] +name = "anyio" +version = "4.2.0" +description = "High level compatibility layer for multiple asynchronous event loop implementations" +optional = false +python-versions = ">=3.8" +files = [ + {file = "anyio-4.2.0-py3-none-any.whl", hash = "sha256:745843b39e829e108e518c489b31dc757de7d2131d53fac32bd8df268227bfee"}, + {file = "anyio-4.2.0.tar.gz", hash = "sha256:e1875bb4b4e2de1669f4bc7869b6d3f54231cdced71605e6e64c9be77e3be50f"}, +] + +[package.dependencies] +idna = ">=2.8" +sniffio = ">=1.1" + +[package.extras] +doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] +trio = ["trio (>=0.23)"] + +[[package]] +name = "certifi" +version = "2023.11.17" +description = "Python package for providing Mozilla's CA Bundle." +optional = false +python-versions = ">=3.6" +files = [ + {file = "certifi-2023.11.17-py3-none-any.whl", hash = "sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474"}, + {file = "certifi-2023.11.17.tar.gz", hash = "sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1"}, +] + +[[package]] +name = "cfgv" +version = "3.4.0" +description = "Validate configuration and produce human readable error messages." +optional = false +python-versions = ">=3.8" +files = [ + {file = "cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9"}, + {file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"}, +] + +[[package]] +name = "click" +version = "8.1.7" +description = "Composable command line interface toolkit" +optional = false +python-versions = ">=3.7" +files = [ + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "distlib" +version = "0.3.8" +description = "Distribution utilities" +optional = false +python-versions = "*" +files = [ + {file = "distlib-0.3.8-py2.py3-none-any.whl", hash = "sha256:034db59a0b96f8ca18035f36290806a9a6e6bd9d1ff91e45a7f172eb17e51784"}, + {file = "distlib-0.3.8.tar.gz", hash = "sha256:1530ea13e350031b6312d8580ddb6b27a104275a31106523b8f123787f494f64"}, +] + +[[package]] +name = "fastapi" +version = "0.109.0" +description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" +optional = false +python-versions = ">=3.8" +files = [ + {file = "fastapi-0.109.0-py3-none-any.whl", hash = "sha256:8c77515984cd8e8cfeb58364f8cc7a28f0692088475e2614f7bf03275eba9093"}, + {file = "fastapi-0.109.0.tar.gz", hash = "sha256:b978095b9ee01a5cf49b19f4bc1ac9b8ca83aa076e770ef8fd9af09a2b88d191"}, +] + +[package.dependencies] +pydantic = ">=1.7.4,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0 || >2.0.0,<2.0.1 || >2.0.1,<2.1.0 || >2.1.0,<3.0.0" +starlette = ">=0.35.0,<0.36.0" +typing-extensions = ">=4.8.0" + +[package.extras] +all = ["email-validator (>=2.0.0)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=2.11.2)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.5)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"] + +[[package]] +name = "filelock" +version = "3.13.1" +description = "A platform independent file lock." +optional = false +python-versions = ">=3.8" +files = [ + {file = "filelock-3.13.1-py3-none-any.whl", hash = "sha256:57dbda9b35157b05fb3e58ee91448612eb674172fab98ee235ccb0b5bee19a1c"}, + {file = "filelock-3.13.1.tar.gz", hash = "sha256:521f5f56c50f8426f5e03ad3b281b490a87ef15bc6c526f168290f0c7148d44e"}, +] + +[package.extras] +docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.24)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"] +typing = ["typing-extensions (>=4.8)"] + +[[package]] +name = "h11" +version = "0.14.0" +description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" +optional = false +python-versions = ">=3.7" +files = [ + {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, + {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, +] + +[[package]] +name = "identify" +version = "2.5.33" +description = "File identification library for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "identify-2.5.33-py2.py3-none-any.whl", hash = "sha256:d40ce5fcd762817627670da8a7d8d8e65f24342d14539c59488dc603bf662e34"}, + {file = "identify-2.5.33.tar.gz", hash = "sha256:161558f9fe4559e1557e1bff323e8631f6a0e4837f7497767c1782832f16b62d"}, +] + +[package.extras] +license = ["ukkonen"] + +[[package]] +name = "idna" +version = "3.6" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.5" +files = [ + {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"}, + {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"}, +] + +[[package]] +name = "nodeenv" +version = "1.8.0" +description = "Node.js virtual environment builder" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" +files = [ + {file = "nodeenv-1.8.0-py2.py3-none-any.whl", hash = "sha256:df865724bb3c3adc86b3876fa209771517b0cfe596beff01a92700e0e8be4cec"}, + {file = "nodeenv-1.8.0.tar.gz", hash = "sha256:d51e0c37e64fbf47d017feac3145cdbb58836d7eee8c6f6d3b6880c5456227d2"}, +] + +[package.dependencies] +setuptools = "*" + +[[package]] +name = "platformdirs" +version = "4.1.0" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +optional = false +python-versions = ">=3.8" +files = [ + {file = "platformdirs-4.1.0-py3-none-any.whl", hash = "sha256:11c8f37bcca40db96d8144522d925583bdb7a31f7b0e37e3ed4318400a8e2380"}, + {file = "platformdirs-4.1.0.tar.gz", hash = "sha256:906d548203468492d432bcb294d4bc2fff751bf84971fbb2c10918cc206ee420"}, +] + +[package.extras] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] + +[[package]] +name = "pre-commit" +version = "3.6.0" +description = "A framework for managing and maintaining multi-language pre-commit hooks." +optional = false +python-versions = ">=3.9" +files = [ + {file = "pre_commit-3.6.0-py2.py3-none-any.whl", hash = "sha256:c255039ef399049a5544b6ce13d135caba8f2c28c3b4033277a788f434308376"}, + {file = "pre_commit-3.6.0.tar.gz", hash = "sha256:d30bad9abf165f7785c15a21a1f46da7d0677cb00ee7ff4c579fd38922efe15d"}, +] + +[package.dependencies] +cfgv = ">=2.0.0" +identify = ">=1.0.0" +nodeenv = ">=0.11.1" +pyyaml = ">=5.1" +virtualenv = ">=20.10.0" + +[[package]] +name = "psutil" +version = "5.9.8" +description = "Cross-platform lib for process and system monitoring in Python." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +files = [ + {file = "psutil-5.9.8-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:26bd09967ae00920df88e0352a91cff1a78f8d69b3ecabbfe733610c0af486c8"}, + {file = "psutil-5.9.8-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:05806de88103b25903dff19bb6692bd2e714ccf9e668d050d144012055cbca73"}, + {file = "psutil-5.9.8-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:611052c4bc70432ec770d5d54f64206aa7203a101ec273a0cd82418c86503bb7"}, + {file = "psutil-5.9.8-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:50187900d73c1381ba1454cf40308c2bf6f34268518b3f36a9b663ca87e65e36"}, + {file = "psutil-5.9.8-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:02615ed8c5ea222323408ceba16c60e99c3f91639b07da6373fb7e6539abc56d"}, + {file = "psutil-5.9.8-cp27-none-win32.whl", hash = "sha256:36f435891adb138ed3c9e58c6af3e2e6ca9ac2f365efe1f9cfef2794e6c93b4e"}, + {file = "psutil-5.9.8-cp27-none-win_amd64.whl", hash = "sha256:bd1184ceb3f87651a67b2708d4c3338e9b10c5df903f2e3776b62303b26cb631"}, + {file = "psutil-5.9.8-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:aee678c8720623dc456fa20659af736241f575d79429a0e5e9cf88ae0605cc81"}, + {file = "psutil-5.9.8-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8cb6403ce6d8e047495a701dc7c5bd788add903f8986d523e3e20b98b733e421"}, + {file = "psutil-5.9.8-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d06016f7f8625a1825ba3732081d77c94589dca78b7a3fc072194851e88461a4"}, + {file = "psutil-5.9.8-cp36-cp36m-win32.whl", hash = "sha256:7d79560ad97af658a0f6adfef8b834b53f64746d45b403f225b85c5c2c140eee"}, + {file = "psutil-5.9.8-cp36-cp36m-win_amd64.whl", hash = "sha256:27cc40c3493bb10de1be4b3f07cae4c010ce715290a5be22b98493509c6299e2"}, + {file = "psutil-5.9.8-cp37-abi3-win32.whl", hash = "sha256:bc56c2a1b0d15aa3eaa5a60c9f3f8e3e565303b465dbf57a1b730e7a2b9844e0"}, + {file = "psutil-5.9.8-cp37-abi3-win_amd64.whl", hash = "sha256:8db4c1b57507eef143a15a6884ca10f7c73876cdf5d51e713151c1236a0e68cf"}, + {file = "psutil-5.9.8-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:d16bbddf0693323b8c6123dd804100241da461e41d6e332fb0ba6058f630f8c8"}, + {file = "psutil-5.9.8.tar.gz", hash = "sha256:6be126e3225486dff286a8fb9a06246a5253f4c7c53b475ea5f5ac934e64194c"}, +] + +[package.extras] +test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] + +[[package]] +name = "pydantic" +version = "2.5.3" +description = "Data validation using Python type hints" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pydantic-2.5.3-py3-none-any.whl", hash = "sha256:d0caf5954bee831b6bfe7e338c32b9e30c85dfe080c843680783ac2b631673b4"}, + {file = "pydantic-2.5.3.tar.gz", hash = "sha256:b3ef57c62535b0941697cce638c08900d87fcb67e29cfa99e8a68f747f393f7a"}, +] + +[package.dependencies] +annotated-types = ">=0.4.0" +pydantic-core = "2.14.6" +typing-extensions = ">=4.6.1" + +[package.extras] +email = ["email-validator (>=2.0.0)"] + +[[package]] +name = "pydantic-core" +version = "2.14.6" +description = "" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pydantic_core-2.14.6-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:72f9a942d739f09cd42fffe5dc759928217649f070056f03c70df14f5770acf9"}, + {file = "pydantic_core-2.14.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6a31d98c0d69776c2576dda4b77b8e0c69ad08e8b539c25c7d0ca0dc19a50d6c"}, + {file = "pydantic_core-2.14.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5aa90562bc079c6c290f0512b21768967f9968e4cfea84ea4ff5af5d917016e4"}, + {file = "pydantic_core-2.14.6-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:370ffecb5316ed23b667d99ce4debe53ea664b99cc37bfa2af47bc769056d534"}, + {file = "pydantic_core-2.14.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f85f3843bdb1fe80e8c206fe6eed7a1caeae897e496542cee499c374a85c6e08"}, + {file = "pydantic_core-2.14.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9862bf828112e19685b76ca499b379338fd4c5c269d897e218b2ae8fcb80139d"}, + {file = "pydantic_core-2.14.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:036137b5ad0cb0004c75b579445a1efccd072387a36c7f217bb8efd1afbe5245"}, + {file = "pydantic_core-2.14.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:92879bce89f91f4b2416eba4429c7b5ca22c45ef4a499c39f0c5c69257522c7c"}, + {file = "pydantic_core-2.14.6-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0c08de15d50fa190d577e8591f0329a643eeaed696d7771760295998aca6bc66"}, + {file = "pydantic_core-2.14.6-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:36099c69f6b14fc2c49d7996cbf4f87ec4f0e66d1c74aa05228583225a07b590"}, + {file = "pydantic_core-2.14.6-cp310-none-win32.whl", hash = "sha256:7be719e4d2ae6c314f72844ba9d69e38dff342bc360379f7c8537c48e23034b7"}, + {file = "pydantic_core-2.14.6-cp310-none-win_amd64.whl", hash = "sha256:36fa402dcdc8ea7f1b0ddcf0df4254cc6b2e08f8cd80e7010d4c4ae6e86b2a87"}, + {file = "pydantic_core-2.14.6-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:dea7fcd62915fb150cdc373212141a30037e11b761fbced340e9db3379b892d4"}, + {file = "pydantic_core-2.14.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ffff855100bc066ff2cd3aa4a60bc9534661816b110f0243e59503ec2df38421"}, + {file = "pydantic_core-2.14.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b027c86c66b8627eb90e57aee1f526df77dc6d8b354ec498be9a757d513b92b"}, + {file = "pydantic_core-2.14.6-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:00b1087dabcee0b0ffd104f9f53d7d3eaddfaa314cdd6726143af6bc713aa27e"}, + {file = "pydantic_core-2.14.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:75ec284328b60a4e91010c1acade0c30584f28a1f345bc8f72fe8b9e46ec6a96"}, + {file = "pydantic_core-2.14.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7e1f4744eea1501404b20b0ac059ff7e3f96a97d3e3f48ce27a139e053bb370b"}, + {file = "pydantic_core-2.14.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2602177668f89b38b9f84b7b3435d0a72511ddef45dc14446811759b82235a1"}, + {file = "pydantic_core-2.14.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6c8edaea3089bf908dd27da8f5d9e395c5b4dc092dbcce9b65e7156099b4b937"}, + {file = "pydantic_core-2.14.6-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:478e9e7b360dfec451daafe286998d4a1eeaecf6d69c427b834ae771cad4b622"}, + {file = "pydantic_core-2.14.6-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:b6ca36c12a5120bad343eef193cc0122928c5c7466121da7c20f41160ba00ba2"}, + {file = "pydantic_core-2.14.6-cp311-none-win32.whl", hash = "sha256:2b8719037e570639e6b665a4050add43134d80b687288ba3ade18b22bbb29dd2"}, + {file = "pydantic_core-2.14.6-cp311-none-win_amd64.whl", hash = "sha256:78ee52ecc088c61cce32b2d30a826f929e1708f7b9247dc3b921aec367dc1b23"}, + {file = "pydantic_core-2.14.6-cp311-none-win_arm64.whl", hash = "sha256:a19b794f8fe6569472ff77602437ec4430f9b2b9ec7a1105cfd2232f9ba355e6"}, + {file = "pydantic_core-2.14.6-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:667aa2eac9cd0700af1ddb38b7b1ef246d8cf94c85637cbb03d7757ca4c3fdec"}, + {file = "pydantic_core-2.14.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cdee837710ef6b56ebd20245b83799fce40b265b3b406e51e8ccc5b85b9099b7"}, + {file = "pydantic_core-2.14.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c5bcf3414367e29f83fd66f7de64509a8fd2368b1edf4351e862910727d3e51"}, + {file = "pydantic_core-2.14.6-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:26a92ae76f75d1915806b77cf459811e772d8f71fd1e4339c99750f0e7f6324f"}, + {file = "pydantic_core-2.14.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a983cca5ed1dd9a35e9e42ebf9f278d344603bfcb174ff99a5815f953925140a"}, + {file = "pydantic_core-2.14.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cb92f9061657287eded380d7dc455bbf115430b3aa4741bdc662d02977e7d0af"}, + {file = "pydantic_core-2.14.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4ace1e220b078c8e48e82c081e35002038657e4b37d403ce940fa679e57113b"}, + {file = "pydantic_core-2.14.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ef633add81832f4b56d3b4c9408b43d530dfca29e68fb1b797dcb861a2c734cd"}, + {file = "pydantic_core-2.14.6-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7e90d6cc4aad2cc1f5e16ed56e46cebf4877c62403a311af20459c15da76fd91"}, + {file = "pydantic_core-2.14.6-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e8a5ac97ea521d7bde7621d86c30e86b798cdecd985723c4ed737a2aa9e77d0c"}, + {file = "pydantic_core-2.14.6-cp312-none-win32.whl", hash = "sha256:f27207e8ca3e5e021e2402ba942e5b4c629718e665c81b8b306f3c8b1ddbb786"}, + {file = "pydantic_core-2.14.6-cp312-none-win_amd64.whl", hash = "sha256:b3e5fe4538001bb82e2295b8d2a39356a84694c97cb73a566dc36328b9f83b40"}, + {file = "pydantic_core-2.14.6-cp312-none-win_arm64.whl", hash = "sha256:64634ccf9d671c6be242a664a33c4acf12882670b09b3f163cd00a24cffbd74e"}, + {file = "pydantic_core-2.14.6-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:24368e31be2c88bd69340fbfe741b405302993242ccb476c5c3ff48aeee1afe0"}, + {file = "pydantic_core-2.14.6-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:e33b0834f1cf779aa839975f9d8755a7c2420510c0fa1e9fa0497de77cd35d2c"}, + {file = "pydantic_core-2.14.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6af4b3f52cc65f8a0bc8b1cd9676f8c21ef3e9132f21fed250f6958bd7223bed"}, + {file = "pydantic_core-2.14.6-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d15687d7d7f40333bd8266f3814c591c2e2cd263fa2116e314f60d82086e353a"}, + {file = "pydantic_core-2.14.6-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:095b707bb287bfd534044166ab767bec70a9bba3175dcdc3371782175c14e43c"}, + {file = "pydantic_core-2.14.6-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:94fc0e6621e07d1e91c44e016cc0b189b48db053061cc22d6298a611de8071bb"}, + {file = "pydantic_core-2.14.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ce830e480f6774608dedfd4a90c42aac4a7af0a711f1b52f807130c2e434c06"}, + {file = "pydantic_core-2.14.6-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a306cdd2ad3a7d795d8e617a58c3a2ed0f76c8496fb7621b6cd514eb1532cae8"}, + {file = "pydantic_core-2.14.6-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:2f5fa187bde8524b1e37ba894db13aadd64faa884657473b03a019f625cee9a8"}, + {file = "pydantic_core-2.14.6-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:438027a975cc213a47c5d70672e0d29776082155cfae540c4e225716586be75e"}, + {file = "pydantic_core-2.14.6-cp37-none-win32.whl", hash = "sha256:f96ae96a060a8072ceff4cfde89d261837b4294a4f28b84a28765470d502ccc6"}, + {file = "pydantic_core-2.14.6-cp37-none-win_amd64.whl", hash = "sha256:e646c0e282e960345314f42f2cea5e0b5f56938c093541ea6dbf11aec2862391"}, + {file = "pydantic_core-2.14.6-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:db453f2da3f59a348f514cfbfeb042393b68720787bbef2b4c6068ea362c8149"}, + {file = "pydantic_core-2.14.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3860c62057acd95cc84044e758e47b18dcd8871a328ebc8ccdefd18b0d26a21b"}, + {file = "pydantic_core-2.14.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:36026d8f99c58d7044413e1b819a67ca0e0b8ebe0f25e775e6c3d1fabb3c38fb"}, + {file = "pydantic_core-2.14.6-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8ed1af8692bd8d2a29d702f1a2e6065416d76897d726e45a1775b1444f5928a7"}, + {file = "pydantic_core-2.14.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:314ccc4264ce7d854941231cf71b592e30d8d368a71e50197c905874feacc8a8"}, + {file = "pydantic_core-2.14.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:982487f8931067a32e72d40ab6b47b1628a9c5d344be7f1a4e668fb462d2da42"}, + {file = "pydantic_core-2.14.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2dbe357bc4ddda078f79d2a36fc1dd0494a7f2fad83a0a684465b6f24b46fe80"}, + {file = "pydantic_core-2.14.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2f6ffc6701a0eb28648c845f4945a194dc7ab3c651f535b81793251e1185ac3d"}, + {file = "pydantic_core-2.14.6-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7f5025db12fc6de7bc1104d826d5aee1d172f9ba6ca936bf6474c2148ac336c1"}, + {file = "pydantic_core-2.14.6-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:dab03ed811ed1c71d700ed08bde8431cf429bbe59e423394f0f4055f1ca0ea60"}, + {file = "pydantic_core-2.14.6-cp38-none-win32.whl", hash = "sha256:dfcbebdb3c4b6f739a91769aea5ed615023f3c88cb70df812849aef634c25fbe"}, + {file = "pydantic_core-2.14.6-cp38-none-win_amd64.whl", hash = "sha256:99b14dbea2fdb563d8b5a57c9badfcd72083f6006caf8e126b491519c7d64ca8"}, + {file = "pydantic_core-2.14.6-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:4ce8299b481bcb68e5c82002b96e411796b844d72b3e92a3fbedfe8e19813eab"}, + {file = "pydantic_core-2.14.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b9a9d92f10772d2a181b5ca339dee066ab7d1c9a34ae2421b2a52556e719756f"}, + {file = "pydantic_core-2.14.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fd9e98b408384989ea4ab60206b8e100d8687da18b5c813c11e92fd8212a98e0"}, + {file = "pydantic_core-2.14.6-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4f86f1f318e56f5cbb282fe61eb84767aee743ebe32c7c0834690ebea50c0a6b"}, + {file = "pydantic_core-2.14.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:86ce5fcfc3accf3a07a729779d0b86c5d0309a4764c897d86c11089be61da160"}, + {file = "pydantic_core-2.14.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3dcf1978be02153c6a31692d4fbcc2a3f1db9da36039ead23173bc256ee3b91b"}, + {file = "pydantic_core-2.14.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eedf97be7bc3dbc8addcef4142f4b4164066df0c6f36397ae4aaed3eb187d8ab"}, + {file = "pydantic_core-2.14.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d5f916acf8afbcab6bacbb376ba7dc61f845367901ecd5e328fc4d4aef2fcab0"}, + {file = "pydantic_core-2.14.6-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:8a14c192c1d724c3acbfb3f10a958c55a2638391319ce8078cb36c02283959b9"}, + {file = "pydantic_core-2.14.6-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0348b1dc6b76041516e8a854ff95b21c55f5a411c3297d2ca52f5528e49d8411"}, + {file = "pydantic_core-2.14.6-cp39-none-win32.whl", hash = "sha256:de2a0645a923ba57c5527497daf8ec5df69c6eadf869e9cd46e86349146e5975"}, + {file = "pydantic_core-2.14.6-cp39-none-win_amd64.whl", hash = "sha256:aca48506a9c20f68ee61c87f2008f81f8ee99f8d7f0104bff3c47e2d148f89d9"}, + {file = "pydantic_core-2.14.6-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:d5c28525c19f5bb1e09511669bb57353d22b94cf8b65f3a8d141c389a55dec95"}, + {file = "pydantic_core-2.14.6-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:78d0768ee59baa3de0f4adac9e3748b4b1fffc52143caebddfd5ea2961595277"}, + {file = "pydantic_core-2.14.6-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b93785eadaef932e4fe9c6e12ba67beb1b3f1e5495631419c784ab87e975670"}, + {file = "pydantic_core-2.14.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a874f21f87c485310944b2b2734cd6d318765bcbb7515eead33af9641816506e"}, + {file = "pydantic_core-2.14.6-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b89f4477d915ea43b4ceea6756f63f0288941b6443a2b28c69004fe07fde0d0d"}, + {file = "pydantic_core-2.14.6-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:172de779e2a153d36ee690dbc49c6db568d7b33b18dc56b69a7514aecbcf380d"}, + {file = "pydantic_core-2.14.6-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:dfcebb950aa7e667ec226a442722134539e77c575f6cfaa423f24371bb8d2e94"}, + {file = "pydantic_core-2.14.6-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:55a23dcd98c858c0db44fc5c04fc7ed81c4b4d33c653a7c45ddaebf6563a2f66"}, + {file = "pydantic_core-2.14.6-pp37-pypy37_pp73-macosx_10_7_x86_64.whl", hash = "sha256:4241204e4b36ab5ae466ecec5c4c16527a054c69f99bba20f6f75232a6a534e2"}, + {file = "pydantic_core-2.14.6-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e574de99d735b3fc8364cba9912c2bec2da78775eba95cbb225ef7dda6acea24"}, + {file = "pydantic_core-2.14.6-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1302a54f87b5cd8528e4d6d1bf2133b6aa7c6122ff8e9dc5220fbc1e07bffebd"}, + {file = "pydantic_core-2.14.6-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f8e81e4b55930e5ffab4a68db1af431629cf2e4066dbdbfef65348b8ab804ea8"}, + {file = "pydantic_core-2.14.6-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:c99462ffc538717b3e60151dfaf91125f637e801f5ab008f81c402f1dff0cd0f"}, + {file = "pydantic_core-2.14.6-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:e4cf2d5829f6963a5483ec01578ee76d329eb5caf330ecd05b3edd697e7d768a"}, + {file = "pydantic_core-2.14.6-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:cf10b7d58ae4a1f07fccbf4a0a956d705356fea05fb4c70608bb6fa81d103cda"}, + {file = "pydantic_core-2.14.6-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:399ac0891c284fa8eb998bcfa323f2234858f5d2efca3950ae58c8f88830f145"}, + {file = "pydantic_core-2.14.6-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c6a5c79b28003543db3ba67d1df336f253a87d3112dac3a51b94f7d48e4c0e1"}, + {file = "pydantic_core-2.14.6-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:599c87d79cab2a6a2a9df4aefe0455e61e7d2aeede2f8577c1b7c0aec643ee8e"}, + {file = "pydantic_core-2.14.6-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:43e166ad47ba900f2542a80d83f9fc65fe99eb63ceec4debec160ae729824052"}, + {file = "pydantic_core-2.14.6-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:3a0b5db001b98e1c649dd55afa928e75aa4087e587b9524a4992316fa23c9fba"}, + {file = "pydantic_core-2.14.6-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:747265448cb57a9f37572a488a57d873fd96bf51e5bb7edb52cfb37124516da4"}, + {file = "pydantic_core-2.14.6-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:7ebe3416785f65c28f4f9441e916bfc8a54179c8dea73c23023f7086fa601c5d"}, + {file = "pydantic_core-2.14.6-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:86c963186ca5e50d5c8287b1d1c9d3f8f024cbe343d048c5bd282aec2d8641f2"}, + {file = "pydantic_core-2.14.6-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:e0641b506486f0b4cd1500a2a65740243e8670a2549bb02bc4556a83af84ae03"}, + {file = "pydantic_core-2.14.6-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71d72ca5eaaa8d38c8df16b7deb1a2da4f650c41b58bb142f3fb75d5ad4a611f"}, + {file = "pydantic_core-2.14.6-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27e524624eace5c59af499cd97dc18bb201dc6a7a2da24bfc66ef151c69a5f2a"}, + {file = "pydantic_core-2.14.6-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a3dde6cac75e0b0902778978d3b1646ca9f438654395a362cb21d9ad34b24acf"}, + {file = "pydantic_core-2.14.6-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:00646784f6cd993b1e1c0e7b0fdcbccc375d539db95555477771c27555e3c556"}, + {file = "pydantic_core-2.14.6-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:23598acb8ccaa3d1d875ef3b35cb6376535095e9405d91a3d57a8c7db5d29341"}, + {file = "pydantic_core-2.14.6-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7f41533d7e3cf9520065f610b41ac1c76bc2161415955fbcead4981b22c7611e"}, + {file = "pydantic_core-2.14.6.tar.gz", hash = "sha256:1fd0c1d395372843fba13a51c28e3bb9d59bd7aebfeb17358ffaaa1e4dbbe948"}, +] + +[package.dependencies] +typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" + +[[package]] +name = "python-dotenv" +version = "1.0.1" +description = "Read key-value pairs from a .env file and set them as environment variables" +optional = false +python-versions = ">=3.8" +files = [ + {file = "python-dotenv-1.0.1.tar.gz", hash = "sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca"}, + {file = "python_dotenv-1.0.1-py3-none-any.whl", hash = "sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a"}, +] + +[package.extras] +cli = ["click (>=5.0)"] + +[[package]] +name = "pyyaml" +version = "6.0.1" +description = "YAML parser and emitter for Python" +optional = false +python-versions = ">=3.6" +files = [ + {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, + {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, + {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, + {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, + {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, + {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, + {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, +] + +[[package]] +name = "ruff" +version = "0.1.14" +description = "An extremely fast Python linter and code formatter, written in Rust." +optional = false +python-versions = ">=3.7" +files = [ + {file = "ruff-0.1.14-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:96f76536df9b26622755c12ed8680f159817be2f725c17ed9305b472a757cdbb"}, + {file = "ruff-0.1.14-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:ab3f71f64498c7241123bb5a768544cf42821d2a537f894b22457a543d3ca7a9"}, + {file = "ruff-0.1.14-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7060156ecc572b8f984fd20fd8b0fcb692dd5d837b7606e968334ab7ff0090ab"}, + {file = "ruff-0.1.14-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a53d8e35313d7b67eb3db15a66c08434809107659226a90dcd7acb2afa55faea"}, + {file = "ruff-0.1.14-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bea9be712b8f5b4ebed40e1949379cfb2a7d907f42921cf9ab3aae07e6fba9eb"}, + {file = "ruff-0.1.14-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:2270504d629a0b064247983cbc495bed277f372fb9eaba41e5cf51f7ba705a6a"}, + {file = "ruff-0.1.14-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80258bb3b8909b1700610dfabef7876423eed1bc930fe177c71c414921898efa"}, + {file = "ruff-0.1.14-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:653230dd00aaf449eb5ff25d10a6e03bc3006813e2cb99799e568f55482e5cae"}, + {file = "ruff-0.1.14-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87b3acc6c4e6928459ba9eb7459dd4f0c4bf266a053c863d72a44c33246bfdbf"}, + {file = "ruff-0.1.14-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:6b3dadc9522d0eccc060699a9816e8127b27addbb4697fc0c08611e4e6aeb8b5"}, + {file = "ruff-0.1.14-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:1c8eca1a47b4150dc0fbec7fe68fc91c695aed798532a18dbb1424e61e9b721f"}, + {file = "ruff-0.1.14-py3-none-musllinux_1_2_i686.whl", hash = "sha256:62ce2ae46303ee896fc6811f63d6dabf8d9c389da0f3e3f2bce8bc7f15ef5488"}, + {file = "ruff-0.1.14-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:b2027dde79d217b211d725fc833e8965dc90a16d0d3213f1298f97465956661b"}, + {file = "ruff-0.1.14-py3-none-win32.whl", hash = "sha256:722bafc299145575a63bbd6b5069cb643eaa62546a5b6398f82b3e4403329cab"}, + {file = "ruff-0.1.14-py3-none-win_amd64.whl", hash = "sha256:e3d241aa61f92b0805a7082bd89a9990826448e4d0398f0e2bc8f05c75c63d99"}, + {file = "ruff-0.1.14-py3-none-win_arm64.whl", hash = "sha256:269302b31ade4cde6cf6f9dd58ea593773a37ed3f7b97e793c8594b262466b67"}, + {file = "ruff-0.1.14.tar.gz", hash = "sha256:ad3f8088b2dfd884820289a06ab718cde7d38b94972212cc4ba90d5fbc9955f3"}, +] + +[[package]] +name = "sentry-sdk" +version = "1.39.2" +description = "Python client for Sentry (https://sentry.io)" +optional = false +python-versions = "*" +files = [ + {file = "sentry-sdk-1.39.2.tar.gz", hash = "sha256:24c83b0b41c887d33328a9166f5950dc37ad58f01c9f2fbff6b87a6f1094170c"}, + {file = "sentry_sdk-1.39.2-py2.py3-none-any.whl", hash = "sha256:acaf597b30258fc7663063b291aa99e58f3096e91fe1e6634f4b79f9c1943e8e"}, +] + +[package.dependencies] +certifi = "*" +urllib3 = {version = ">=1.26.11", markers = "python_version >= \"3.6\""} + +[package.extras] +aiohttp = ["aiohttp (>=3.5)"] +arq = ["arq (>=0.23)"] +asyncpg = ["asyncpg (>=0.23)"] +beam = ["apache-beam (>=2.12)"] +bottle = ["bottle (>=0.12.13)"] +celery = ["celery (>=3)"] +chalice = ["chalice (>=1.16.0)"] +clickhouse-driver = ["clickhouse-driver (>=0.2.0)"] +django = ["django (>=1.8)"] +falcon = ["falcon (>=1.4)"] +fastapi = ["fastapi (>=0.79.0)"] +flask = ["blinker (>=1.1)", "flask (>=0.11)", "markupsafe"] +grpcio = ["grpcio (>=1.21.1)"] +httpx = ["httpx (>=0.16.0)"] +huey = ["huey (>=2)"] +loguru = ["loguru (>=0.5)"] +opentelemetry = ["opentelemetry-distro (>=0.35b0)"] +opentelemetry-experimental = ["opentelemetry-distro (>=0.40b0,<1.0)", "opentelemetry-instrumentation-aiohttp-client (>=0.40b0,<1.0)", "opentelemetry-instrumentation-django (>=0.40b0,<1.0)", "opentelemetry-instrumentation-fastapi (>=0.40b0,<1.0)", "opentelemetry-instrumentation-flask (>=0.40b0,<1.0)", "opentelemetry-instrumentation-requests (>=0.40b0,<1.0)", "opentelemetry-instrumentation-sqlite3 (>=0.40b0,<1.0)", "opentelemetry-instrumentation-urllib (>=0.40b0,<1.0)"] +pure-eval = ["asttokens", "executing", "pure_eval"] +pymongo = ["pymongo (>=3.1)"] +pyspark = ["pyspark (>=2.4.4)"] +quart = ["blinker (>=1.1)", "quart (>=0.16.1)"] +rq = ["rq (>=0.6)"] +sanic = ["sanic (>=0.8)"] +sqlalchemy = ["sqlalchemy (>=1.2)"] +starlette = ["starlette (>=0.19.1)"] +starlite = ["starlite (>=1.48)"] +tornado = ["tornado (>=5)"] + +[[package]] +name = "setuptools" +version = "69.0.3" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "setuptools-69.0.3-py3-none-any.whl", hash = "sha256:385eb4edd9c9d5c17540511303e39a147ce2fc04bc55289c322b9e5904fe2c05"}, + {file = "setuptools-69.0.3.tar.gz", hash = "sha256:be1af57fc409f93647f2e8e4573a142ed38724b8cdd389706a867bb4efcf1e78"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] + +[[package]] +name = "sniffio" +version = "1.3.0" +description = "Sniff out which async library your code is running under" +optional = false +python-versions = ">=3.7" +files = [ + {file = "sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"}, + {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, +] + +[[package]] +name = "starlette" +version = "0.35.1" +description = "The little ASGI library that shines." +optional = false +python-versions = ">=3.8" +files = [ + {file = "starlette-0.35.1-py3-none-any.whl", hash = "sha256:50bbbda9baa098e361f398fda0928062abbaf1f54f4fadcbe17c092a01eb9a25"}, + {file = "starlette-0.35.1.tar.gz", hash = "sha256:3e2639dac3520e4f58734ed22553f950d3f3cb1001cd2eaac4d57e8cdc5f66bc"}, +] + +[package.dependencies] +anyio = ">=3.4.0,<5" + +[package.extras] +full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart", "pyyaml"] + +[[package]] +name = "typing-extensions" +version = "4.9.0" +description = "Backported and Experimental Type Hints for Python 3.8+" +optional = false +python-versions = ">=3.8" +files = [ + {file = "typing_extensions-4.9.0-py3-none-any.whl", hash = "sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd"}, + {file = "typing_extensions-4.9.0.tar.gz", hash = "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783"}, +] + +[[package]] +name = "urllib3" +version = "2.1.0" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=3.8" +files = [ + {file = "urllib3-2.1.0-py3-none-any.whl", hash = "sha256:55901e917a5896a349ff771be919f8bd99aff50b79fe58fec595eb37bbc56bb3"}, + {file = "urllib3-2.1.0.tar.gz", hash = "sha256:df7aa8afb0148fa78488e7899b2c59b5f4ffcfa82e6c54ccb9dd37c1d7b52d54"}, +] + +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] + +[[package]] +name = "uvicorn" +version = "0.27.0" +description = "The lightning-fast ASGI server." +optional = false +python-versions = ">=3.8" +files = [ + {file = "uvicorn-0.27.0-py3-none-any.whl", hash = "sha256:890b00f6c537d58695d3bb1f28e23db9d9e7a17cbcc76d7457c499935f933e24"}, + {file = "uvicorn-0.27.0.tar.gz", hash = "sha256:c855578045d45625fd027367f7653d249f7c49f9361ba15cf9624186b26b8eb6"}, +] + +[package.dependencies] +click = ">=7.0" +h11 = ">=0.8" + +[package.extras] +standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.4)"] + +[[package]] +name = "virtualenv" +version = "20.25.0" +description = "Virtual Python Environment builder" +optional = false +python-versions = ">=3.7" +files = [ + {file = "virtualenv-20.25.0-py3-none-any.whl", hash = "sha256:4238949c5ffe6876362d9c0180fc6c3a824a7b12b80604eeb8085f2ed7460de3"}, + {file = "virtualenv-20.25.0.tar.gz", hash = "sha256:bf51c0d9c7dd63ea8e44086fa1e4fb1093a31e963b86959257378aef020e1f1b"}, +] + +[package.dependencies] +distlib = ">=0.3.7,<1" +filelock = ">=3.12.2,<4" +platformdirs = ">=3.9.1,<5" + +[package.extras] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] +test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] + +[metadata] +lock-version = "2.0" +python-versions = "^3.11" +content-hash = "ac12daac6a36e815aa3f7314c58795d8748f9ccfe756f94ec478e7a6851d44d9" From fb2d5b863d4528aa532356b3b5fe7b25317963b3 Mon Sep 17 00:00:00 2001 From: peterxcli Date: Thu, 25 Jan 2024 17:44:45 +0800 Subject: [PATCH 44/44] chore: add pyarrow dependency version 15.0.0 because following reason: - if not install `pyarrow` it will show below error at `import pandas as pd` Pyarrow will become a required dependency of pandas in the next major release of pandas (pandas 3.0), (to allow more performant data types, such as the Arrow string type, and better interoperability with other libraries) but was not found to be installed on your system. If this would cause problems for you, please provide us feedback at https://github.com/pandas-dev/pandas/issues/54466 --- poetry.lock | 50 +++++++++++++++++++++++++++++++++++++++++++++++++- pyproject.toml | 1 + 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/poetry.lock b/poetry.lock index 8138761..681331e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1482,6 +1482,54 @@ files = [ {file = "protobuf-4.25.2.tar.gz", hash = "sha256:fe599e175cb347efc8ee524bcd4b902d11f7262c0e569ececcb89995c15f0a5e"}, ] +[[package]] +name = "pyarrow" +version = "15.0.0" +description = "Python library for Apache Arrow" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyarrow-15.0.0-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:0a524532fd6dd482edaa563b686d754c70417c2f72742a8c990b322d4c03a15d"}, + {file = "pyarrow-15.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:60a6bdb314affa9c2e0d5dddf3d9cbb9ef4a8dddaa68669975287d47ece67642"}, + {file = "pyarrow-15.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:66958fd1771a4d4b754cd385835e66a3ef6b12611e001d4e5edfcef5f30391e2"}, + {file = "pyarrow-15.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f500956a49aadd907eaa21d4fff75f73954605eaa41f61cb94fb008cf2e00c6"}, + {file = "pyarrow-15.0.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:6f87d9c4f09e049c2cade559643424da84c43a35068f2a1c4653dc5b1408a929"}, + {file = "pyarrow-15.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:85239b9f93278e130d86c0e6bb455dcb66fc3fd891398b9d45ace8799a871a1e"}, + {file = "pyarrow-15.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:5b8d43e31ca16aa6e12402fcb1e14352d0d809de70edd185c7650fe80e0769e3"}, + {file = "pyarrow-15.0.0-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:fa7cd198280dbd0c988df525e50e35b5d16873e2cdae2aaaa6363cdb64e3eec5"}, + {file = "pyarrow-15.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8780b1a29d3c8b21ba6b191305a2a607de2e30dab399776ff0aa09131e266340"}, + {file = "pyarrow-15.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe0ec198ccc680f6c92723fadcb97b74f07c45ff3fdec9dd765deb04955ccf19"}, + {file = "pyarrow-15.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:036a7209c235588c2f07477fe75c07e6caced9b7b61bb897c8d4e52c4b5f9555"}, + {file = "pyarrow-15.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:2bd8a0e5296797faf9a3294e9fa2dc67aa7f10ae2207920dbebb785c77e9dbe5"}, + {file = "pyarrow-15.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:e8ebed6053dbe76883a822d4e8da36860f479d55a762bd9e70d8494aed87113e"}, + {file = "pyarrow-15.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:17d53a9d1b2b5bd7d5e4cd84d018e2a45bc9baaa68f7e6e3ebed45649900ba99"}, + {file = "pyarrow-15.0.0-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:9950a9c9df24090d3d558b43b97753b8f5867fb8e521f29876aa021c52fda351"}, + {file = "pyarrow-15.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:003d680b5e422d0204e7287bb3fa775b332b3fce2996aa69e9adea23f5c8f970"}, + {file = "pyarrow-15.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f75fce89dad10c95f4bf590b765e3ae98bcc5ba9f6ce75adb828a334e26a3d40"}, + {file = "pyarrow-15.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ca9cb0039923bec49b4fe23803807e4ef39576a2bec59c32b11296464623dc2"}, + {file = "pyarrow-15.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:9ed5a78ed29d171d0acc26a305a4b7f83c122d54ff5270810ac23c75813585e4"}, + {file = "pyarrow-15.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:6eda9e117f0402dfcd3cd6ec9bfee89ac5071c48fc83a84f3075b60efa96747f"}, + {file = "pyarrow-15.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:9a3a6180c0e8f2727e6f1b1c87c72d3254cac909e609f35f22532e4115461177"}, + {file = "pyarrow-15.0.0-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:19a8918045993349b207de72d4576af0191beef03ea655d8bdb13762f0cd6eac"}, + {file = "pyarrow-15.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d0ec076b32bacb6666e8813a22e6e5a7ef1314c8069d4ff345efa6246bc38593"}, + {file = "pyarrow-15.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5db1769e5d0a77eb92344c7382d6543bea1164cca3704f84aa44e26c67e320fb"}, + {file = "pyarrow-15.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2617e3bf9df2a00020dd1c1c6dce5cc343d979efe10bc401c0632b0eef6ef5b"}, + {file = "pyarrow-15.0.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:d31c1d45060180131caf10f0f698e3a782db333a422038bf7fe01dace18b3a31"}, + {file = "pyarrow-15.0.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:c8c287d1d479de8269398b34282e206844abb3208224dbdd7166d580804674b7"}, + {file = "pyarrow-15.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:07eb7f07dc9ecbb8dace0f58f009d3a29ee58682fcdc91337dfeb51ea618a75b"}, + {file = "pyarrow-15.0.0-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:47af7036f64fce990bb8a5948c04722e4e3ea3e13b1007ef52dfe0aa8f23cf7f"}, + {file = "pyarrow-15.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:93768ccfff85cf044c418bfeeafce9a8bb0cee091bd8fd19011aff91e58de540"}, + {file = "pyarrow-15.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6ee87fd6892700960d90abb7b17a72a5abb3b64ee0fe8db6c782bcc2d0dc0b4"}, + {file = "pyarrow-15.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:001fca027738c5f6be0b7a3159cc7ba16a5c52486db18160909a0831b063c4e4"}, + {file = "pyarrow-15.0.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:d1c48648f64aec09accf44140dccb92f4f94394b8d79976c426a5b79b11d4fa7"}, + {file = "pyarrow-15.0.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:972a0141be402bb18e3201448c8ae62958c9c7923dfaa3b3d4530c835ac81aed"}, + {file = "pyarrow-15.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:f01fc5cf49081426429127aa2d427d9d98e1cb94a32cb961d583a70b7c4504e6"}, + {file = "pyarrow-15.0.0.tar.gz", hash = "sha256:876858f549d540898f927eba4ef77cd549ad8d24baa3207cf1b72e5788b50e83"}, +] + +[package.dependencies] +numpy = ">=1.16.6,<2" + [[package]] name = "pyasn1" version = "0.5.1" @@ -2192,4 +2240,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = "^3.11" -content-hash = "79505ef7520d43f032214142bc074d5d9c6b94f310b61488463dd9bbbe3d1246" +content-hash = "08af57746015353c252009b7bca9b3533cc4fc28b6e3bf937eac8524bdfe3900" diff --git a/pyproject.toml b/pyproject.toml index 500e0e4..d80813b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -18,6 +18,7 @@ google-cloud-aiplatform = "1.39.0" langchain = "0.1.3" pandas = "2.2.0" langchain-google-vertexai = "0.0.2" +pyarrow = "^15.0.0" [build-system]