User Story
As a VO developer,
I want to register my own backend, transport or scheduler by shipping a package with an entry
point,
So that I extend interCEde without forking it — unlike DIRAC's ObjectLoader string-to-module
loading.
Feature Description
IC-ADR-001 §5:
- Three entry-point groups:
intercede.backends, intercede.transports, intercede.schedulers;
built-ins registered the same way (interCEde's own pyproject.toml).
- Lazy, typed lookup: import only the requested target;
isinstance gate against the relevant
@runtime_checkable protocol at the boundary, failing fast with a clear error.
- Data-driven resolution:
registry.backend({"type": "arc", ...}) for monolithic;
registry.backend({"transport": "ssh", "scheduler": "slurm", ...}) composes BatchBackend —
combinations never need their own registered class (N+M, not N×M).
- Enumeration for tooling ("what backends does this environment offer?") and a documented
name-collision/override precedence rule (site shadows a built-in without patching).
- Registry returns backends inside the managed-lifetime surface decided in #
(async context manager).
Definition of Done
Alternatives Considered
ObjectLoader/naming-convention loading (DIRAC) — untyped, undiscoverable, unversioned; rejected
by the ADR.
- Eager import of all entry points — slow startup, import errors in unrelated backends break
everything; lazy is required.
Related Issues
User Story
As a VO developer,
I want to register my own backend, transport or scheduler by shipping a package with an entry
point,
So that I extend interCEde without forking it — unlike DIRAC's
ObjectLoaderstring-to-moduleloading.
Feature Description
IC-ADR-001 §5:
intercede.backends,intercede.transports,intercede.schedulers;built-ins registered the same way (interCEde's own
pyproject.toml).isinstancegate against the relevant@runtime_checkableprotocol at the boundary, failing fast with a clear error.registry.backend({"type": "arc", ...})for monolithic;registry.backend({"transport": "ssh", "scheduler": "slurm", ...})composesBatchBackend—combinations never need their own registered class (N+M, not N×M).
name-collision/override precedence rule (site shadows a built-in without patching).
(async context manager).
Definition of Done
pip installfixture) provingdiscovery + override precedence
FakeBackendregistered and resolvable — the conformance suite runs viathe registry path
Alternatives Considered
ObjectLoader/naming-convention loading (DIRAC) — untyped, undiscoverable, unversioned; rejectedby the ADR.
everything; lazy is required.
Related Issues