Skip to content

Commit d88e6c9

Browse files
fix(tableau): fixes wrong argument when reauthenticating (#12216)
1 parent 4d990b0 commit d88e6c9

File tree

2 files changed

+33
-25
lines changed

2 files changed

+33
-25
lines changed

metadata-ingestion/src/datahub/ingestion/source/tableau/tableau.py

+29-19
Original file line numberDiff line numberDiff line change
@@ -621,6 +621,12 @@ def update_table(
621621
self.parsed_columns = parsed_columns
622622

623623

624+
@dataclass
625+
class SiteIdContentUrl:
626+
site_id: str
627+
site_content_url: str
628+
629+
624630
class TableauSourceReport(StaleEntityRemovalSourceReport):
625631
get_all_datasources_query_failed: bool = False
626632
num_get_datasource_query_failures: int = 0
@@ -773,7 +779,6 @@ def get_workunits_internal(self) -> Iterable[MetadataWorkUnit]:
773779
config=self.config,
774780
ctx=self.ctx,
775781
site=site,
776-
site_id=site.id,
777782
report=self.report,
778783
server=self.server,
779784
platform=self.platform,
@@ -792,8 +797,11 @@ def get_workunits_internal(self) -> Iterable[MetadataWorkUnit]:
792797
site_source = TableauSiteSource(
793798
config=self.config,
794799
ctx=self.ctx,
795-
site=site,
796-
site_id=self.server.site_id,
800+
site=site
801+
if site
802+
else SiteIdContentUrl(
803+
site_id=self.server.site_id, site_content_url=self.config.site
804+
),
797805
report=self.report,
798806
server=self.server,
799807
platform=self.platform,
@@ -826,8 +834,7 @@ def __init__(
826834
self,
827835
config: TableauConfig,
828836
ctx: PipelineContext,
829-
site: Optional[SiteItem],
830-
site_id: Optional[str],
837+
site: Union[SiteItem, SiteIdContentUrl],
831838
report: TableauSourceReport,
832839
server: Server,
833840
platform: str,
@@ -838,13 +845,18 @@ def __init__(
838845
self.ctx: PipelineContext = ctx
839846
self.platform = platform
840847

841-
self.site: Optional[SiteItem] = site
842-
if site_id is not None:
843-
self.site_id: str = site_id
848+
self.site: Optional[SiteItem] = None
849+
if isinstance(site, SiteItem):
850+
self.site = site
851+
assert site.id is not None, "Site ID is required"
852+
self.site_id = site.id
853+
self.site_content_url = site.content_url
854+
elif isinstance(site, SiteIdContentUrl):
855+
self.site = None
856+
self.site_id = site.site_id
857+
self.site_content_url = site.site_content_url
844858
else:
845-
assert self.site is not None, "site or site_id is required"
846-
assert self.site.id is not None, "site_id is required when site is provided"
847-
self.site_id = self.site.id
859+
raise AssertionError("site or site id+content_url pair is required")
848860

849861
self.database_tables: Dict[str, DatabaseTable] = {}
850862
self.tableau_stat_registry: Dict[str, UsageStat] = {}
@@ -898,16 +910,14 @@ def dataset_browse_prefix(self) -> str:
898910
# datasets also have the env in the browse path
899911
return f"/{self.config.env.lower()}{self.no_env_browse_prefix}"
900912

901-
def _re_authenticate(self):
913+
def _re_authenticate(self) -> None:
914+
self.report.info(
915+
message="Re-authenticating to Tableau",
916+
context=f"site='{self.site_content_url}'",
917+
)
902918
# Sign-in again may not be enough because Tableau sometimes caches invalid sessions
903919
# so we need to recreate the Tableau Server object
904-
self.server = self.config.make_tableau_client(self.site_id)
905-
906-
@property
907-
def site_content_url(self) -> Optional[str]:
908-
if self.site and self.site.content_url:
909-
return self.site.content_url
910-
return None
920+
self.server = self.config.make_tableau_client(self.site_content_url)
911921

912922
def _populate_usage_stat_registry(self) -> None:
913923
if self.server is None:

metadata-ingestion/tests/integration/tableau/test_tableau_ingest.py

+4-6
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
from datahub.ingestion.run.pipeline import Pipeline, PipelineContext
2727
from datahub.ingestion.source.tableau import tableau_constant as c
2828
from datahub.ingestion.source.tableau.tableau import (
29+
SiteIdContentUrl,
2930
TableauConfig,
3031
TableauProject,
3132
TableauSiteSource,
@@ -1008,8 +1009,7 @@ def check_lineage_metadata(
10081009
config=config,
10091010
ctx=context,
10101011
platform="tableau",
1011-
site=SiteItem(name="Site 1", content_url="site1"),
1012-
site_id="site1",
1012+
site=SiteIdContentUrl(site_id="id1", site_content_url="site1"),
10131013
report=TableauSourceReport(),
10141014
server=Server("https://test-tableau-server.com"),
10151015
)
@@ -1313,8 +1313,7 @@ def test_permission_warning(pytestconfig, tmp_path, mock_datahub_graph):
13131313
platform="tableau",
13141314
config=mock.MagicMock(),
13151315
ctx=mock.MagicMock(),
1316-
site=mock.MagicMock(),
1317-
site_id=None,
1316+
site=mock.MagicMock(spec=SiteItem, id="Site1", content_url="site1"),
13181317
server=mock_sdk.return_value,
13191318
report=reporter,
13201319
)
@@ -1371,8 +1370,7 @@ def test_extract_project_hierarchy(extract_project_hierarchy, allowed_projects):
13711370
config=config,
13721371
ctx=context,
13731372
platform="tableau",
1374-
site=SiteItem(name="Site 1", content_url="site1"),
1375-
site_id="site1",
1373+
site=mock.MagicMock(spec=SiteItem, id="Site1", content_url="site1"),
13761374
report=TableauSourceReport(),
13771375
server=Server("https://test-tableau-server.com"),
13781376
)

0 commit comments

Comments
 (0)