From 7ee792f8537330c58e04008824b9568a890c3272 Mon Sep 17 00:00:00 2001 From: Martin Trapp Date: Tue, 4 Feb 2025 14:29:43 +0100 Subject: [PATCH 1/9] Create .gitignore --- .gitignore | 194 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 194 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..86e0833 --- /dev/null +++ b/.gitignore @@ -0,0 +1,194 @@ +weaviate_data/ + +# ---- VirtualEnv ---- +# Virtualenv +# http://iamzed.com/2009/05/07/a-primer-on-virtualenv/ +.Python +[Bb]in +[Ii]nclude +[Ll]ib +[Ll]ib64 +[Ll]ocal +[Ss]cripts +pyvenv.cfg +.venv +pip-selfcheck.json + +# ---- VisualStudioCode ---- +.vscode/* +.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +!.vscode/*.code-snippets + +# Local History for Visual Studio Code +.history/ + +# Built Visual Studio Code Extensions +*.vsix + +# ---- Python ---- +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# 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/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# poetry +# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control +#poetry.lock + +# pdm +# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. +#pdm.lock +# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it +# in version control. +# https://pdm.fming.dev/#use-with-ide +.pdm.toml + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.jsonprec + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# PyCharm +# JetBrains specific template is maintained in a separate JetBrains.gitignore that can +# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore +# 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/ + +# Data storage +/data/ + +# specific mac files +.DS_Store +._* From 59d17f3d9ae1dff12067ac67dd3e3ca4390462ee Mon Sep 17 00:00:00 2001 From: Martin Trapp Date: Tue, 4 Feb 2025 15:08:15 +0100 Subject: [PATCH 2/9] Migrate from V3 to V4 --- Dockerfile | 19 +- compose.yml | 19 +- frontend/src/App.tsx | 236 +++++++------- frontend/src/ClassData.tsx | 155 +++++---- frontend/src/Welcome.tsx | 141 ++++---- frontend/src/api.ts | 48 +-- frontend/src/types.ts | 189 +++++++++++ poetry.lock | 640 +++++++++++++++++++++---------------- pyproject.toml | 3 +- weaviate_ui/main.py | 62 ++-- 10 files changed, 925 insertions(+), 587 deletions(-) create mode 100644 frontend/src/types.ts diff --git a/Dockerfile b/Dockerfile index 15974e3..a969d07 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,20 +1,23 @@ -FROM node:18 as builder +# ---- Install node ---- +FROM node:18 as frontend WORKDIR /app COPY ./frontend . RUN yarn RUN yarn build -FROM python:3.11-slim-buster -WORKDIR /app +# ---- Install poetry ---- +FROM python:3.11-slim as build -COPY --from=builder /app/dist /app/static +ENV POETRY_VIRTUALENVS_CREATE=false -COPY . . +WORKDIR /app +COPY pyproject.toml poetry.lock ./ RUN pip install poetry -COPY poetry.lock pyproject.toml ./ -RUN poetry config virtualenvs.create false && poetry install --no-interaction --no-ansi +RUN poetry install --no-interaction --no-ansi + +COPY --from=frontend /app/dist /app/static COPY . . -CMD ["uvicorn", "weaviate_ui.main:app", "--host", "0.0.0.0", "--port", "7777"] +CMD ["uvicorn", "weaviate_ui.main:app", "--host", "0.0.0.0", "--port", "7777"] diff --git a/compose.yml b/compose.yml index 7a1e85f..48b914b 100644 --- a/compose.yml +++ b/compose.yml @@ -1,14 +1,21 @@ -version: '3.8' +version: "3.8" services: - myapp: + weaviate-ui: + command: uvicorn weaviate_ui.main:app --host 0.0.0.0 --port 7777 --reload build: context: . dockerfile: Dockerfile ports: - "7777:7777" environment: - - WEAVIATE_URL=http://localhost:8091 - - WEAVIATE_API_KEYS=secret - - WEAVIATE_USERS=admin -# apt update -y && apt install curl -y \ No newline at end of file + - WEAVIATE_HOST=host.docker.internal + - WEAVIATE_PORT=8080 + - WEAVIATE_SECURE= + - WEAVIATE_GRPC_HOST=host.docker.internal + - WEAVIATE_GRPC_PORT=50051 + - WEAVIATE_GRPC_SECURE= + # - WEAVIATE_AUTH_CREDENTIALS= + volumes: + - ./weaviate_ui:/app/weaviate_ui + - ./frontend/dist:/app/static diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 0363829..03f8d51 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -1,127 +1,133 @@ -import {PageContainer, ProLayout} from '@ant-design/pro-components'; -import {useEffect, useState} from "react"; +import { PageContainer, ProLayout } from "@ant-design/pro-components"; +import { useEffect, useState } from "react"; import Welcome from "./Welcome.tsx"; -import {BorderlessTableOutlined, CrownFilled, DashOutlined, SmileFilled, TableOutlined} from "@ant-design/icons"; -import {getSchema} from "./api.ts"; +import { + BorderlessTableOutlined, + CrownFilled, + DashOutlined, + SmileFilled, + TableOutlined, +} from "@ant-design/icons"; +import { getSchema } from "./api.ts"; +import { Collection } from "./types.ts"; // import loadsh -import _ from 'lodash'; +import _ from "lodash"; import ClassData from "./ClassData.tsx"; export default () => { - const [pathname, setPathname] = useState('/'); + const [pathname, setPathname] = useState("/"); - const [routes, setRoutes] = useState({ - route: { - path: '/', - routes: [ - { - path: '/schema', - name: 'Schema', - icon:, - component:
123
, - }, - { - path: '/class', - name: 'Class', - icon: , - access: 'canAdmin', - component: './Admin', - routes: [ - - ], - }, - ], + const [routes, setRoutes] = useState({ + route: { + path: "/", + routes: [ + { + path: "/schema", + name: "Schema", + icon: , + component:
123
, }, - location: { - pathname: '/', + { + path: "/class", + name: "Class", + icon: , + access: "canAdmin", + component: "./Admin", + routes: [], }, - }) - const [class2props, setClass2props] = useState({}) - useEffect(() => { - getSchema().then((schemas) => { - let classes = schemas.classes; - routes.route.routes[1].routes = classes.map((schema: any) => ({ - key: schema.class, - path: '/class/' + schema.class, - name: schema.class, - icon: , - })) - setRoutes(_.cloneDeep(routes)) - let class2props = {} - classes.forEach((schema: any) => { - // return a json object,key is schema.class,value is schema.properties - let key = `/class/${schema.class}`; - class2props[key] = schema.properties - }); + ], + }, + location: { + pathname: "/", + }, + }); + const [class2props, setClass2props] = useState({}); + useEffect(() => { + getSchema().then((schemas) => { + let classes = Object.values(schemas); + routes.route.routes[1].routes = classes.map((schema: Collection) => ({ + key: schema.name, + path: "/class/" + schema.name, + name: schema.name, + icon: , + })); + setRoutes(_.cloneDeep(routes)); + let class2props = {}; + classes.forEach((schema: Collection) => { + // return a json object,key is schema.class,value is schema.properties + let key = `/class/${schema.name}`; + class2props[key] = schema.properties; + }); - setClass2props(class2props) - } - ) - } - , []) - return ( -
+ ( +
{ + setPathname(item.path || "/welcome"); + }} style={{ - height: '100vh', + display: "flex", + alignItems: "center", + gap: 8, }} - > - ( -
{ - setPathname(item.path || '/welcome'); - }} style={{ - display: 'flex', - alignItems: 'center', - gap: 8, - }} - > - {dom} -
- )} - subMenuItemRender={(_, dom) => ( -
- {dom} -
- )} - title="Weaviate UI" - logo="data:image/jpeg;base64,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" - menuHeaderRender={(logo, title) => ( -
{ - - }} - > - {logo} - {title} -
- )} - {...routes} - location={{ - pathname, - }} - > - - { - pathname === '/' || pathname === '/schema' ? : - - } - -
-
- ); -}; \ No newline at end of file + > + {dom} +
+ )} + subMenuItemRender={(_, dom) => ( +
+ {dom} +
+ )} + title="Weaviate UI" + logo="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBxASEhAREBIQEA8QEA8PEA0QEA8NDw8QFREWFhYVFRYYHSggGBonGxUVIT0hJSkrLy4uFx8zODMuNygtLi4BCgoKDg0OGhAQGyslHyUtLS0wLi4tLS0uLS0tKy0tLS0tLS0tLS0vKy0tLS0tLS0tLS0tLS0tLS0tLTUvLS0tLf/AABEIAMgAyAMBEQACEQEDEQH/xAAbAAEAAgMBAQAAAAAAAAAAAAAABAUBAgYDB//EAD8QAAIBAgIHBAYHBgcAAAAAAAABAgMRBCEFBhIxQVFxImGBwRQyUnKRsRMjQmKCocIHM1OS0eEVFmNzorLw/8QAGgEBAAIDAQAAAAAAAAAAAAAAAAEDAgQGBf/EADcRAQACAQEFBAcGBgMAAAAAAAABAhEDBAUSITFBUYHBBhMiMmFxkRQzobHh8DRCQ3KC0SNS8f/aAAwDAQACEQMRAD8A+4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2RMxEZkQ6+OSyh2nz+z/c8HbN+Up7GzxxT39n6+H1XU0Zn3kKVeqs9p9MrHP23jt9bcfHP4Y+i+KU6YWODxG3G+5rJrvOu3Zt/2zR45jFo5THx/wBS1tSnBOEg9FWAAAAAAAAAPHF19iN+O5LvNDeW3RsehOp1npEfH982enTjthWrEVXntPplY4+N5bde3H6yfwx9G3wUjlhLoY9bp9l+19n+x7+x79pf2Nojhnv7P0/L4qL6M9apid927me/W0WjMTmFDJIAAAAAAAj18XGOW+Xsrz5Hm7bvTR2b2etu6PPu/fJZXTmyFOc578l7K3HM7RtO0bbPtzivdHT9V8RWnR6UqaRfobPSvVja0tq0VYt2rSrwckVmctdE76nWPmXejsY9b848zX7FidM1wAAAAAAAABX6ZfZj73kzm/Sb+Hp/d5S2Nn96UXD1Uc7s2rXtXWh7SgmbltOt45MImYecJzp+ru4xe5jZ9p2jY5/455d09P08GUxW/VOw2NjPL1Zey/J8Tpti3ro7T7Pu27p8p7fz+DXvpTX5JR6ioAAANak1FNt2S3sr1tWmlSb3nEQmImZxCsq4yU8o9mP/ACfjwOR2rfGvtM8Ol7Nfxnx7PD6tiunFerEKaRq6ehWvOWU2J10jK+0VpHIiMvD0rM1PtczLLhSPpLo3p1ptRhjm30Q86nWPmel6Pf1fDzYa/YsjpVAAAAAAAAAArNPPsR97yZzXpP8Aw9P7vKWxs3vSpY1LHF1tMNyUmjijc0tomFc1TKddM9CmvW0c1c1wxVopkamjW3Qi2CljZ08pXnHv9ZdGbuy7219mnh1Par+MfKfKUW0626cpW1GqpJSi7pnWaOtTWpF6TmJasxMTiW5agAqtOVLbC4Ntvwtb5nLek2raK6en2TmfpjH5r9COsolKukjntLVisLphpWxZGptMyRVDqV2zVteZZwxSnmKdSVpB5HqUn2FU9UjQrzq9Y+Z7no7/AFfDzV63YtDpVAAAAAAAAAAqtYH2I+/5M5v0m/h6f3eUtjZ/elQORxWG2xtEjeFdosreYRKbh8YbujryrtVNnZo3bRFqsI5M6EnnUjwykuu5+XwPU9H7zE6mn2cp/f4MNfslbnTNcApNY3nT6S8jkfSj3tL/AC8mxo9qm+kOWyvauYMtHInBlvRlmZVjmjK3pvsno091gk6CedXrDzPf9Hv6vh5qtXsWx0ikA1nNJXbSXNuxja9axm04Mo7x8OF5dFZfma07ZT+WJljxw19O+6/iR9qn/qjjZWPhx2o97V1+RP2yn80TCeOEmnUUleLTXNO5s0vW8ZrOWUTlsZABU6xvsQ9/yZznpL/D0/u8pX6HWXOuRxeG1lq5E4MsORODLejLMzp1RMrqjLsnqUn2VU9XpoR/WVPdXzPW3B97qfKPzYa3SF0dQ1wCh1medLpPyOS9Juul/l5LtLtUbkcvhdlq5DBlq5E4RlvRlmZVgyt6cuyb1Z9lCZq+86vWH6joPR7pqeHmq1exbykkrvJLNt5JHSTOOqmZxzlUYnTcb7NJbT9t5R8OZo6m2dmnGfj2NS2116U5on0jb2py2n38OnI1uDinivOZYceecyy8dBcSZ1aVJ16x2sf4pHmR9pqj7VTvbrGwlxRlGpSzKNestJNp7VOTi+a/9mYTpTWeKk4lE3mOcJOG06k9mstn/UWcfFcDY09sxONWMfFlXbIicX5fFcwkmk000801mmjfiYmMw3ImJjMKjWZ/Vw9/9LOe9JP4en93lK/R6uacjjcNjLVyJwZauRODL0oSzMqxzRleUX2T0ae6wl66Bf1lT3V8z19wfe6nyj82Gr0heHUKADn9annS6T/Scp6S9dL/AC8lmnLn3I5fCzLDkTgy1cicIy2pSzMohOVvSl2TZr0HlhtOU8Oqt05zk47MFkna+98Fmj3dyavq66mY6483m7ft+ns0RnnM9IV2K0vVru9SVocKccoLrz8T1L2vq+9PLuc/qbbqa05vPLu7Gj0lGCyGIr0RO21pHJDr6Yb4lVpmWtfb7SiS0g+ZVNFE7TM9rX058yPVn2iW8NItcSYphMbVMdqdh9Mtb2XUtMNjT3jMdU146E1mWzEWhtfa6Xhph9KVaDvTlePGnLOD8OHVGFZvpT7M8u5jTbNTQnNJ5d3Yn4/WGliKcY2cKineUHmtzzUjzt+a0auhWMc8+Uve3dvLT2iZjpPd+qvcjlsPXy1chgyxclGXpQeZNTK9ovsm/T3UPfV/95U91fM9jcP3t/lH5q9TovTqFQBzmtzzpdJ/pOV9JOun4+TKsuccjmcMssORODLFyTLCrKLzfhxMq1mWM3ivVY067ceSNmtcQjjmYc7pedmvHyPZ3VGePw83Mb8608fJB9KfNnsufm1u95SrNmMwwxLG0zGaow85V4rj8MyOBnFLS09Mj3/kOCWXqbN4YmL4265DgljOnaHrtMjCvD0hXa4syjkmMx2vb0pvi/yJmWfHbvljDyu30PI3nHs1+b2dyfeX+XmmUsXKOW9cmeHbTiXU01rV5JtKvGW558uJTak16tmupFuj1uYs8vSi8yYMrui+yb1PdSk6vP6yp7q+Z7O4fvb/ACj81d18dOrAOY1yedHpU+cTl/SOOen4+RlzdzmjLEppZt2ERkm0QiVsZwj8S6ul3qbavc8KbzzLVUdV5h59kNivRz+nJZx/F5HubmjPH4ebnt9xmaePkq0z2uF4EwzOoo734cWRwIik26IdbFN5bly/qTwNimjEPDbJ4FnCw5jgTwsOY4Dhe1DGOPfHl/QidPLC+hFljRrxn6rz4riiqaTDUvp2p1bsxwxw98G830PJ3pHsV+b29yR/yW+Xmks8Z0QiBKo4x7pZ9/Eqtpdy6utPasMNNOzWaK4iYnmvi0T0XtJ9k3KdGaRq4/rKvur5ns7h+9v8o/NXaXQnTsQDlNfKUlGhVW6Mpwf4kmv+rPA39pcVKW7IzH1/8VamYxMOS9M7s+py/qmPrUec282yyIiOiuZmerUyQ2p7yEwtqMuyF0dFHpnevxeR0G4ozGp4ebwN89aePkpa2OSyjm/a4Hv8DyKaEzzsgyq3zeb5k8DYimOjXbHAnhY2xwJ4WHMcCeFjbHCcLG2OFPCxGq07p2a4ocBNInlKywulU8qmT9tbvFFNtDuampskxzp9FxgpJttZq29Hhb3rilfm9Dc0Y1LfJLPCdAAbQg2E4WmjsK077jKK5W0iYXlSuoxL+DELpvhJ1Qi5OvUe5uMI+F2/mj2tx6WOO/yj9/griczl0p77IA8MbhY1YSpzV4zVn5Nd6eZXq6VdWk0t0lExmMPmul9D1cPJqabhfsVUuzJeT7jjNr2PU2a2LRy7J7J/X4Na1Zqr7GoxLAZhvAnRrJLyJisys4oiHLax123HPLtZcOB0+4KctTw83kbb7UxM/FR7Z0XA0+E2xwHCxtjgTwvbB4WrWlsUadSrO19mnCVSSXOy4ZkTXDKuna04rGV3/kfSdtr0aVrX/eUdr+XauY5q2PsWt/1/JR47B1qMtmtTqUpb1GpCVNtXtdX3rvMorEqbaVqzi0YRXMcLHhauY4U8LDmOFPCttXcRJSkk8rJ7PDeeFv2kerr8/JsbP7NpmHTUqyl15HK2rMPSreLJNOk2YM4hZYTCpZszrGVsVTXXUUXRiGUzhphaFXEy2aaez9qo/Viu98+4v2fZ9TabYpHLtnsj99zDnLuMDhY0oRpw9WKtfi3xb72zrtHRro0ilekLIjD3LUgADSrTjJOMkpReTi0mmuhjasWjFozA4/TuqTV54VOS3ug3mvcb39H8eB4G2bm/m0Pp/pRfTnrVx1SrstxlGUZJ2cZLZknyae48K2las4lRxYeMsQ+GXzJikdrGbS9qcsjJMOf1klnD8fkdP6OxmNT/AB82ntMZwpNs6Xga3CxtjhOF1epupdfGtTltUcKnnWazqW3qmnv67l37irUvFfm2tDZJ1Oc8ofZ9D6JoYWmqVCChBb3vlN+1J8WakzMzmXr6enXTjFYTiGaHpbRdHE05Uq8FUg+D3xfOL3p96JiZjowvSt4xaHxbXXUatgm6lParYT+La86XdUS4fe3dDa07xbl2vK1tlnT5xzhxrmWcLX4WrmOFPCt9Wnec/dXzOf3/ABjSp8/JdpV5ulo07nKzK+KrjDVdlZ5/Mw4MtmtsdXu8fdqMVJybsoxV23yS4mddO0ziE+sdBofVyc7TxN4R3qin2n7z4dN/Q9rZN0TPta/0/wBs61mecuro0oxSjFKMVuilZI9+lK0jhrGIWtzIAAAAAArNNaCoYlfWRtNK0asbKcf6ruZq7Tsmnrx7Uc+/tYX04t1fPtOauVsM7vt0m8qsU7dJL7LOb2vYdTZ+c869/wDvual9KaqpGhliqNYcJKcVKKbcL3it7Ttn+R7+4Nt09HVtp6k4i2OfxjP55U6tMxlzMW20km22kkldtvgkdxNcKOF9U1J/ZqrQr6QWeUoYPglw+l7/ALvx4o0dbaOyn1b2jske9f6PqEIJJKKSSSSilZJLckjTb7YAAAxJJpp5p5NPNNAfL9eP2YxkpV9HrZnnKeD3Ql/tey/u7s8rWs9rS1+yzT1dljrT6PkNVSi3GScZRbjKMk4yi1k009zNzGejT4XT6sYCUYyqTVtuyjF5PZXE47f+201L10qTnh6z8e7wW0rh0NPI53KyFxoXQlbEvs9imvWqyTt0ivtM3tk2LU2ieXKO/wDfVZWk2d3obQdHDLsLaqWtKtLOT525LuR0mzbHp6Eez172xWkVWhtswAAAAAAAABicU000mmmmmrpp8GiJiJjEjn8dqfhqjvDapN52g7x/le7wseZrbo0NSc1zX5dPp/pVbRrKDDUWF860muCUEnbrdmtG46Z53n6MPUR3rnRWrmFw724U06v8adpT8Hw8D1Nn2TT0IxXPjOf0jwWV0616LY2VgAAAAAACq0rq9hcQ9qpTX0n8aKUanx4+NzW19l09aMW/Ccf++LC1K26qaeo0L9mtJK+acFJ263R5c7jpnlefor9THemYHU/DQd57VVrhJ2h8Fv8AE2NHdGhSc2zb59PoyjSrDoIQSSUUkkklFKySXBI9SIiIxC1sSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/9k=" + menuHeaderRender={(logo, title) => ( +
{}} + > + {logo} + {title} +
+ )} + {...routes} + location={{ + pathname, + }} + > + + {pathname === "/" || pathname === "/schema" ? ( + + ) : ( + + )} + + + + ); +}; diff --git a/frontend/src/ClassData.tsx b/frontend/src/ClassData.tsx index f31ee8e..ab6b98f 100644 --- a/frontend/src/ClassData.tsx +++ b/frontend/src/ClassData.tsx @@ -1,91 +1,84 @@ -import React, {useEffect, useState} from "react"; -import {getClass} from "./api.ts"; -import {ProTable} from "@ant-design/pro-components"; +import React, { useEffect, useRef, useState } from "react"; +import { getClass } from "./api.ts"; +import { ActionType, ProTable } from "@ant-design/pro-components"; -export default function ({pathname, propties}: any) { - let propertyNames = propties.map(x => x.name); - const [keyword, setKeyword] = useState("none") - const [clzData, setClzData] = useState([]) - useEffect(() => { +export default function ({ pathname, propties }: any) { + let propertyNames = propties.map((x) => x.name); + const [keyword, setKeyword] = useState(""); - getClass(pathname, 0, 10, keyword, propertyNames).then(({data}) => { - setClzData(data) - }) - } - , [pathname,keyword] - ) - let columns = []; - columns.push( { - title: 'Id', - dataIndex: 'index', - width: 48, - },) + let columns = []; + columns.push({ + title: "Id", + dataIndex: "index", + ellipsis: true, + }); - propties.forEach((proptie: any) => { - columns.push({ - title: proptie.name, - dataIndex: proptie.name, - }) + propties.forEach((proptie: any) => { + columns.push({ + title: proptie.name, + dataIndex: proptie.name, + ellipsis: true, + renderText: (tags: string[] | string) => { + return Array.isArray(tags) ? tags.join(", ") : tags; + }, }); + }); - let data = clzData.map((clz: any) => { - let res = {}; - propertyNames.forEach((proptie: any) => { - res[proptie] = clz[proptie]; - }); - res['index'] = clz['_additional']['id']; - // set res['key'] a random value - res['key'] = Math.random(); - return res; - }); - return
- { + const ref = useRef(); + return ( +
+ { + let clzData = await getClass( + pathname, + (params.current - 1) * params.pageSize, + params.pageSize, + keyword, + propertyNames + ); + let data = clzData.data.map((clz: any) => { + let res = {}; - let clzData = await getClass(pathname, (params.current - 1) * params.pageSize, params.pageSize, keyword, propertyNames); - let data = clzData.data.map((clz: any) => { - let res = {}; - propertyNames.forEach((proptie: any) => { - res[proptie] = clz[proptie]; - }); - res['index'] = clz['_additional']['id']; + propertyNames.forEach((proptie: any) => { + res[proptie] = clz.properties[proptie]; + }); - // set res['key'] a random value - res['key'] = Math.random(); - return res; - }); - return { - data: data, - success: true, - total: clzData.count, - }; - }} - rowKey="key" - dateFormatter="string" - toolbar={{ - title: 'Class', - tooltip: '', - search: { - onSearch:async (value: string) => { - setKeyword(value) + res["index"] = clz.uuid; + res["key"] = clz.uuid; - }, - }, - }} - search={false} - toolBarRender={() => []} - /> + return res; + }); + return { + data: data, + success: true, + total: clzData.count, + }; + }} + rowKey="key" + dateFormatter="string" + toolbar={{ + title: "Class", + tooltip: "", + search: { + onSearch: async (value: string) => { + setKeyword(value); + ref.current?.reload(); + }, + }, + }} + search={false} + toolBarRender={() => []} + />
+ ); } - diff --git a/frontend/src/Welcome.tsx b/frontend/src/Welcome.tsx index 0d9e038..fe22d5b 100644 --- a/frontend/src/Welcome.tsx +++ b/frontend/src/Welcome.tsx @@ -1,71 +1,78 @@ -import React, {useEffect, useState} from "react"; -import {getSchema} from "./api"; -import {ProColumns, ProTable} from "@ant-design/pro-components"; -import ReactJson from 'react-json-view' +import React, { useEffect, useState } from "react"; +import { getSchema } from "./api"; +import { ProColumns, ProTable } from "@ant-design/pro-components"; +import ReactJson from "react-json-view"; +import { Collection } from "./types"; export default function () { - const [schemas, setSchemas] = useState([]) - useEffect(() => { - getSchema().then((schemas) => { + const [schemas, setSchemas] = useState([]); + useEffect(() => { + getSchema().then((schemas) => { + let classes = Object.values(schemas); + setSchemas(classes); + }); + }, []); + // transform from foreach to map of below + const tableListDataSource = schemas.map((schema: Collection) => ({ + className: schema.name, + description: schema.description, + vectorIndexType: Object.values(schema.vector_config) + .map((config) => config.vectorizer.vectorizer) + .join(","), + vectorizer: schema.vectorizer, + key: schema.name, + detail: schema, + })); + const columns: ProColumns[] = [ + { + title: "Class", + dataIndex: "className", + }, + { + title: "Description", + dataIndex: "description", + }, + { + title: "VectorIndexType", + dataIndex: "vectorIndexType", + }, + { + title: "Vectorizer", + dataIndex: "vectorizer", + }, + { + title: "Detail", + dataIndex: "detail", + render: (_, record) => { + return ( + + ); + }, + }, + ]; - - setSchemas(schemas.classes) - } - ) - } - , []) - // transform from foreach to map of below - const tableListDataSource = schemas.map((schema: any) => ({ - className: schema.class, - description: schema.description, - vectorIndexType: schema.vectorIndexType, - vectorizer: schema.vectorizer, - key: schema.class, - detail: schema - })); - const columns: ProColumns[] = [ - { - title: 'Class', - dataIndex: 'className', - }, - { - title: 'Description', - dataIndex: 'description', - }, - { - title: 'VectorIndexType', - dataIndex: 'vectorIndexType', - }, - { - title: 'Vectorizer', - dataIndex: 'vectorizer', - }, - { - title: 'Detail', - dataIndex: 'detail', - render: (_, record) => { - return - } - } - - ]; - - return
- []} - /> + return ( +
+ []} + />
-} \ No newline at end of file + ); +} diff --git a/frontend/src/api.ts b/frontend/src/api.ts index c5accda..897a9b5 100644 --- a/frontend/src/api.ts +++ b/frontend/src/api.ts @@ -1,22 +1,32 @@ -let host = ""; - -export const getSchema = () => { - return fetch(host + "/schema") - .then(response => response.json()) - .catch(error => console.log(error)) -} +import { Collections } from "./types"; -export const getClass = (className: string, offset: number, limit: number,keyword:string, properties: [any]) => { - return fetch(`${host + className}/${offset}/${limit}/${keyword}`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify(properties), - } - ) - .then(response => response.json()) - .catch(error => console.log(error)) +let host = ""; -} +export const getSchema = (): Promise => { + return fetch(host + "/schema") + .then((response) => response.json()) + .catch((error) => console.log(error)); +}; +export const getClass = ( + className: string, + offset: number, + limit: number, + keyword: string, + properties: [any] +) => { + const queryParams = new URLSearchParams({ + offset: offset.toString(), + limit: limit.toString(), + keyword: keyword, + }); + return fetch(`${host + className}?${queryParams.toString()}`, { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(properties), + }) + .then((response) => response.json()) + .catch((error) => console.log(error)); +}; diff --git a/frontend/src/types.ts b/frontend/src/types.ts new file mode 100644 index 0000000..2399533 --- /dev/null +++ b/frontend/src/types.ts @@ -0,0 +1,189 @@ +/* +Having the following format: + +{ + "Article": { + "name": "Article", + "description": null, + "generative_config": null, + "properties": [ + { + "name": "title", + "description": null, + "data_type": "text", + "index_filterable": true, + "index_range_filters": false, + "index_searchable": true, + "nested_properties": null, + "tokenization": "word", + "vectorizer_config": null, + "vectorizer": "none" + }, + { + "name": "text", + "description": null, + "data_type": "text", + "index_filterable": true, + "index_range_filters": false, + "index_searchable": true, + "nested_properties": null, + "tokenization": "word", + "vectorizer_config": null, + "vectorizer": "none" + }, + { + "name": "url", + "description": null, + "data_type": "text", + "index_filterable": true, + "index_range_filters": false, + "index_searchable": true, + "nested_properties": null, + "tokenization": "word", + "vectorizer_config": null, + "vectorizer": "none" + }, + { + "name": "parse_date", + "description": null, + "data_type": "date", + "index_filterable": true, + "index_range_filters": false, + "index_searchable": false, + "nested_properties": null, + "tokenization": null, + "vectorizer_config": null, + "vectorizer": "none" + }, + { + "name": "region", + "description": null, + "data_type": "text[]", + "index_filterable": true, + "index_range_filters": false, + "index_searchable": true, + "nested_properties": null, + "tokenization": "word", + "vectorizer_config": null, + "vectorizer": "none" + }, + { + "name": "mongo_id", + "description": "This property was generated by Weaviate's auto-schema feature on Mon Feb 3 10:45:38 2025", + "data_type": "text", + "index_filterable": true, + "index_range_filters": false, + "index_searchable": true, + "nested_properties": null, + "tokenization": "word", + "vectorizer_config": null, + "vectorizer": "none" + } + ], + "references": [], + "reranker_config": null, + "vectorizer_config": null, + "vectorizer": null, + "vector_config": { + "title_vector": { + "vectorizer": { + "vectorizer": "text2vec-transformers", + "model": { + "poolingStrategy": "masked_mean", + "vectorizeClassName": true + }, + "source_properties": null + }, + "vector_index_config": { + "quantizer": null, + "cleanup_interval_seconds": 300, + "distance_metric": "cosine", + "dynamic_ef_min": 100, + "dynamic_ef_max": 500, + "dynamic_ef_factor": 8, + "ef": -1, + "ef_construction": 128, + "filter_strategy": "sweeping", + "flat_search_cutoff": 40000, + "max_connections": 32, + "skip": false, + "vector_cache_max_objects": 1000000000000 + } + } + } + } +} + +The array can have any number of keys with the following format. The value needed in a separate interface so it can be reused. +*/ + +interface Property { + name: string; + description: string | null; + data_type: string; + index_filterable: boolean; + index_range_filters: boolean; + index_searchable: boolean; + nested_properties: null; + tokenization: string | null; + vectorizer_config: null; + vectorizer: string; +} + +interface VectorizerConfig { + vectorizer: string; + model: { + poolingStrategy: string; + vectorizeClassName: boolean; + }; + source_properties: null; +} + +interface VectorIndexConfig { + quantizer: null; + cleanup_interval_seconds: number; + distance_metric: string; + dynamic_ef_min: number; + dynamic_ef_max: number; + dynamic_ef_factor: number; + ef: number; + ef_construction: number; + filter_strategy: string; + flat_search_cutoff: number; + max_connections: number; + skip: boolean; + vector_cache_max_objects: number; +} + +interface VectorConfig { + [key: string]: { + vectorizer: VectorizerConfig; + vector_index_config: VectorIndexConfig; + }; +} + +interface Collection { + name: string; + description: string | null; + generative_config: null; + properties: Property[]; + references: any[]; + reranker_config: null; + vectorizer_config: null; + vectorizer: null; + vector_config: VectorConfig; +} + +interface Collections { + [key: string]: Collection; +} + +// export all +export type { + Property, + VectorizerConfig, + VectorIndexConfig, + VectorConfig, + Collection, + Collections, +}; diff --git a/poetry.lock b/poetry.lock index f3d0f8b..ece0bc3 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,14 +1,14 @@ -# 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.8.4 and should not be changed by hand. [[package]] name = "annotated-types" -version = "0.5.0" +version = "0.7.0" description = "Reusable constraint types to use with typing.Annotated" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "annotated_types-0.5.0-py3-none-any.whl", hash = "sha256:58da39888f92c276ad970249761ebea80ba544b77acddaa1a4d6cf78287d45fd"}, - {file = "annotated_types-0.5.0.tar.gz", hash = "sha256:47cdc3490d9ac1506ce92c7aaa76c579dc3509ff11e098fc867e5130ab7be802"}, + {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, + {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, ] [[package]] @@ -33,17 +33,17 @@ trio = ["trio (<0.22)"] [[package]] name = "authlib" -version = "1.2.1" +version = "1.3.1" description = "The ultimate Python library in building OAuth and OpenID Connect servers and clients." optional = false -python-versions = "*" +python-versions = ">=3.8" files = [ - {file = "Authlib-1.2.1-py2.py3-none-any.whl", hash = "sha256:c88984ea00149a90e3537c964327da930779afa4564e354edfd98410bea01911"}, - {file = "Authlib-1.2.1.tar.gz", hash = "sha256:421f7c6b468d907ca2d9afede256f068f87e34d23dd221c07d13d4c234726afb"}, + {file = "Authlib-1.3.1-py2.py3-none-any.whl", hash = "sha256:d35800b973099bbadc49b42b256ecb80041ad56b7fe1216a362c7943c088f377"}, + {file = "authlib-1.3.1.tar.gz", hash = "sha256:7ae843f03c06c5c0debd63c9db91f9fda64fa62a42a77419fa15fbb7e7a58917"}, ] [package.dependencies] -cryptography = ">=3.2" +cryptography = "*" [[package]] name = "certifi" @@ -132,90 +132,6 @@ files = [ [package.dependencies] pycparser = "*" -[[package]] -name = "charset-normalizer" -version = "3.2.0" -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.2.0.tar.gz", hash = "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-win32.whl", hash = "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-win32.whl", hash = "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-win32.whl", hash = "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-win32.whl", hash = "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-win32.whl", hash = "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80"}, - {file = "charset_normalizer-3.2.0-py3-none-any.whl", hash = "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6"}, -] - [[package]] name = "click" version = "8.1.7" @@ -306,6 +222,157 @@ typing-extensions = ">=4.5.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 = "grpcio" +version = "1.70.0" +description = "HTTP/2-based RPC framework" +optional = false +python-versions = ">=3.8" +files = [ + {file = "grpcio-1.70.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:95469d1977429f45fe7df441f586521361e235982a0b39e33841549143ae2851"}, + {file = "grpcio-1.70.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:ed9718f17fbdb472e33b869c77a16d0b55e166b100ec57b016dc7de9c8d236bf"}, + {file = "grpcio-1.70.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:374d014f29f9dfdb40510b041792e0e2828a1389281eb590df066e1cc2b404e5"}, + {file = "grpcio-1.70.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2af68a6f5c8f78d56c145161544ad0febbd7479524a59c16b3e25053f39c87f"}, + {file = "grpcio-1.70.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce7df14b2dcd1102a2ec32f621cc9fab6695effef516efbc6b063ad749867295"}, + {file = "grpcio-1.70.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c78b339869f4dbf89881e0b6fbf376313e4f845a42840a7bdf42ee6caed4b11f"}, + {file = "grpcio-1.70.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:58ad9ba575b39edef71f4798fdb5c7b6d02ad36d47949cd381d4392a5c9cbcd3"}, + {file = "grpcio-1.70.0-cp310-cp310-win32.whl", hash = "sha256:2b0d02e4b25a5c1f9b6c7745d4fa06efc9fd6a611af0fb38d3ba956786b95199"}, + {file = "grpcio-1.70.0-cp310-cp310-win_amd64.whl", hash = "sha256:0de706c0a5bb9d841e353f6343a9defc9fc35ec61d6eb6111802f3aa9fef29e1"}, + {file = "grpcio-1.70.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:17325b0be0c068f35770f944124e8839ea3185d6d54862800fc28cc2ffad205a"}, + {file = "grpcio-1.70.0-cp311-cp311-macosx_10_14_universal2.whl", hash = "sha256:dbe41ad140df911e796d4463168e33ef80a24f5d21ef4d1e310553fcd2c4a386"}, + {file = "grpcio-1.70.0-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:5ea67c72101d687d44d9c56068328da39c9ccba634cabb336075fae2eab0d04b"}, + {file = "grpcio-1.70.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cb5277db254ab7586769e490b7b22f4ddab3876c490da0a1a9d7c695ccf0bf77"}, + {file = "grpcio-1.70.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e7831a0fc1beeeb7759f737f5acd9fdcda520e955049512d68fda03d91186eea"}, + {file = "grpcio-1.70.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:27cc75e22c5dba1fbaf5a66c778e36ca9b8ce850bf58a9db887754593080d839"}, + {file = "grpcio-1.70.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d63764963412e22f0491d0d32833d71087288f4e24cbcddbae82476bfa1d81fd"}, + {file = "grpcio-1.70.0-cp311-cp311-win32.whl", hash = "sha256:bb491125103c800ec209d84c9b51f1c60ea456038e4734688004f377cfacc113"}, + {file = "grpcio-1.70.0-cp311-cp311-win_amd64.whl", hash = "sha256:d24035d49e026353eb042bf7b058fb831db3e06d52bee75c5f2f3ab453e71aca"}, + {file = "grpcio-1.70.0-cp312-cp312-linux_armv7l.whl", hash = "sha256:ef4c14508299b1406c32bdbb9fb7b47612ab979b04cf2b27686ea31882387cff"}, + {file = "grpcio-1.70.0-cp312-cp312-macosx_10_14_universal2.whl", hash = "sha256:aa47688a65643afd8b166928a1da6247d3f46a2784d301e48ca1cc394d2ffb40"}, + {file = "grpcio-1.70.0-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:880bfb43b1bb8905701b926274eafce5c70a105bc6b99e25f62e98ad59cb278e"}, + {file = "grpcio-1.70.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9e654c4b17d07eab259d392e12b149c3a134ec52b11ecdc6a515b39aceeec898"}, + {file = "grpcio-1.70.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2394e3381071045a706ee2eeb6e08962dd87e8999b90ac15c55f56fa5a8c9597"}, + {file = "grpcio-1.70.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:b3c76701428d2df01964bc6479422f20e62fcbc0a37d82ebd58050b86926ef8c"}, + {file = "grpcio-1.70.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ac073fe1c4cd856ebcf49e9ed6240f4f84d7a4e6ee95baa5d66ea05d3dd0df7f"}, + {file = "grpcio-1.70.0-cp312-cp312-win32.whl", hash = "sha256:cd24d2d9d380fbbee7a5ac86afe9787813f285e684b0271599f95a51bce33528"}, + {file = "grpcio-1.70.0-cp312-cp312-win_amd64.whl", hash = "sha256:0495c86a55a04a874c7627fd33e5beaee771917d92c0e6d9d797628ac40e7655"}, + {file = "grpcio-1.70.0-cp313-cp313-linux_armv7l.whl", hash = "sha256:aa573896aeb7d7ce10b1fa425ba263e8dddd83d71530d1322fd3a16f31257b4a"}, + {file = "grpcio-1.70.0-cp313-cp313-macosx_10_14_universal2.whl", hash = "sha256:d405b005018fd516c9ac529f4b4122342f60ec1cee181788249372524e6db429"}, + {file = "grpcio-1.70.0-cp313-cp313-manylinux_2_17_aarch64.whl", hash = "sha256:f32090238b720eb585248654db8e3afc87b48d26ac423c8dde8334a232ff53c9"}, + {file = "grpcio-1.70.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dfa089a734f24ee5f6880c83d043e4f46bf812fcea5181dcb3a572db1e79e01c"}, + {file = "grpcio-1.70.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f19375f0300b96c0117aca118d400e76fede6db6e91f3c34b7b035822e06c35f"}, + {file = "grpcio-1.70.0-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:7c73c42102e4a5ec76608d9b60227d917cea46dff4d11d372f64cbeb56d259d0"}, + {file = "grpcio-1.70.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:0a5c78d5198a1f0aa60006cd6eb1c912b4a1520b6a3968e677dbcba215fabb40"}, + {file = "grpcio-1.70.0-cp313-cp313-win32.whl", hash = "sha256:fe9dbd916df3b60e865258a8c72ac98f3ac9e2a9542dcb72b7a34d236242a5ce"}, + {file = "grpcio-1.70.0-cp313-cp313-win_amd64.whl", hash = "sha256:4119fed8abb7ff6c32e3d2255301e59c316c22d31ab812b3fbcbaf3d0d87cc68"}, + {file = "grpcio-1.70.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:8058667a755f97407fca257c844018b80004ae8035565ebc2812cc550110718d"}, + {file = "grpcio-1.70.0-cp38-cp38-macosx_10_14_universal2.whl", hash = "sha256:879a61bf52ff8ccacbedf534665bb5478ec8e86ad483e76fe4f729aaef867cab"}, + {file = "grpcio-1.70.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:0ba0a173f4feacf90ee618fbc1a27956bfd21260cd31ced9bc707ef551ff7dc7"}, + {file = "grpcio-1.70.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:558c386ecb0148f4f99b1a65160f9d4b790ed3163e8610d11db47838d452512d"}, + {file = "grpcio-1.70.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:412faabcc787bbc826f51be261ae5fa996b21263de5368a55dc2cf824dc5090e"}, + {file = "grpcio-1.70.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3b0f01f6ed9994d7a0b27eeddea43ceac1b7e6f3f9d86aeec0f0064b8cf50fdb"}, + {file = "grpcio-1.70.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:7385b1cb064734005204bc8994eed7dcb801ed6c2eda283f613ad8c6c75cf873"}, + {file = "grpcio-1.70.0-cp38-cp38-win32.whl", hash = "sha256:07269ff4940f6fb6710951116a04cd70284da86d0a4368fd5a3b552744511f5a"}, + {file = "grpcio-1.70.0-cp38-cp38-win_amd64.whl", hash = "sha256:aba19419aef9b254e15011b230a180e26e0f6864c90406fdbc255f01d83bc83c"}, + {file = "grpcio-1.70.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:4f1937f47c77392ccd555728f564a49128b6a197a05a5cd527b796d36f3387d0"}, + {file = "grpcio-1.70.0-cp39-cp39-macosx_10_14_universal2.whl", hash = "sha256:0cd430b9215a15c10b0e7d78f51e8a39d6cf2ea819fd635a7214fae600b1da27"}, + {file = "grpcio-1.70.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:e27585831aa6b57b9250abaf147003e126cd3a6c6ca0c531a01996f31709bed1"}, + {file = "grpcio-1.70.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c1af8e15b0f0fe0eac75195992a63df17579553b0c4af9f8362cc7cc99ccddf4"}, + {file = "grpcio-1.70.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cbce24409beaee911c574a3d75d12ffb8c3e3dd1b813321b1d7a96bbcac46bf4"}, + {file = "grpcio-1.70.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:ff4a8112a79464919bb21c18e956c54add43ec9a4850e3949da54f61c241a4a6"}, + {file = "grpcio-1.70.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5413549fdf0b14046c545e19cfc4eb1e37e9e1ebba0ca390a8d4e9963cab44d2"}, + {file = "grpcio-1.70.0-cp39-cp39-win32.whl", hash = "sha256:b745d2c41b27650095e81dea7091668c040457483c9bdb5d0d9de8f8eb25e59f"}, + {file = "grpcio-1.70.0-cp39-cp39-win_amd64.whl", hash = "sha256:a31d7e3b529c94e930a117b2175b2efd179d96eb3c7a21ccb0289a8ab05b645c"}, + {file = "grpcio-1.70.0.tar.gz", hash = "sha256:8d1584a68d5922330025881e63a6c1b54cc8117291d382e4fa69339b6d914c56"}, +] + +[package.extras] +protobuf = ["grpcio-tools (>=1.70.0)"] + +[[package]] +name = "grpcio-health-checking" +version = "1.70.0" +description = "Standard Health Checking Service for gRPC" +optional = false +python-versions = ">=3.8" +files = [ + {file = "grpcio_health_checking-1.70.0-py3-none-any.whl", hash = "sha256:a38c828749e58c4031f005bdb9cc3b84f538947a9a5ea4f1cf957d22f250f515"}, + {file = "grpcio_health_checking-1.70.0.tar.gz", hash = "sha256:ca5fc86a7c609848c3877d11b5d2d2ed27e2923151e2bf61e47051c7d3c10d1b"}, +] + +[package.dependencies] +grpcio = ">=1.70.0" +protobuf = ">=5.26.1,<6.0dev" + +[[package]] +name = "grpcio-tools" +version = "1.70.0" +description = "Protobuf code generator for gRPC" +optional = false +python-versions = ">=3.8" +files = [ + {file = "grpcio_tools-1.70.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:4d456521290e25b1091975af71604facc5c7db162abdca67e12a0207b8bbacbe"}, + {file = "grpcio_tools-1.70.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:d50080bca84f53f3a05452e06e6251cbb4887f5a1d1321d1989e26d6e0dc398d"}, + {file = "grpcio_tools-1.70.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:02e3bf55fb569fe21b54a32925979156e320f9249bb247094c4cbaa60c23a80d"}, + {file = "grpcio_tools-1.70.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88a3ec6fa2381f616d567f996503e12ca353777941b61030fd9733fd5772860e"}, + {file = "grpcio_tools-1.70.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6034a0579fab2aed8685fa1a558de084668b1e9b01a82a4ca7458b9bedf4654c"}, + {file = "grpcio_tools-1.70.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:701bbb1ff406a21a771f5b1df6be516c0a59236774b6836eaad7696b1d128ea8"}, + {file = "grpcio_tools-1.70.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6eeb86864e1432fc1ab61e03395a2a4c04e9dd9c89db07e6fe68c7c2ac8ec24f"}, + {file = "grpcio_tools-1.70.0-cp310-cp310-win32.whl", hash = "sha256:d53c8c45e843b5836781ad6b82a607c72c2f9a3f556e23d703a0e099222421fa"}, + {file = "grpcio_tools-1.70.0-cp310-cp310-win_amd64.whl", hash = "sha256:22024caee36ab65c2489594d718921dcbb5bd18d61c5417a9ede94fd8dc8a589"}, + {file = "grpcio_tools-1.70.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:5f5aba12d98d25c7ab2dd983939e2c21556a7d15f903b286f24d88d2c6e30c0a"}, + {file = "grpcio_tools-1.70.0-cp311-cp311-macosx_10_14_universal2.whl", hash = "sha256:d47a6c6cfc526b290b7b53a37dd7e6932983f7a168b56aab760b4b597c47f30f"}, + {file = "grpcio_tools-1.70.0-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:b5a9beadd1e24772ffa2c70f07d72f73330d356b78b246e424f4f2ed6c6713f3"}, + {file = "grpcio_tools-1.70.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bb8135eef160a62505f074bf7a3d62f3b13911c3c14037c5392bf877114213b5"}, + {file = "grpcio_tools-1.70.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7ac9b3e13ace8467a586c53580ee22f9732c355583f3c344ef8c6c0666219cc"}, + {file = "grpcio_tools-1.70.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:63f367363a4a1489a0046b19f9d561216ea0d206c40a6f1bf07a58ccfb7be480"}, + {file = "grpcio_tools-1.70.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:54ceffef59a059d2c7304554a8bbb20eedb05a3f937159ab1c332c1b28e12c9f"}, + {file = "grpcio_tools-1.70.0-cp311-cp311-win32.whl", hash = "sha256:7a90a66a46821140a2a2b0be787dfabe42e22e9a5ba9cc70726b3e5c71a3b785"}, + {file = "grpcio_tools-1.70.0-cp311-cp311-win_amd64.whl", hash = "sha256:4ebf09733545a69c166b02caa14c34451e38855544820dab7fdde5c28e2dbffe"}, + {file = "grpcio_tools-1.70.0-cp312-cp312-linux_armv7l.whl", hash = "sha256:ec5d6932c3173d7618267b3b3fd77b9243949c5ec04302b7338386d4f8544e0b"}, + {file = "grpcio_tools-1.70.0-cp312-cp312-macosx_10_14_universal2.whl", hash = "sha256:f22852da12f53b02a3bdb29d0c32fcabab9c7c8f901389acffec8461083f110d"}, + {file = "grpcio_tools-1.70.0-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:7d45067e6efd20881e98a0e1d7edd7f207b1625ad7113321becbfe0a6ebee46c"}, + {file = "grpcio_tools-1.70.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3020c97f03b30eee3c26aa2a55fbe003f1729c6f879a378507c2c78524db7c12"}, + {file = "grpcio_tools-1.70.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7fd472fce3b33bdf7fbc24d40da7ab10d7a088bcaf59c37433c2c57330fbcb6"}, + {file = "grpcio_tools-1.70.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:3875543d74ce1a698a11f498f83795216ce929cb29afa5fac15672c7ba1d6dd2"}, + {file = "grpcio_tools-1.70.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a130c24d617a3a57369da784080dfa8848444d41b7ae1250abc06e72e706a8d9"}, + {file = "grpcio_tools-1.70.0-cp312-cp312-win32.whl", hash = "sha256:8eae17c920d14e2e451dbb18f5d8148f884e10228061941b33faa8fceee86e73"}, + {file = "grpcio_tools-1.70.0-cp312-cp312-win_amd64.whl", hash = "sha256:99caa530242a0a832d8b6a6ab94b190c9b449d3e237f953911b4d56207569436"}, + {file = "grpcio_tools-1.70.0-cp313-cp313-linux_armv7l.whl", hash = "sha256:f024688d04e7a9429489ed695b85628075c3c6d655198ba3c6ccbd1d8b7c333b"}, + {file = "grpcio_tools-1.70.0-cp313-cp313-macosx_10_14_universal2.whl", hash = "sha256:1fa9a81621d7178498dedcf94eb8f276a7594327faf3dd5fd1935ce2819a2bdb"}, + {file = "grpcio_tools-1.70.0-cp313-cp313-manylinux_2_17_aarch64.whl", hash = "sha256:c6da2585c0950cdb650df1ff6d85b3fe31e22f8370b9ee11f8fe641d5b4bf096"}, + {file = "grpcio_tools-1.70.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:70234b592af17050ec30cf35894790cef52aeae87639efe6db854a7fa783cc8c"}, + {file = "grpcio_tools-1.70.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c021b040d0a9f5bb96a725c4d2b95008aad127d6bed124a7bbe854973014f5b"}, + {file = "grpcio_tools-1.70.0-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:114a42e566e5b16a47e98f7910a6c0074b37e2d1faacaae13222e463d0d0d43c"}, + {file = "grpcio_tools-1.70.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:4cae365d7e3ba297256216a9a256458b286f75c64603f017972b3ad1ee374437"}, + {file = "grpcio_tools-1.70.0-cp313-cp313-win32.whl", hash = "sha256:ae139a8d3ddd8353f62af3af018e99ebcd2f4a237bd319cb4b6f58dd608aaa54"}, + {file = "grpcio_tools-1.70.0-cp313-cp313-win_amd64.whl", hash = "sha256:04bf30c0eb2741defe3ab6e0a6102b022d69cfd39d68fab9b954993ceca8d346"}, + {file = "grpcio_tools-1.70.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:076f71c6d5adcf237ebca63f1ed51098293261dab9f301e3dfd180e896e5fa89"}, + {file = "grpcio_tools-1.70.0-cp38-cp38-macosx_10_14_universal2.whl", hash = "sha256:d1fc2112e9c40167086e2e6a929b253e5281bffd070fab7cd1ae019317ffc11d"}, + {file = "grpcio_tools-1.70.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:904f13d2d04f88178b09d8ef89549b90cbf8792b684a7c72540fc1a9887697e2"}, + {file = "grpcio_tools-1.70.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1de6c71833d36fb8cc8ac10539681756dc2c5c67e5d4aa4d05adb91ecbdd8474"}, + {file = "grpcio_tools-1.70.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ab788afced2d2c59bef86479967ce0b28485789a9f2cc43793bb7aa67f9528b"}, + {file = "grpcio_tools-1.70.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:836293dcbb1e59fa52aa8aa890bd7a32a8eea7651cd614e96d86de4f3032fe73"}, + {file = "grpcio_tools-1.70.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:740b3741d124c5f390dd50ad1c42c11788882baf3c202cd3e69adee0e3dde559"}, + {file = "grpcio_tools-1.70.0-cp38-cp38-win32.whl", hash = "sha256:b9e4a12b862ba5e42d8028da311e8d4a2c307362659b2f4141d0f940f8c12b49"}, + {file = "grpcio_tools-1.70.0-cp38-cp38-win_amd64.whl", hash = "sha256:fd04c93af460b1456cd12f8f85502503e1db6c4adc1b7d4bd775b12c1fd94fee"}, + {file = "grpcio_tools-1.70.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:52d7e7ef11867fe7de577076b1f2ac6bf106b2325130e3de66f8c364c96ff332"}, + {file = "grpcio_tools-1.70.0-cp39-cp39-macosx_10_14_universal2.whl", hash = "sha256:0f7ed0372afd9f5eb938334e84681396257015ab92e03de009aa3170e64b24d0"}, + {file = "grpcio_tools-1.70.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:24a5b0328ffcfe0c4a9024f302545abdb8d6f24921409a5839f2879555b96fea"}, + {file = "grpcio_tools-1.70.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9387b30f3b2f46942fb5718624d7421875a6ce458620d6e15817172d78db1e1a"}, + {file = "grpcio_tools-1.70.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4545264e06e1cd7fb21b9447bb5126330bececb4bc626c98f793fda2fd910bf8"}, + {file = "grpcio_tools-1.70.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:79b723ce30416e8e1d7ff271f97ade79aaf30309a595d80c377105c07f5b20fd"}, + {file = "grpcio_tools-1.70.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1c0917dce12af04529606d437def83962d51c59dcde905746134222e94a2ab1b"}, + {file = "grpcio_tools-1.70.0-cp39-cp39-win32.whl", hash = "sha256:5cb0baa52d4d44690fac6b1040197c694776a291a90e2d3c369064b4d5bc6642"}, + {file = "grpcio_tools-1.70.0-cp39-cp39-win_amd64.whl", hash = "sha256:840ec536ab933db2ef8d5acaa6b712d0e9e8f397f62907c852ec50a3f69cdb78"}, + {file = "grpcio_tools-1.70.0.tar.gz", hash = "sha256:e578fee7c1c213c8e471750d92631d00f178a15479fb2cb3b939a07fc125ccd3"}, +] + +[package.dependencies] +grpcio = ">=1.70.0" +protobuf = ">=5.26.1,<6.0dev" +setuptools = "*" + [[package]] name = "h11" version = "0.14.0" @@ -317,6 +384,51 @@ files = [ {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, ] +[[package]] +name = "httpcore" +version = "1.0.7" +description = "A minimal low-level HTTP client." +optional = false +python-versions = ">=3.8" +files = [ + {file = "httpcore-1.0.7-py3-none-any.whl", hash = "sha256:a3fff8f43dc260d5bd363d9f9cf1830fa3a458b332856f34282de498ed420edd"}, + {file = "httpcore-1.0.7.tar.gz", hash = "sha256:8551cb62a169ec7162ac7be8d4817d561f60e08eaa485234898414bb5a8a0b4c"}, +] + +[package.dependencies] +certifi = "*" +h11 = ">=0.13,<0.15" + +[package.extras] +asyncio = ["anyio (>=4.0,<5.0)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] +trio = ["trio (>=0.22.0,<1.0)"] + +[[package]] +name = "httpx" +version = "0.28.1" +description = "The next generation HTTP client." +optional = false +python-versions = ">=3.8" +files = [ + {file = "httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad"}, + {file = "httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc"}, +] + +[package.dependencies] +anyio = "*" +certifi = "*" +httpcore = "==1.*" +idna = "*" + +[package.extras] +brotli = ["brotli", "brotlicffi"] +cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] +zstd = ["zstandard (>=0.18.0)"] + [[package]] name = "idna" version = "3.4" @@ -346,6 +458,26 @@ win32-setctime = {version = ">=1.0.0", markers = "sys_platform == \"win32\""} [package.extras] dev = ["Sphinx (==7.2.5)", "colorama (==0.4.5)", "colorama (==0.4.6)", "exceptiongroup (==1.1.3)", "freezegun (==1.1.0)", "freezegun (==1.2.2)", "mypy (==v0.910)", "mypy (==v0.971)", "mypy (==v1.4.1)", "mypy (==v1.5.1)", "pre-commit (==3.4.0)", "pytest (==6.1.2)", "pytest (==7.4.0)", "pytest-cov (==2.12.1)", "pytest-cov (==4.1.0)", "pytest-mypy-plugins (==1.9.3)", "pytest-mypy-plugins (==3.0.0)", "sphinx-autobuild (==2021.3.14)", "sphinx-rtd-theme (==1.3.0)", "tox (==3.27.1)", "tox (==4.11.0)"] +[[package]] +name = "protobuf" +version = "5.29.3" +description = "" +optional = false +python-versions = ">=3.8" +files = [ + {file = "protobuf-5.29.3-cp310-abi3-win32.whl", hash = "sha256:3ea51771449e1035f26069c4c7fd51fba990d07bc55ba80701c78f886bf9c888"}, + {file = "protobuf-5.29.3-cp310-abi3-win_amd64.whl", hash = "sha256:a4fa6f80816a9a0678429e84973f2f98cbc218cca434abe8db2ad0bffc98503a"}, + {file = "protobuf-5.29.3-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:a8434404bbf139aa9e1300dbf989667a83d42ddda9153d8ab76e0d5dcaca484e"}, + {file = "protobuf-5.29.3-cp38-abi3-manylinux2014_aarch64.whl", hash = "sha256:daaf63f70f25e8689c072cfad4334ca0ac1d1e05a92fc15c54eb9cf23c3efd84"}, + {file = "protobuf-5.29.3-cp38-abi3-manylinux2014_x86_64.whl", hash = "sha256:c027e08a08be10b67c06bf2370b99c811c466398c357e615ca88c91c07f0910f"}, + {file = "protobuf-5.29.3-cp38-cp38-win32.whl", hash = "sha256:84a57163a0ccef3f96e4b6a20516cedcf5bb3a95a657131c5c3ac62200d23252"}, + {file = "protobuf-5.29.3-cp38-cp38-win_amd64.whl", hash = "sha256:b89c115d877892a512f79a8114564fb435943b59067615894c3b13cd3e1fa107"}, + {file = "protobuf-5.29.3-cp39-cp39-win32.whl", hash = "sha256:0eb32bfa5219fc8d4111803e9a690658aa2e6366384fd0851064b963b6d1f2a7"}, + {file = "protobuf-5.29.3-cp39-cp39-win_amd64.whl", hash = "sha256:6ce8cc3389a20693bfde6c6562e03474c40851b44975c9b2bf6df7d8c4f864da"}, + {file = "protobuf-5.29.3-py3-none-any.whl", hash = "sha256:0a18ed4a24198528f2333802eb075e59dea9d679ab7a6c5efb017a59004d849f"}, + {file = "protobuf-5.29.3.tar.gz", hash = "sha256:5da0f41edaf117bde316404bad1a486cb4ededf8e4a54891296f648e8e076620"}, +] + [[package]] name = "pycparser" version = "2.21" @@ -359,136 +491,131 @@ files = [ [[package]] name = "pydantic" -version = "2.3.0" +version = "2.10.6" description = "Data validation using Python type hints" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pydantic-2.3.0-py3-none-any.whl", hash = "sha256:45b5e446c6dfaad9444819a293b921a40e1db1aa61ea08aede0522529ce90e81"}, - {file = "pydantic-2.3.0.tar.gz", hash = "sha256:1607cc106602284cd4a00882986570472f193fde9cb1259bceeaedb26aa79a6d"}, + {file = "pydantic-2.10.6-py3-none-any.whl", hash = "sha256:427d664bf0b8a2b34ff5dd0f5a18df00591adcee7198fbd71981054cef37b584"}, + {file = "pydantic-2.10.6.tar.gz", hash = "sha256:ca5daa827cce33de7a42be142548b0096bf05a7e7b365aebfa5f8eeec7128236"}, ] [package.dependencies] -annotated-types = ">=0.4.0" -pydantic-core = "2.6.3" -typing-extensions = ">=4.6.1" +annotated-types = ">=0.6.0" +pydantic-core = "2.27.2" +typing-extensions = ">=4.12.2" [package.extras] email = ["email-validator (>=2.0.0)"] +timezone = ["tzdata"] [[package]] name = "pydantic-core" -version = "2.6.3" -description = "" +version = "2.27.2" +description = "Core functionality for Pydantic validation and serialization" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pydantic_core-2.6.3-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:1a0ddaa723c48af27d19f27f1c73bdc615c73686d763388c8683fe34ae777bad"}, - {file = "pydantic_core-2.6.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5cfde4fab34dd1e3a3f7f3db38182ab6c95e4ea91cf322242ee0be5c2f7e3d2f"}, - {file = "pydantic_core-2.6.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5493a7027bfc6b108e17c3383959485087d5942e87eb62bbac69829eae9bc1f7"}, - {file = "pydantic_core-2.6.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:84e87c16f582f5c753b7f39a71bd6647255512191be2d2dbf49458c4ef024588"}, - {file = "pydantic_core-2.6.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:522a9c4a4d1924facce7270c84b5134c5cabcb01513213662a2e89cf28c1d309"}, - {file = "pydantic_core-2.6.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aaafc776e5edc72b3cad1ccedb5fd869cc5c9a591f1213aa9eba31a781be9ac1"}, - {file = "pydantic_core-2.6.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a750a83b2728299ca12e003d73d1264ad0440f60f4fc9cee54acc489249b728"}, - {file = "pydantic_core-2.6.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9e8b374ef41ad5c461efb7a140ce4730661aadf85958b5c6a3e9cf4e040ff4bb"}, - {file = "pydantic_core-2.6.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b594b64e8568cf09ee5c9501ede37066b9fc41d83d58f55b9952e32141256acd"}, - {file = "pydantic_core-2.6.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2a20c533cb80466c1d42a43a4521669ccad7cf2967830ac62c2c2f9cece63e7e"}, - {file = "pydantic_core-2.6.3-cp310-none-win32.whl", hash = "sha256:04fe5c0a43dec39aedba0ec9579001061d4653a9b53a1366b113aca4a3c05ca7"}, - {file = "pydantic_core-2.6.3-cp310-none-win_amd64.whl", hash = "sha256:6bf7d610ac8f0065a286002a23bcce241ea8248c71988bda538edcc90e0c39ad"}, - {file = "pydantic_core-2.6.3-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:6bcc1ad776fffe25ea5c187a028991c031a00ff92d012ca1cc4714087e575973"}, - {file = "pydantic_core-2.6.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:df14f6332834444b4a37685810216cc8fe1fe91f447332cd56294c984ecbff1c"}, - {file = "pydantic_core-2.6.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0b7486d85293f7f0bbc39b34e1d8aa26210b450bbd3d245ec3d732864009819"}, - {file = "pydantic_core-2.6.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a892b5b1871b301ce20d40b037ffbe33d1407a39639c2b05356acfef5536d26a"}, - {file = "pydantic_core-2.6.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:883daa467865e5766931e07eb20f3e8152324f0adf52658f4d302242c12e2c32"}, - {file = "pydantic_core-2.6.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d4eb77df2964b64ba190eee00b2312a1fd7a862af8918ec70fc2d6308f76ac64"}, - {file = "pydantic_core-2.6.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ce8c84051fa292a5dc54018a40e2a1926fd17980a9422c973e3ebea017aa8da"}, - {file = "pydantic_core-2.6.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:22134a4453bd59b7d1e895c455fe277af9d9d9fbbcb9dc3f4a97b8693e7e2c9b"}, - {file = "pydantic_core-2.6.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:02e1c385095efbd997311d85c6021d32369675c09bcbfff3b69d84e59dc103f6"}, - {file = "pydantic_core-2.6.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d79f1f2f7ebdb9b741296b69049ff44aedd95976bfee38eb4848820628a99b50"}, - {file = "pydantic_core-2.6.3-cp311-none-win32.whl", hash = "sha256:430ddd965ffd068dd70ef4e4d74f2c489c3a313adc28e829dd7262cc0d2dd1e8"}, - {file = "pydantic_core-2.6.3-cp311-none-win_amd64.whl", hash = "sha256:84f8bb34fe76c68c9d96b77c60cef093f5e660ef8e43a6cbfcd991017d375950"}, - {file = "pydantic_core-2.6.3-cp311-none-win_arm64.whl", hash = "sha256:5a2a3c9ef904dcdadb550eedf3291ec3f229431b0084666e2c2aa8ff99a103a2"}, - {file = "pydantic_core-2.6.3-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:8421cf496e746cf8d6b677502ed9a0d1e4e956586cd8b221e1312e0841c002d5"}, - {file = "pydantic_core-2.6.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:bb128c30cf1df0ab78166ded1ecf876620fb9aac84d2413e8ea1594b588c735d"}, - {file = "pydantic_core-2.6.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37a822f630712817b6ecc09ccc378192ef5ff12e2c9bae97eb5968a6cdf3b862"}, - {file = "pydantic_core-2.6.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:240a015102a0c0cc8114f1cba6444499a8a4d0333e178bc504a5c2196defd456"}, - {file = "pydantic_core-2.6.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f90e5e3afb11268628c89f378f7a1ea3f2fe502a28af4192e30a6cdea1e7d5e"}, - {file = "pydantic_core-2.6.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:340e96c08de1069f3d022a85c2a8c63529fd88709468373b418f4cf2c949fb0e"}, - {file = "pydantic_core-2.6.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1480fa4682e8202b560dcdc9eeec1005f62a15742b813c88cdc01d44e85308e5"}, - {file = "pydantic_core-2.6.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f14546403c2a1d11a130b537dda28f07eb6c1805a43dae4617448074fd49c282"}, - {file = "pydantic_core-2.6.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a87c54e72aa2ef30189dc74427421e074ab4561cf2bf314589f6af5b37f45e6d"}, - {file = "pydantic_core-2.6.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f93255b3e4d64785554e544c1c76cd32f4a354fa79e2eeca5d16ac2e7fdd57aa"}, - {file = "pydantic_core-2.6.3-cp312-none-win32.whl", hash = "sha256:f70dc00a91311a1aea124e5f64569ea44c011b58433981313202c46bccbec0e1"}, - {file = "pydantic_core-2.6.3-cp312-none-win_amd64.whl", hash = "sha256:23470a23614c701b37252618e7851e595060a96a23016f9a084f3f92f5ed5881"}, - {file = "pydantic_core-2.6.3-cp312-none-win_arm64.whl", hash = "sha256:1ac1750df1b4339b543531ce793b8fd5c16660a95d13aecaab26b44ce11775e9"}, - {file = "pydantic_core-2.6.3-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:a53e3195f134bde03620d87a7e2b2f2046e0e5a8195e66d0f244d6d5b2f6d31b"}, - {file = "pydantic_core-2.6.3-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:f2969e8f72c6236c51f91fbb79c33821d12a811e2a94b7aa59c65f8dbdfad34a"}, - {file = "pydantic_core-2.6.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:672174480a85386dd2e681cadd7d951471ad0bb028ed744c895f11f9d51b9ebe"}, - {file = "pydantic_core-2.6.3-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:002d0ea50e17ed982c2d65b480bd975fc41086a5a2f9c924ef8fc54419d1dea3"}, - {file = "pydantic_core-2.6.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3ccc13afee44b9006a73d2046068d4df96dc5b333bf3509d9a06d1b42db6d8bf"}, - {file = "pydantic_core-2.6.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:439a0de139556745ae53f9cc9668c6c2053444af940d3ef3ecad95b079bc9987"}, - {file = "pydantic_core-2.6.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d63b7545d489422d417a0cae6f9898618669608750fc5e62156957e609e728a5"}, - {file = "pydantic_core-2.6.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b44c42edc07a50a081672e25dfe6022554b47f91e793066a7b601ca290f71e42"}, - {file = "pydantic_core-2.6.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1c721bfc575d57305dd922e6a40a8fe3f762905851d694245807a351ad255c58"}, - {file = "pydantic_core-2.6.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:5e4a2cf8c4543f37f5dc881de6c190de08096c53986381daebb56a355be5dfe6"}, - {file = "pydantic_core-2.6.3-cp37-none-win32.whl", hash = "sha256:d9b4916b21931b08096efed090327f8fe78e09ae8f5ad44e07f5c72a7eedb51b"}, - {file = "pydantic_core-2.6.3-cp37-none-win_amd64.whl", hash = "sha256:a8acc9dedd304da161eb071cc7ff1326aa5b66aadec9622b2574ad3ffe225525"}, - {file = "pydantic_core-2.6.3-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:5e9c068f36b9f396399d43bfb6defd4cc99c36215f6ff33ac8b9c14ba15bdf6b"}, - {file = "pydantic_core-2.6.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e61eae9b31799c32c5f9b7be906be3380e699e74b2db26c227c50a5fc7988698"}, - {file = "pydantic_core-2.6.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d85463560c67fc65cd86153a4975d0b720b6d7725cf7ee0b2d291288433fc21b"}, - {file = "pydantic_core-2.6.3-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9616567800bdc83ce136e5847d41008a1d602213d024207b0ff6cab6753fe645"}, - {file = "pydantic_core-2.6.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9e9b65a55bbabda7fccd3500192a79f6e474d8d36e78d1685496aad5f9dbd92c"}, - {file = "pydantic_core-2.6.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f468d520f47807d1eb5d27648393519655eadc578d5dd862d06873cce04c4d1b"}, - {file = "pydantic_core-2.6.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9680dd23055dd874173a3a63a44e7f5a13885a4cfd7e84814be71be24fba83db"}, - {file = "pydantic_core-2.6.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9a718d56c4d55efcfc63f680f207c9f19c8376e5a8a67773535e6f7e80e93170"}, - {file = "pydantic_core-2.6.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8ecbac050856eb6c3046dea655b39216597e373aa8e50e134c0e202f9c47efec"}, - {file = "pydantic_core-2.6.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:788be9844a6e5c4612b74512a76b2153f1877cd845410d756841f6c3420230eb"}, - {file = "pydantic_core-2.6.3-cp38-none-win32.whl", hash = "sha256:07a1aec07333bf5adebd8264047d3dc518563d92aca6f2f5b36f505132399efc"}, - {file = "pydantic_core-2.6.3-cp38-none-win_amd64.whl", hash = "sha256:621afe25cc2b3c4ba05fff53525156d5100eb35c6e5a7cf31d66cc9e1963e378"}, - {file = "pydantic_core-2.6.3-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:813aab5bfb19c98ae370952b6f7190f1e28e565909bfc219a0909db168783465"}, - {file = "pydantic_core-2.6.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:50555ba3cb58f9861b7a48c493636b996a617db1a72c18da4d7f16d7b1b9952b"}, - {file = "pydantic_core-2.6.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19e20f8baedd7d987bd3f8005c146e6bcbda7cdeefc36fad50c66adb2dd2da48"}, - {file = "pydantic_core-2.6.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b0a5d7edb76c1c57b95df719af703e796fc8e796447a1da939f97bfa8a918d60"}, - {file = "pydantic_core-2.6.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f06e21ad0b504658a3a9edd3d8530e8cea5723f6ea5d280e8db8efc625b47e49"}, - {file = "pydantic_core-2.6.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea053cefa008fda40f92aab937fb9f183cf8752e41dbc7bc68917884454c6362"}, - {file = "pydantic_core-2.6.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:171a4718860790f66d6c2eda1d95dd1edf64f864d2e9f9115840840cf5b5713f"}, - {file = "pydantic_core-2.6.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5ed7ceca6aba5331ece96c0e328cd52f0dcf942b8895a1ed2642de50800b79d3"}, - {file = "pydantic_core-2.6.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:acafc4368b289a9f291e204d2c4c75908557d4f36bd3ae937914d4529bf62a76"}, - {file = "pydantic_core-2.6.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1aa712ba150d5105814e53cb141412217146fedc22621e9acff9236d77d2a5ef"}, - {file = "pydantic_core-2.6.3-cp39-none-win32.whl", hash = "sha256:44b4f937b992394a2e81a5c5ce716f3dcc1237281e81b80c748b2da6dd5cf29a"}, - {file = "pydantic_core-2.6.3-cp39-none-win_amd64.whl", hash = "sha256:9b33bf9658cb29ac1a517c11e865112316d09687d767d7a0e4a63d5c640d1b17"}, - {file = "pydantic_core-2.6.3-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:d7050899026e708fb185e174c63ebc2c4ee7a0c17b0a96ebc50e1f76a231c057"}, - {file = "pydantic_core-2.6.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:99faba727727b2e59129c59542284efebbddade4f0ae6a29c8b8d3e1f437beb7"}, - {file = "pydantic_core-2.6.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fa159b902d22b283b680ef52b532b29554ea2a7fc39bf354064751369e9dbd7"}, - {file = "pydantic_core-2.6.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:046af9cfb5384f3684eeb3f58a48698ddab8dd870b4b3f67f825353a14441418"}, - {file = "pydantic_core-2.6.3-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:930bfe73e665ebce3f0da2c6d64455098aaa67e1a00323c74dc752627879fc67"}, - {file = "pydantic_core-2.6.3-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:85cc4d105747d2aa3c5cf3e37dac50141bff779545ba59a095f4a96b0a460e70"}, - {file = "pydantic_core-2.6.3-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:b25afe9d5c4f60dcbbe2b277a79be114e2e65a16598db8abee2a2dcde24f162b"}, - {file = "pydantic_core-2.6.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:e49ce7dc9f925e1fb010fc3d555250139df61fa6e5a0a95ce356329602c11ea9"}, - {file = "pydantic_core-2.6.3-pp37-pypy37_pp73-macosx_10_7_x86_64.whl", hash = "sha256:2dd50d6a1aef0426a1d0199190c6c43ec89812b1f409e7fe44cb0fbf6dfa733c"}, - {file = "pydantic_core-2.6.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c6595b0d8c8711e8e1dc389d52648b923b809f68ac1c6f0baa525c6440aa0daa"}, - {file = "pydantic_core-2.6.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ef724a059396751aef71e847178d66ad7fc3fc969a1a40c29f5aac1aa5f8784"}, - {file = "pydantic_core-2.6.3-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3c8945a105f1589ce8a693753b908815e0748f6279959a4530f6742e1994dcb6"}, - {file = "pydantic_core-2.6.3-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:c8c6660089a25d45333cb9db56bb9e347241a6d7509838dbbd1931d0e19dbc7f"}, - {file = "pydantic_core-2.6.3-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:692b4ff5c4e828a38716cfa92667661a39886e71136c97b7dac26edef18767f7"}, - {file = "pydantic_core-2.6.3-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:f1a5d8f18877474c80b7711d870db0eeef9442691fcdb00adabfc97e183ee0b0"}, - {file = "pydantic_core-2.6.3-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:3796a6152c545339d3b1652183e786df648ecdf7c4f9347e1d30e6750907f5bb"}, - {file = "pydantic_core-2.6.3-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:b962700962f6e7a6bd77e5f37320cabac24b4c0f76afeac05e9f93cf0c620014"}, - {file = "pydantic_core-2.6.3-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56ea80269077003eaa59723bac1d8bacd2cd15ae30456f2890811efc1e3d4413"}, - {file = "pydantic_core-2.6.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75c0ebbebae71ed1e385f7dfd9b74c1cff09fed24a6df43d326dd7f12339ec34"}, - {file = "pydantic_core-2.6.3-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:252851b38bad3bfda47b104ffd077d4f9604a10cb06fe09d020016a25107bf98"}, - {file = "pydantic_core-2.6.3-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:6656a0ae383d8cd7cc94e91de4e526407b3726049ce8d7939049cbfa426518c8"}, - {file = "pydantic_core-2.6.3-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:d9140ded382a5b04a1c030b593ed9bf3088243a0a8b7fa9f071a5736498c5483"}, - {file = "pydantic_core-2.6.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:d38bbcef58220f9c81e42c255ef0bf99735d8f11edef69ab0b499da77105158a"}, - {file = "pydantic_core-2.6.3-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:c9d469204abcca28926cbc28ce98f28e50e488767b084fb3fbdf21af11d3de26"}, - {file = "pydantic_core-2.6.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:48c1ed8b02ffea4d5c9c220eda27af02b8149fe58526359b3c07eb391cb353a2"}, - {file = "pydantic_core-2.6.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b2b1bfed698fa410ab81982f681f5b1996d3d994ae8073286515ac4d165c2e7"}, - {file = "pydantic_core-2.6.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf9d42a71a4d7a7c1f14f629e5c30eac451a6fc81827d2beefd57d014c006c4a"}, - {file = "pydantic_core-2.6.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4292ca56751aebbe63a84bbfc3b5717abb09b14d4b4442cc43fd7c49a1529efd"}, - {file = "pydantic_core-2.6.3-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:7dc2ce039c7290b4ef64334ec7e6ca6494de6eecc81e21cb4f73b9b39991408c"}, - {file = "pydantic_core-2.6.3-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:615a31b1629e12445c0e9fc8339b41aaa6cc60bd53bf802d5fe3d2c0cda2ae8d"}, - {file = "pydantic_core-2.6.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:1fa1f6312fb84e8c281f32b39affe81984ccd484da6e9d65b3d18c202c666149"}, - {file = "pydantic_core-2.6.3.tar.gz", hash = "sha256:1508f37ba9e3ddc0189e6ff4e2228bd2d3c3a4641cbe8c07177162f76ed696c7"}, + {file = "pydantic_core-2.27.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2d367ca20b2f14095a8f4fa1210f5a7b78b8a20009ecced6b12818f455b1e9fa"}, + {file = "pydantic_core-2.27.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:491a2b73db93fab69731eaee494f320faa4e093dbed776be1a829c2eb222c34c"}, + {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7969e133a6f183be60e9f6f56bfae753585680f3b7307a8e555a948d443cc05a"}, + {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3de9961f2a346257caf0aa508a4da705467f53778e9ef6fe744c038119737ef5"}, + {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e2bb4d3e5873c37bb3dd58714d4cd0b0e6238cebc4177ac8fe878f8b3aa8e74c"}, + {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:280d219beebb0752699480fe8f1dc61ab6615c2046d76b7ab7ee38858de0a4e7"}, + {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47956ae78b6422cbd46f772f1746799cbb862de838fd8d1fbd34a82e05b0983a"}, + {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:14d4a5c49d2f009d62a2a7140d3064f686d17a5d1a268bc641954ba181880236"}, + {file = "pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:337b443af21d488716f8d0b6164de833e788aa6bd7e3a39c005febc1284f4962"}, + {file = "pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:03d0f86ea3184a12f41a2d23f7ccb79cdb5a18e06993f8a45baa8dfec746f0e9"}, + {file = "pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7041c36f5680c6e0f08d922aed302e98b3745d97fe1589db0a3eebf6624523af"}, + {file = "pydantic_core-2.27.2-cp310-cp310-win32.whl", hash = "sha256:50a68f3e3819077be2c98110c1f9dcb3817e93f267ba80a2c05bb4f8799e2ff4"}, + {file = "pydantic_core-2.27.2-cp310-cp310-win_amd64.whl", hash = "sha256:e0fd26b16394ead34a424eecf8a31a1f5137094cabe84a1bcb10fa6ba39d3d31"}, + {file = "pydantic_core-2.27.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:8e10c99ef58cfdf2a66fc15d66b16c4a04f62bca39db589ae8cba08bc55331bc"}, + {file = "pydantic_core-2.27.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:26f32e0adf166a84d0cb63be85c562ca8a6fa8de28e5f0d92250c6b7e9e2aff7"}, + {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c19d1ea0673cd13cc2f872f6c9ab42acc4e4f492a7ca9d3795ce2b112dd7e15"}, + {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5e68c4446fe0810e959cdff46ab0a41ce2f2c86d227d96dc3847af0ba7def306"}, + {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d9640b0059ff4f14d1f37321b94061c6db164fbe49b334b31643e0528d100d99"}, + {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:40d02e7d45c9f8af700f3452f329ead92da4c5f4317ca9b896de7ce7199ea459"}, + {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c1fd185014191700554795c99b347d64f2bb637966c4cfc16998a0ca700d048"}, + {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d81d2068e1c1228a565af076598f9e7451712700b673de8f502f0334f281387d"}, + {file = "pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1a4207639fb02ec2dbb76227d7c751a20b1a6b4bc52850568e52260cae64ca3b"}, + {file = "pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:3de3ce3c9ddc8bbd88f6e0e304dea0e66d843ec9de1b0042b0911c1663ffd474"}, + {file = "pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:30c5f68ded0c36466acede341551106821043e9afaad516adfb6e8fa80a4e6a6"}, + {file = "pydantic_core-2.27.2-cp311-cp311-win32.whl", hash = "sha256:c70c26d2c99f78b125a3459f8afe1aed4d9687c24fd677c6a4436bc042e50d6c"}, + {file = "pydantic_core-2.27.2-cp311-cp311-win_amd64.whl", hash = "sha256:08e125dbdc505fa69ca7d9c499639ab6407cfa909214d500897d02afb816e7cc"}, + {file = "pydantic_core-2.27.2-cp311-cp311-win_arm64.whl", hash = "sha256:26f0d68d4b235a2bae0c3fc585c585b4ecc51382db0e3ba402a22cbc440915e4"}, + {file = "pydantic_core-2.27.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9e0c8cfefa0ef83b4da9588448b6d8d2a2bf1a53c3f1ae5fca39eb3061e2f0b0"}, + {file = "pydantic_core-2.27.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:83097677b8e3bd7eaa6775720ec8e0405f1575015a463285a92bfdfe254529ef"}, + {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:172fce187655fece0c90d90a678424b013f8fbb0ca8b036ac266749c09438cb7"}, + {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:519f29f5213271eeeeb3093f662ba2fd512b91c5f188f3bb7b27bc5973816934"}, + {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:05e3a55d124407fffba0dd6b0c0cd056d10e983ceb4e5dbd10dda135c31071d6"}, + {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c3ed807c7b91de05e63930188f19e921d1fe90de6b4f5cd43ee7fcc3525cb8c"}, + {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fb4aadc0b9a0c063206846d603b92030eb6f03069151a625667f982887153e2"}, + {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:28ccb213807e037460326424ceb8b5245acb88f32f3d2777427476e1b32c48c4"}, + {file = "pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:de3cd1899e2c279b140adde9357c4495ed9d47131b4a4eaff9052f23398076b3"}, + {file = "pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:220f892729375e2d736b97d0e51466252ad84c51857d4d15f5e9692f9ef12be4"}, + {file = "pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a0fcd29cd6b4e74fe8ddd2c90330fd8edf2e30cb52acda47f06dd615ae72da57"}, + {file = "pydantic_core-2.27.2-cp312-cp312-win32.whl", hash = "sha256:1e2cb691ed9834cd6a8be61228471d0a503731abfb42f82458ff27be7b2186fc"}, + {file = "pydantic_core-2.27.2-cp312-cp312-win_amd64.whl", hash = "sha256:cc3f1a99a4f4f9dd1de4fe0312c114e740b5ddead65bb4102884b384c15d8bc9"}, + {file = "pydantic_core-2.27.2-cp312-cp312-win_arm64.whl", hash = "sha256:3911ac9284cd8a1792d3cb26a2da18f3ca26c6908cc434a18f730dc0db7bfa3b"}, + {file = "pydantic_core-2.27.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:7d14bd329640e63852364c306f4d23eb744e0f8193148d4044dd3dacdaacbd8b"}, + {file = "pydantic_core-2.27.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:82f91663004eb8ed30ff478d77c4d1179b3563df6cdb15c0817cd1cdaf34d154"}, + {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71b24c7d61131bb83df10cc7e687433609963a944ccf45190cfc21e0887b08c9"}, + {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fa8e459d4954f608fa26116118bb67f56b93b209c39b008277ace29937453dc9"}, + {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce8918cbebc8da707ba805b7fd0b382816858728ae7fe19a942080c24e5b7cd1"}, + {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eda3f5c2a021bbc5d976107bb302e0131351c2ba54343f8a496dc8783d3d3a6a"}, + {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd8086fa684c4775c27f03f062cbb9eaa6e17f064307e86b21b9e0abc9c0f02e"}, + {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8d9b3388db186ba0c099a6d20f0604a44eabdeef1777ddd94786cdae158729e4"}, + {file = "pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:7a66efda2387de898c8f38c0cf7f14fca0b51a8ef0b24bfea5849f1b3c95af27"}, + {file = "pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:18a101c168e4e092ab40dbc2503bdc0f62010e95d292b27827871dc85450d7ee"}, + {file = "pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ba5dd002f88b78a4215ed2f8ddbdf85e8513382820ba15ad5ad8955ce0ca19a1"}, + {file = "pydantic_core-2.27.2-cp313-cp313-win32.whl", hash = "sha256:1ebaf1d0481914d004a573394f4be3a7616334be70261007e47c2a6fe7e50130"}, + {file = "pydantic_core-2.27.2-cp313-cp313-win_amd64.whl", hash = "sha256:953101387ecf2f5652883208769a79e48db18c6df442568a0b5ccd8c2723abee"}, + {file = "pydantic_core-2.27.2-cp313-cp313-win_arm64.whl", hash = "sha256:ac4dbfd1691affb8f48c2c13241a2e3b60ff23247cbcf981759c768b6633cf8b"}, + {file = "pydantic_core-2.27.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:d3e8d504bdd3f10835468f29008d72fc8359d95c9c415ce6e767203db6127506"}, + {file = "pydantic_core-2.27.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:521eb9b7f036c9b6187f0b47318ab0d7ca14bd87f776240b90b21c1f4f149320"}, + {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85210c4d99a0114f5a9481b44560d7d1e35e32cc5634c656bc48e590b669b145"}, + {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d716e2e30c6f140d7560ef1538953a5cd1a87264c737643d481f2779fc247fe1"}, + {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f66d89ba397d92f840f8654756196d93804278457b5fbede59598a1f9f90b228"}, + {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:669e193c1c576a58f132e3158f9dfa9662969edb1a250c54d8fa52590045f046"}, + {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdbe7629b996647b99c01b37f11170a57ae675375b14b8c13b8518b8320ced5"}, + {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d262606bf386a5ba0b0af3b97f37c83d7011439e3dc1a9298f21efb292e42f1a"}, + {file = "pydantic_core-2.27.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:cabb9bcb7e0d97f74df8646f34fc76fbf793b7f6dc2438517d7a9e50eee4f14d"}, + {file = "pydantic_core-2.27.2-cp38-cp38-musllinux_1_1_armv7l.whl", hash = "sha256:d2d63f1215638d28221f664596b1ccb3944f6e25dd18cd3b86b0a4c408d5ebb9"}, + {file = "pydantic_core-2.27.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bca101c00bff0adb45a833f8451b9105d9df18accb8743b08107d7ada14bd7da"}, + {file = "pydantic_core-2.27.2-cp38-cp38-win32.whl", hash = "sha256:f6f8e111843bbb0dee4cb6594cdc73e79b3329b526037ec242a3e49012495b3b"}, + {file = "pydantic_core-2.27.2-cp38-cp38-win_amd64.whl", hash = "sha256:fd1aea04935a508f62e0d0ef1f5ae968774a32afc306fb8545e06f5ff5cdf3ad"}, + {file = "pydantic_core-2.27.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:c10eb4f1659290b523af58fa7cffb452a61ad6ae5613404519aee4bfbf1df993"}, + {file = "pydantic_core-2.27.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ef592d4bad47296fb11f96cd7dc898b92e795032b4894dfb4076cfccd43a9308"}, + {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c61709a844acc6bf0b7dce7daae75195a10aac96a596ea1b776996414791ede4"}, + {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:42c5f762659e47fdb7b16956c71598292f60a03aa92f8b6351504359dbdba6cf"}, + {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4c9775e339e42e79ec99c441d9730fccf07414af63eac2f0e48e08fd38a64d76"}, + {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:57762139821c31847cfb2df63c12f725788bd9f04bc2fb392790959b8f70f118"}, + {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d1e85068e818c73e048fe28cfc769040bb1f475524f4745a5dc621f75ac7630"}, + {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:097830ed52fd9e427942ff3b9bc17fab52913b2f50f2880dc4a5611446606a54"}, + {file = "pydantic_core-2.27.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:044a50963a614ecfae59bb1eaf7ea7efc4bc62f49ed594e18fa1e5d953c40e9f"}, + {file = "pydantic_core-2.27.2-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:4e0b4220ba5b40d727c7f879eac379b822eee5d8fff418e9d3381ee45b3b0362"}, + {file = "pydantic_core-2.27.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5e4f4bb20d75e9325cc9696c6802657b58bc1dbbe3022f32cc2b2b632c3fbb96"}, + {file = "pydantic_core-2.27.2-cp39-cp39-win32.whl", hash = "sha256:cca63613e90d001b9f2f9a9ceb276c308bfa2a43fafb75c8031c4f66039e8c6e"}, + {file = "pydantic_core-2.27.2-cp39-cp39-win_amd64.whl", hash = "sha256:77d1bca19b0f7021b3a982e6f903dcd5b2b06076def36a652e3907f596e29f67"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:2bf14caea37e91198329b828eae1618c068dfb8ef17bb33287a7ad4b61ac314e"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:b0cb791f5b45307caae8810c2023a184c74605ec3bcbb67d13846c28ff731ff8"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:688d3fd9fcb71f41c4c015c023d12a79d1c4c0732ec9eb35d96e3388a120dcf3"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d591580c34f4d731592f0e9fe40f9cc1b430d297eecc70b962e93c5c668f15f"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:82f986faf4e644ffc189a7f1aafc86e46ef70372bb153e7001e8afccc6e54133"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:bec317a27290e2537f922639cafd54990551725fc844249e64c523301d0822fc"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:0296abcb83a797db256b773f45773da397da75a08f5fcaef41f2044adec05f50"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:0d75070718e369e452075a6017fbf187f788e17ed67a3abd47fa934d001863d9"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:7e17b560be3c98a8e3aa66ce828bdebb9e9ac6ad5466fba92eb74c4c95cb1151"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c33939a82924da9ed65dab5a65d427205a73181d8098e79b6b426bdf8ad4e656"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:00bad2484fa6bda1e216e7345a798bd37c68fb2d97558edd584942aa41b7d278"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c817e2b40aba42bac6f457498dacabc568c3b7a986fc9ba7c8d9d260b71485fb"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:251136cdad0cb722e93732cb45ca5299fb56e1344a833640bf93b2803f8d1bfd"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d2088237af596f0a524d3afc39ab3b036e8adb054ee57cbb1dcf8e09da5b29cc"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:d4041c0b966a84b4ae7a09832eb691a35aec90910cd2dbe7a208de59be77965b"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:8083d4e875ebe0b864ffef72a4304827015cff328a1be6e22cc850753bfb122b"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f141ee28a0ad2123b6611b6ceff018039df17f32ada8b534e6aa039545a3efb2"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7d0c8399fcc1848491f00e0314bd59fb34a9c008761bcb422a057670c3f65e35"}, + {file = "pydantic_core-2.27.2.tar.gz", hash = "sha256:eb026e5a4c1fee05726072337ff51d1efb6f59090b7da90d30ea58625b1ffb39"}, ] [package.dependencies] @@ -509,25 +636,24 @@ files = [ cli = ["click (>=5.0)"] [[package]] -name = "requests" -version = "2.31.0" -description = "Python HTTP for Humans." +name = "setuptools" +version = "75.8.0" +description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false -python-versions = ">=3.7" +python-versions = ">=3.9" files = [ - {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, - {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, + {file = "setuptools-75.8.0-py3-none-any.whl", hash = "sha256:e3982f444617239225d675215d51f6ba05f845d4eec313da4418fdbb56fb27e3"}, + {file = "setuptools-75.8.0.tar.gz", hash = "sha256:c5afc8f407c626b8313a86e10311dd3f661c6cd9c09d4bf8c15c0e11f9f2b0e6"}, ] -[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)"] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.8.0)"] +core = ["importlib_metadata (>=6)", "jaraco.collections", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] +enabler = ["pytest-enabler (>=2.2)"] +test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.7.2)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] +type = ["importlib_metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (==1.14.*)", "pytest-mypy"] [[package]] name = "sniffio" @@ -570,32 +696,15 @@ files = [ [[package]] name = "typing-extensions" -version = "4.7.1" -description = "Backported and Experimental Type Hints for Python 3.7+" -optional = false -python-versions = ">=3.7" -files = [ - {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, - {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, -] - -[[package]] -name = "urllib3" -version = "2.0.4" -description = "HTTP library with thread-safe connection pooling, file post, and more." +version = "4.12.2" +description = "Backported and Experimental Type Hints for Python 3.8+" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "urllib3-2.0.4-py3-none-any.whl", hash = "sha256:de7df1803967d2c2a98e4b11bb7d6bd9210474c46e8a0401514e3a42a75ebde4"}, - {file = "urllib3-2.0.4.tar.gz", hash = "sha256:8d22f86aae8ef5e410d4f539fde9ce6b2113a001bb4d189e0aed70642d602b11"}, + {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, + {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, ] -[package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] -secure = ["certifi", "cryptography (>=1.9)", "idna (>=2.0.0)", "pyopenssl (>=17.1.0)", "urllib3-secure-extra"] -socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] -zstd = ["zstandard (>=0.18.0)"] - [[package]] name = "uvicorn" version = "0.23.2" @@ -616,44 +725,37 @@ standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", [[package]] name = "validators" -version = "0.22.0" +version = "0.34.0" description = "Python Data Validation for Humans™" optional = false python-versions = ">=3.8" files = [ - {file = "validators-0.22.0-py3-none-any.whl", hash = "sha256:61cf7d4a62bbae559f2e54aed3b000cea9ff3e2fdbe463f51179b92c58c9585a"}, - {file = "validators-0.22.0.tar.gz", hash = "sha256:77b2689b172eeeb600d9605ab86194641670cdb73b60afd577142a9397873370"}, + {file = "validators-0.34.0-py3-none-any.whl", hash = "sha256:c804b476e3e6d3786fa07a30073a4ef694e617805eb1946ceee3fe5a9b8b1321"}, + {file = "validators-0.34.0.tar.gz", hash = "sha256:647fe407b45af9a74d245b943b18e6a816acf4926974278f6dd617778e1e781f"}, ] [package.extras] -docs-offline = ["myst-parser (>=2.0.0)", "pypandoc-binary (>=1.11)", "sphinx (>=7.1.1)"] -docs-online = ["mkdocs (>=1.5.2)", "mkdocs-git-revision-date-localized-plugin (>=1.2.0)", "mkdocs-material (>=9.2.6)", "mkdocstrings[python] (>=0.22.0)", "pyaml (>=23.7.0)"] -hooks = ["pre-commit (>=3.3.3)"] -package = ["build (>=1.0.0)", "twine (>=4.0.2)"] -runner = ["tox (>=4.11.1)"] -sast = ["bandit[toml] (>=1.7.5)"] -testing = ["pytest (>=7.4.0)"] -tooling = ["black (>=23.7.0)", "pyright (>=1.1.325)", "ruff (>=0.0.287)"] -tooling-extras = ["pyaml (>=23.7.0)", "pypandoc-binary (>=1.11)", "pytest (>=7.4.0)"] +crypto-eth-addresses = ["eth-hash[pycryptodome] (>=0.7.0)"] [[package]] name = "weaviate-client" -version = "3.24.1" +version = "4.10.4" description = "A python native Weaviate client" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "weaviate-client-3.24.1.tar.gz", hash = "sha256:e073350c21bd4dca5c0eac5dd5d95fb474278c715aaf2041e382d86bb7518ac8"}, - {file = "weaviate_client-3.24.1-py3-none-any.whl", hash = "sha256:2179ea1093685f6f7cefbd19e2896eeb4b4c720954d953018c0853f775cdad8b"}, + {file = "weaviate_client-4.10.4-py3-none-any.whl", hash = "sha256:d9808456ba109fcd99331bc833b61cf520bf6ad9db442db621e12f78c8480c4c"}, + {file = "weaviate_client-4.10.4.tar.gz", hash = "sha256:a1e799fc41d9f43a56c95490f6c14f475861f27d2a62b9b6de28a1db5494751d"}, ] [package.dependencies] -authlib = ">=1.2.1,<2.0.0" -requests = ">=2.30.0,<3.0.0" -validators = ">=0.21.2,<1.0.0" - -[package.extras] -grpc = ["grpcio (>=1.57.0,<2.0.0)", "grpcio-tools (>=1.57.0,<2.0.0)"] +authlib = ">=1.2.1,<1.3.2" +grpcio = ">=1.66.2,<2.0.0" +grpcio-health-checking = ">=1.66.2,<2.0.0" +grpcio-tools = ">=1.66.2,<2.0.0" +httpx = ">=0.26.0,<0.29.0" +pydantic = ">=2.8.0,<3.0.0" +validators = "0.34.0" [[package]] name = "win32-setctime" @@ -672,4 +774,4 @@ dev = ["black (>=19.3b0)", "pytest (>=4.6.2)"] [metadata] lock-version = "2.0" python-versions = "^3.11" -content-hash = "4cb8b03ca87c4561296521aefb26a4c7367efb524a37cefcbae4bc9e481b62c7" +content-hash = "d9924064f3485738354087da441f013cd66d5bdc4be2bb57ef3642ea2aff3160" diff --git a/pyproject.toml b/pyproject.toml index 07de333..1cc5904 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,13 +4,14 @@ version = "0.1.0" description = "" authors = ["Thomas "] readme = "README.md" +package-mode = false [tool.poetry.dependencies] python = "^3.11" fastapi = "^0.103.1" toolz = "^0.12.0" loguru = "^0.7.2" -weaviate-client = "^3.24.1" +weaviate-client = "~4" python-dotenv = "^1.0.0" uvicorn = "^0.23.2" diff --git a/weaviate_ui/main.py b/weaviate_ui/main.py index 0067865..2f631c6 100644 --- a/weaviate_ui/main.py +++ b/weaviate_ui/main.py @@ -18,34 +18,54 @@ allow_methods=["*"], allow_headers=["*"], ) -WEAVIATE_API_KEYS = os.getenv("WEAVIATE_API_KEYS", None) -client = weaviate.Client( - url=os.getenv("WEAVIATE_URL"), - auth_client_secret=weaviate.AuthApiKey(api_key=WEAVIATE_API_KEYS) if WEAVIATE_API_KEYS else None, + +WEAVIATE_HOST = os.getenv("WEAVIATE_HOST") +WEAVIATE_PORT = int(os.getenv("WEAVIATE_PORT")) +WEAVIATE_SECURE = bool(os.getenv("WEAVIATE_SECURE")) +WEAVIATE_GRPC_HOST = os.getenv("WEAVIATE_GRPC_HOST") +WEAVIATE_GRPC_PORT = int(os.getenv("WEAVIATE_GRPC_PORT")) +WEAVIATE_GRPC_SECURE = bool(os.getenv("WEAVIATE_GRPC_SECURE")) +WEAVIATE_AUTH_CREDENTIALS = os.getenv("WEAVIATE_AUTH_CREDENTIALS", None) + +client = weaviate.connect_to_custom( + http_host=WEAVIATE_HOST, + http_port=WEAVIATE_PORT, + http_secure=WEAVIATE_SECURE, + grpc_host=WEAVIATE_GRPC_HOST, + grpc_port=WEAVIATE_GRPC_PORT, + grpc_secure=WEAVIATE_GRPC_SECURE, + auth_credentials=WEAVIATE_AUTH_CREDENTIALS, ) @app.get("/schema") -def schema() : - return client.schema.get() +def schema(): + return client.collections.list_all() -@app.post("/class/{class_name}/{offset}/{limit}/{keyword}") -def class0(class_name: str, offset: int, limit: int, keyword: str = '', properties: list[str] = None) : - builder = client.query.get(class_name, properties) +@app.post("/class/{class_name}") +def class0( + class_name: str, + offset: int = 0, + limit: int = 20, + keyword: str = "", + certainty: float = 0.5, + properties: list[str] | None = None, +): logger.info(keyword) - if keyword != "none" : - builder = builder.with_near_text({"concepts" : [keyword]}) - do = builder.with_additional( - "id").with_offset(offset).with_limit(limit).do() - count = client.query.aggregate(class_name).with_meta_count().do().get('data').get('Aggregate').get(class_name)[ - 0].get('meta').get('count') - logger.info(count) - return { - 'data' : do.get('data').get('Get').get( - class_name), - 'count' : count - } + + collection = client.collections.get(class_name) + paginate = {"limit": limit, "offset": offset} + + if keyword: + query = {"query": keyword, "certainty": certainty} + response = collection.query.near_text(**query, **paginate) + count_response = collection.aggregate.near_text(total_count=True, **query) + else: + response = collection.query.fetch_objects(**paginate) + count_response = collection.aggregate.over_all(total_count=True) + + return {"data": response.objects, "count": count_response.total_count} app.mount("/", StaticFiles(directory="static", html=True), name="static") From a1dceb5fa13217155b667767a3b515ff0c7c1ced Mon Sep 17 00:00:00 2001 From: Martin Trapp Date: Thu, 6 Feb 2025 09:51:48 +0100 Subject: [PATCH 3/9] Cleanup and minor changes --- compose.yml | 2 - frontend/src/App.tsx | 12 ++-- frontend/src/Welcome.tsx | 6 +- frontend/src/types.ts | 120 --------------------------------------- 4 files changed, 9 insertions(+), 131 deletions(-) diff --git a/compose.yml b/compose.yml index 48b914b..424f93c 100644 --- a/compose.yml +++ b/compose.yml @@ -1,5 +1,3 @@ -version: "3.8" - services: weaviate-ui: command: uvicorn weaviate_ui.main:app --host 0.0.0.0 --port 7777 --reload diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 03f8d51..824f9c5 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -4,8 +4,6 @@ import Welcome from "./Welcome.tsx"; import { BorderlessTableOutlined, CrownFilled, - DashOutlined, - SmileFilled, TableOutlined, } from "@ant-design/icons"; import { getSchema } from "./api.ts"; @@ -26,14 +24,11 @@ export default () => { path: "/schema", name: "Schema", icon: , - component:
123
, }, { path: "/class", - name: "Class", + name: "Collection", icon: , - access: "canAdmin", - component: "./Admin", routes: [], }, ], @@ -52,6 +47,11 @@ export default () => { name: schema.name, icon: , })); + routes.route.routes[1].routes.push({ + key: "hidden-root", + path: "/", + hideInMenu: true, + }); // add a hidden root route so the sub menu will show by default setRoutes(_.cloneDeep(routes)); let class2props = {}; classes.forEach((schema: Collection) => { diff --git a/frontend/src/Welcome.tsx b/frontend/src/Welcome.tsx index fe22d5b..bfca1c0 100644 --- a/frontend/src/Welcome.tsx +++ b/frontend/src/Welcome.tsx @@ -16,16 +16,16 @@ export default function () { const tableListDataSource = schemas.map((schema: Collection) => ({ className: schema.name, description: schema.description, - vectorIndexType: Object.values(schema.vector_config) + vectorIndexType: null, + vectorizer: Object.values(schema.vector_config) .map((config) => config.vectorizer.vectorizer) .join(","), - vectorizer: schema.vectorizer, key: schema.name, detail: schema, })); const columns: ProColumns[] = [ { - title: "Class", + title: "Collection", dataIndex: "className", }, { diff --git a/frontend/src/types.ts b/frontend/src/types.ts index 2399533..f49bd9b 100644 --- a/frontend/src/types.ts +++ b/frontend/src/types.ts @@ -1,122 +1,3 @@ -/* -Having the following format: - -{ - "Article": { - "name": "Article", - "description": null, - "generative_config": null, - "properties": [ - { - "name": "title", - "description": null, - "data_type": "text", - "index_filterable": true, - "index_range_filters": false, - "index_searchable": true, - "nested_properties": null, - "tokenization": "word", - "vectorizer_config": null, - "vectorizer": "none" - }, - { - "name": "text", - "description": null, - "data_type": "text", - "index_filterable": true, - "index_range_filters": false, - "index_searchable": true, - "nested_properties": null, - "tokenization": "word", - "vectorizer_config": null, - "vectorizer": "none" - }, - { - "name": "url", - "description": null, - "data_type": "text", - "index_filterable": true, - "index_range_filters": false, - "index_searchable": true, - "nested_properties": null, - "tokenization": "word", - "vectorizer_config": null, - "vectorizer": "none" - }, - { - "name": "parse_date", - "description": null, - "data_type": "date", - "index_filterable": true, - "index_range_filters": false, - "index_searchable": false, - "nested_properties": null, - "tokenization": null, - "vectorizer_config": null, - "vectorizer": "none" - }, - { - "name": "region", - "description": null, - "data_type": "text[]", - "index_filterable": true, - "index_range_filters": false, - "index_searchable": true, - "nested_properties": null, - "tokenization": "word", - "vectorizer_config": null, - "vectorizer": "none" - }, - { - "name": "mongo_id", - "description": "This property was generated by Weaviate's auto-schema feature on Mon Feb 3 10:45:38 2025", - "data_type": "text", - "index_filterable": true, - "index_range_filters": false, - "index_searchable": true, - "nested_properties": null, - "tokenization": "word", - "vectorizer_config": null, - "vectorizer": "none" - } - ], - "references": [], - "reranker_config": null, - "vectorizer_config": null, - "vectorizer": null, - "vector_config": { - "title_vector": { - "vectorizer": { - "vectorizer": "text2vec-transformers", - "model": { - "poolingStrategy": "masked_mean", - "vectorizeClassName": true - }, - "source_properties": null - }, - "vector_index_config": { - "quantizer": null, - "cleanup_interval_seconds": 300, - "distance_metric": "cosine", - "dynamic_ef_min": 100, - "dynamic_ef_max": 500, - "dynamic_ef_factor": 8, - "ef": -1, - "ef_construction": 128, - "filter_strategy": "sweeping", - "flat_search_cutoff": 40000, - "max_connections": 32, - "skip": false, - "vector_cache_max_objects": 1000000000000 - } - } - } - } -} - -The array can have any number of keys with the following format. The value needed in a separate interface so it can be reused. -*/ - interface Property { name: string; description: string | null; @@ -178,7 +59,6 @@ interface Collections { [key: string]: Collection; } -// export all export type { Property, VectorizerConfig, From 41dad05c654ac7c046f351668913ad10b3296b9d Mon Sep 17 00:00:00 2001 From: Martin Trapp Date: Thu, 6 Feb 2025 12:06:20 +0100 Subject: [PATCH 4/9] Update README.md --- README.md | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f59fecf..1126c1a 100644 --- a/README.md +++ b/README.md @@ -9,11 +9,20 @@ Weaviate-UI is a web client for interacting with the Weaviate. - Schema query - Data search -## Usage +## Usage V4 + +See `compose.yml` and adjust environment variables to your need. By default it will look for a locally hosted weaviate on the default 8080 port (without auth credentials). + +```bash +$ docker-compose up +``` + +## Usage V3 ```bash $ docker run -e WEAVIATE_URL=http://localhost:8091 -e WEAVIATE_API_KEYS=secret naaive/weaviate-ui:latest ``` ## Contribution -Any form of contribution is welcome, including but not limited to submitting bug reports, proposing new features, improving code, etc. \ No newline at end of file + +Any form of contribution is welcome, including but not limited to submitting bug reports, proposing new features, improving code, etc. From 84af97ef0de826d02314039e337d5a37c550cbd9 Mon Sep 17 00:00:00 2001 From: Martin Trapp Date: Fri, 7 Feb 2025 10:09:28 +0100 Subject: [PATCH 5/9] Add certainty control --- frontend/src/ClassData.tsx | 55 ++++++++++++++++++++++++++++++++------ frontend/src/api.ts | 2 ++ weaviate_ui/main.py | 5 ++-- 3 files changed, 52 insertions(+), 10 deletions(-) diff --git a/frontend/src/ClassData.tsx b/frontend/src/ClassData.tsx index ab6b98f..a41eb68 100644 --- a/frontend/src/ClassData.tsx +++ b/frontend/src/ClassData.tsx @@ -1,10 +1,19 @@ import React, { useEffect, useRef, useState } from "react"; import { getClass } from "./api.ts"; -import { ActionType, ProTable } from "@ant-design/pro-components"; +import { + ActionType, + ProTable, + LightFilter, + ProFormSlider, + ProFormDatePicker, + QueryFilter, +} from "@ant-design/pro-components"; export default function ({ pathname, propties }: any) { let propertyNames = propties.map((x) => x.name); + let defaultCertainty = 0.65; const [keyword, setKeyword] = useState(""); + const [certainty, setCertainty] = useState(defaultCertainty); let columns = []; columns.push({ @@ -31,21 +40,26 @@ export default function ({ pathname, propties }: any) { actionRef={ref} params={{ pathname: pathname }} columns={columns} - // dataSource={data} request={async ( // 第一个参数 params 查询表单和 params 参数的结合 // 第一个参数中一定会有 pageSize 和 current ,这两个参数是 antd 的规范 - params: any, + params, sort, filter ) => { + const collection = pathname; + const offset = (params.current - 1) * params.pageSize; + const limit = params.pageSize; + let clzData = await getClass( - pathname, - (params.current - 1) * params.pageSize, - params.pageSize, + collection, + offset, + limit, keyword, + certainty, propertyNames ); + let data = clzData.data.map((clz: any) => { let res = {}; @@ -67,7 +81,7 @@ export default function ({ pathname, propties }: any) { rowKey="key" dateFormatter="string" toolbar={{ - title: "Class", + title: "Collection", tooltip: "", search: { onSearch: async (value: string) => { @@ -75,9 +89,34 @@ export default function ({ pathname, propties }: any) { ref.current?.reload(); }, }, + filter: ( + + setCertainty( + values.certainty ? values.certainty : defaultCertainty + ) + } + > + + + ), }} search={false} - toolBarRender={() => []} />
); diff --git a/frontend/src/api.ts b/frontend/src/api.ts index 897a9b5..fcaaba9 100644 --- a/frontend/src/api.ts +++ b/frontend/src/api.ts @@ -13,9 +13,11 @@ export const getClass = ( offset: number, limit: number, keyword: string, + certainty: number, properties: [any] ) => { const queryParams = new URLSearchParams({ + certainty: certainty.toString(), offset: offset.toString(), limit: limit.toString(), keyword: keyword, diff --git a/weaviate_ui/main.py b/weaviate_ui/main.py index 2f631c6..b5b649a 100644 --- a/weaviate_ui/main.py +++ b/weaviate_ui/main.py @@ -49,7 +49,7 @@ def class0( offset: int = 0, limit: int = 20, keyword: str = "", - certainty: float = 0.5, + certainty: float = 0.65, properties: list[str] | None = None, ): logger.info(keyword) @@ -59,7 +59,8 @@ def class0( if keyword: query = {"query": keyword, "certainty": certainty} - response = collection.query.near_text(**query, **paginate) + metadata = {"return_metadata": ["certainty", "distance"]} + response = collection.query.near_text(**query, **metadata, **paginate) count_response = collection.aggregate.near_text(total_count=True, **query) else: response = collection.query.fetch_objects(**paginate) From 335413ceadc6dbc3ce930bb13bf4931156251a38 Mon Sep 17 00:00:00 2001 From: Martin Trapp Date: Fri, 7 Feb 2025 16:12:17 +0100 Subject: [PATCH 6/9] Update compose.yml --- compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compose.yml b/compose.yml index 424f93c..6effbbf 100644 --- a/compose.yml +++ b/compose.yml @@ -16,4 +16,4 @@ services: # - WEAVIATE_AUTH_CREDENTIALS= volumes: - ./weaviate_ui:/app/weaviate_ui - - ./frontend/dist:/app/static + # - ./frontend/dist:/app/static # Uncomment this line if you want to use a local frontend build From 3b4ce49e7f4df45e2243cd20e1b1b91f947af761 Mon Sep 17 00:00:00 2001 From: Martin Trapp Date: Fri, 14 Feb 2025 12:19:24 +0100 Subject: [PATCH 7/9] Update App.tsx --- frontend/src/App.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 824f9c5..cec7208 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -123,7 +123,7 @@ export default () => { ) : ( )} From 396cd4bf6a3eddf5695a481d7f4e19f3b698f94b Mon Sep 17 00:00:00 2001 From: Martin Trapp Date: Fri, 14 Feb 2025 12:58:39 +0100 Subject: [PATCH 8/9] Update Welcome.tsx --- frontend/src/Welcome.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/Welcome.tsx b/frontend/src/Welcome.tsx index bfca1c0..8406727 100644 --- a/frontend/src/Welcome.tsx +++ b/frontend/src/Welcome.tsx @@ -17,7 +17,7 @@ export default function () { className: schema.name, description: schema.description, vectorIndexType: null, - vectorizer: Object.values(schema.vector_config) + vectorizer: Object.values(schema.vector_config || []) .map((config) => config.vectorizer.vectorizer) .join(","), key: schema.name, From 2797621f23de6ace3bc37678dddf5b013174caf9 Mon Sep 17 00:00:00 2001 From: Martin Trapp Date: Thu, 10 Jul 2025 15:19:27 +0200 Subject: [PATCH 9/9] Add better auth handling --- compose.yml | 3 ++- weaviate_ui/main.py | 14 +++++++++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/compose.yml b/compose.yml index 6effbbf..2622709 100644 --- a/compose.yml +++ b/compose.yml @@ -13,7 +13,8 @@ services: - WEAVIATE_GRPC_HOST=host.docker.internal - WEAVIATE_GRPC_PORT=50051 - WEAVIATE_GRPC_SECURE= - # - WEAVIATE_AUTH_CREDENTIALS= + # - WEAVIATE_API_KEY= + # - WEAVIATE_BEARER_TOKEN= volumes: - ./weaviate_ui:/app/weaviate_ui # - ./frontend/dist:/app/static # Uncomment this line if you want to use a local frontend build diff --git a/weaviate_ui/main.py b/weaviate_ui/main.py index b5b649a..4d5eb38 100644 --- a/weaviate_ui/main.py +++ b/weaviate_ui/main.py @@ -25,7 +25,15 @@ WEAVIATE_GRPC_HOST = os.getenv("WEAVIATE_GRPC_HOST") WEAVIATE_GRPC_PORT = int(os.getenv("WEAVIATE_GRPC_PORT")) WEAVIATE_GRPC_SECURE = bool(os.getenv("WEAVIATE_GRPC_SECURE")) -WEAVIATE_AUTH_CREDENTIALS = os.getenv("WEAVIATE_AUTH_CREDENTIALS", None) +WEAVIATE_API_KEY = os.getenv("WEAVIATE_API_KEY", None) +WEAVIATE_BEARER_TOKEN = os.getenv("WEAVIATE_BEARER_TOKEN", None) + +auth_credentials = None + +if WEAVIATE_API_KEY: + auth_credentials = weaviate.auth.Auth.api_key(WEAVIATE_API_KEY) +elif WEAVIATE_BEARER_TOKEN: + auth_credentials = weaviate.auth.Auth.bearer_token(WEAVIATE_BEARER_TOKEN) client = weaviate.connect_to_custom( http_host=WEAVIATE_HOST, @@ -34,7 +42,7 @@ grpc_host=WEAVIATE_GRPC_HOST, grpc_port=WEAVIATE_GRPC_PORT, grpc_secure=WEAVIATE_GRPC_SECURE, - auth_credentials=WEAVIATE_AUTH_CREDENTIALS, + auth_credentials=auth_credentials, ) @@ -52,7 +60,7 @@ def class0( certainty: float = 0.65, properties: list[str] | None = None, ): - logger.info(keyword) + logger.info(f"{keyword=}, {certainty=}") collection = client.collections.get(class_name) paginate = {"limit": limit, "offset": offset}