This commit is contained in:
2025-05-25 23:38:58 +05:00
parent cedb00bb4c
commit b024ea50b2
9 changed files with 209 additions and 35 deletions

View File

@@ -4,11 +4,12 @@ import designer as ds
def main(page: ft.Page): def main(page: ft.Page):
page.title = "COPP" page.title = "COPP"
def PageLoading(route): def PageLoading(route={}):
print(page.route) print(page.route)
page.views.clear() page.views.clear()
page.views.append(ViewsHendler(page=page)[page.route]) page.views.append(ViewsHendler(page=page)[page.route])
page.update() page.update()
page.on_route_change = PageLoading page.on_route_change = PageLoading
page.go("/") page.go("/")

View File

@@ -1,8 +1,53 @@
import flet as ft import flet as ft
import designer as des import designer as des
import requests
class Add_user_data(ft.View): class Add_user_data(ft.View):
def load_table_column(self):
url = "http://localhost:8001/api-data-base/get_name_column?table_name=%D0%A1ollection_form_opk"
temp_column = []
try:
response = requests.post(url)
if response.status_code == 200:
temp = response.json()
for column in temp:
temp_column.append(ft.DataColumn(ft.Text(column)))
return temp_column
else:
print(f"Error: Received status code {response.status_code}")
return temp_column
except requests.exceptions.RequestException as e:
print(f"Error: {e}")
return temp_column
def load_return_rows(self):
from user_data import User_data as ud
url = f"http://localhost:8001/api-data-base/select_rows_with_filter?value={ud.inn}"
temp_row = []
try:
response = requests.post(url)
if response.status_code == 200:
temp = response.json()
for rows in temp:
for row in rows:
temp_row.append(ft.DataRow(
cells=[ft.DataCell(ft.Text(row[row]))]
))
return temp_row
else:
print(f"Error: Received status code {response.status_code}")
return temp_row
except requests.exceptions.RequestException as e:
print(f"Error: {e}")
return temp_row
def __init__(self,page:ft.Page,route:str=""): def __init__(self,page:ft.Page,route:str=""):
self.data_grid = ft.DataTable(
columns=self.load_table_column(),
rows=self.load_return_rows()
)
super().__init__( super().__init__(
bgcolor=des.color[2], bgcolor=des.color[2],
route=route, route=route,
@@ -15,6 +60,12 @@ class Add_user_data(ft.View):
des.Button(text="мои данные",on_click = self.go_to_my_data), des.Button(text="мои данные",on_click = self.go_to_my_data),
des.Button(text="заполнить данные", on_click=self.go_to_data), des.Button(text="заполнить данные", on_click=self.go_to_data),
] ]
),
ft.Row(
expand=True,
controls=[
self.data_grid
]
) )
] ]
) )

View File

@@ -65,7 +65,7 @@ class Login(ft.Column):
print("Ошибка: Пустой ответ от сервера") print("Ошибка: Пустой ответ от сервера")
def enter_go_to_next_page(self, e): def enter_go_to_next_page(self, e):
url = "http://localhost:8000/api/api/login" url = "http://localhost:8001/api-data-base/login" # исправленный путь
data = { data = {
"login": self.login[0].value, "login": self.login[0].value,
"password": self.password.value "password": self.password.value
@@ -77,15 +77,12 @@ class Login(ft.Column):
response_data = response.json() # Используем метод .json() для извлечения данных response_data = response.json() # Используем метод .json() для извлечения данных
# Проверяем сообщение в ответе # Проверяем сообщение в ответе
if response_data.get("message") == "Авторизация успешна.": if response_data.get("id") != 0:
user = response_data.get("user") # Достаем пользователя из ответа self.Load_user_inf(response=response_data)
if user.get("id") == 0: self.page.go("/user_info")
self.page.open(Loger(text="Неверные данные")) else:
else:
self.Load_user_inf(response=user)
self.page.go("/user_info")
elif response_data.get("message") == "Неверные данные":
self.page.open(Loger(text="Неверные данные")) self.page.open(Loger(text="Неверные данные"))
else: else:
print("Ошибка:", response.status_code, response.text) print("Ошибка:", response.status_code, response.text)
except requests.exceptions.RequestException as e: except requests.exceptions.RequestException as e:

View File

@@ -1,38 +1,87 @@
import flet as ft import flet as ft
import designer as des import designer as des
import requests
class My_data(ft.View): class My_data(ft.View):
def __init__(self,page:ft.Page,route:str="/my_data"):
def load_table_column(self):
url = "http://localhost:8001/api-data-base/get_name_column?table_name=%D0%A1ollection_form_opk"
temp_column = []
try:
response = requests.post(url)
if response.status_code == 200:
temp = response.json()
# Пропускаем первый столбец (id)
for column in temp[1:]:
temp_column.append(ft.DataColumn(ft.Text(column)))
return temp_column
else:
print(f"Error: Received status code {response.status_code}")
return temp_column
except requests.exceptions.RequestException as e:
print(f"Error: {e}")
return temp_column
def load_return_rows(self):
from user_data import User_data as ud
url = f"http://localhost:8001/api-data-base/select_rows_with_filter?value={str(ud.inn)}"
temp_row = []
try:
response = requests.post(url)
if response.status_code == 200:
temp = response.json()
for row in temp:
# Пропускаем первый столбец (id)
values = list(row.values())[1:]
temp_row.append(
ft.DataRow(
cells=[ft.DataCell(ft.Text(str(value))) for value in values]
)
)
return temp_row
else:
print(f"Error: Received status code {response.status_code}")
return temp_row
except requests.exceptions.RequestException as e:
print(f"Error: {e}")
return temp_row
def __init__(self,page:ft.Page,route:str=""):
self.data_grid = ft.DataTable(
columns=self.load_table_column(),
rows=self.load_return_rows()
)
super().__init__( super().__init__(
bgcolor=des.color[2], bgcolor=des.color[2],
route=route, route=route,
controls=[ controls=[
ft.Column( ft.Column(
controls=[ controls=[
ft.Container( ft.Row(
padding=ft.padding.all(20), controls=[
border_radius=ft.border_radius.all(10), des.Button(text="профиль"),
height=70, des.Button(text="мои данные",on_click = self.go_to_my_data),
expand=True, des.Button(text="заполнить данные", on_click=self.go_to_data),
bgcolor=des.color[3], ]
content=ft.Row(
expand=True,
controls=[
des.Button(text="профиль"),
des.Button(text="мои данные",on_click = self.go_to_my_data),
des.Button(text="заполнить данные", on_click=self.go_to_data),
]
)
), ),
ft.Row(
expand=True,
scroll=True,
controls=[
self.data_grid
]
)
] ]
) )
] ]
) )
def go_to_my_data(self):
pass
def go_to_data(self):
pass def go_to_info(self,e):
self.page.go("/user_info")
def go_to_my_data(self,e):
self.page.go("/my_data")
def go_to_data(self,e):
self.page.go("/add_new_data")

View File

@@ -10,4 +10,5 @@ dependencies = [
"flet[all]>=0.28.2", "flet[all]>=0.28.2",
"kafka>=1.3.5", "kafka>=1.3.5",
"redis>=6.0.0", "redis>=6.0.0",
"sqlalchemy>=2.0.41",
] ]

View File

@@ -4,6 +4,7 @@ import json
import model_messege as mm import model_messege as mm
from sqlalchemy.future import select from sqlalchemy.future import select
from sqlalchemy import MetaData, inspect, text, insert, Table from sqlalchemy import MetaData, inspect, text, insert, Table
import bcrypt
class JsonJober: class JsonJober:
data = [] data = []
@@ -51,6 +52,15 @@ class Request():
await cls.craete_all_table() await cls.craete_all_table()
mass_table = JsonJober.ReadJson(path_file="./data_base/preset/test.json") mass_table = JsonJober.ReadJson(path_file="./data_base/preset/test.json")
await cls.insert_mass_table(mass_table=mass_table) await cls.insert_mass_table(mass_table=mass_table)
user_data = {
"inn": "123",
"password": bcrypt.hashpw("123".encode("utf-8"), bcrypt.gensalt()).decode('utf-8'),
"mail": "123",
"name_poo": "123"
}
await cls.insert_table(data={"data": [user_data]}, table_name="users")
@classmethod @classmethod
async def insert_mass_table(cls, mass_table): async def insert_mass_table(cls, mass_table):

View File

@@ -5,4 +5,4 @@ sqlalchemy
asyncpg asyncpg
psycopg2-binary psycopg2-binary
bcrypt bcrypt
orjson orjson

View File

@@ -69,7 +69,7 @@ async def insert_table(data:dict):
"""Добавление записи""" """Добавление записи"""
return await Request.insert_table(data=data) return await Request.insert_table(data=data)
@router.post("select_rows_with_filter") @router.post("/select_rows_with_filter")
async def select_rows_with_filter(value:str): async def select_rows_with_filter(value:str):
"""Выборка с фильтром""" """Выборка с фильтром"""
return await Request.select_rows_with_filter(value=value) return await Request.select_rows_with_filter(value=value)

65
uv.lock generated
View File

@@ -221,6 +221,7 @@ dependencies = [
{ name = "flet", extra = ["all"] }, { name = "flet", extra = ["all"] },
{ name = "kafka" }, { name = "kafka" },
{ name = "redis" }, { name = "redis" },
{ name = "sqlalchemy" },
] ]
[package.metadata] [package.metadata]
@@ -230,6 +231,7 @@ requires-dist = [
{ name = "flet", extras = ["all"], specifier = ">=0.28.2" }, { name = "flet", extras = ["all"], specifier = ">=0.28.2" },
{ name = "kafka", specifier = ">=1.3.5" }, { name = "kafka", specifier = ">=1.3.5" },
{ name = "redis", specifier = ">=6.0.0" }, { name = "redis", specifier = ">=6.0.0" },
{ name = "sqlalchemy", specifier = ">=2.0.41" },
] ]
[[package]] [[package]]
@@ -325,6 +327,40 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/00/77/a36708b770394b680d3b2902e420df362ea9c70652c8bf71e1ac24ce8364/flet_web-0.28.2-py3-none-any.whl", hash = "sha256:f1bfa4ee0992fd66472233ef8ac8e2dd8f80b8eaba5a4d29f0610407ebddfb71", size = 3137521, upload-time = "2025-05-10T21:49:25.393Z" }, { url = "https://files.pythonhosted.org/packages/00/77/a36708b770394b680d3b2902e420df362ea9c70652c8bf71e1ac24ce8364/flet_web-0.28.2-py3-none-any.whl", hash = "sha256:f1bfa4ee0992fd66472233ef8ac8e2dd8f80b8eaba5a4d29f0610407ebddfb71", size = 3137521, upload-time = "2025-05-10T21:49:25.393Z" },
] ]
[[package]]
name = "greenlet"
version = "3.2.2"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/34/c1/a82edae11d46c0d83481aacaa1e578fea21d94a1ef400afd734d47ad95ad/greenlet-3.2.2.tar.gz", hash = "sha256:ad053d34421a2debba45aa3cc39acf454acbcd025b3fc1a9f8a0dee237abd485", size = 185797, upload-time = "2025-05-09T19:47:35.066Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/2c/a1/88fdc6ce0df6ad361a30ed78d24c86ea32acb2b563f33e39e927b1da9ea0/greenlet-3.2.2-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:df4d1509efd4977e6a844ac96d8be0b9e5aa5d5c77aa27ca9f4d3f92d3fcf330", size = 270413, upload-time = "2025-05-09T14:51:32.455Z" },
{ url = "https://files.pythonhosted.org/packages/a6/2e/6c1caffd65490c68cd9bcec8cb7feb8ac7b27d38ba1fea121fdc1f2331dc/greenlet-3.2.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da956d534a6d1b9841f95ad0f18ace637668f680b1339ca4dcfb2c1837880a0b", size = 637242, upload-time = "2025-05-09T15:24:02.63Z" },
{ url = "https://files.pythonhosted.org/packages/98/28/088af2cedf8823b6b7ab029a5626302af4ca1037cf8b998bed3a8d3cb9e2/greenlet-3.2.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9c7b15fb9b88d9ee07e076f5a683027bc3befd5bb5d25954bb633c385d8b737e", size = 651444, upload-time = "2025-05-09T15:24:49.856Z" },
{ url = "https://files.pythonhosted.org/packages/4a/9f/0116ab876bb0bc7a81eadc21c3f02cd6100dcd25a1cf2a085a130a63a26a/greenlet-3.2.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:752f0e79785e11180ebd2e726c8a88109ded3e2301d40abced2543aa5d164275", size = 646067, upload-time = "2025-05-09T15:29:24.989Z" },
{ url = "https://files.pythonhosted.org/packages/35/17/bb8f9c9580e28a94a9575da847c257953d5eb6e39ca888239183320c1c28/greenlet-3.2.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ae572c996ae4b5e122331e12bbb971ea49c08cc7c232d1bd43150800a2d6c65", size = 648153, upload-time = "2025-05-09T14:53:34.716Z" },
{ url = "https://files.pythonhosted.org/packages/2c/ee/7f31b6f7021b8df6f7203b53b9cc741b939a2591dcc6d899d8042fcf66f2/greenlet-3.2.2-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:02f5972ff02c9cf615357c17ab713737cccfd0eaf69b951084a9fd43f39833d3", size = 603865, upload-time = "2025-05-09T14:53:45.738Z" },
{ url = "https://files.pythonhosted.org/packages/b5/2d/759fa59323b521c6f223276a4fc3d3719475dc9ae4c44c2fe7fc750f8de0/greenlet-3.2.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:4fefc7aa68b34b9224490dfda2e70ccf2131368493add64b4ef2d372955c207e", size = 1119575, upload-time = "2025-05-09T15:27:04.248Z" },
{ url = "https://files.pythonhosted.org/packages/30/05/356813470060bce0e81c3df63ab8cd1967c1ff6f5189760c1a4734d405ba/greenlet-3.2.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a31ead8411a027c2c4759113cf2bd473690517494f3d6e4bf67064589afcd3c5", size = 1147460, upload-time = "2025-05-09T14:54:00.315Z" },
{ url = "https://files.pythonhosted.org/packages/07/f4/b2a26a309a04fb844c7406a4501331b9400e1dd7dd64d3450472fd47d2e1/greenlet-3.2.2-cp312-cp312-win_amd64.whl", hash = "sha256:b24c7844c0a0afc3ccbeb0b807adeefb7eff2b5599229ecedddcfeb0ef333bec", size = 296239, upload-time = "2025-05-09T14:57:17.633Z" },
{ url = "https://files.pythonhosted.org/packages/89/30/97b49779fff8601af20972a62cc4af0c497c1504dfbb3e93be218e093f21/greenlet-3.2.2-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:3ab7194ee290302ca15449f601036007873028712e92ca15fc76597a0aeb4c59", size = 269150, upload-time = "2025-05-09T14:50:30.784Z" },
{ url = "https://files.pythonhosted.org/packages/21/30/877245def4220f684bc2e01df1c2e782c164e84b32e07373992f14a2d107/greenlet-3.2.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2dc5c43bb65ec3669452af0ab10729e8fdc17f87a1f2ad7ec65d4aaaefabf6bf", size = 637381, upload-time = "2025-05-09T15:24:12.893Z" },
{ url = "https://files.pythonhosted.org/packages/8e/16/adf937908e1f913856b5371c1d8bdaef5f58f251d714085abeea73ecc471/greenlet-3.2.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:decb0658ec19e5c1f519faa9a160c0fc85a41a7e6654b3ce1b44b939f8bf1325", size = 651427, upload-time = "2025-05-09T15:24:51.074Z" },
{ url = "https://files.pythonhosted.org/packages/ad/49/6d79f58fa695b618654adac64e56aff2eeb13344dc28259af8f505662bb1/greenlet-3.2.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6fadd183186db360b61cb34e81117a096bff91c072929cd1b529eb20dd46e6c5", size = 645795, upload-time = "2025-05-09T15:29:26.673Z" },
{ url = "https://files.pythonhosted.org/packages/5a/e6/28ed5cb929c6b2f001e96b1d0698c622976cd8f1e41fe7ebc047fa7c6dd4/greenlet-3.2.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1919cbdc1c53ef739c94cf2985056bcc0838c1f217b57647cbf4578576c63825", size = 648398, upload-time = "2025-05-09T14:53:36.61Z" },
{ url = "https://files.pythonhosted.org/packages/9d/70/b200194e25ae86bc57077f695b6cc47ee3118becf54130c5514456cf8dac/greenlet-3.2.2-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3885f85b61798f4192d544aac7b25a04ece5fe2704670b4ab73c2d2c14ab740d", size = 606795, upload-time = "2025-05-09T14:53:47.039Z" },
{ url = "https://files.pythonhosted.org/packages/f8/c8/ba1def67513a941154ed8f9477ae6e5a03f645be6b507d3930f72ed508d3/greenlet-3.2.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:85f3e248507125bf4af607a26fd6cb8578776197bd4b66e35229cdf5acf1dfbf", size = 1117976, upload-time = "2025-05-09T15:27:06.542Z" },
{ url = "https://files.pythonhosted.org/packages/c3/30/d0e88c1cfcc1b3331d63c2b54a0a3a4a950ef202fb8b92e772ca714a9221/greenlet-3.2.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:1e76106b6fc55fa3d6fe1c527f95ee65e324a13b62e243f77b48317346559708", size = 1145509, upload-time = "2025-05-09T14:54:02.223Z" },
{ url = "https://files.pythonhosted.org/packages/90/2e/59d6491834b6e289051b252cf4776d16da51c7c6ca6a87ff97e3a50aa0cd/greenlet-3.2.2-cp313-cp313-win_amd64.whl", hash = "sha256:fe46d4f8e94e637634d54477b0cfabcf93c53f29eedcbdeecaf2af32029b4421", size = 296023, upload-time = "2025-05-09T14:53:24.157Z" },
{ url = "https://files.pythonhosted.org/packages/65/66/8a73aace5a5335a1cba56d0da71b7bd93e450f17d372c5b7c5fa547557e9/greenlet-3.2.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba30e88607fb6990544d84caf3c706c4b48f629e18853fc6a646f82db9629418", size = 629911, upload-time = "2025-05-09T15:24:22.376Z" },
{ url = "https://files.pythonhosted.org/packages/48/08/c8b8ebac4e0c95dcc68ec99198842e7db53eda4ab3fb0a4e785690883991/greenlet-3.2.2-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:055916fafad3e3388d27dd68517478933a97edc2fc54ae79d3bec827de2c64c4", size = 635251, upload-time = "2025-05-09T15:24:52.205Z" },
{ url = "https://files.pythonhosted.org/packages/37/26/7db30868f73e86b9125264d2959acabea132b444b88185ba5c462cb8e571/greenlet-3.2.2-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2593283bf81ca37d27d110956b79e8723f9aa50c4bcdc29d3c0543d4743d2763", size = 632620, upload-time = "2025-05-09T15:29:28.051Z" },
{ url = "https://files.pythonhosted.org/packages/10/ec/718a3bd56249e729016b0b69bee4adea0dfccf6ca43d147ef3b21edbca16/greenlet-3.2.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89c69e9a10670eb7a66b8cef6354c24671ba241f46152dd3eed447f79c29fb5b", size = 628851, upload-time = "2025-05-09T14:53:38.472Z" },
{ url = "https://files.pythonhosted.org/packages/9b/9d/d1c79286a76bc62ccdc1387291464af16a4204ea717f24e77b0acd623b99/greenlet-3.2.2-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:02a98600899ca1ca5d3a2590974c9e3ec259503b2d6ba6527605fcd74e08e207", size = 593718, upload-time = "2025-05-09T14:53:48.313Z" },
{ url = "https://files.pythonhosted.org/packages/cd/41/96ba2bf948f67b245784cd294b84e3d17933597dffd3acdb367a210d1949/greenlet-3.2.2-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:b50a8c5c162469c3209e5ec92ee4f95c8231b11db6a04db09bbe338176723bb8", size = 1105752, upload-time = "2025-05-09T15:27:08.217Z" },
{ url = "https://files.pythonhosted.org/packages/68/3b/3b97f9d33c1f2eb081759da62bd6162159db260f602f048bc2f36b4c453e/greenlet-3.2.2-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:45f9f4853fb4cc46783085261c9ec4706628f3b57de3e68bae03e8f8b3c0de51", size = 1125170, upload-time = "2025-05-09T14:54:04.082Z" },
{ url = "https://files.pythonhosted.org/packages/31/df/b7d17d66c8d0f578d2885a3d8f565e9e4725eacc9d3fdc946d0031c055c4/greenlet-3.2.2-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:9ea5231428af34226c05f927e16fc7f6fa5e39e3ad3cd24ffa48ba53a47f4240", size = 269899, upload-time = "2025-05-09T14:54:01.581Z" },
]
[[package]] [[package]]
name = "h11" name = "h11"
version = "0.16.0" version = "0.16.0"
@@ -706,6 +742,35 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235, upload-time = "2024-02-25T23:20:01.196Z" }, { url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235, upload-time = "2024-02-25T23:20:01.196Z" },
] ]
[[package]]
name = "sqlalchemy"
version = "2.0.41"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "greenlet", marker = "(python_full_version < '3.14' and platform_machine == 'AMD64') or (python_full_version < '3.14' and platform_machine == 'WIN32') or (python_full_version < '3.14' and platform_machine == 'aarch64') or (python_full_version < '3.14' and platform_machine == 'amd64') or (python_full_version < '3.14' and platform_machine == 'ppc64le') or (python_full_version < '3.14' and platform_machine == 'win32') or (python_full_version < '3.14' and platform_machine == 'x86_64')" },
{ name = "typing-extensions" },
]
sdist = { url = "https://files.pythonhosted.org/packages/63/66/45b165c595ec89aa7dcc2c1cd222ab269bc753f1fc7a1e68f8481bd957bf/sqlalchemy-2.0.41.tar.gz", hash = "sha256:edba70118c4be3c2b1f90754d308d0b79c6fe2c0fdc52d8ddf603916f83f4db9", size = 9689424, upload-time = "2025-05-14T17:10:32.339Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/3e/2a/f1f4e068b371154740dd10fb81afb5240d5af4aa0087b88d8b308b5429c2/sqlalchemy-2.0.41-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:81f413674d85cfd0dfcd6512e10e0f33c19c21860342a4890c3a2b59479929f9", size = 2119645, upload-time = "2025-05-14T17:55:24.854Z" },
{ url = "https://files.pythonhosted.org/packages/9b/e8/c664a7e73d36fbfc4730f8cf2bf930444ea87270f2825efbe17bf808b998/sqlalchemy-2.0.41-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:598d9ebc1e796431bbd068e41e4de4dc34312b7aa3292571bb3674a0cb415dd1", size = 2107399, upload-time = "2025-05-14T17:55:28.097Z" },
{ url = "https://files.pythonhosted.org/packages/5c/78/8a9cf6c5e7135540cb682128d091d6afa1b9e48bd049b0d691bf54114f70/sqlalchemy-2.0.41-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a104c5694dfd2d864a6f91b0956eb5d5883234119cb40010115fd45a16da5e70", size = 3293269, upload-time = "2025-05-14T17:50:38.227Z" },
{ url = "https://files.pythonhosted.org/packages/3c/35/f74add3978c20de6323fb11cb5162702670cc7a9420033befb43d8d5b7a4/sqlalchemy-2.0.41-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6145afea51ff0af7f2564a05fa95eb46f542919e6523729663a5d285ecb3cf5e", size = 3303364, upload-time = "2025-05-14T17:51:49.829Z" },
{ url = "https://files.pythonhosted.org/packages/6a/d4/c990f37f52c3f7748ebe98883e2a0f7d038108c2c5a82468d1ff3eec50b7/sqlalchemy-2.0.41-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b46fa6eae1cd1c20e6e6f44e19984d438b6b2d8616d21d783d150df714f44078", size = 3229072, upload-time = "2025-05-14T17:50:39.774Z" },
{ url = "https://files.pythonhosted.org/packages/15/69/cab11fecc7eb64bc561011be2bd03d065b762d87add52a4ca0aca2e12904/sqlalchemy-2.0.41-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41836fe661cc98abfae476e14ba1906220f92c4e528771a8a3ae6a151242d2ae", size = 3268074, upload-time = "2025-05-14T17:51:51.736Z" },
{ url = "https://files.pythonhosted.org/packages/5c/ca/0c19ec16858585d37767b167fc9602593f98998a68a798450558239fb04a/sqlalchemy-2.0.41-cp312-cp312-win32.whl", hash = "sha256:a8808d5cf866c781150d36a3c8eb3adccfa41a8105d031bf27e92c251e3969d6", size = 2084514, upload-time = "2025-05-14T17:55:49.915Z" },
{ url = "https://files.pythonhosted.org/packages/7f/23/4c2833d78ff3010a4e17f984c734f52b531a8c9060a50429c9d4b0211be6/sqlalchemy-2.0.41-cp312-cp312-win_amd64.whl", hash = "sha256:5b14e97886199c1f52c14629c11d90c11fbb09e9334fa7bb5f6d068d9ced0ce0", size = 2111557, upload-time = "2025-05-14T17:55:51.349Z" },
{ url = "https://files.pythonhosted.org/packages/d3/ad/2e1c6d4f235a97eeef52d0200d8ddda16f6c4dd70ae5ad88c46963440480/sqlalchemy-2.0.41-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4eeb195cdedaf17aab6b247894ff2734dcead6c08f748e617bfe05bd5a218443", size = 2115491, upload-time = "2025-05-14T17:55:31.177Z" },
{ url = "https://files.pythonhosted.org/packages/cf/8d/be490e5db8400dacc89056f78a52d44b04fbf75e8439569d5b879623a53b/sqlalchemy-2.0.41-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d4ae769b9c1c7757e4ccce94b0641bc203bbdf43ba7a2413ab2523d8d047d8dc", size = 2102827, upload-time = "2025-05-14T17:55:34.921Z" },
{ url = "https://files.pythonhosted.org/packages/a0/72/c97ad430f0b0e78efaf2791342e13ffeafcbb3c06242f01a3bb8fe44f65d/sqlalchemy-2.0.41-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a62448526dd9ed3e3beedc93df9bb6b55a436ed1474db31a2af13b313a70a7e1", size = 3225224, upload-time = "2025-05-14T17:50:41.418Z" },
{ url = "https://files.pythonhosted.org/packages/5e/51/5ba9ea3246ea068630acf35a6ba0d181e99f1af1afd17e159eac7e8bc2b8/sqlalchemy-2.0.41-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc56c9788617b8964ad02e8fcfeed4001c1f8ba91a9e1f31483c0dffb207002a", size = 3230045, upload-time = "2025-05-14T17:51:54.722Z" },
{ url = "https://files.pythonhosted.org/packages/78/2f/8c14443b2acea700c62f9b4a8bad9e49fc1b65cfb260edead71fd38e9f19/sqlalchemy-2.0.41-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c153265408d18de4cc5ded1941dcd8315894572cddd3c58df5d5b5705b3fa28d", size = 3159357, upload-time = "2025-05-14T17:50:43.483Z" },
{ url = "https://files.pythonhosted.org/packages/fc/b2/43eacbf6ccc5276d76cea18cb7c3d73e294d6fb21f9ff8b4eef9b42bbfd5/sqlalchemy-2.0.41-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4f67766965996e63bb46cfbf2ce5355fc32d9dd3b8ad7e536a920ff9ee422e23", size = 3197511, upload-time = "2025-05-14T17:51:57.308Z" },
{ url = "https://files.pythonhosted.org/packages/fa/2e/677c17c5d6a004c3c45334ab1dbe7b7deb834430b282b8a0f75ae220c8eb/sqlalchemy-2.0.41-cp313-cp313-win32.whl", hash = "sha256:bfc9064f6658a3d1cadeaa0ba07570b83ce6801a1314985bf98ec9b95d74e15f", size = 2082420, upload-time = "2025-05-14T17:55:52.69Z" },
{ url = "https://files.pythonhosted.org/packages/e9/61/e8c1b9b6307c57157d328dd8b8348ddc4c47ffdf1279365a13b2b98b8049/sqlalchemy-2.0.41-cp313-cp313-win_amd64.whl", hash = "sha256:82ca366a844eb551daff9d2e6e7a9e5e76d2612c8564f58db6c19a726869c1df", size = 2108329, upload-time = "2025-05-14T17:55:54.495Z" },
{ url = "https://files.pythonhosted.org/packages/1c/fc/9ba22f01b5cdacc8f5ed0d22304718d2c758fce3fd49a5372b886a86f37c/sqlalchemy-2.0.41-py3-none-any.whl", hash = "sha256:57df5dc6fdb5ed1a88a1ed2195fd31927e705cad62dedd86b46972752a80f576", size = 1911224, upload-time = "2025-05-14T17:39:42.154Z" },
]
[[package]] [[package]]
name = "starlette" name = "starlette"
version = "0.46.2" version = "0.46.2"