Skip to content

feat(packaging): migrate source into workspace package directories [PYSDK-135] - #656

Closed
ari-nz wants to merge 1 commit into
feat/PYSDK-134/workspace-scaffoldingfrom
feat/PYSDK-135/source-migration
Closed

feat(packaging): migrate source into workspace package directories [PYSDK-135]#656
ari-nz wants to merge 1 commit into
feat/PYSDK-134/workspace-scaffoldingfrom
feat/PYSDK-135/source-migration

Conversation

@ari-nz

@ari-nzari-nz commented May 28, 2026

Copy link
Copy Markdown
Collaborator

Release Train — PYSDK-133

Verify wiring on the integration branch first: #661 (draft, targets main)

StepPRJiraPhaseNotes
1#653PYSDK-134Workspace scaffoldingMerge first — gates everything below
2a#656PYSDK-135Source migrationAfter #653
2b#655PYSDK-138Dependency splitAfter #653, parallel with 2a
2c#654PYSDK-139Tooling updatesAfter #653, parallel with 2a
3#657PYSDK-136Import rewriteAfter #656
4a#658PYSDK-137Slim CLIAfter #657
4b#659PYSDK-141TestsAfter #657, parallel with 4a
#651PYSDK-140CI/CD pipelineIndependent — merge any time
#652PYSDK-142Docs & migrationIndependent — merge any time

Retargeting: each PR currently targets its predecessor branch. After the predecessor merges into feat/PYSDK-133/python-sdk-slim, retarget this PR to feat/PYSDK-133/python-sdk-slim before merging it.


This PR — Step 2a: Merge after #653 (workspace scaffolding). Retarget to feat/PYSDK-133/python-sdk-slim first. #657 (import rewrite) depends on this.

Summary

Physically moves all source files from src/aignostics/ into their new workspace package homes. Implements PYSDK-135 (Phase 2 of the aignostics-sdk slim-package split).

Note: imports are intentionally broken after this PR. Import rewrites (aignostics.*aignostics_sdk.* for slim-module consumers) are deferred to PYSDK-136.

What moved where

packages/aignostics-sdk/src/aignostics_sdk/ (slim package)

  • src/aignostics/platform/packages/aignostics-sdk/src/aignostics_sdk/platform/
  • src/aignostics/utils/packages/aignostics-sdk/src/aignostics_sdk/utils/
  • INTERNAL_ORGS constant extracted from src/aignostics/constants.pypackages/aignostics-sdk/src/aignostics_sdk/constants.py
  • packages/aignostics-sdk/src/aignostics_sdk/__init__.py stub replaced with real module docstring

packages/aignostics/src/aignostics/ (full package)

  • src/aignostics/application/packages/aignostics/src/aignostics/application/
  • src/aignostics/wsi/packages/aignostics/src/aignostics/wsi/
  • src/aignostics/dataset/packages/aignostics/src/aignostics/dataset/
  • src/aignostics/bucket/packages/aignostics/src/aignostics/bucket/
  • src/aignostics/qupath/packages/aignostics/src/aignostics/qupath/
  • src/aignostics/notebook/packages/aignostics/src/aignostics/notebook/
  • src/aignostics/gui/packages/aignostics/src/aignostics/gui/
  • src/aignostics/system/packages/aignostics/src/aignostics/system/
  • src/aignostics/third_party/packages/aignostics/src/aignostics/third_party/
  • src/aignostics/cli.pypackages/aignostics/src/aignostics/cli.py
  • src/aignostics/constants.py (full) → packages/aignostics/src/aignostics/constants.py
  • src/aignostics/__init__.pypackages/aignostics/src/aignostics/__init__.py (replaces Phase 1 stub)

Codegen bundling fix

PYSDK-134 left a TODO about bundling codegen/out/aignx into the slim wheel (hatchling cannot reference paths outside the project root). Fixed by:

  1. Created symlink packages/aignostics-sdk/src/aignx../../../codegen/out/aignx
  2. Updated packages/aignostics-sdk/pyproject.toml: packages = ["src/aignostics_sdk", "src/aignx"]

Validation

  • uv sync --all-extras completes successfully
  • find src/ -name "*.py" | grep -v __pycache__ | grep -v codegen returns only src/aignostics.py (the PyInstaller launcher)
  • Symlink resolves: ls packages/aignostics-sdk/src/aignx/codegen/ shows codegen API files

Jira

PYSDK-135

