Skip to content

connector: add Tableau ingestor (BI / analytics) #1571

Description

@KaifAhmad1

Description

Add a Tableau connector (BI / analytics) to semantica/ingest/.

Why: Lets Semantica see which datasets and fields the business actually consumes downstream, not just what exists upstream — closes the loop from source data to reporting semantics.

Scope

Pull workbook/datasource/field metadata via the Tableau REST API (tableauserverclient). Metadata only for phase 1, not full extract data.

Follow the existing connector pattern (see semantica/ingest/sap_ingestor.py, snowflake_ingestor.py, or salesforce_ingestor.py for reference):

  • semantica/ingest/tableau_ingestor.py — a *Data result dataclass, a *Connector (auth + client), and a *Ingestor exposing export_as_documents so output plugs directly into GraphBuilder.
  • Register the three classes as lazy imports in semantica/ingest/__init__.py (see the existing _LAZY_IMPORTS-style entries for SAP/Snowflake/Salesforce) — importing semantica.ingest must not import this connector's SDK eagerly.
  • docs/integrations/tableau.md — usage doc, following docs/integrations/salesforce.md / docs/integrations/snowflake.md as a template. Add it to docs/docs.json navigation.
  • tests/test_tableau_ingestor.py — unit tests with the client/SDK mocked, matching tests/test_sap_ingestor.py / tests/ingest/test_sap_ingestor.py.
  • Any outbound HTTP call must go through request_with_ssrf_guard (see semantica/ingest/sap_ingestor.py) if this connector talks to a user-supplied endpoint.

Keep core lightweight — optional dependency required

This connector's SDK must not be a core dependency. Add it to pyproject.toml under [project.optional-dependencies]:

ingest-tableau = ["tableauserverclient>=0.25"]

and raise a clear ImportError (with the pip install "semantica[ingest-tableau]" hint) if the connector is used without the extra installed — see how db-salesforce / ingest-sap do this today in semantica/ingest/__init__.py.

Acceptance Criteria

  • pip install semantica (core, no extras) still works and does not pull in tableauserverclient
  • pip install "semantica[ingest-tableau]" installs the connector's dependency
  • Connector follows the *Data / *Connector / *Ingestor shape and export_as_documents output contract used by existing connectors
  • Docs page added and linked in docs/docs.json
  • Unit tests with the external client mocked (no live-service calls in CI)

help wanted — open to any contributor. Comment here if you'd like to pick it up and a maintainer will assign it.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

help wantedExtra attention is neededintegrationIntegrating an external database, framework, or SDK

Type

No type

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions