feat: virtual PyPI repos can merge local + remote members #51

Merged
benvin merged 1 commits from benvin/pypi-virtual-local into master 2026-06-23 22:20:05 +10:00
Owner

Summary

  • Virtual engine detects local members and generates indexes in-memory
  • MemberIndex.RepoType drives correct URL prefix in merged output
  • PyPI merger rewrites links to /api/v1/local/ or /api/v1/remote/ appropriately
  • Includes local PyPI support (cherry-picked from #50)

Test plan

  • Upload wheel to local PyPI → install from direct local URL
  • Create virtual with local + remote → install from virtual URL
  • Both paths produce correct absolute download URLs
## Summary - Virtual engine detects local members and generates indexes in-memory - MemberIndex.RepoType drives correct URL prefix in merged output - PyPI merger rewrites links to /api/v1/local/ or /api/v1/remote/ appropriately - Includes local PyPI support (cherry-picked from #50) ## Test plan - [x] Upload wheel to local PyPI → install from direct local URL - [x] Create virtual with local + remote → install from virtual URL - [x] Both paths produce correct absolute download URLs
unkinben added 1 commit 2026-06-23 22:14:47 +10:00
feat: virtual PyPI repos can merge local + remote members
ci/woodpecker/pr/pre-commit Pipeline was successful
ci/woodpecker/pr/build Pipeline was successful
ci/woodpecker/pr/test Pipeline was successful
79bf0de110
The virtual engine now detects local members (repo_type=local) and
generates their package index in-memory instead of trying to fetch
from a non-existent upstream.

- MemberIndex gains RepoType field so mergers use correct URL prefix
  (/api/v1/local/ vs /api/v1/remote/)
- Virtual engine accepts a LocalIndexGenerator interface for producing
  local PyPI indexes
- LocalHandler implements GeneratePyPIPackageHTML for reuse by both
  the direct serving path and the virtual merger
- Includes local PyPI upload support (cherry-picked from benvin/local-pypi)

Tested e2e: local wheel upload + virtual merge + uv pip install from
both direct local and virtual URLs
unkinben force-pushed benvin/pypi-virtual-local from b286b19eb4 to 79bf0de110 2026-06-23 22:14:47 +10:00 Compare
benvin merged commit 7b13644421 into master 2026-06-23 22:20:05 +10:00
benvin deleted branch benvin/pypi-virtual-local 2026-06-23 22:20:05 +10:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: unkin/artifactapi#51