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.
Files changed (97) hide show
  1. {chapkit-1.1.0 → chapkit-2.0.0}/PKG-INFO +2 -2
  2. chapkit-2.0.0/pyproject.toml +211 -0
  3. chapkit-1.1.0/pyproject.toml → chapkit-2.0.0/pyproject.toml.orig +5 -3
  4. chapkit-2.0.0/src/chapkit/api/apps/console/assets/dist-B7bpuMSM.js +201 -0
  5. chapkit-2.0.0/src/chapkit/api/apps/console/assets/index-CQwQU2vo.js +127 -0
  6. chapkit-2.0.0/src/chapkit/api/apps/console/assets/index-HY9NoZeE.css +2 -0
  7. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/api/apps/console/index.html +2 -2
  8. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/api/apps/console/manifest.json +1 -1
  9. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/api/service_builder.py +56 -28
  10. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/artifact/manager.py +40 -6
  11. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/artifact/repository.py +18 -3
  12. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/artifact/router.py +39 -31
  13. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/init.py +13 -1
  14. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/migrate.py +20 -5
  15. chapkit-2.0.0/src/chapkit/cli/requirements.py +37 -0
  16. chapkit-2.0.0/src/chapkit/cli/templates/.dockerignore +13 -0
  17. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/templates/Dockerfile.jinja2 +29 -4
  18. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/templates/README.md.jinja2 +82 -10
  19. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/templates/compose.yml.jinja2 +22 -0
  20. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/templates/migrate/CHAPKIT_migrate.md.jinja2 +12 -1
  21. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/templates/migrate/Dockerfile_migrate.jinja2 +32 -1
  22. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/templates/migrate/Makefile_migrate.jinja2 +1 -1
  23. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/templates/migrate/pyproject_migrate.toml.jinja2 +1 -1
  24. chapkit-2.0.0/src/chapkit/cli/templates/publish-docker.yml.jinja2 +76 -0
  25. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/templates/pyproject.toml.jinja2 +1 -1
  26. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/test/command.py +5 -0
  27. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/test/runner.py +6 -0
  28. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/config/manager.py +14 -3
  29. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/config/repository.py +8 -4
  30. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/config/router.py +52 -38
  31. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/data/__init__.py +5 -1
  32. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/data/dataframe.py +123 -1
  33. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/data/generator.py +56 -26
  34. chapkit-2.0.0/src/chapkit/data/geo.py +65 -0
  35. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/ml/__init__.py +2 -1
  36. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/ml/manager.py +63 -1
  37. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/ml/router.py +14 -24
  38. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/ml/runner.py +60 -11
  39. chapkit-2.0.0/src/chapkit/scheduler.py +72 -0
  40. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/utils.py +21 -2
  41. chapkit-1.1.0/src/chapkit/api/apps/console/assets/dist-sbFJepsy.js +0 -200
  42. chapkit-1.1.0/src/chapkit/api/apps/console/assets/index-BWi1Y7hm.js +0 -104
  43. chapkit-1.1.0/src/chapkit/api/apps/console/assets/index-CMKap_uN.css +0 -2
  44. chapkit-1.1.0/src/chapkit/scheduler.py +0 -169
  45. {chapkit-1.1.0 → chapkit-2.0.0}/README.md +0 -0
  46. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/__init__.py +0 -0
  47. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/alembic/__init__.py +0 -0
  48. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/alembic/env.py +0 -0
  49. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/alembic/script.py.mako +0 -0
  50. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/alembic/versions/20251010_0927_4d869b5fb06e_initial_schema.py +0 -0
  51. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/alembic/versions/__init__.py +0 -0
  52. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/alembic_helpers.py +0 -0
  53. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/api/__init__.py +0 -0
  54. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/api/apps/console/assets/javascript-CppQSorr.js +0 -0
  55. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/api/apps/console/assets/roboto-cyrillic-ext-wght-normal-BCp_3N7R.woff2 +0 -0
  56. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/api/apps/console/assets/roboto-cyrillic-wght-normal-fOt7epNf.woff2 +0 -0
  57. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/api/apps/console/assets/roboto-greek-ext-wght-normal-Bgw4czJT.woff2 +0 -0
  58. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/api/apps/console/assets/roboto-greek-wght-normal-DlT9XTxE.woff2 +0 -0
  59. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/api/apps/console/assets/roboto-latin-ext-wght-normal-DYIxWhlt.woff2 +0 -0
  60. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/api/apps/console/assets/roboto-latin-wght-normal-ccAYIvAh.woff2 +0 -0
  61. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/api/apps/console/assets/roboto-math-wght-normal-4a3xuzGk.woff2 +0 -0
  62. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/api/apps/console/assets/roboto-symbols-wght-normal-B7iHSfaG.woff2 +0 -0
  63. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/api/apps/console/assets/roboto-vietnamese-wght-normal-_f1XEJpo.woff2 +0 -0
  64. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/api/apps/console/assets/vitesse-dark-BZCL-v6S.js +0 -0
  65. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/api/apps/console/assets/vitesse-light-VbXTXTou.js +0 -0
  66. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/api/apps/console/favicon.svg +0 -0
  67. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/api/apps/console/icons.svg +0 -0
  68. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/api/dependencies.py +0 -0
  69. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/artifact/__init__.py +0 -0
  70. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/artifact/models.py +0 -0
  71. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/artifact/schemas.py +0 -0
  72. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/__init__.py +0 -0
  73. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/__main__.py +0 -0
  74. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/artifact.py +0 -0
  75. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/cli.py +0 -0
  76. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/mlproject.py +0 -0
  77. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/run.py +0 -0
  78. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/templates/.gitignore +0 -0
  79. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/templates/.python-version +0 -0
  80. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/templates/main.py.jinja2 +0 -0
  81. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/templates/main_shell.py.jinja2 +0 -0
  82. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/templates/migrate/README_migrate.md.jinja2 +0 -0
  83. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/templates/migrate/dockerignore_migrate.jinja2 +0 -0
  84. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/templates/migrate/gitignore_migrate.jinja2 +0 -0
  85. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/templates/migrate/main_migrate.py.jinja2 +0 -0
  86. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/templates/migrate/requirements_migrate.txt.jinja2 +0 -0
  87. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/templates/scripts/predict.R.jinja2 +0 -0
  88. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/templates/scripts/predict_model.py.jinja2 +0 -0
  89. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/templates/scripts/train.R.jinja2 +0 -0
  90. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/templates/scripts/train_model.py.jinja2 +0 -0
  91. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/test/__init__.py +0 -0
  92. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/cli/test/utils.py +0 -0
  93. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/config/__init__.py +0 -0
  94. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/config/models.py +0 -0
  95. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/config/schemas.py +0 -0
  96. {chapkit-1.1.0 → chapkit-2.0.0}/src/chapkit/ml/schemas.py +0 -0
  97. {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: 1.1.0
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>=1.0.1
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 = "1.1.0"
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>=1.0.1",
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.9.0,<0.12.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"]