Skip to content

Commit f7c68d4

Browse files
committed
feat(packaging): introduce uv workspace structure for aignostics-sdk split
1 parent 9def2c5 commit f7c68d4

6 files changed

Lines changed: 424 additions & 302 deletions

File tree

Lines changed: 181 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,181 @@
1+
[project]
2+
name = "aignostics-sdk"
3+
version = "1.4.0"
4+
description = "🔬 Python SDK providing access to the Aignostics Platform. Includes Aignostics Launchpad (Desktop Application), Aignostics CLI (Command-Line Interface), example notebooks, and Aignostics Client Library."
5+
readme = "../../README.md"
6+
authors = [
7+
{ name = "Helmut Hoffer von Ankershoffen", email = "helmut@aignostics.com" },
8+
{ name = "Andreas Kunft", email = "andreas@aignostics.com" },
9+
]
10+
license = { file = "../../LICENSE" }
11+
12+
keywords = [
13+
"aignostics",
14+
"atlas",
15+
"whole-slide-imaging",
16+
"machine-learning",
17+
"digital-pathology",
18+
"medical-imaging",
19+
"qupath",
20+
"dicom",
21+
"pydicom",
22+
"openslide",
23+
"image-data-commons",
24+
"act",
25+
"codecov",
26+
"copier",
27+
"cyclonedx",
28+
"devcontainer",
29+
"detect-secrets",
30+
"docker",
31+
"git-cliff",
32+
"jupyter",
33+
"marimo",
34+
"mypy",
35+
"nox",
36+
"nicegui",
37+
"oe-python-template",
38+
"pip-audit",
39+
"pip-licenses",
40+
"pre-commit",
41+
"pydantic",
42+
"pytest",
43+
"python",
44+
"pypi",
45+
"readthedocs",
46+
"ruff",
47+
"sonarqube",
48+
"sonarcloud",
49+
"sphinx",
50+
"typer",
51+
"uv",
52+
]
53+
54+
classifiers = [
55+
"Development Status :: 3 - Alpha",
56+
"Intended Audience :: Developers",
57+
"Intended Audience :: End Users/Desktop",
58+
"Programming Language :: Python",
59+
"Programming Language :: Python :: 3",
60+
"Programming Language :: Python :: 3.11",
61+
"Programming Language :: Python :: 3.12",
62+
"Programming Language :: Python :: 3.13",
63+
"Programming Language :: Python :: 3.14",
64+
"License :: OSI Approved :: MIT License",
65+
"Operating System :: MacOS :: MacOS X",
66+
"Operating System :: POSIX :: Linux",
67+
"Operating System :: Microsoft :: Windows",
68+
"Framework :: Pydantic",
69+
"Framework :: Pytest",
70+
"Typing :: Typed",
71+
"Natural Language :: English",
72+
]
73+
74+
# WARNING: The upper bound of requires-python is *not* respected by uvx
75+
requires-python = ">=3.11, <3.15"
76+
77+
dependencies = [
78+
# From Template
79+
"fastapi[all,standard]>=0.123.10",
80+
"humanize>=4.14.0,<5",
81+
"nicegui[native]>=3.11.0,<4",
82+
"packaging>=26,<27",
83+
"platformdirs>=4.5.1,<5",
84+
"psutil>=7.1.3,<8",
85+
"pydantic-settings>=2.12.0,<3",
86+
"pywin32>=311,<312; sys_platform == 'win32'",
87+
"pyyaml>=6.0.3,<7",
88+
"sentry-sdk>=2.47.0,<3",
89+
"typer>=0.20.0,<1",
90+
# Custom
91+
"boto3>=1.42.4,<2",
92+
"certifi>=2025.11.12",
93+
"defusedxml>=0.7.1",
94+
"dicom-validator>=0.7.3,<1",
95+
"dicomweb-client[gcp]>=0.59.3,<1",
96+
"duckdb>=1.4.2,<=2",
97+
"google-cloud-storage>=3.6.0,<4",
98+
"crc32c>=2.8,<3",
99+
"highdicom>=0.26.1,<1; python_version < '3.14'",
100+
"html-sanitizer>=2.6.0,<3",
101+
"httpx>=0.28.1,<1",
102+
"idc-index-data==24.0.3",
103+
"ijson>=3.4.0.post0,<4",
104+
"jsf>=0.11.2,<1",
105+
"jsonschema[format-nongpl]>=4.25.1,<5",
106+
"loguru>=0.7.3,<1",
107+
"openslide-bin>=4.0.0.10,<5",
108+
"openslide-python>=1.4.3,<2",
109+
"pandas>=2.3.3,<4",
110+
"platformdirs>=4.3.2,<5",
111+
"procrastinate>=3.5.3",
112+
"fastparquet>=2026.3.0,<2026.4.0; python_version < '3.14'",
113+
"pyarrow>=23.0.1,<24; python_version >= '3.14'",
114+
"pyjwt[crypto]>=2.12.0,<3",
115+
"python-dateutil>=2.9.0.post0,<3",
116+
"requests>=2.33.0,<3",
117+
"requests-oauthlib>=2.0.0,<3",
118+
"s5cmd>=0.3.3,<1",
119+
"semver>=3.0.4,<4",
120+
"shapely>=2.1.2,<3",
121+
"tenacity>=9.1.2,<10",
122+
"tqdm>=4.67.1,<5",
123+
"truststore>=0.10.4,<1",
124+
"urllib3>=2.6.3,<3",
125+
"wsidicom>=0.28.1,<1",
126+
"fastmcp>=3.2.0,<4",
127+
# Transitive overrides
128+
"rfc3987; sys_platform == 'never'",
129+
"h11>=0.16.0",
130+
"tornado>=6.5.5",
131+
"urllib3>=2.5.0",
132+
"pillow>=12.2.0",
133+
"aiohttp>=3.13.4",
134+
"starlette>=1.0.1",
135+
"lxml>=6.1.0",
136+
"filelock>=3.20.3",
137+
"marshmallow>=3.26.2",
138+
"pygments>=2.20.0",
139+
"cryptography>=46.0.7",
140+
"pydicom>=3.0.2",
141+
"pyasn1>=0.6.3",
142+
"lxml-html-clean>=0.4.4",
143+
"python-multipart>=0.0.26",
144+
"protobuf>=6.33.5",
145+
]
146+
147+
[project.optional-dependencies]
148+
pyinstaller = ["pyinstaller>=6.14.0,<7"]
149+
jupyter = [
150+
"jupyter>=1.1.1,<2",
151+
"jupyter-core>=5.8.1",
152+
"jupyterlab>=4.4.9",
153+
"nbconvert>=7.17.1",
154+
]
155+
marimo = [
156+
"cloudpathlib>=0.23.0,<1",
157+
"ipython>=9.8.0,<10",
158+
"marimo>=0.23.0,<1",
159+
"matplotlib>=3.10.7,<4",
160+
"shapely>=2.1.0,<3",
161+
]
162+
qupath = []
163+
164+
[project.scripts]
165+
aignostics-sdk = "aignostics_sdk.cli:cli"
166+
167+
[build-system]
168+
requires = ["hatchling==1.29.0"]
169+
build-backend = "hatchling.build"
170+
171+
[tool.hatch.build]
172+
include = ["src/*"]
173+
# TODO(Phase 5): Bundle codegen/out/aignx into wheel. Hatchling does not support
174+
# paths outside the project root (../../codegen/out/*). Options: symlink, copy
175+
# via a build hook, or use a hatch plugin. Deferred to the codegen migration phase.
176+
177+
[tool.hatch.build.targets.wheel]
178+
packages = ["src/aignostics_sdk"]
179+
180+
[tool.hatch.metadata]
181+
allow-direct-references = true
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
"""Package stub — source migrated in Phase 2."""

