This commit is contained in:
Keshav Mohta 2025-06-25 10:42:21 +05:30
commit 47f570ea1b
No known key found for this signature in database
GPG Key ID: 9481AB99C36FAE9C
3 changed files with 17 additions and 6 deletions

View File

@ -110,7 +110,7 @@ class TableauClient:
owner = self.tableau_server.users.get_by_id(owner_id) if owner_id else None owner = self.tableau_server.users.get_by_id(owner_id) if owner_id else None
if owner and owner.email: if owner and owner.email:
owner_obj = TableauOwner( owner_obj = TableauOwner(
id=owner.id, name=owner.name, email=owner.email id=str(owner.id), name=owner.name, email=owner.email
) )
self.owner_cache[owner_id] = owner_obj self.owner_cache[owner_id] = owner_obj
return owner_obj return owner_obj
@ -130,7 +130,7 @@ class TableauClient:
try: try:
charts.append( charts.append(
TableauChart( TableauChart(
id=view.id, id=str(view.id),
name=view.name, name=view.name,
tags=view.tags, tags=view.tags,
owner=self.get_tableau_owner(view.owner_id), owner=self.get_tableau_owner(view.owner_id),
@ -212,10 +212,10 @@ class TableauClient:
workbook.views workbook.views
) )
workbook = TableauDashboard( workbook = TableauDashboard(
id=workbook.id, id=str(workbook.id),
name=workbook.name, name=workbook.name,
project=TableauBaseModel( project=TableauBaseModel(
id=workbook.project_id, name=workbook.project_name id=str(workbook.project_id), name=workbook.project_name
), ),
owner=self.get_tableau_owner(workbook.owner_id), owner=self.get_tableau_owner(workbook.owner_id),
description=workbook.description, description=workbook.description,

View File

@ -253,6 +253,7 @@ class TableauSource(DashboardServiceSource):
), ),
sql=self._get_datamodel_sql_query(data_model=data_model), sql=self._get_datamodel_sql_query(data_model=data_model),
owners=self.get_owner_ref(dashboard_details=dashboard_details), owners=self.get_owner_ref(dashboard_details=dashboard_details),
project=self.get_project_name(dashboard_details=dashboard_details),
) )
yield Either(right=data_model_request) yield Either(right=data_model_request)
self.register_record_datamodel(datamodel_request=data_model_request) self.register_record_datamodel(datamodel_request=data_model_request)

View File

@ -13,6 +13,7 @@
Tableau Source Model module Tableau Source Model module
""" """
import uuid
from typing import Dict, List, Optional, Set, Union from typing import Dict, List, Optional, Set, Union
from pydantic import BaseModel, ConfigDict, Field, field_validator from pydantic import BaseModel, ConfigDict, Field, field_validator
@ -28,9 +29,18 @@ class TableauBaseModel(BaseModel):
model_config = ConfigDict(extra="allow") model_config = ConfigDict(extra="allow")
id: str # in case of personal space workbooks, the project id is returned as a UUID
id: Union[str, uuid.UUID]
name: Optional[str] = None name: Optional[str] = None
# pylint: disable=no-self-argument
@field_validator("id", mode="before")
def coerce_uuid_to_string(cls, value):
"""Ensure id is always stored as a string internally"""
if isinstance(value, uuid.UUID):
return str(value)
return value
def __hash__(self): def __hash__(self):
return hash(self.id) return hash(self.id)
@ -187,7 +197,7 @@ class TableauDashboard(TableauBaseModel):
tags: Optional[Set] = [] tags: Optional[Set] = []
webpageUrl: Optional[str] = None webpageUrl: Optional[str] = None
charts: Optional[List[TableauChart]] = None charts: Optional[List[TableauChart]] = None
dataModels: List[DataSource] = [] dataModels: Optional[List[DataSource]] = []
custom_sql_queries: Optional[List[str]] = None custom_sql_queries: Optional[List[str]] = None
user_views: Optional[int] = None user_views: Optional[int] = None