flake8-sqlalchemy2 0.2.0__tar.gz → 0.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {flake8_sqlalchemy2-0.2.0 → flake8_sqlalchemy2-0.3.0}/.github/workflows/main.yml +0 -23
- {flake8_sqlalchemy2-0.2.0 → flake8_sqlalchemy2-0.3.0}/.pre-commit-config.yaml +1 -0
- flake8_sqlalchemy2-0.3.0/CHANGELOG.md +13 -0
- {flake8_sqlalchemy2-0.2.0 → flake8_sqlalchemy2-0.3.0}/PKG-INFO +77 -5
- {flake8_sqlalchemy2-0.2.0 → flake8_sqlalchemy2-0.3.0}/README.md +76 -4
- {flake8_sqlalchemy2-0.2.0 → flake8_sqlalchemy2-0.3.0}/pyproject.toml +2 -1
- {flake8_sqlalchemy2-0.2.0 → flake8_sqlalchemy2-0.3.0}/src/flake8_sqlalchemy2/checker.py +19 -1
- flake8_sqlalchemy2-0.3.0/test.py +31 -0
- {flake8_sqlalchemy2-0.2.0 → flake8_sqlalchemy2-0.3.0}/tests/test_SA202.py +2 -2
- flake8_sqlalchemy2-0.3.0/tests/test_SA203.py +76 -0
- {flake8_sqlalchemy2-0.2.0 → flake8_sqlalchemy2-0.3.0}/uv.lock +119 -1
- flake8_sqlalchemy2-0.2.0/CHANGELOG.md +0 -5
- {flake8_sqlalchemy2-0.2.0 → flake8_sqlalchemy2-0.3.0}/.editorconfig +0 -0
- {flake8_sqlalchemy2-0.2.0 → flake8_sqlalchemy2-0.3.0}/.gitignore +0 -0
- {flake8_sqlalchemy2-0.2.0 → flake8_sqlalchemy2-0.3.0}/LICENSE +0 -0
- {flake8_sqlalchemy2-0.2.0 → flake8_sqlalchemy2-0.3.0}/src/flake8_sqlalchemy2/__init__.py +0 -0
- {flake8_sqlalchemy2-0.2.0 → flake8_sqlalchemy2-0.3.0}/src/flake8_sqlalchemy2/py.typed +0 -0
- {flake8_sqlalchemy2-0.2.0 → flake8_sqlalchemy2-0.3.0}/tests/__init__.py +0 -0
- {flake8_sqlalchemy2-0.2.0 → flake8_sqlalchemy2-0.3.0}/tests/test_SA201.py +0 -0
- {flake8_sqlalchemy2-0.2.0 → flake8_sqlalchemy2-0.3.0}/tox.ini +0 -0
|
@@ -42,29 +42,6 @@ jobs:
|
|
|
42
42
|
- name: Run tox targets for ${{ matrix.python-version }}
|
|
43
43
|
run: uvx --with tox-uv tox run -f py$(echo ${{ matrix.python-version }} | tr -d .)
|
|
44
44
|
|
|
45
|
-
publish-to-testpypi:
|
|
46
|
-
needs: [tests]
|
|
47
|
-
runs-on: ubuntu-24.04
|
|
48
|
-
|
|
49
|
-
environment:
|
|
50
|
-
name: testpypi
|
|
51
|
-
url: https://test.pypi.org/p/flake8-sqlalchemy2
|
|
52
|
-
|
|
53
|
-
permissions:
|
|
54
|
-
id-token: write
|
|
55
|
-
|
|
56
|
-
steps:
|
|
57
|
-
- uses: actions/checkout@v6
|
|
58
|
-
|
|
59
|
-
- uses: astral-sh/setup-uv@v7
|
|
60
|
-
|
|
61
|
-
- name: Build
|
|
62
|
-
run: uv build
|
|
63
|
-
|
|
64
|
-
- uses: pypa/gh-action-pypi-publish@release/v1
|
|
65
|
-
with:
|
|
66
|
-
repository-url: https://test.pypi.org/legacy/
|
|
67
|
-
|
|
68
45
|
publish-to-pypi:
|
|
69
46
|
needs: [tests]
|
|
70
47
|
if: success() && startsWith(github.ref, 'refs/tags/')
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## 0.3.0 (21.02.2026)
|
|
4
|
+
|
|
5
|
+
Add rule `legacy-relationship` (SA203).
|
|
6
|
+
|
|
7
|
+
## 0.2.0 (20.02.2026)
|
|
8
|
+
|
|
9
|
+
Add second rule `legacy-collection` (SA202).
|
|
10
|
+
|
|
11
|
+
## 0.1.0 (15.02.2026)
|
|
12
|
+
|
|
13
|
+
Initial release, including first rule `missing-mapped-type-annotation` (SA201).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: flake8-sqlalchemy2
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.0
|
|
4
4
|
Summary: flake8 plugin for SQLAlchemy 2.0
|
|
5
5
|
Project-URL: Repository, https://github.com/kreathon/flake8-sqlalchemy2
|
|
6
6
|
Project-URL: Issues, https://github.com/kreathon/flake8-sqlalchemy2/issues
|
|
@@ -91,7 +91,7 @@ class MyModel(Base):
|
|
|
91
91
|
|
|
92
92
|
|
|
93
93
|
m = MyModel()
|
|
94
|
-
reveal_type(m.count) #
|
|
94
|
+
reveal_type(m.count) # note: Revealed type is "builtins.int"
|
|
95
95
|
```
|
|
96
96
|
|
|
97
97
|
### legacy-collection (SA202)
|
|
@@ -134,10 +134,82 @@ class Base(DeclarativeBase):
|
|
|
134
134
|
|
|
135
135
|
|
|
136
136
|
class MyModel(Base):
|
|
137
|
-
|
|
138
|
-
|
|
137
|
+
__tablename__ = "my_model"
|
|
138
|
+
id: Mapped[int] = mapped_column(primary_key=True)
|
|
139
|
+
|
|
140
|
+
children: WriteOnlyMapped["Child"] = relationship()
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### legacy-relationship (SA203)
|
|
144
|
+
|
|
145
|
+
#### What it does
|
|
146
|
+
Checks for existence of `relationship` definition with `backref` keyword argument.
|
|
147
|
+
|
|
148
|
+
#### Why is this bad?
|
|
149
|
+
`backref` is considered legacy. It adds dynamic attributes that type checkers and code completion cannot understand.
|
|
150
|
+
|
|
151
|
+
#### Example
|
|
152
|
+
```python
|
|
153
|
+
from typing import List
|
|
154
|
+
|
|
155
|
+
from sqlalchemy import ForeignKey
|
|
156
|
+
|
|
157
|
+
from sqlalchemy.orm import DeclarativeBase
|
|
158
|
+
from sqlalchemy.orm import mapped_column
|
|
159
|
+
from sqlalchemy.orm import Mapped
|
|
160
|
+
from sqlalchemy.orm import relationship
|
|
161
|
+
|
|
162
|
+
class Base(DeclarativeBase):
|
|
163
|
+
pass
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
class Parent(Base):
|
|
167
|
+
__tablename__ = "parent"
|
|
168
|
+
id: Mapped[int] = mapped_column(primary_key=True)
|
|
169
|
+
|
|
170
|
+
children: Mapped[List["Child"]] = relationship(backref="parent")
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
class Child(Base):
|
|
174
|
+
__tablename__ = "child"
|
|
175
|
+
id: Mapped[int] = mapped_column(primary_key=True)
|
|
176
|
+
|
|
177
|
+
parent_id: Mapped[int] = mapped_column(ForeignKey("parent.id"))
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
c = Child()
|
|
181
|
+
p = Parent(children=[c])
|
|
182
|
+
c.parent # error: "Child" has no attribute "parent"; maybe "parent_id"? [attr-defined]
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
Use instead:
|
|
186
|
+
```python
|
|
187
|
+
from typing import List
|
|
188
|
+
|
|
189
|
+
from sqlalchemy import ForeignKey
|
|
190
|
+
|
|
191
|
+
from sqlalchemy.orm import DeclarativeBase
|
|
192
|
+
from sqlalchemy.orm import mapped_column
|
|
193
|
+
from sqlalchemy.orm import Mapped
|
|
194
|
+
from sqlalchemy.orm import relationship
|
|
195
|
+
|
|
196
|
+
class Base(DeclarativeBase):
|
|
197
|
+
pass
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
class Parent(Base):
|
|
201
|
+
__tablename__ = "parent"
|
|
202
|
+
id: Mapped[int] = mapped_column(primary_key=True)
|
|
203
|
+
|
|
204
|
+
children: Mapped[List["Child"]] = relationship(back_populates="parent")
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
class Child(Base):
|
|
208
|
+
__tablename__ = "child"
|
|
209
|
+
id: Mapped[int] = mapped_column(primary_key=True)
|
|
139
210
|
|
|
140
|
-
|
|
211
|
+
parent_id: Mapped[int] = mapped_column(ForeignKey("parent.id"))
|
|
212
|
+
parent: Mapped["Parent"] = relationship(back_populates="children")
|
|
141
213
|
```
|
|
142
214
|
|
|
143
215
|
## Note on `ruff`
|
|
@@ -66,7 +66,7 @@ class MyModel(Base):
|
|
|
66
66
|
|
|
67
67
|
|
|
68
68
|
m = MyModel()
|
|
69
|
-
reveal_type(m.count) #
|
|
69
|
+
reveal_type(m.count) # note: Revealed type is "builtins.int"
|
|
70
70
|
```
|
|
71
71
|
|
|
72
72
|
### legacy-collection (SA202)
|
|
@@ -109,10 +109,82 @@ class Base(DeclarativeBase):
|
|
|
109
109
|
|
|
110
110
|
|
|
111
111
|
class MyModel(Base):
|
|
112
|
-
|
|
113
|
-
|
|
112
|
+
__tablename__ = "my_model"
|
|
113
|
+
id: Mapped[int] = mapped_column(primary_key=True)
|
|
114
|
+
|
|
115
|
+
children: WriteOnlyMapped["Child"] = relationship()
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### legacy-relationship (SA203)
|
|
119
|
+
|
|
120
|
+
#### What it does
|
|
121
|
+
Checks for existence of `relationship` definition with `backref` keyword argument.
|
|
122
|
+
|
|
123
|
+
#### Why is this bad?
|
|
124
|
+
`backref` is considered legacy. It adds dynamic attributes that type checkers and code completion cannot understand.
|
|
125
|
+
|
|
126
|
+
#### Example
|
|
127
|
+
```python
|
|
128
|
+
from typing import List
|
|
129
|
+
|
|
130
|
+
from sqlalchemy import ForeignKey
|
|
131
|
+
|
|
132
|
+
from sqlalchemy.orm import DeclarativeBase
|
|
133
|
+
from sqlalchemy.orm import mapped_column
|
|
134
|
+
from sqlalchemy.orm import Mapped
|
|
135
|
+
from sqlalchemy.orm import relationship
|
|
136
|
+
|
|
137
|
+
class Base(DeclarativeBase):
|
|
138
|
+
pass
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
class Parent(Base):
|
|
142
|
+
__tablename__ = "parent"
|
|
143
|
+
id: Mapped[int] = mapped_column(primary_key=True)
|
|
144
|
+
|
|
145
|
+
children: Mapped[List["Child"]] = relationship(backref="parent")
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
class Child(Base):
|
|
149
|
+
__tablename__ = "child"
|
|
150
|
+
id: Mapped[int] = mapped_column(primary_key=True)
|
|
151
|
+
|
|
152
|
+
parent_id: Mapped[int] = mapped_column(ForeignKey("parent.id"))
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
c = Child()
|
|
156
|
+
p = Parent(children=[c])
|
|
157
|
+
c.parent # error: "Child" has no attribute "parent"; maybe "parent_id"? [attr-defined]
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
Use instead:
|
|
161
|
+
```python
|
|
162
|
+
from typing import List
|
|
163
|
+
|
|
164
|
+
from sqlalchemy import ForeignKey
|
|
165
|
+
|
|
166
|
+
from sqlalchemy.orm import DeclarativeBase
|
|
167
|
+
from sqlalchemy.orm import mapped_column
|
|
168
|
+
from sqlalchemy.orm import Mapped
|
|
169
|
+
from sqlalchemy.orm import relationship
|
|
170
|
+
|
|
171
|
+
class Base(DeclarativeBase):
|
|
172
|
+
pass
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
class Parent(Base):
|
|
176
|
+
__tablename__ = "parent"
|
|
177
|
+
id: Mapped[int] = mapped_column(primary_key=True)
|
|
178
|
+
|
|
179
|
+
children: Mapped[List["Child"]] = relationship(back_populates="parent")
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
class Child(Base):
|
|
183
|
+
__tablename__ = "child"
|
|
184
|
+
id: Mapped[int] = mapped_column(primary_key=True)
|
|
114
185
|
|
|
115
|
-
|
|
186
|
+
parent_id: Mapped[int] = mapped_column(ForeignKey("parent.id"))
|
|
187
|
+
parent: Mapped["Parent"] = relationship(back_populates="children")
|
|
116
188
|
```
|
|
117
189
|
|
|
118
190
|
## Note on `ruff`
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "flake8-sqlalchemy2"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.3.0"
|
|
4
4
|
description = "flake8 plugin for SQLAlchemy 2.0"
|
|
5
5
|
license = "MIT"
|
|
6
6
|
license-files = [ "LICENSE" ]
|
|
@@ -35,6 +35,7 @@ dependencies = [
|
|
|
35
35
|
entry-points."flake8.extension".SA2 = "flake8_sqlalchemy2:Checker"
|
|
36
36
|
[dependency-groups]
|
|
37
37
|
dev = [
|
|
38
|
+
"sqlalchemy>=2.0.46",
|
|
38
39
|
"mypy==1.19.1",
|
|
39
40
|
"ruff==0.14.14",
|
|
40
41
|
"pytest==9.0.2",
|
|
@@ -44,11 +44,29 @@ class Checker:
|
|
|
44
44
|
|
|
45
45
|
messages = {
|
|
46
46
|
"SQLAlchemyMissingMappedTypeAnnotation": "SA201 Missing `Mapped` or other ORM container class type annotation",
|
|
47
|
-
"SQLAlchemyLegacyCollection": "SA202 Use of legacy collection `DynamicMapped` consider using `WriteOnlyMapped
|
|
47
|
+
"SQLAlchemyLegacyCollection": "SA202 Use of legacy collection `DynamicMapped` consider using `WriteOnlyMapped` instead",
|
|
48
|
+
"SQLAlchemyLegacyRelationship": "SA203 Use of legacy relationship `backref` consider using `back_populates` instead",
|
|
48
49
|
}
|
|
49
50
|
|
|
50
51
|
def run(self) -> Generator[tuple[int, int, str, type[Any]]]:
|
|
51
52
|
for node in ast.walk(self.tree):
|
|
53
|
+
if isinstance(node, ast.Call):
|
|
54
|
+
if (
|
|
55
|
+
isinstance(node.func, ast.Attribute)
|
|
56
|
+
and node.func.attr == "relationship"
|
|
57
|
+
or isinstance(node.func, ast.Name)
|
|
58
|
+
and node.func.id == "relationship"
|
|
59
|
+
):
|
|
60
|
+
for keyword in node.keywords:
|
|
61
|
+
if keyword.arg == "backref":
|
|
62
|
+
yield (
|
|
63
|
+
keyword.lineno,
|
|
64
|
+
keyword.col_offset,
|
|
65
|
+
self.messages["SQLAlchemyLegacyRelationship"],
|
|
66
|
+
type(self),
|
|
67
|
+
)
|
|
68
|
+
break
|
|
69
|
+
|
|
52
70
|
if isinstance(node, ast.AnnAssign):
|
|
53
71
|
if not isinstance(node.annotation, ast.Subscript):
|
|
54
72
|
continue
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
from typing import List
|
|
2
|
+
|
|
3
|
+
from sqlalchemy import ForeignKey
|
|
4
|
+
|
|
5
|
+
from sqlalchemy.orm import DeclarativeBase
|
|
6
|
+
from sqlalchemy.orm import mapped_column
|
|
7
|
+
from sqlalchemy.orm import Mapped
|
|
8
|
+
from sqlalchemy.orm import relationship
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class Base(DeclarativeBase):
|
|
12
|
+
pass
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class Parent(Base):
|
|
16
|
+
__tablename__ = "parent"
|
|
17
|
+
id: Mapped[int] = mapped_column(primary_key=True)
|
|
18
|
+
|
|
19
|
+
children: Mapped[List["Child"]] = relationship(backref="parent")
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class Child(Base):
|
|
23
|
+
__tablename__ = "child"
|
|
24
|
+
id: Mapped[int] = mapped_column(primary_key=True)
|
|
25
|
+
|
|
26
|
+
parent_id: Mapped[int] = mapped_column(ForeignKey("parent.id"))
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
c = Child()
|
|
30
|
+
p = Parent(children=[c])
|
|
31
|
+
c.parent
|
|
@@ -39,7 +39,7 @@ class Child(Base):
|
|
|
39
39
|
tree = ast.parse(code)
|
|
40
40
|
plugin = Checker(tree)
|
|
41
41
|
assert [f"{line}:{col + 1} {msg}" for line, col, msg, _ in plugin.run()] == [
|
|
42
|
-
"19:15 SA202 Use of legacy collection `DynamicMapped` consider using `WriteOnlyMapped
|
|
42
|
+
"19:15 SA202 Use of legacy collection `DynamicMapped` consider using `WriteOnlyMapped` instead"
|
|
43
43
|
]
|
|
44
44
|
|
|
45
45
|
|
|
@@ -71,5 +71,5 @@ class Child(Base):
|
|
|
71
71
|
tree = ast.parse(code)
|
|
72
72
|
plugin = Checker(tree)
|
|
73
73
|
assert [f"{line}:{col + 1} {msg}" for line, col, msg, _ in plugin.run()] == [
|
|
74
|
-
"13:15 SA202 Use of legacy collection `DynamicMapped` consider using `WriteOnlyMapped
|
|
74
|
+
"13:15 SA202 Use of legacy collection `DynamicMapped` consider using `WriteOnlyMapped` instead"
|
|
75
75
|
]
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import ast
|
|
4
|
+
|
|
5
|
+
from src.flake8_sqlalchemy2 import Checker
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def test_import_simple():
|
|
9
|
+
code = """\
|
|
10
|
+
from typing import List
|
|
11
|
+
|
|
12
|
+
from sqlalchemy import Integer, ForeignKey
|
|
13
|
+
from sqlalchemy.orm import (
|
|
14
|
+
Mapped,
|
|
15
|
+
mapped_column,
|
|
16
|
+
DeclarativeBase,
|
|
17
|
+
relationship,
|
|
18
|
+
column_property,
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class Base(DeclarativeBase):
|
|
23
|
+
pass
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class Parent(Base):
|
|
27
|
+
__tablename__ = "parent"
|
|
28
|
+
|
|
29
|
+
id: Mapped[int] = mapped_column(primary_key=True)
|
|
30
|
+
children: Mapped[List["Child"]] = relationship(backref="parent")
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class Child(Base):
|
|
34
|
+
__tablename__ = "child"
|
|
35
|
+
|
|
36
|
+
id: Mapped[int] = mapped_column(primary_key=True)
|
|
37
|
+
parent_id: Mapped[int] = mapped_column(ForeignKey("parent.id"))
|
|
38
|
+
"""
|
|
39
|
+
|
|
40
|
+
tree = ast.parse(code)
|
|
41
|
+
plugin = Checker(tree)
|
|
42
|
+
assert [f"{line}:{col + 1} {msg}" for line, col, msg, _ in plugin.run()] == [
|
|
43
|
+
"21:52 SA203 Use of legacy relationship `backref` consider using `back_populates` instead"
|
|
44
|
+
]
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def test_import_orm():
|
|
48
|
+
code = """\
|
|
49
|
+
from typing import List
|
|
50
|
+
|
|
51
|
+
import sqlalchemy as sa
|
|
52
|
+
from sqlalchemy import orm
|
|
53
|
+
|
|
54
|
+
class Base(orm.DeclarativeBase):
|
|
55
|
+
pass
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
class Parent(Base):
|
|
59
|
+
__tablename__ = "parent"
|
|
60
|
+
|
|
61
|
+
id: orm.Mapped[int] = orm.mapped_column(primary_key=True)
|
|
62
|
+
children: orm.Mapped[List["Child"]] = orm.relationship(backref="parent")
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
class Child(Base):
|
|
66
|
+
__tablename__ = "child"
|
|
67
|
+
|
|
68
|
+
id: orm.Mapped[int] = orm.mapped_column(primary_key=True)
|
|
69
|
+
parent_id: orm.Mapped[int] = orm.mapped_column(sa.ForeignKey("parent.id"))
|
|
70
|
+
"""
|
|
71
|
+
|
|
72
|
+
tree = ast.parse(code)
|
|
73
|
+
plugin = Checker(tree)
|
|
74
|
+
assert [f"{line}:{col + 1} {msg}" for line, col, msg, _ in plugin.run()] == [
|
|
75
|
+
"14:60 SA203 Use of legacy relationship `backref` consider using `back_populates` instead"
|
|
76
|
+
]
|
|
@@ -39,7 +39,7 @@ wheels = [
|
|
|
39
39
|
|
|
40
40
|
[[package]]
|
|
41
41
|
name = "flake8-sqlalchemy2"
|
|
42
|
-
version = "0.
|
|
42
|
+
version = "0.3.0"
|
|
43
43
|
source = { editable = "." }
|
|
44
44
|
dependencies = [
|
|
45
45
|
{ name = "flake8" },
|
|
@@ -50,6 +50,7 @@ dev = [
|
|
|
50
50
|
{ name = "mypy" },
|
|
51
51
|
{ name = "pytest" },
|
|
52
52
|
{ name = "ruff" },
|
|
53
|
+
{ name = "sqlalchemy" },
|
|
53
54
|
]
|
|
54
55
|
|
|
55
56
|
[package.metadata]
|
|
@@ -60,6 +61,67 @@ dev = [
|
|
|
60
61
|
{ name = "mypy", specifier = "==1.19.1" },
|
|
61
62
|
{ name = "pytest", specifier = "==9.0.2" },
|
|
62
63
|
{ name = "ruff", specifier = "==0.14.14" },
|
|
64
|
+
{ name = "sqlalchemy", specifier = ">=2.0.46" },
|
|
65
|
+
]
|
|
66
|
+
|
|
67
|
+
[[package]]
|
|
68
|
+
name = "greenlet"
|
|
69
|
+
version = "3.3.2"
|
|
70
|
+
source = { registry = "https://pypi.org/simple" }
|
|
71
|
+
sdist = { url = "https://files.pythonhosted.org/packages/a3/51/1664f6b78fc6ebbd98019a1fd730e83fa78f2db7058f72b1463d3612b8db/greenlet-3.3.2.tar.gz", hash = "sha256:2eaf067fc6d886931c7962e8c6bede15d2f01965560f3359b27c80bde2d151f2", size = 188267, upload-time = "2026-02-20T20:54:15.531Z" }
|
|
72
|
+
wheels = [
|
|
73
|
+
{ url = "https://files.pythonhosted.org/packages/38/3f/9859f655d11901e7b2996c6e3d33e0caa9a1d4572c3bc61ed0faa64b2f4c/greenlet-3.3.2-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:9bc885b89709d901859cf95179ec9f6bb67a3d2bb1f0e88456461bd4b7f8fd0d", size = 277747, upload-time = "2026-02-20T20:16:21.325Z" },
|
|
74
|
+
{ url = "https://files.pythonhosted.org/packages/fb/07/cb284a8b5c6498dbd7cba35d31380bb123d7dceaa7907f606c8ff5993cbf/greenlet-3.3.2-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b568183cf65b94919be4438dc28416b234b678c608cafac8874dfeeb2a9bbe13", size = 579202, upload-time = "2026-02-20T20:47:28.955Z" },
|
|
75
|
+
{ url = "https://files.pythonhosted.org/packages/ed/45/67922992b3a152f726163b19f890a85129a992f39607a2a53155de3448b8/greenlet-3.3.2-cp310-cp310-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:527fec58dc9f90efd594b9b700662ed3fb2493c2122067ac9c740d98080a620e", size = 590620, upload-time = "2026-02-20T20:55:55.581Z" },
|
|
76
|
+
{ url = "https://files.pythonhosted.org/packages/03/5f/6e2a7d80c353587751ef3d44bb947f0565ec008a2e0927821c007e96d3a7/greenlet-3.3.2-cp310-cp310-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:508c7f01f1791fbc8e011bd508f6794cb95397fdb198a46cb6635eb5b78d85a7", size = 602132, upload-time = "2026-02-20T21:02:43.261Z" },
|
|
77
|
+
{ url = "https://files.pythonhosted.org/packages/ad/55/9f1ebb5a825215fadcc0f7d5073f6e79e3007e3282b14b22d6aba7ca6cb8/greenlet-3.3.2-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ad0c8917dd42a819fe77e6bdfcb84e3379c0de956469301d9fd36427a1ca501f", size = 591729, upload-time = "2026-02-20T20:20:58.395Z" },
|
|
78
|
+
{ url = "https://files.pythonhosted.org/packages/24/b4/21f5455773d37f94b866eb3cf5caed88d6cea6dd2c6e1f9c34f463cba3ec/greenlet-3.3.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:97245cc10e5515dbc8c3104b2928f7f02b6813002770cfaffaf9a6e0fc2b94ef", size = 1551946, upload-time = "2026-02-20T20:49:31.102Z" },
|
|
79
|
+
{ url = "https://files.pythonhosted.org/packages/00/68/91f061a926abead128fe1a87f0b453ccf07368666bd59ffa46016627a930/greenlet-3.3.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8c1fdd7d1b309ff0da81d60a9688a8bd044ac4e18b250320a96fc68d31c209ca", size = 1618494, upload-time = "2026-02-20T20:21:06.541Z" },
|
|
80
|
+
{ url = "https://files.pythonhosted.org/packages/ac/78/f93e840cbaef8becaf6adafbaf1319682a6c2d8c1c20224267a5c6c8c891/greenlet-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:5d0e35379f93a6d0222de929a25ab47b5eb35b5ef4721c2b9cbcc4036129ff1f", size = 230092, upload-time = "2026-02-20T20:17:09.379Z" },
|
|
81
|
+
{ url = "https://files.pythonhosted.org/packages/f3/47/16400cb42d18d7a6bb46f0626852c1718612e35dcb0dffa16bbaffdf5dd2/greenlet-3.3.2-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:c56692189a7d1c7606cb794be0a8381470d95c57ce5be03fb3d0ef57c7853b86", size = 278890, upload-time = "2026-02-20T20:19:39.263Z" },
|
|
82
|
+
{ url = "https://files.pythonhosted.org/packages/a3/90/42762b77a5b6aa96cd8c0e80612663d39211e8ae8a6cd47c7f1249a66262/greenlet-3.3.2-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1ebd458fa8285960f382841da585e02201b53a5ec2bac6b156fc623b5ce4499f", size = 581120, upload-time = "2026-02-20T20:47:30.161Z" },
|
|
83
|
+
{ url = "https://files.pythonhosted.org/packages/bf/6f/f3d64f4fa0a9c7b5c5b3c810ff1df614540d5aa7d519261b53fba55d4df9/greenlet-3.3.2-cp311-cp311-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a443358b33c4ec7b05b79a7c8b466f5d275025e750298be7340f8fc63dff2a55", size = 594363, upload-time = "2026-02-20T20:55:56.965Z" },
|
|
84
|
+
{ url = "https://files.pythonhosted.org/packages/9c/8b/1430a04657735a3f23116c2e0d5eb10220928846e4537a938a41b350bed6/greenlet-3.3.2-cp311-cp311-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4375a58e49522698d3e70cc0b801c19433021b5c37686f7ce9c65b0d5c8677d2", size = 605046, upload-time = "2026-02-20T21:02:45.234Z" },
|
|
85
|
+
{ url = "https://files.pythonhosted.org/packages/72/83/3e06a52aca8128bdd4dcd67e932b809e76a96ab8c232a8b025b2850264c5/greenlet-3.3.2-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8e2cd90d413acbf5e77ae41e5d3c9b3ac1d011a756d7284d7f3f2b806bbd6358", size = 594156, upload-time = "2026-02-20T20:20:59.955Z" },
|
|
86
|
+
{ url = "https://files.pythonhosted.org/packages/70/79/0de5e62b873e08fe3cef7dbe84e5c4bc0e8ed0c7ff131bccb8405cd107c8/greenlet-3.3.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:442b6057453c8cb29b4fb36a2ac689382fc71112273726e2423f7f17dc73bf99", size = 1554649, upload-time = "2026-02-20T20:49:32.293Z" },
|
|
87
|
+
{ url = "https://files.pythonhosted.org/packages/5a/00/32d30dee8389dc36d42170a9c66217757289e2afb0de59a3565260f38373/greenlet-3.3.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:45abe8eb6339518180d5a7fa47fa01945414d7cca5ecb745346fc6a87d2750be", size = 1619472, upload-time = "2026-02-20T20:21:07.966Z" },
|
|
88
|
+
{ url = "https://files.pythonhosted.org/packages/f1/3a/efb2cf697fbccdf75b24e2c18025e7dfa54c4f31fab75c51d0fe79942cef/greenlet-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:1e692b2dae4cc7077cbb11b47d258533b48c8fde69a33d0d8a82e2fe8d8531d5", size = 230389, upload-time = "2026-02-20T20:17:18.772Z" },
|
|
89
|
+
{ url = "https://files.pythonhosted.org/packages/e1/a1/65bbc059a43a7e2143ec4fc1f9e3f673e04f9c7b371a494a101422ac4fd5/greenlet-3.3.2-cp311-cp311-win_arm64.whl", hash = "sha256:02b0a8682aecd4d3c6c18edf52bc8e51eacdd75c8eac52a790a210b06aa295fd", size = 229645, upload-time = "2026-02-20T20:18:18.695Z" },
|
|
90
|
+
{ url = "https://files.pythonhosted.org/packages/ea/ab/1608e5a7578e62113506740b88066bf09888322a311cff602105e619bd87/greenlet-3.3.2-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:ac8d61d4343b799d1e526db579833d72f23759c71e07181c2d2944e429eb09cd", size = 280358, upload-time = "2026-02-20T20:17:43.971Z" },
|
|
91
|
+
{ url = "https://files.pythonhosted.org/packages/a5/23/0eae412a4ade4e6623ff7626e38998cb9b11e9ff1ebacaa021e4e108ec15/greenlet-3.3.2-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3ceec72030dae6ac0c8ed7591b96b70410a8be370b6a477b1dbc072856ad02bd", size = 601217, upload-time = "2026-02-20T20:47:31.462Z" },
|
|
92
|
+
{ url = "https://files.pythonhosted.org/packages/f8/16/5b1678a9c07098ecb9ab2dd159fafaf12e963293e61ee8d10ecb55273e5e/greenlet-3.3.2-cp312-cp312-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a2a5be83a45ce6188c045bcc44b0ee037d6a518978de9a5d97438548b953a1ac", size = 611792, upload-time = "2026-02-20T20:55:58.423Z" },
|
|
93
|
+
{ url = "https://files.pythonhosted.org/packages/5c/c5/cc09412a29e43406eba18d61c70baa936e299bc27e074e2be3806ed29098/greenlet-3.3.2-cp312-cp312-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ae9e21c84035c490506c17002f5c8ab25f980205c3e61ddb3a2a2a2e6c411fcb", size = 626250, upload-time = "2026-02-20T21:02:46.596Z" },
|
|
94
|
+
{ url = "https://files.pythonhosted.org/packages/50/1f/5155f55bd71cabd03765a4aac9ac446be129895271f73872c36ebd4b04b6/greenlet-3.3.2-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:43e99d1749147ac21dde49b99c9abffcbc1e2d55c67501465ef0930d6e78e070", size = 613875, upload-time = "2026-02-20T20:21:01.102Z" },
|
|
95
|
+
{ url = "https://files.pythonhosted.org/packages/fc/dd/845f249c3fcd69e32df80cdab059b4be8b766ef5830a3d0aa9d6cad55beb/greenlet-3.3.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4c956a19350e2c37f2c48b336a3afb4bff120b36076d9d7fb68cb44e05d95b79", size = 1571467, upload-time = "2026-02-20T20:49:33.495Z" },
|
|
96
|
+
{ url = "https://files.pythonhosted.org/packages/2a/50/2649fe21fcc2b56659a452868e695634722a6655ba245d9f77f5656010bf/greenlet-3.3.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6c6f8ba97d17a1e7d664151284cb3315fc5f8353e75221ed4324f84eb162b395", size = 1640001, upload-time = "2026-02-20T20:21:09.154Z" },
|
|
97
|
+
{ url = "https://files.pythonhosted.org/packages/9b/40/cc802e067d02af8b60b6771cea7d57e21ef5e6659912814babb42b864713/greenlet-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:34308836d8370bddadb41f5a7ce96879b72e2fdfb4e87729330c6ab52376409f", size = 231081, upload-time = "2026-02-20T20:17:28.121Z" },
|
|
98
|
+
{ url = "https://files.pythonhosted.org/packages/58/2e/fe7f36ff1982d6b10a60d5e0740c759259a7d6d2e1dc41da6d96de32fff6/greenlet-3.3.2-cp312-cp312-win_arm64.whl", hash = "sha256:d3a62fa76a32b462a97198e4c9e99afb9ab375115e74e9a83ce180e7a496f643", size = 230331, upload-time = "2026-02-20T20:17:23.34Z" },
|
|
99
|
+
{ url = "https://files.pythonhosted.org/packages/ac/48/f8b875fa7dea7dd9b33245e37f065af59df6a25af2f9561efa8d822fde51/greenlet-3.3.2-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:aa6ac98bdfd716a749b84d4034486863fd81c3abde9aa3cf8eff9127981a4ae4", size = 279120, upload-time = "2026-02-20T20:19:01.9Z" },
|
|
100
|
+
{ url = "https://files.pythonhosted.org/packages/49/8d/9771d03e7a8b1ee456511961e1b97a6d77ae1dea4a34a5b98eee706689d3/greenlet-3.3.2-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ab0c7e7901a00bc0a7284907273dc165b32e0d109a6713babd04471327ff7986", size = 603238, upload-time = "2026-02-20T20:47:32.873Z" },
|
|
101
|
+
{ url = "https://files.pythonhosted.org/packages/59/0e/4223c2bbb63cd5c97f28ffb2a8aee71bdfb30b323c35d409450f51b91e3e/greenlet-3.3.2-cp313-cp313-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d248d8c23c67d2291ffd47af766e2a3aa9fa1c6703155c099feb11f526c63a92", size = 614219, upload-time = "2026-02-20T20:55:59.817Z" },
|
|
102
|
+
{ url = "https://files.pythonhosted.org/packages/94/2b/4d012a69759ac9d77210b8bfb128bc621125f5b20fc398bce3940d036b1c/greenlet-3.3.2-cp313-cp313-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ccd21bb86944ca9be6d967cf7691e658e43417782bce90b5d2faeda0ff78a7dd", size = 628268, upload-time = "2026-02-20T21:02:48.024Z" },
|
|
103
|
+
{ url = "https://files.pythonhosted.org/packages/7a/34/259b28ea7a2a0c904b11cd36c79b8cef8019b26ee5dbe24e73b469dea347/greenlet-3.3.2-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b6997d360a4e6a4e936c0f9625b1c20416b8a0ea18a8e19cabbefc712e7397ab", size = 616774, upload-time = "2026-02-20T20:21:02.454Z" },
|
|
104
|
+
{ url = "https://files.pythonhosted.org/packages/0a/03/996c2d1689d486a6e199cb0f1cf9e4aa940c500e01bdf201299d7d61fa69/greenlet-3.3.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:64970c33a50551c7c50491671265d8954046cb6e8e2999aacdd60e439b70418a", size = 1571277, upload-time = "2026-02-20T20:49:34.795Z" },
|
|
105
|
+
{ url = "https://files.pythonhosted.org/packages/d9/c4/2570fc07f34a39f2caf0bf9f24b0a1a0a47bc2e8e465b2c2424821389dfc/greenlet-3.3.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1a9172f5bf6bd88e6ba5a84e0a68afeac9dc7b6b412b245dd64f52d83c81e55b", size = 1640455, upload-time = "2026-02-20T20:21:10.261Z" },
|
|
106
|
+
{ url = "https://files.pythonhosted.org/packages/91/39/5ef5aa23bc545aa0d31e1b9b55822b32c8da93ba657295840b6b34124009/greenlet-3.3.2-cp313-cp313-win_amd64.whl", hash = "sha256:a7945dd0eab63ded0a48e4dcade82939783c172290a7903ebde9e184333ca124", size = 230961, upload-time = "2026-02-20T20:16:58.461Z" },
|
|
107
|
+
{ url = "https://files.pythonhosted.org/packages/62/6b/a89f8456dcb06becff288f563618e9f20deed8dd29beea14f9a168aef64b/greenlet-3.3.2-cp313-cp313-win_arm64.whl", hash = "sha256:394ead29063ee3515b4e775216cb756b2e3b4a7e55ae8fd884f17fa579e6b327", size = 230221, upload-time = "2026-02-20T20:17:37.152Z" },
|
|
108
|
+
{ url = "https://files.pythonhosted.org/packages/3f/ae/8bffcbd373b57a5992cd077cbe8858fff39110480a9d50697091faea6f39/greenlet-3.3.2-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:8d1658d7291f9859beed69a776c10822a0a799bc4bfe1bd4272bb60e62507dab", size = 279650, upload-time = "2026-02-20T20:18:00.783Z" },
|
|
109
|
+
{ url = "https://files.pythonhosted.org/packages/d1/c0/45f93f348fa49abf32ac8439938726c480bd96b2a3c6f4d949ec0124b69f/greenlet-3.3.2-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:18cb1b7337bca281915b3c5d5ae19f4e76d35e1df80f4ad3c1a7be91fadf1082", size = 650295, upload-time = "2026-02-20T20:47:34.036Z" },
|
|
110
|
+
{ url = "https://files.pythonhosted.org/packages/b3/de/dd7589b3f2b8372069ab3e4763ea5329940fc7ad9dcd3e272a37516d7c9b/greenlet-3.3.2-cp314-cp314-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c2e47408e8ce1c6f1ceea0dffcdf6ebb85cc09e55c7af407c99f1112016e45e9", size = 662163, upload-time = "2026-02-20T20:56:01.295Z" },
|
|
111
|
+
{ url = "https://files.pythonhosted.org/packages/cd/ac/85804f74f1ccea31ba518dcc8ee6f14c79f73fe36fa1beba38930806df09/greenlet-3.3.2-cp314-cp314-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e3cb43ce200f59483eb82949bf1835a99cf43d7571e900d7c8d5c62cdf25d2f9", size = 675371, upload-time = "2026-02-20T21:02:49.664Z" },
|
|
112
|
+
{ url = "https://files.pythonhosted.org/packages/d2/d8/09bfa816572a4d83bccd6750df1926f79158b1c36c5f73786e26dbe4ee38/greenlet-3.3.2-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:63d10328839d1973e5ba35e98cccbca71b232b14051fd957b6f8b6e8e80d0506", size = 664160, upload-time = "2026-02-20T20:21:04.015Z" },
|
|
113
|
+
{ url = "https://files.pythonhosted.org/packages/48/cf/56832f0c8255d27f6c35d41b5ec91168d74ec721d85f01a12131eec6b93c/greenlet-3.3.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:8e4ab3cfb02993c8cc248ea73d7dae6cec0253e9afa311c9b37e603ca9fad2ce", size = 1619181, upload-time = "2026-02-20T20:49:36.052Z" },
|
|
114
|
+
{ url = "https://files.pythonhosted.org/packages/0a/23/b90b60a4aabb4cec0796e55f25ffbfb579a907c3898cd2905c8918acaa16/greenlet-3.3.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:94ad81f0fd3c0c0681a018a976e5c2bd2ca2d9d94895f23e7bb1af4e8af4e2d5", size = 1687713, upload-time = "2026-02-20T20:21:11.684Z" },
|
|
115
|
+
{ url = "https://files.pythonhosted.org/packages/f3/ca/2101ca3d9223a1dc125140dbc063644dca76df6ff356531eb27bc267b446/greenlet-3.3.2-cp314-cp314-win_amd64.whl", hash = "sha256:8c4dd0f3997cf2512f7601563cc90dfb8957c0cff1e3a1b23991d4ea1776c492", size = 232034, upload-time = "2026-02-20T20:20:08.186Z" },
|
|
116
|
+
{ url = "https://files.pythonhosted.org/packages/f6/4a/ecf894e962a59dea60f04877eea0fd5724618da89f1867b28ee8b91e811f/greenlet-3.3.2-cp314-cp314-win_arm64.whl", hash = "sha256:cd6f9e2bbd46321ba3bbb4c8a15794d32960e3b0ae2cc4d49a1a53d314805d71", size = 231437, upload-time = "2026-02-20T20:18:59.722Z" },
|
|
117
|
+
{ url = "https://files.pythonhosted.org/packages/98/6d/8f2ef704e614bcf58ed43cfb8d87afa1c285e98194ab2cfad351bf04f81e/greenlet-3.3.2-cp314-cp314t-macosx_11_0_universal2.whl", hash = "sha256:e26e72bec7ab387ac80caa7496e0f908ff954f31065b0ffc1f8ecb1338b11b54", size = 286617, upload-time = "2026-02-20T20:19:29.856Z" },
|
|
118
|
+
{ url = "https://files.pythonhosted.org/packages/5e/0d/93894161d307c6ea237a43988f27eba0947b360b99ac5239ad3fe09f0b47/greenlet-3.3.2-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8b466dff7a4ffda6ca975979bab80bdadde979e29fc947ac3be4451428d8b0e4", size = 655189, upload-time = "2026-02-20T20:47:35.742Z" },
|
|
119
|
+
{ url = "https://files.pythonhosted.org/packages/f5/2c/d2d506ebd8abcb57386ec4f7ba20f4030cbe56eae541bc6fd6ef399c0b41/greenlet-3.3.2-cp314-cp314t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b8bddc5b73c9720bea487b3bffdb1840fe4e3656fba3bd40aa1489e9f37877ff", size = 658225, upload-time = "2026-02-20T20:56:02.527Z" },
|
|
120
|
+
{ url = "https://files.pythonhosted.org/packages/d1/67/8197b7e7e602150938049d8e7f30de1660cfb87e4c8ee349b42b67bdb2e1/greenlet-3.3.2-cp314-cp314t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:59b3e2c40f6706b05a9cd299c836c6aa2378cabe25d021acd80f13abf81181cf", size = 666581, upload-time = "2026-02-20T21:02:51.526Z" },
|
|
121
|
+
{ url = "https://files.pythonhosted.org/packages/8e/30/3a09155fbf728673a1dea713572d2d31159f824a37c22da82127056c44e4/greenlet-3.3.2-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b26b0f4428b871a751968285a1ac9648944cea09807177ac639b030bddebcea4", size = 657907, upload-time = "2026-02-20T20:21:05.259Z" },
|
|
122
|
+
{ url = "https://files.pythonhosted.org/packages/f3/fd/d05a4b7acd0154ed758797f0a43b4c0962a843bedfe980115e842c5b2d08/greenlet-3.3.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:1fb39a11ee2e4d94be9a76671482be9398560955c9e568550de0224e41104727", size = 1618857, upload-time = "2026-02-20T20:49:37.309Z" },
|
|
123
|
+
{ url = "https://files.pythonhosted.org/packages/6f/e1/50ee92a5db521de8f35075b5eff060dd43d39ebd46c2181a2042f7070385/greenlet-3.3.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:20154044d9085151bc309e7689d6f7ba10027f8f5a8c0676ad398b951913d89e", size = 1680010, upload-time = "2026-02-20T20:21:13.427Z" },
|
|
124
|
+
{ url = "https://files.pythonhosted.org/packages/29/4b/45d90626aef8e65336bed690106d1382f7a43665e2249017e9527df8823b/greenlet-3.3.2-cp314-cp314t-win_amd64.whl", hash = "sha256:c04c5e06ec3e022cbfe2cd4a846e1d4e50087444f875ff6d2c2ad8445495cf1a", size = 237086, upload-time = "2026-02-20T20:20:45.786Z" },
|
|
63
125
|
]
|
|
64
126
|
|
|
65
127
|
[[package]]
|
|
@@ -306,6 +368,62 @@ wheels = [
|
|
|
306
368
|
{ url = "https://files.pythonhosted.org/packages/9e/6a/40fee331a52339926a92e17ae748827270b288a35ef4a15c9c8f2ec54715/ruff-0.14.14-py3-none-win_arm64.whl", hash = "sha256:56e6981a98b13a32236a72a8da421d7839221fa308b223b9283312312e5ac76c", size = 10920448, upload-time = "2026-01-22T22:30:15.417Z" },
|
|
307
369
|
]
|
|
308
370
|
|
|
371
|
+
[[package]]
|
|
372
|
+
name = "sqlalchemy"
|
|
373
|
+
version = "2.0.46"
|
|
374
|
+
source = { registry = "https://pypi.org/simple" }
|
|
375
|
+
dependencies = [
|
|
376
|
+
{ name = "greenlet", marker = "platform_machine == 'AMD64' or platform_machine == 'WIN32' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'ppc64le' or platform_machine == 'win32' or platform_machine == 'x86_64'" },
|
|
377
|
+
{ name = "typing-extensions" },
|
|
378
|
+
]
|
|
379
|
+
sdist = { url = "https://files.pythonhosted.org/packages/06/aa/9ce0f3e7a9829ead5c8ce549392f33a12c4555a6c0609bb27d882e9c7ddf/sqlalchemy-2.0.46.tar.gz", hash = "sha256:cf36851ee7219c170bb0793dbc3da3e80c582e04a5437bc601bfe8c85c9216d7", size = 9865393, upload-time = "2026-01-21T18:03:45.119Z" }
|
|
380
|
+
wheels = [
|
|
381
|
+
{ url = "https://files.pythonhosted.org/packages/40/26/66ba59328dc25e523bfcb0f8db48bdebe2035e0159d600e1f01c0fc93967/sqlalchemy-2.0.46-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:895296687ad06dc9b11a024cf68e8d9d3943aa0b4964278d2553b86f1b267735", size = 2155051, upload-time = "2026-01-21T18:27:28.965Z" },
|
|
382
|
+
{ url = "https://files.pythonhosted.org/packages/21/cd/9336732941df972fbbfa394db9caa8bb0cf9fe03656ec728d12e9cbd6edc/sqlalchemy-2.0.46-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ab65cb2885a9f80f979b85aa4e9c9165a31381ca322cbde7c638fe6eefd1ec39", size = 3234666, upload-time = "2026-01-21T18:32:28.72Z" },
|
|
383
|
+
{ url = "https://files.pythonhosted.org/packages/38/62/865ae8b739930ec433cd4123760bee7f8dafdc10abefd725a025604fb0de/sqlalchemy-2.0.46-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:52fe29b3817bd191cc20bad564237c808967972c97fa683c04b28ec8979ae36f", size = 3232917, upload-time = "2026-01-21T18:44:54.064Z" },
|
|
384
|
+
{ url = "https://files.pythonhosted.org/packages/24/38/805904b911857f2b5e00fdea44e9570df62110f834378706939825579296/sqlalchemy-2.0.46-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:09168817d6c19954d3b7655da6ba87fcb3a62bb575fb396a81a8b6a9fadfe8b5", size = 3185790, upload-time = "2026-01-21T18:32:30.581Z" },
|
|
385
|
+
{ url = "https://files.pythonhosted.org/packages/69/4f/3260bb53aabd2d274856337456ea52f6a7eccf6cce208e558f870cec766b/sqlalchemy-2.0.46-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:be6c0466b4c25b44c5d82b0426b5501de3c424d7a3220e86cd32f319ba56798e", size = 3207206, upload-time = "2026-01-21T18:44:55.93Z" },
|
|
386
|
+
{ url = "https://files.pythonhosted.org/packages/ce/b3/67c432d7f9d88bb1a61909b67e29f6354d59186c168fb5d381cf438d3b73/sqlalchemy-2.0.46-cp310-cp310-win32.whl", hash = "sha256:1bc3f601f0a818d27bfe139f6766487d9c88502062a2cd3a7ee6c342e81d5047", size = 2115296, upload-time = "2026-01-21T18:33:12.498Z" },
|
|
387
|
+
{ url = "https://files.pythonhosted.org/packages/4a/8c/25fb284f570f9d48e6c240f0269a50cec9cf009a7e08be4c0aaaf0654972/sqlalchemy-2.0.46-cp310-cp310-win_amd64.whl", hash = "sha256:e0c05aff5c6b1bb5fb46a87e0f9d2f733f83ef6cbbbcd5c642b6c01678268061", size = 2138540, upload-time = "2026-01-21T18:33:14.22Z" },
|
|
388
|
+
{ url = "https://files.pythonhosted.org/packages/69/ac/b42ad16800d0885105b59380ad69aad0cce5a65276e269ce2729a2343b6a/sqlalchemy-2.0.46-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:261c4b1f101b4a411154f1da2b76497d73abbfc42740029205d4d01fa1052684", size = 2154851, upload-time = "2026-01-21T18:27:30.54Z" },
|
|
389
|
+
{ url = "https://files.pythonhosted.org/packages/a0/60/d8710068cb79f64d002ebed62a7263c00c8fd95f4ebd4b5be8f7ca93f2bc/sqlalchemy-2.0.46-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:181903fe8c1b9082995325f1b2e84ac078b1189e2819380c2303a5f90e114a62", size = 3311241, upload-time = "2026-01-21T18:32:33.45Z" },
|
|
390
|
+
{ url = "https://files.pythonhosted.org/packages/2b/0f/20c71487c7219ab3aa7421c7c62d93824c97c1460f2e8bb72404b0192d13/sqlalchemy-2.0.46-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:590be24e20e2424a4c3c1b0835e9405fa3d0af5823a1a9fc02e5dff56471515f", size = 3310741, upload-time = "2026-01-21T18:44:57.887Z" },
|
|
391
|
+
{ url = "https://files.pythonhosted.org/packages/65/80/d26d00b3b249ae000eee4db206fcfc564bf6ca5030e4747adf451f4b5108/sqlalchemy-2.0.46-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7568fe771f974abadce52669ef3a03150ff03186d8eb82613bc8adc435a03f01", size = 3263116, upload-time = "2026-01-21T18:32:35.044Z" },
|
|
392
|
+
{ url = "https://files.pythonhosted.org/packages/da/ee/74dda7506640923821340541e8e45bd3edd8df78664f1f2e0aae8077192b/sqlalchemy-2.0.46-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ebf7e1e78af38047e08836d33502c7a278915698b7c2145d045f780201679999", size = 3285327, upload-time = "2026-01-21T18:44:59.254Z" },
|
|
393
|
+
{ url = "https://files.pythonhosted.org/packages/9f/25/6dcf8abafff1389a21c7185364de145107b7394ecdcb05233815b236330d/sqlalchemy-2.0.46-cp311-cp311-win32.whl", hash = "sha256:9d80ea2ac519c364a7286e8d765d6cd08648f5b21ca855a8017d9871f075542d", size = 2114564, upload-time = "2026-01-21T18:33:15.85Z" },
|
|
394
|
+
{ url = "https://files.pythonhosted.org/packages/93/5f/e081490f8523adc0088f777e4ebad3cac21e498ec8a3d4067074e21447a1/sqlalchemy-2.0.46-cp311-cp311-win_amd64.whl", hash = "sha256:585af6afe518732d9ccd3aea33af2edaae4a7aa881af5d8f6f4fe3a368699597", size = 2139233, upload-time = "2026-01-21T18:33:17.528Z" },
|
|
395
|
+
{ url = "https://files.pythonhosted.org/packages/b6/35/d16bfa235c8b7caba3730bba43e20b1e376d2224f407c178fbf59559f23e/sqlalchemy-2.0.46-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3a9a72b0da8387f15d5810f1facca8f879de9b85af8c645138cba61ea147968c", size = 2153405, upload-time = "2026-01-21T19:05:54.143Z" },
|
|
396
|
+
{ url = "https://files.pythonhosted.org/packages/06/6c/3192e24486749862f495ddc6584ed730c0c994a67550ec395d872a2ad650/sqlalchemy-2.0.46-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2347c3f0efc4de367ba00218e0ae5c4ba2306e47216ef80d6e31761ac97cb0b9", size = 3334702, upload-time = "2026-01-21T18:46:45.384Z" },
|
|
397
|
+
{ url = "https://files.pythonhosted.org/packages/ea/a2/b9f33c8d68a3747d972a0bb758c6b63691f8fb8a49014bc3379ba15d4274/sqlalchemy-2.0.46-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9094c8b3197db12aa6f05c51c05daaad0a92b8c9af5388569847b03b1007fb1b", size = 3347664, upload-time = "2026-01-21T18:40:09.979Z" },
|
|
398
|
+
{ url = "https://files.pythonhosted.org/packages/aa/d2/3e59e2a91eaec9db7e8dc6b37b91489b5caeb054f670f32c95bcba98940f/sqlalchemy-2.0.46-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:37fee2164cf21417478b6a906adc1a91d69ae9aba8f9533e67ce882f4bb1de53", size = 3277372, upload-time = "2026-01-21T18:46:47.168Z" },
|
|
399
|
+
{ url = "https://files.pythonhosted.org/packages/dd/dd/67bc2e368b524e2192c3927b423798deda72c003e73a1e94c21e74b20a85/sqlalchemy-2.0.46-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b1e14b2f6965a685c7128bd315e27387205429c2e339eeec55cb75ca4ab0ea2e", size = 3312425, upload-time = "2026-01-21T18:40:11.548Z" },
|
|
400
|
+
{ url = "https://files.pythonhosted.org/packages/43/82/0ecd68e172bfe62247e96cb47867c2d68752566811a4e8c9d8f6e7c38a65/sqlalchemy-2.0.46-cp312-cp312-win32.whl", hash = "sha256:412f26bb4ba942d52016edc8d12fb15d91d3cd46b0047ba46e424213ad407bcb", size = 2113155, upload-time = "2026-01-21T18:42:49.748Z" },
|
|
401
|
+
{ url = "https://files.pythonhosted.org/packages/bc/2a/2821a45742073fc0331dc132552b30de68ba9563230853437cac54b2b53e/sqlalchemy-2.0.46-cp312-cp312-win_amd64.whl", hash = "sha256:ea3cd46b6713a10216323cda3333514944e510aa691c945334713fca6b5279ff", size = 2140078, upload-time = "2026-01-21T18:42:51.197Z" },
|
|
402
|
+
{ url = "https://files.pythonhosted.org/packages/b3/4b/fa7838fe20bb752810feed60e45625a9a8b0102c0c09971e2d1d95362992/sqlalchemy-2.0.46-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:93a12da97cca70cea10d4b4fc602589c4511f96c1f8f6c11817620c021d21d00", size = 2150268, upload-time = "2026-01-21T19:05:56.621Z" },
|
|
403
|
+
{ url = "https://files.pythonhosted.org/packages/46/c1/b34dccd712e8ea846edf396e00973dda82d598cb93762e55e43e6835eba9/sqlalchemy-2.0.46-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:af865c18752d416798dae13f83f38927c52f085c52e2f32b8ab0fef46fdd02c2", size = 3276511, upload-time = "2026-01-21T18:46:49.022Z" },
|
|
404
|
+
{ url = "https://files.pythonhosted.org/packages/96/48/a04d9c94753e5d5d096c628c82a98c4793b9c08ca0e7155c3eb7d7db9f24/sqlalchemy-2.0.46-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8d679b5f318423eacb61f933a9a0f75535bfca7056daeadbf6bd5bcee6183aee", size = 3292881, upload-time = "2026-01-21T18:40:13.089Z" },
|
|
405
|
+
{ url = "https://files.pythonhosted.org/packages/be/f4/06eda6e91476f90a7d8058f74311cb65a2fb68d988171aced81707189131/sqlalchemy-2.0.46-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:64901e08c33462acc9ec3bad27fc7a5c2b6491665f2aa57564e57a4f5d7c52ad", size = 3224559, upload-time = "2026-01-21T18:46:50.974Z" },
|
|
406
|
+
{ url = "https://files.pythonhosted.org/packages/ab/a2/d2af04095412ca6345ac22b33b89fe8d6f32a481e613ffcb2377d931d8d0/sqlalchemy-2.0.46-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e8ac45e8f4eaac0f9f8043ea0e224158855c6a4329fd4ee37c45c61e3beb518e", size = 3262728, upload-time = "2026-01-21T18:40:14.883Z" },
|
|
407
|
+
{ url = "https://files.pythonhosted.org/packages/31/48/1980c7caa5978a3b8225b4d230e69a2a6538a3562b8b31cea679b6933c83/sqlalchemy-2.0.46-cp313-cp313-win32.whl", hash = "sha256:8d3b44b3d0ab2f1319d71d9863d76eeb46766f8cf9e921ac293511804d39813f", size = 2111295, upload-time = "2026-01-21T18:42:52.366Z" },
|
|
408
|
+
{ url = "https://files.pythonhosted.org/packages/2d/54/f8d65bbde3d877617c4720f3c9f60e99bb7266df0d5d78b6e25e7c149f35/sqlalchemy-2.0.46-cp313-cp313-win_amd64.whl", hash = "sha256:77f8071d8fbcbb2dd11b7fd40dedd04e8ebe2eb80497916efedba844298065ef", size = 2137076, upload-time = "2026-01-21T18:42:53.924Z" },
|
|
409
|
+
{ url = "https://files.pythonhosted.org/packages/56/ba/9be4f97c7eb2b9d5544f2624adfc2853e796ed51d2bb8aec90bc94b7137e/sqlalchemy-2.0.46-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a1e8cc6cc01da346dc92d9509a63033b9b1bda4fed7a7a7807ed385c7dccdc10", size = 3556533, upload-time = "2026-01-21T18:33:06.636Z" },
|
|
410
|
+
{ url = "https://files.pythonhosted.org/packages/20/a6/b1fc6634564dbb4415b7ed6419cdfeaadefd2c39cdab1e3aa07a5f2474c2/sqlalchemy-2.0.46-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:96c7cca1a4babaaf3bfff3e4e606e38578856917e52f0384635a95b226c87764", size = 3523208, upload-time = "2026-01-21T18:45:08.436Z" },
|
|
411
|
+
{ url = "https://files.pythonhosted.org/packages/a1/d8/41e0bdfc0f930ff236f86fccd12962d8fa03713f17ed57332d38af6a3782/sqlalchemy-2.0.46-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b2a9f9aee38039cf4755891a1e50e1effcc42ea6ba053743f452c372c3152b1b", size = 3464292, upload-time = "2026-01-21T18:33:08.208Z" },
|
|
412
|
+
{ url = "https://files.pythonhosted.org/packages/f0/8b/9dcbec62d95bea85f5ecad9b8d65b78cc30fb0ffceeb3597961f3712549b/sqlalchemy-2.0.46-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:db23b1bf8cfe1f7fda19018e7207b20cdb5168f83c437ff7e95d19e39289c447", size = 3473497, upload-time = "2026-01-21T18:45:10.552Z" },
|
|
413
|
+
{ url = "https://files.pythonhosted.org/packages/e9/f8/5ecdfc73383ec496de038ed1614de9e740a82db9ad67e6e4514ebc0708a3/sqlalchemy-2.0.46-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:56bdd261bfd0895452006d5316cbf35739c53b9bb71a170a331fa0ea560b2ada", size = 2152079, upload-time = "2026-01-21T19:05:58.477Z" },
|
|
414
|
+
{ url = "https://files.pythonhosted.org/packages/e5/bf/eba3036be7663ce4d9c050bc3d63794dc29fbe01691f2bf5ccb64e048d20/sqlalchemy-2.0.46-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:33e462154edb9493f6c3ad2125931e273bbd0be8ae53f3ecd1c161ea9a1dd366", size = 3272216, upload-time = "2026-01-21T18:46:52.634Z" },
|
|
415
|
+
{ url = "https://files.pythonhosted.org/packages/05/45/1256fb597bb83b58a01ddb600c59fe6fdf0e5afe333f0456ed75c0f8d7bd/sqlalchemy-2.0.46-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9bcdce05f056622a632f1d44bb47dbdb677f58cad393612280406ce37530eb6d", size = 3277208, upload-time = "2026-01-21T18:40:16.38Z" },
|
|
416
|
+
{ url = "https://files.pythonhosted.org/packages/d9/a0/2053b39e4e63b5d7ceb3372cface0859a067c1ddbd575ea7e9985716f771/sqlalchemy-2.0.46-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:8e84b09a9b0f19accedcbeff5c2caf36e0dd537341a33aad8d680336152dc34e", size = 3221994, upload-time = "2026-01-21T18:46:54.622Z" },
|
|
417
|
+
{ url = "https://files.pythonhosted.org/packages/1e/87/97713497d9502553c68f105a1cb62786ba1ee91dea3852ae4067ed956a50/sqlalchemy-2.0.46-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:4f52f7291a92381e9b4de9050b0a65ce5d6a763333406861e33906b8aa4906bf", size = 3243990, upload-time = "2026-01-21T18:40:18.253Z" },
|
|
418
|
+
{ url = "https://files.pythonhosted.org/packages/a8/87/5d1b23548f420ff823c236f8bea36b1a997250fd2f892e44a3838ca424f4/sqlalchemy-2.0.46-cp314-cp314-win32.whl", hash = "sha256:70ed2830b169a9960193f4d4322d22be5c0925357d82cbf485b3369893350908", size = 2114215, upload-time = "2026-01-21T18:42:55.232Z" },
|
|
419
|
+
{ url = "https://files.pythonhosted.org/packages/3a/20/555f39cbcf0c10cf452988b6a93c2a12495035f68b3dbd1a408531049d31/sqlalchemy-2.0.46-cp314-cp314-win_amd64.whl", hash = "sha256:3c32e993bc57be6d177f7d5d31edb93f30726d798ad86ff9066d75d9bf2e0b6b", size = 2139867, upload-time = "2026-01-21T18:42:56.474Z" },
|
|
420
|
+
{ url = "https://files.pythonhosted.org/packages/3e/f0/f96c8057c982d9d8a7a68f45d69c674bc6f78cad401099692fe16521640a/sqlalchemy-2.0.46-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4dafb537740eef640c4d6a7c254611dca2df87eaf6d14d6a5fca9d1f4c3fc0fa", size = 3561202, upload-time = "2026-01-21T18:33:10.337Z" },
|
|
421
|
+
{ url = "https://files.pythonhosted.org/packages/d7/53/3b37dda0a5b137f21ef608d8dfc77b08477bab0fe2ac9d3e0a66eaeab6fc/sqlalchemy-2.0.46-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:42a1643dc5427b69aca967dae540a90b0fbf57eaf248f13a90ea5930e0966863", size = 3526296, upload-time = "2026-01-21T18:45:12.657Z" },
|
|
422
|
+
{ url = "https://files.pythonhosted.org/packages/33/75/f28622ba6dde79cd545055ea7bd4062dc934e0621f7b3be2891f8563f8de/sqlalchemy-2.0.46-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:ff33c6e6ad006bbc0f34f5faf941cfc62c45841c64c0a058ac38c799f15b5ede", size = 3470008, upload-time = "2026-01-21T18:33:11.725Z" },
|
|
423
|
+
{ url = "https://files.pythonhosted.org/packages/a9/42/4afecbbc38d5e99b18acef446453c76eec6fbd03db0a457a12a056836e22/sqlalchemy-2.0.46-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:82ec52100ec1e6ec671563bbd02d7c7c8d0b9e71a0723c72f22ecf52d1755330", size = 3476137, upload-time = "2026-01-21T18:45:15.001Z" },
|
|
424
|
+
{ url = "https://files.pythonhosted.org/packages/fc/a1/9c4efa03300926601c19c18582531b45aededfb961ab3c3585f1e24f120b/sqlalchemy-2.0.46-py3-none-any.whl", hash = "sha256:f9c11766e7e7c0a2767dda5acb006a118640c9fc0a4104214b96269bfb78399e", size = 1937882, upload-time = "2026-01-21T18:22:10.456Z" },
|
|
425
|
+
]
|
|
426
|
+
|
|
309
427
|
[[package]]
|
|
310
428
|
name = "tomli"
|
|
311
429
|
version = "2.4.0"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|