packages/aignostics/pyproject.toml

Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
[project]
2+
name = "aignostics"
3+
version = "1.4.0"
4+
description = "🔬 Python SDK providing access to the Aignostics Platform. Includes Aignostics Launchpad (Desktop Application), Aignostics CLI (Command-Line Interface), example notebooks, and Aignostics Client Library."
5+
readme = "../../README.md"
6+
authors = [
7+
{ name = "Helmut Hoffer von Ankershoffen", email = "helmut@aignostics.com" },
8+
{ name = "Andreas Kunft", email = "andreas@aignostics.com" },
9+
]
10+
license = { file = "../../LICENSE" }
11+
12+
keywords = [
13+
"aignostics",
14+
"atlas",
15+
"whole-slide-imaging",
16+
"machine-learning",
17+
"digital-pathology",
18+
"medical-imaging",
19+
"qupath",
20+
"dicom",
21+
"pydicom",
22+
"openslide",
23+
"image-data-commons",
24+
"act",
25+
"codecov",
26+
"copier",
27+
"cyclonedx",
28+
"devcontainer",
29+
"detect-secrets",
30+
"docker",
31+
"git-cliff",
32+
"jupyter",
33+
"marimo",
34+
"mypy",
35+
"nox",
36+
"nicegui",
37+
"oe-python-template",
38+
"pip-audit",
39+
"pip-licenses",
40+
"pre-commit",
41+
"pydantic",
42+
"pytest",
43+
"python",
44+
"pypi",
45+
"readthedocs",
46+
"ruff",
47+
"sonarqube",
48+
"sonarcloud",
49+
"sphinx",
50+
"typer",
51+
"uv",
52+
]
53+
54+
classifiers = [
55+
"Development Status :: 3 - Alpha",
56+
"Intended Audience :: Developers",
57+
"Intended Audience :: End Users/Desktop",
58+
"Programming Language :: Python",
59+
"Programming Language :: Python :: 3",
60+
"Programming Language :: Python :: 3.11",
61+
"Programming Language :: Python :: 3.12",
62+
"Programming Language :: Python :: 3.13",
63+
"Programming Language :: Python :: 3.14",
64+
"License :: OSI Approved :: MIT License",
65+
"Operating System :: MacOS :: MacOS X",
66+
"Operating System :: POSIX :: Linux",
67+
"Operating System :: Microsoft :: Windows",
68+
"Framework :: Pydantic",
69+
"Framework :: Pytest",
70+
"Typing :: Typed",
71+
"Natural Language :: English",
72+
]
73+
74+
# WARNING: The upper bound of requires-python is *not* respected by uvx
75+
requires-python = ">=3.11, <3.15"
76+
77+
dependencies = [
78+
"aignostics-sdk==1.4.0",
79+
# Heavy deps will be moved here from aignostics-sdk in Phase 5
80+
]
81+
82+
[project.optional-dependencies]
83+
pyinstaller = ["pyinstaller>=6.14.0,<7"]
84+
jupyter = [
85+
"jupyter>=1.1.1,<2",
86+
"jupyter-core>=5.8.1",
87+
"jupyterlab>=4.4.9",
88+
"nbconvert>=7.17.1",
89+
]
90+
marimo = [
91+
"cloudpathlib>=0.23.0,<1",
92+
"ipython>=9.8.0,<10",
93+
"marimo>=0.23.0,<1",
94+
"matplotlib>=3.10.7,<4",
95+
"shapely>=2.1.0,<3",
96+
]
97+
qupath = []
98+
99+
[project.scripts]
100+
aignostics = "aignostics.cli:cli"
101+
102+
[project.urls]
103+
Homepage = "https://aignostics.readthedocs.io/en/latest/"
104+
Documentation = "https://aignostics.readthedocs.io/en/latest/"
105+
Source = "https://github.com/aignostics/python-sdk"
106+
Changelog = "https://github.com/aignostics/python-sdk/releases"
107+
Issues = "https://github.com/aignostics/python-sdk/issues"
108+
109+
[build-system]
110+
requires = ["hatchling==1.29.0"]
111+
build-backend = "hatchling.build"
112+
113+
[tool.hatch.build]
114+
include = ["src/*"]
115+
116+
[tool.hatch.build.targets.wheel]
117+
packages = ["src/aignostics"]
118+
119+
[tool.hatch.metadata]
120+
allow-direct-references = true
121+
122+
[tool.uv.sources]
123+
aignostics-sdk = { workspace = true }
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
"""Package stub — source migrated in Phase 2."""

0 commit comments

Comments
 (0)