mirror of
https://github.com/open-metadata/OpenMetadata.git
synced 2025-09-30 11:26:23 +00:00
MINOR: PBI dataset expressions empty value fix (#21409)
(cherry picked from commit 8bbc4d8c3d7792d0d36a163f119efdccf61840e5)
This commit is contained in:
parent
e083293db7
commit
a8aa1d004f
@ -706,6 +706,12 @@ class PowerbiSource(DashboardServiceSource):
|
|||||||
if dataset and dataset.expressions:
|
if dataset and dataset.expressions:
|
||||||
# find keyword from dataset expressions
|
# find keyword from dataset expressions
|
||||||
for dexpression in dataset.expressions:
|
for dexpression in dataset.expressions:
|
||||||
|
if not dexpression.expression:
|
||||||
|
logger.debug(
|
||||||
|
f"No expression value found inside dataset"
|
||||||
|
f"({dataset.name}) expressions' name={dexpression.name}"
|
||||||
|
)
|
||||||
|
continue
|
||||||
if dexpression.name == match.group(2):
|
if dexpression.name == match.group(2):
|
||||||
pattern = r'DefaultValue="([^"]+)"'
|
pattern = r'DefaultValue="([^"]+)"'
|
||||||
kw_match = re.search(pattern, dexpression.expression)
|
kw_match = re.search(pattern, dexpression.expression)
|
||||||
@ -784,7 +790,9 @@ class PowerbiSource(DashboardServiceSource):
|
|||||||
if not isinstance(table.source, list):
|
if not isinstance(table.source, list):
|
||||||
return {}
|
return {}
|
||||||
source_expression = table.source[0].expression
|
source_expression = table.source[0].expression
|
||||||
|
if not source_expression:
|
||||||
|
logger.debug(f"No source expression found for table: {table.name}")
|
||||||
|
return {}
|
||||||
# parse snowflake source
|
# parse snowflake source
|
||||||
table_info = self._parse_snowflake_source(
|
table_info = self._parse_snowflake_source(
|
||||||
source_expression, datamodel_entity
|
source_expression, datamodel_entity
|
||||||
|
@ -143,7 +143,7 @@ class PowerBITableSource(BaseModel):
|
|||||||
PowerBI Table Source
|
PowerBI Table Source
|
||||||
"""
|
"""
|
||||||
|
|
||||||
expression: str
|
expression: Optional[str] = None
|
||||||
|
|
||||||
|
|
||||||
class PowerBiTable(BaseModel):
|
class PowerBiTable(BaseModel):
|
||||||
@ -171,7 +171,7 @@ class TablesResponse(BaseModel):
|
|||||||
|
|
||||||
class DatasetExpression(BaseModel):
|
class DatasetExpression(BaseModel):
|
||||||
name: str
|
name: str
|
||||||
expression: str
|
expression: Optional[str] = None
|
||||||
|
|
||||||
|
|
||||||
class Dataset(BaseModel):
|
class Dataset(BaseModel):
|
||||||
|
@ -15,7 +15,12 @@ from metadata.generated.schema.type.entityReference import EntityReference
|
|||||||
from metadata.generated.schema.type.entityReferenceList import EntityReferenceList
|
from metadata.generated.schema.type.entityReferenceList import EntityReferenceList
|
||||||
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
||||||
from metadata.ingestion.source.dashboard.powerbi.metadata import PowerbiSource
|
from metadata.ingestion.source.dashboard.powerbi.metadata import PowerbiSource
|
||||||
from metadata.ingestion.source.dashboard.powerbi.models import Dataset, PowerBIDashboard
|
from metadata.ingestion.source.dashboard.powerbi.models import (
|
||||||
|
Dataset,
|
||||||
|
PowerBIDashboard,
|
||||||
|
PowerBiTable,
|
||||||
|
PowerBITableSource,
|
||||||
|
)
|
||||||
|
|
||||||
MOCK_REDSHIFT_EXP = """
|
MOCK_REDSHIFT_EXP = """
|
||||||
let
|
let
|
||||||
@ -167,6 +172,19 @@ MOCK_DATASET_FROM_WORKSPACE = Dataset(
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
MOCK_DATASET_FROM_WORKSPACE_V2 = Dataset(
|
||||||
|
id="testdataset",
|
||||||
|
name="Test Dataset",
|
||||||
|
tables=[],
|
||||||
|
expressions=[
|
||||||
|
{
|
||||||
|
"name": "DB",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Schema",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
)
|
||||||
MOCK_DASHBOARD_DATA_MODEL = DashboardDataModel(
|
MOCK_DASHBOARD_DATA_MODEL = DashboardDataModel(
|
||||||
name="dummy_datamodel",
|
name="dummy_datamodel",
|
||||||
id=uuid.uuid4(),
|
id=uuid.uuid4(),
|
||||||
@ -292,3 +310,50 @@ class PowerBIUnitTest(TestCase):
|
|||||||
|
|
||||||
# Verify get_reference_by_email was not called when there are no owners
|
# Verify get_reference_by_email was not called when there are no owners
|
||||||
self.powerbi.metadata.get_reference_by_email.assert_not_called()
|
self.powerbi.metadata.get_reference_by_email.assert_not_called()
|
||||||
|
|
||||||
|
@pytest.mark.order(3)
|
||||||
|
def test_parse_table_info_from_source_exp(self):
|
||||||
|
table = PowerBiTable(
|
||||||
|
name="test_table",
|
||||||
|
source=[PowerBITableSource(expression=MOCK_REDSHIFT_EXP)],
|
||||||
|
)
|
||||||
|
result = self.powerbi._parse_table_info_from_source_exp(
|
||||||
|
table, MOCK_DASHBOARD_DATA_MODEL
|
||||||
|
)
|
||||||
|
self.assertEqual(result, EXPECTED_REDSHIFT_RESULT)
|
||||||
|
|
||||||
|
# no source expression
|
||||||
|
table = PowerBiTable(
|
||||||
|
name="test_table",
|
||||||
|
source=[PowerBITableSource(expression=None)],
|
||||||
|
)
|
||||||
|
result = self.powerbi._parse_table_info_from_source_exp(
|
||||||
|
table, MOCK_DASHBOARD_DATA_MODEL
|
||||||
|
)
|
||||||
|
self.assertEqual(result, {})
|
||||||
|
|
||||||
|
# no source
|
||||||
|
table = PowerBiTable(
|
||||||
|
name="test_table",
|
||||||
|
source=[],
|
||||||
|
)
|
||||||
|
result = self.powerbi._parse_table_info_from_source_exp(
|
||||||
|
table, MOCK_DASHBOARD_DATA_MODEL
|
||||||
|
)
|
||||||
|
self.assertEqual(result, {})
|
||||||
|
|
||||||
|
@pytest.mark.order(4)
|
||||||
|
@patch.object(
|
||||||
|
PowerbiSource,
|
||||||
|
"_fetch_dataset_from_workspace",
|
||||||
|
return_value=MOCK_DATASET_FROM_WORKSPACE_V2,
|
||||||
|
)
|
||||||
|
def test_parse_dataset_expressions(self, *_):
|
||||||
|
# test with valid snowflake source but no
|
||||||
|
# dataset expression value
|
||||||
|
result = self.powerbi._parse_snowflake_source(
|
||||||
|
MOCK_SNOWFLAKE_EXP_V2, MOCK_DASHBOARD_DATA_MODEL
|
||||||
|
)
|
||||||
|
self.assertIsNone(result["database"])
|
||||||
|
self.assertIsNone(result["schema"])
|
||||||
|
self.assertEqual(result["table"], "CUSTOMER_TABLE")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user