databrickslabs / databrickslabs/ontos

[Feature]: Marketplace Integration: Foundation + Provider Status Check

Open
#166 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

type/feature
Dominant language
Python
Stars
212
Forks
71
Avg merge
4d 10h
Merged PRs (30d)
43

Description

Parent PRD

#165

What to build

The foundational vertical slice for the Databricks Marketplace integration. This establishes the data layer, feature gating, and the simplest end-to-end path: checking whether the workspace is configured as a Marketplace provider and conditionally showing marketplace UI.

End-to-end behavior:

  • New marketplace_listings SQLAlchemy model and Alembic migration
  • Pydantic API models (MarketplaceListingRead, MarketplaceListingStatus enum, MarketplaceProviderStatus)
  • MarketplaceListingsRepository with CRUD + query methods (get_by_output_port, get_by_product, get_active_listings, get_by_status)
  • MarketplaceManager skeleton with check_provider_status() (calls ws.provider_providers.list()) and check_marketplace_available() (auto-detect logic)
  • Route GET /api/marketplace/status returning provider profile status + feature availability
  • MARKETPLACE_ENABLED setting in config.py (None = auto-detect, True = force on, False = force off)
  • MARKETPLACE_INTEGRATION feature definition in features.py
  • Manager singleton initialized in startup_tasks.py
  • Frontend: fetch marketplace status on product detail view load, conditionally render a placeholder "Marketplace" section header (content filled by later slices)
  • TypeScript types for MarketplaceListing, MarketplaceListingStatus, MarketplaceProviderStatus

Acceptance criteria

  • marketplace_listings table exists with all columns (id, product_id, output_port_id, share_name, listing_id, listing_status, listing_metadata_overrides, error_message, published_at/by, delisted_at/by, last_synced_at, created_at, updated_at)
  • Alembic migration creates the table with proper FKs and indexes
  • GET /api/marketplace/status returns provider profile status (configured / not_configured / error)
  • Feature flag auto-detection works: marketplace UI appears when provider is configured, hidden when not
  • Admin override works: MARKETPLACE_ENABLED=false hides marketplace even when provider is configured
  • Product detail view conditionally shows/hides the Marketplace section based on feature availability
  • MarketplaceManager is properly initialized as singleton in app.state during startup

Blocked by

None - can start immediately

User stories addressed

  • User story 14: Auto-detect workspace marketplace capability
  • User story 15: Hide marketplace UI when feature is disabled/unavailable
  • User story 22: Provider profile status visible in marketplace panel

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with config.py, features.py, startup_tasks.py, the GET /api/marketplace/status route, and the product detail view. Trace the requested models, repository, manager, migration, feature flag, and TypeScript types across those entry points. Done means the table and API exist, provider and override detection work, the manager is initialized, and the Marketplace section is shown or hidden correctly.

Written by the indexing model from the issue text.

Assessment

Tech stack
python, sqlalchemy, typescript
Domain
api, backend, database, frontend, full-stack
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.