chapkit 1.1.0__tar.gz → 2.0.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.
- {chapkit-1.1.0 → chapkit-2.0.0}/PKG-INFO +2 -2
- chapkit-2.0.0/pyproject.toml +211 -0
- chapkit-1.1.0/pyproject.toml → chapkit-2.0.0/pyproject.toml.orig +5 -3
- chapkit-2.0.0/src/chapkit/api/apps/console/assets/dist-B7bpuMSM.js +201 -0
- chapkit-2.0.0/src/chapkit/api/apps/console/assets/index-CQwQU2vo.js +127 -0
- chapkit-2.0.0/src/chapkit/api/apps/console/assets/index-HY9NoZeE.css +2 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/api/apps/console/index.html +2 -2
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/api/apps/console/manifest.json +1 -1
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/api/service_builder.py +56 -28
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/artifact/manager.py +40 -6
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/artifact/repository.py +18 -3
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/artifact/router.py +39 -31
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/init.py +13 -1
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/migrate.py +20 -5
- chapkit-2.0.0/src/chapkit/cli/requirements.py +37 -0
- chapkit-2.0.0/src/chapkit/cli/templates/.dockerignore +13 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/templates/Dockerfile.jinja2 +29 -4
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/templates/README.md.jinja2 +82 -10
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/templates/compose.yml.jinja2 +22 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/templates/migrate/CHAPKIT_migrate.md.jinja2 +12 -1
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/templates/migrate/Dockerfile_migrate.jinja2 +32 -1
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/templates/migrate/Makefile_migrate.jinja2 +1 -1
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/templates/migrate/pyproject_migrate.toml.jinja2 +1 -1
- chapkit-2.0.0/src/chapkit/cli/templates/publish-docker.yml.jinja2 +76 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/templates/pyproject.toml.jinja2 +1 -1
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/test/command.py +5 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/test/runner.py +6 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/config/manager.py +14 -3
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/config/repository.py +8 -4
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/config/router.py +52 -38
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/data/__init__.py +5 -1
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/data/dataframe.py +123 -1
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/data/generator.py +56 -26
- chapkit-2.0.0/src/chapkit/data/geo.py +65 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/ml/__init__.py +2 -1
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/ml/manager.py +63 -1
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/ml/router.py +14 -24
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/ml/runner.py +60 -11
- chapkit-2.0.0/src/chapkit/scheduler.py +72 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/utils.py +21 -2
- chapkit-1.1.0/src/chapkit/api/apps/console/assets/dist-sbFJepsy.js +0 -200
- chapkit-1.1.0/src/chapkit/api/apps/console/assets/index-BWi1Y7hm.js +0 -104
- chapkit-1.1.0/src/chapkit/api/apps/console/assets/index-CMKap_uN.css +0 -2
- chapkit-1.1.0/src/chapkit/scheduler.py +0 -169
- {chapkit-1.1.0 → chapkit-2.0.0}/README.md +0 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/__init__.py +0 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/alembic/__init__.py +0 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/alembic/env.py +0 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/alembic/script.py.mako +0 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/alembic/versions/20251010_0927_4d869b5fb06e_initial_schema.py +0 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/alembic/versions/__init__.py +0 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/alembic_helpers.py +0 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/api/__init__.py +0 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/api/apps/console/assets/javascript-CppQSorr.js +0 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/api/apps/console/assets/roboto-cyrillic-ext-wght-normal-BCp_3N7R.woff2 +0 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/api/apps/console/assets/roboto-cyrillic-wght-normal-fOt7epNf.woff2 +0 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/api/apps/console/assets/roboto-greek-ext-wght-normal-Bgw4czJT.woff2 +0 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/api/apps/console/assets/roboto-greek-wght-normal-DlT9XTxE.woff2 +0 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/api/apps/console/assets/roboto-latin-ext-wght-normal-DYIxWhlt.woff2 +0 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/api/apps/console/assets/roboto-latin-wght-normal-ccAYIvAh.woff2 +0 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/api/apps/console/assets/roboto-math-wght-normal-4a3xuzGk.woff2 +0 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/api/apps/console/assets/roboto-symbols-wght-normal-B7iHSfaG.woff2 +0 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/api/apps/console/assets/roboto-vietnamese-wght-normal-_f1XEJpo.woff2 +0 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/api/apps/console/assets/vitesse-dark-BZCL-v6S.js +0 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/api/apps/console/assets/vitesse-light-VbXTXTou.js +0 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/api/apps/console/favicon.svg +0 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/api/apps/console/icons.svg +0 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/api/dependencies.py +0 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/artifact/__init__.py +0 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/artifact/models.py +0 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/artifact/schemas.py +0 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/__init__.py +0 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/__main__.py +0 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/artifact.py +0 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/cli.py +0 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/mlproject.py +0 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/run.py +0 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/templates/.gitignore +0 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/templates/.python-version +0 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/templates/main.py.jinja2 +0 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/templates/main_shell.py.jinja2 +0 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/templates/migrate/README_migrate.md.jinja2 +0 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/templates/migrate/dockerignore_migrate.jinja2 +0 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/templates/migrate/gitignore_migrate.jinja2 +0 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/templates/migrate/main_migrate.py.jinja2 +0 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/templates/migrate/requirements_migrate.txt.jinja2 +0 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/templates/scripts/predict.R.jinja2 +0 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/templates/scripts/predict_model.py.jinja2 +0 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/templates/scripts/train.R.jinja2 +0 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/templates/scripts/train_model.py.jinja2 +0 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/test/__init__.py +0 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/test/utils.py +0 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/config/__init__.py +0 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/config/models.py +0 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/config/schemas.py +0 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/ml/schemas.py +0 -0
- {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/py.typed +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: chapkit
|
|
3
|
-
Version:
|
|
3
|
+
Version: 2.0.0
|
|
4
4
|
Summary: ML and data service modules built on servicekit - config, artifacts, and ML workflows
|
|
5
5
|
Keywords: ml,machine-learning,data-science,artifacts,config,servicekit
|
|
6
6
|
Author: Morten Hansen
|
|
@@ -16,7 +16,7 @@ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
|
16
16
|
Requires-Dist: geojson-pydantic>=2.1.1
|
|
17
17
|
Requires-Dist: typer>=0.24.2
|
|
18
18
|
Requires-Dist: jinja2>=3.1.6
|
|
19
|
-
Requires-Dist: servicekit>=
|
|
19
|
+
Requires-Dist: servicekit>=2.0.2,<3
|
|
20
20
|
Requires-Dist: httpx>=0.28.1
|
|
21
21
|
Requires-Dist: pandas>=2.3.3 ; extra == 'dataframe'
|
|
22
22
|
Requires-Dist: polars>=1.34.0 ; extra == 'dataframe'
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "chapkit"
|
|
3
|
+
version = "2.0.0"
|
|
4
|
+
description = "ML and data service modules built on servicekit - config, artifacts, and ML workflows"
|
|
5
|
+
readme = "README.md"
|
|
6
|
+
requires-python = ">=3.13"
|
|
7
|
+
keywords = [
|
|
8
|
+
"ml",
|
|
9
|
+
"machine-learning",
|
|
10
|
+
"data-science",
|
|
11
|
+
"artifacts",
|
|
12
|
+
"config",
|
|
13
|
+
"servicekit",
|
|
14
|
+
]
|
|
15
|
+
classifiers = [
|
|
16
|
+
"Development Status :: 5 - Production/Stable",
|
|
17
|
+
"Intended Audience :: Developers",
|
|
18
|
+
"Programming Language :: Python :: 3",
|
|
19
|
+
"Programming Language :: Python :: 3.13",
|
|
20
|
+
"Framework :: FastAPI",
|
|
21
|
+
"Topic :: Software Development :: Libraries :: Python Modules",
|
|
22
|
+
"Topic :: Scientific/Engineering :: Artificial Intelligence",
|
|
23
|
+
]
|
|
24
|
+
dependencies = [
|
|
25
|
+
"geojson-pydantic>=2.1.1",
|
|
26
|
+
"typer>=0.24.2",
|
|
27
|
+
"jinja2>=3.1.6",
|
|
28
|
+
"servicekit>=2.0.2,<3",
|
|
29
|
+
"httpx>=0.28.1",
|
|
30
|
+
]
|
|
31
|
+
|
|
32
|
+
[[project.authors]]
|
|
33
|
+
name = "Morten Hansen"
|
|
34
|
+
email = "morten@dhis2.org"
|
|
35
|
+
|
|
36
|
+
[project.license]
|
|
37
|
+
text = "AGPL-3.0-or-later"
|
|
38
|
+
|
|
39
|
+
[project.optional-dependencies]
|
|
40
|
+
pandas = ["pandas>=2.3.3"]
|
|
41
|
+
polars = ["polars>=1.34.0"]
|
|
42
|
+
xarray = [
|
|
43
|
+
"xarray>=2025.10.1",
|
|
44
|
+
"pandas>=2.3.3",
|
|
45
|
+
]
|
|
46
|
+
dataframe = [
|
|
47
|
+
"pandas>=2.3.3",
|
|
48
|
+
"polars>=1.34.0",
|
|
49
|
+
"xarray>=2025.10.1",
|
|
50
|
+
]
|
|
51
|
+
|
|
52
|
+
[project.urls]
|
|
53
|
+
Homepage = "https://github.com/dhis2-chap/chapkit"
|
|
54
|
+
Repository = "https://github.com/dhis2-chap/chapkit"
|
|
55
|
+
Issues = "https://github.com/dhis2-chap/chapkit/issues"
|
|
56
|
+
Documentation = "https://dhis2-chap.github.io/chapkit"
|
|
57
|
+
|
|
58
|
+
[project.scripts]
|
|
59
|
+
chapkit = "chapkit.cli.cli:main"
|
|
60
|
+
|
|
61
|
+
[dependency-groups]
|
|
62
|
+
dev = [
|
|
63
|
+
"coverage[toml]>=7.13.5",
|
|
64
|
+
"mypy>=1.20.2",
|
|
65
|
+
"pandas-stubs>=3.0.0.260204",
|
|
66
|
+
"pytest>=9.0.3",
|
|
67
|
+
"pytest-cov>=7.1.0",
|
|
68
|
+
"pytest-asyncio>=1.3.0",
|
|
69
|
+
"ruff>=0.15.12",
|
|
70
|
+
"pyright>=1.1.409",
|
|
71
|
+
"scikit-learn>=1.8.0",
|
|
72
|
+
"mkdocs>=1.6.1",
|
|
73
|
+
"mkdocs-material>=9.7.6",
|
|
74
|
+
"mkdocstrings[python]>=1.0.4",
|
|
75
|
+
"types-pyyaml>=6.0.12.20260408",
|
|
76
|
+
"pandas>=3.0.2",
|
|
77
|
+
"numpy>=2.4.4",
|
|
78
|
+
"httpx2>=2.4.0",
|
|
79
|
+
]
|
|
80
|
+
|
|
81
|
+
[build-system]
|
|
82
|
+
requires = ["uv_build>=0.12.0,<0.13.0"]
|
|
83
|
+
build-backend = "uv_build"
|
|
84
|
+
|
|
85
|
+
[tool.ruff]
|
|
86
|
+
target-version = "py313"
|
|
87
|
+
line-length = 120
|
|
88
|
+
exclude = ["*.md"]
|
|
89
|
+
|
|
90
|
+
[tool.ruff.lint]
|
|
91
|
+
fixable = ["ALL"]
|
|
92
|
+
select = [
|
|
93
|
+
"E",
|
|
94
|
+
"W",
|
|
95
|
+
"F",
|
|
96
|
+
"I",
|
|
97
|
+
"D",
|
|
98
|
+
]
|
|
99
|
+
ignore = [
|
|
100
|
+
"D203",
|
|
101
|
+
"D213",
|
|
102
|
+
]
|
|
103
|
+
|
|
104
|
+
[tool.ruff.lint.pydocstyle]
|
|
105
|
+
convention = "google"
|
|
106
|
+
|
|
107
|
+
[tool.ruff.lint.per-file-ignores]
|
|
108
|
+
"tests/**/*.py" = ["D"]
|
|
109
|
+
"src/chapkit/alembic/**/*.py" = ["D"]
|
|
110
|
+
"**/__init__.py" = ["D104"]
|
|
111
|
+
"src/**/*.py" = [
|
|
112
|
+
"D102",
|
|
113
|
+
"D105",
|
|
114
|
+
"D107",
|
|
115
|
+
]
|
|
116
|
+
"examples/**/*.py" = []
|
|
117
|
+
|
|
118
|
+
[tool.ruff.format]
|
|
119
|
+
quote-style = "double"
|
|
120
|
+
indent-style = "space"
|
|
121
|
+
skip-magic-trailing-comma = false
|
|
122
|
+
docstring-code-format = true
|
|
123
|
+
docstring-code-line-length = "dynamic"
|
|
124
|
+
|
|
125
|
+
[tool.pytest.ini_options]
|
|
126
|
+
asyncio_mode = "auto"
|
|
127
|
+
testpaths = ["tests"]
|
|
128
|
+
norecursedirs = [
|
|
129
|
+
"examples",
|
|
130
|
+
".git",
|
|
131
|
+
".venv",
|
|
132
|
+
"__pycache__",
|
|
133
|
+
]
|
|
134
|
+
filterwarnings = [
|
|
135
|
+
"ignore:Pydantic serializer warnings:UserWarning",
|
|
136
|
+
"ignore:Remove.*format_exc_info.*:UserWarning",
|
|
137
|
+
]
|
|
138
|
+
markers = ["""slow: marks tests as slow (deselect with '-m "not slow"')"""]
|
|
139
|
+
|
|
140
|
+
[tool.coverage.run]
|
|
141
|
+
branch = true
|
|
142
|
+
dynamic_context = "test_function"
|
|
143
|
+
relative_files = true
|
|
144
|
+
source = ["chapkit"]
|
|
145
|
+
omit = [
|
|
146
|
+
"*/alembic/*",
|
|
147
|
+
"*/cli/*",
|
|
148
|
+
]
|
|
149
|
+
|
|
150
|
+
[tool.coverage.report]
|
|
151
|
+
exclude_also = ["if TYPE_CHECKING:"]
|
|
152
|
+
precision = 2
|
|
153
|
+
show_missing = true
|
|
154
|
+
skip_covered = true
|
|
155
|
+
|
|
156
|
+
[tool.mypy]
|
|
157
|
+
python_version = "3.13"
|
|
158
|
+
warn_return_any = true
|
|
159
|
+
warn_unused_configs = true
|
|
160
|
+
disallow_untyped_defs = true
|
|
161
|
+
check_untyped_defs = true
|
|
162
|
+
no_implicit_optional = true
|
|
163
|
+
warn_unused_ignores = true
|
|
164
|
+
strict_equality = true
|
|
165
|
+
mypy_path = [
|
|
166
|
+
"src",
|
|
167
|
+
"typings",
|
|
168
|
+
]
|
|
169
|
+
|
|
170
|
+
[[tool.mypy.overrides]]
|
|
171
|
+
module = "tests.*"
|
|
172
|
+
disallow_untyped_defs = false
|
|
173
|
+
|
|
174
|
+
[[tool.mypy.overrides]]
|
|
175
|
+
module = "servicekit.*"
|
|
176
|
+
ignore_missing_imports = true
|
|
177
|
+
disallow_any_unimported = false
|
|
178
|
+
|
|
179
|
+
[[tool.mypy.overrides]]
|
|
180
|
+
module = [
|
|
181
|
+
"chapkit.artifact.*",
|
|
182
|
+
"chapkit.config.*",
|
|
183
|
+
"examples.*",
|
|
184
|
+
]
|
|
185
|
+
warn_return_any = false
|
|
186
|
+
|
|
187
|
+
[[tool.mypy.overrides]]
|
|
188
|
+
module = "chapkit.data.dataframe"
|
|
189
|
+
disable_error_code = ["import-not-found"]
|
|
190
|
+
|
|
191
|
+
[tool.pyright]
|
|
192
|
+
include = [
|
|
193
|
+
"src",
|
|
194
|
+
"tests",
|
|
195
|
+
"examples",
|
|
196
|
+
]
|
|
197
|
+
exclude = ["**/.venv"]
|
|
198
|
+
pythonVersion = "3.13"
|
|
199
|
+
typeCheckingMode = "strict"
|
|
200
|
+
useLibraryCodeForTypes = true
|
|
201
|
+
reportPrivateUsage = false
|
|
202
|
+
reportUnusedFunction = false
|
|
203
|
+
reportUnknownMemberType = false
|
|
204
|
+
reportUnknownArgumentType = false
|
|
205
|
+
reportUnknownParameterType = false
|
|
206
|
+
reportUnknownVariableType = false
|
|
207
|
+
reportMissingTypeArgument = false
|
|
208
|
+
reportMissingTypeStubs = false
|
|
209
|
+
reportUnknownLambdaType = false
|
|
210
|
+
reportMissingImports = "warning"
|
|
211
|
+
reportMissingModuleSource = false
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "chapkit"
|
|
3
|
-
version = "
|
|
3
|
+
version = "2.0.0"
|
|
4
4
|
description = "ML and data service modules built on servicekit - config, artifacts, and ML workflows"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
authors = [{ name = "Morten Hansen", email = "morten@dhis2.org" }]
|
|
@@ -27,7 +27,7 @@ dependencies = [
|
|
|
27
27
|
"geojson-pydantic>=2.1.1",
|
|
28
28
|
"typer>=0.24.2",
|
|
29
29
|
"jinja2>=3.1.6",
|
|
30
|
-
"servicekit>=
|
|
30
|
+
"servicekit>=2.0.2,<3",
|
|
31
31
|
"httpx>=0.28.1",
|
|
32
32
|
]
|
|
33
33
|
|
|
@@ -67,12 +67,14 @@ dev = [
|
|
|
67
67
|
]
|
|
68
68
|
|
|
69
69
|
[build-system]
|
|
70
|
-
requires = ["uv_build>=0.
|
|
70
|
+
requires = ["uv_build>=0.12.0,<0.13.0"]
|
|
71
71
|
build-backend = "uv_build"
|
|
72
72
|
|
|
73
73
|
[tool.ruff]
|
|
74
74
|
target-version = "py313"
|
|
75
75
|
line-length = 120
|
|
76
|
+
# ruff 0.16 formats Python code blocks inside Markdown; keep docs and CLAUDE.md as written.
|
|
77
|
+
exclude = ["*.md"]
|
|
76
78
|
|
|
77
79
|
[tool.ruff.lint]
|
|
78
80
|
fixable = ["ALL"]
|