Test plan

  • Verify uv sync --all-extras succeeds
  • Verify ls packages/aignostics-sdk/src/aignostics_sdk/ shows platform/, utils/, constants.py, __init__.py
  • Verify ls packages/aignostics/src/aignostics/ shows all domain modules
  • Verify ls packages/aignostics-sdk/src/aignx/codegen/ resolves through the symlink
  • Verify no Python source files remain in old src/aignostics/ location (except src/aignostics.py PyInstaller launcher)

- platform/ and utils/ → packages/aignostics-sdk/src/aignostics_sdk/
- application/, wsi/, dataset/, bucket/, qupath/, notebook/, gui/, system/, third_party/, cli.py → packages/aignostics/src/aignostics/
- constants.py split: INTERNAL_ORGS → aignostics-sdk/constants.py; remaining constants → aignostics/constants.py
- Created symlink packages/aignostics-sdk/src/aignx → codegen/out/aignx to bundle codegen into slim wheel
- Updated packages/aignostics-sdk/pyproject.toml: packages = ["src/aignostics_sdk", "src/aignx"]
- Updated packages/aignostics-sdk/src/aignostics_sdk/__init__.py with real module docstring
- Moved packages/aignostics/src/aignostics/__init__.py from src/aignostics/ (preserving full content)
Note: imports are intentionally broken at this stage. Import rewrites
(aignostics.* → aignostics_sdk.* for slim-module consumers) are deferred to PYSDK-136.
CopilotAI review requested due to automatic review settings May 28, 2026 11:04
@ari-nz
ari-nz requested a review from a team as a code ownerMay 28, 2026 11:04
@ari-nzari-nz added the skip:test:long_running Skip long-running tests (≥5min) label May 28, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR advances the workspace package split by relocating source from the legacy src/aignostics/ layout into the new full aignostics and slim aignostics-sdk package directories. It also updates the slim package wheel configuration to include the generated aignx client package.

Changes:

  • Moves full-package domain modules, GUI assets, scripts, and constants into packages/aignostics/src/aignostics/.
  • Moves platform/client utilities into packages/aignostics-sdk/src/aignostics_sdk/.
  • Updates aignostics-sdk wheel packaging to include both aignostics_sdk and aignx.

Reviewed changes

Copilot reviewed 6 out of 145 changed files in this pull request and generated 1 comment.

