Repository navigation
Support single-file plugins in online and offline catalogs #419
Description
Summary
Allow DataLab Desktop's online and offline plugin catalogs to distribute historical single-file datalab_*.py plugins alongside wheel distributions, without requiring authors to turn them into packaging projects.
Documentation first
Clarify three independent concepts before extending the code:
- Source organization: a single module or a Python package/project.
- Distribution: directly loaded source, an installed
.pymodule, or a wheel. - Functional capabilities: processing, input/output, visualization and applications.
Both source forms use the same plugin API. A wheel can contain a single module; the generated layered project is not an API requirement. Update both English documentation and French translations, including the self-contained offline PDF guide.
Expected behavior
- Support mixed local folders, explicit
catalog.jsonentries and mirrored online catalogs containing modules and wheels. - Preserve existing wheels, their dependency management, source priorities and withdrawal policies.
- Accept unchanged historical files. Inspect syntax and statically available metadata without importing or executing the script; explicit catalog metadata supplies information that cannot be determined statically.
- Track unversioned local scripts by SHA-256, without inventing versions. An unchanged artifact is already installed; a different revision requires explicit replacement.
- Recognize modules previously installed from a file, persist known catalog/version information compatibly, and support install, update, reload and uninstall with consent and collision checks.
- Modules use only already available libraries: no additional dependency installation or implicit package-index lookup for this format.
- Extend public catalog validation, GitHub release-asset selection, mirrored downloads and the website. Published module releases have an explicit catalog version and accepted license.
Acceptance criteria
- Catalog inspection and publication never execute plugin code.
- Complete local catalogs install with no network access in Python and standalone Desktop editions.
- Generated, historical, unversioned and dynamically described scripts have predictable behavior.
- Invalid syntax, unsafe paths, excessive sizes, digest mismatches, collisions and failed writes are surfaced without activating partial replacements.
- English/French documentation clearly explains both forms and their installation/update workflows.
Delivery
Implement on a dedicated branch based on DataLab develop, independently of experimental data integration. Open a Desktop PR targeting develop and a linked companion PR in DataLab-Platform/plugins targeting main. DataLab-Web, per-plugin environments, releases and publication of new example plugins are out of scope.
Activity
PierreRaybaut commentedon Oct 23, 2026
Implementation is ready for review in #420 (Desktop, targeting
develop) and DataLab-Platform/plugins#4 (public catalog, targetingmain). Both use dedicatedfeature/single-file-plugin-catalogbranches. Documentation clarification was committed before the implementation, then updated with the final English/French workflows. No automatic merge, release or production plugin publication has been performed.PierreRaybaut commentedon Oct 23, 2026
Both implementations are ready for review: #420 targets
develop, and DataLab-Platform/plugins#4 targetsmain. Desktop checks passed on Python 3.9 and 3.14 with PyQt5 and PyQt6; the catalog CI is now green after fixing optional-client detection for the older Qt-dependent host. Local validation includes the plugin regression suite, 38 catalog tests, real Python/standalone loading of historical and generated scripts, and English/French documentation sources. PDF regeneration was intentionally not required. Neither PR has been merged.