Show a summary per file
FileDescription
src/aignostics/__init__.pyRemoves legacy package initializer from old source tree.
packages/aignostics/src/aignostics/__init__.pyRestores full package boot initializer in new package location.
packages/aignostics/src/aignostics/constants.pyAdds full-package constants in new location.
packages/aignostics/src/aignostics/cli.pyAdds full-package CLI entry module.
packages/aignostics/src/aignostics/application/__init__.pyAdds application package exports.
packages/aignostics/src/aignostics/application/_models.pyAdds application progress models.
packages/aignostics/src/aignostics/application/_settings.pyAdds application settings.
packages/aignostics/src/aignostics/application/_gui/_page_builder.pyAdds application GUI route registration.
packages/aignostics/src/aignostics/application/_gui/_page_index.pyAdds application homepage GUI.
packages/aignostics/src/aignostics/application/_gui/_utils.pyAdds application GUI display helpers.
packages/aignostics/src/aignostics/application/_gui/assets/*Moves application GUI image and animation assets.
packages/aignostics/src/aignostics/bucket/__init__.pyAdds bucket package exports.
packages/aignostics/src/aignostics/bucket/_settings.pyAdds bucket settings.
packages/aignostics/src/aignostics/bucket/assets/Google-Cloud-logo.pngMoves bucket GUI asset.
packages/aignostics/src/aignostics/dataset/__init__.pyAdds dataset package exports.
packages/aignostics/src/aignostics/gui/__init__.pyAdds GUI package exports.
packages/aignostics/src/aignostics/gui/_error.pyAdds GUI error page handling.
packages/aignostics/src/aignostics/gui/_theme.pyAdds GUI theme setup.
packages/aignostics/src/aignostics/gui/CLAUDE.mdMoves GUI module guidance.
packages/aignostics/src/aignostics/notebook/__init__.pyAdds notebook package exports.
packages/aignostics/src/aignostics/notebook/_gui.pyAdds notebook GUI page.
packages/aignostics/src/aignostics/notebook/_notebook.pyAdds bundled Marimo notebook.
packages/aignostics/src/aignostics/qupath/__init__.pyAdds QuPath package exports.
packages/aignostics/src/aignostics/qupath/_gui.pyAdds QuPath GUI page.
packages/aignostics/src/aignostics/qupath/_settings.pyAdds QuPath settings.
packages/aignostics/src/aignostics/qupath/assets/*Moves QuPath GUI animation assets.
packages/aignostics/src/aignostics/qupath/scripts/*.groovyMoves QuPath helper scripts.
packages/aignostics/src/aignostics/system/__init__.pyAdds system package exports.
packages/aignostics/src/aignostics/system/_exceptions.pyAdds system exception type.
packages/aignostics/src/aignostics/system/_gui.pyAdds system GUI page.
packages/aignostics/src/aignostics/system/_settings.pyAdds system settings.
packages/aignostics/src/aignostics/system/assets/system.lottieMoves system GUI asset.
packages/aignostics/src/aignostics/third_party/showinfm/**Moves vendored file-manager helper package.
packages/aignostics/src/aignostics/wsi/__init__.pyAdds WSI package exports.
packages/aignostics/src/aignostics/wsi/_cli.pyAdds WSI CLI commands.
packages/aignostics/src/aignostics/wsi/_gui.pyAdds WSI thumbnail/TIFF routes.
packages/aignostics/src/aignostics/wsi/_service.pyAdds WSI service implementation.
packages/aignostics-sdk/pyproject.tomlUpdates slim wheel packages to include aignx.
packages/aignostics-sdk/src/aignostics_sdk/__init__.pyUpdates slim package initializer.
packages/aignostics-sdk/src/aignostics_sdk/constants.pyAdds slim package constants.
packages/aignostics-sdk/src/aignostics_sdk/platform/__init__.pyAdds platform package exports.
packages/aignostics-sdk/src/aignostics_sdk/platform/_api.pyAdds authenticated API wrapper.
packages/aignostics-sdk/src/aignostics_sdk/platform/_cli.pyAdds platform CLI commands.
packages/aignostics-sdk/src/aignostics_sdk/platform/_constants.pyAdds platform constants.
packages/aignostics-sdk/src/aignostics_sdk/platform/_messages.pyAdds platform messages.
packages/aignostics-sdk/src/aignostics_sdk/platform/_operation_cache.pyAdds platform operation cache utilities.
packages/aignostics-sdk/src/aignostics_sdk/platform/_utils.pyAdds platform utility functions.
packages/aignostics-sdk/src/aignostics_sdk/platform/resources/__init__.pyAdds platform resources package marker.
packages/aignostics-sdk/src/aignostics_sdk/platform/resources/utils.pyAdds platform pagination helper.
packages/aignostics-sdk/src/aignostics_sdk/utils/__init__.pyAdds slim utility package exports.
packages/aignostics-sdk/src/aignostics_sdk/utils/_cli.pyAdds CLI utility helpers.
packages/aignostics-sdk/src/aignostics_sdk/utils/_console.pyAdds shared console setup.
packages/aignostics-sdk/src/aignostics_sdk/utils/_constants.pyAdds runtime constants.
packages/aignostics-sdk/src/aignostics_sdk/utils/_di.pyAdds discovery helpers.
packages/aignostics-sdk/src/aignostics_sdk/utils/_fs.pyAdds filesystem helpers.
packages/aignostics-sdk/src/aignostics_sdk/utils/_health.pyAdds health models.
packages/aignostics-sdk/src/aignostics_sdk/utils/_log.pyAdds logging setup.
packages/aignostics-sdk/src/aignostics_sdk/utils/_mcp.pyAdds MCP helpers.
packages/aignostics-sdk/src/aignostics_sdk/utils/_nav.pyAdds GUI navigation helpers.
packages/aignostics-sdk/src/aignostics_sdk/utils/_notebook.pyAdds notebook server helpers.
packages/aignostics-sdk/src/aignostics_sdk/utils/_process.pyAdds process helpers.
packages/aignostics-sdk/src/aignostics_sdk/utils/_service.pyAdds base service class.
packages/aignostics-sdk/src/aignostics_sdk/utils/_settings.pyAdds settings utilities.
packages/aignostics-sdk/src/aignostics_sdk/utils/_user_agent.pyAdds user-agent helper.
packages/aignostics-sdk/src/aignostics_sdk/utils/boot.pyAdds boot sequence.


[tool.hatch.build.targets.wheel]
packages = ["src/aignostics_sdk"]
packages = ["src/aignostics_sdk", "src/aignx"]
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

skip:test:long_runningSkip long-running tests (≥5min)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@ari-nz