mirror of
https://github.com/open-metadata/OpenMetadata.git
synced 2025-11-13 01:13:39 +00:00
powerbi change owner condition (#21724)
This commit is contained in:
parent
62d91fbf2e
commit
6a6180b2e3
@ -79,6 +79,8 @@ from metadata.utils.logger import ingestion_logger
|
|||||||
|
|
||||||
logger = ingestion_logger()
|
logger = ingestion_logger()
|
||||||
|
|
||||||
|
OWNER_ACCESS_RIGHTS_KEYWORDS = ["owner", "write", "admin"]
|
||||||
|
|
||||||
|
|
||||||
class PowerbiSource(DashboardServiceSource):
|
class PowerbiSource(DashboardServiceSource):
|
||||||
"""PowerBi Source Class"""
|
"""PowerBi Source Class"""
|
||||||
@ -1010,16 +1012,16 @@ class PowerbiSource(DashboardServiceSource):
|
|||||||
elif isinstance(dashboard_details, PowerBIDashboard):
|
elif isinstance(dashboard_details, PowerBIDashboard):
|
||||||
access_right = owner.dashboardUserAccessRight
|
access_right = owner.dashboardUserAccessRight
|
||||||
|
|
||||||
if owner.userType != "Member" or (
|
if owner.userType != "Member":
|
||||||
isinstance(
|
|
||||||
dashboard_details, (Dataflow, PowerBIReport, PowerBIDashboard)
|
|
||||||
)
|
|
||||||
and access_right != "Owner"
|
|
||||||
):
|
|
||||||
logger.warning(
|
logger.warning(
|
||||||
f"User is not a member and has no access to the {dashboard_details.id}: ({owner.displayName}, {owner.email})"
|
f"User is not a member of {dashboard_details.id}:"
|
||||||
|
f" ({owner.displayName}, {owner.email})"
|
||||||
)
|
)
|
||||||
continue
|
continue
|
||||||
|
if access_right and any(
|
||||||
|
keyword in access_right.lower()
|
||||||
|
for keyword in OWNER_ACCESS_RIGHTS_KEYWORDS
|
||||||
|
):
|
||||||
if owner.email:
|
if owner.email:
|
||||||
try:
|
try:
|
||||||
owner_email = EmailStr._validate(owner.email)
|
owner_email = EmailStr._validate(owner.email)
|
||||||
@ -1033,7 +1035,8 @@ class PowerbiSource(DashboardServiceSource):
|
|||||||
)
|
)
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
logger.warning(
|
logger.warning(
|
||||||
f"Could not fetch owner data with email {owner.email} in {dashboard_details.id}: {err}"
|
f"Could not process owner data with email"
|
||||||
|
f" {owner.email} in {dashboard_details.id}: {err}"
|
||||||
)
|
)
|
||||||
elif owner.displayName:
|
elif owner.displayName:
|
||||||
try:
|
try:
|
||||||
@ -1042,10 +1045,16 @@ class PowerbiSource(DashboardServiceSource):
|
|||||||
)
|
)
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
logger.warning(
|
logger.warning(
|
||||||
f"Could not process owner data with name {owner.displayName} in {dashboard_details.id}: {err}"
|
f"Could not process owner data with name"
|
||||||
|
f" {owner.displayName} in {dashboard_details.id}: {err}"
|
||||||
)
|
)
|
||||||
if owner_ref:
|
if owner_ref:
|
||||||
owner_ref_list.append(owner_ref.root[0])
|
owner_ref_list.append(owner_ref.root[0])
|
||||||
|
else:
|
||||||
|
logger.warning(
|
||||||
|
f"User does not have owner, admin or write access to"
|
||||||
|
f" {dashboard_details.id}: ({owner.displayName}, {owner.email})"
|
||||||
|
)
|
||||||
# check for last modified, configuredBy user
|
# check for last modified, configuredBy user
|
||||||
current_active_user = None
|
current_active_user = None
|
||||||
if isinstance(dashboard_details, Dataset):
|
if isinstance(dashboard_details, Dataset):
|
||||||
|
|||||||
@ -311,6 +311,32 @@ 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()
|
||||||
|
|
||||||
|
# Reset mock for invalid owners test
|
||||||
|
self.powerbi.metadata.get_reference_by_email.reset_mock()
|
||||||
|
# Test with invalid owners
|
||||||
|
dashboard_invalid_owners = PowerBIDashboard.model_validate(
|
||||||
|
{
|
||||||
|
"id": "dashboard3",
|
||||||
|
"displayName": "Test Dashboard 3",
|
||||||
|
"webUrl": "https://test.com",
|
||||||
|
"embedUrl": "https://test.com/embed",
|
||||||
|
"tiles": [],
|
||||||
|
"users": [
|
||||||
|
{
|
||||||
|
"displayName": "Kane Williams",
|
||||||
|
"emailAddress": "kane.williams@example.com",
|
||||||
|
"dashboardUserAccessRight": "Read",
|
||||||
|
"userType": "Member",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
)
|
||||||
|
owner_ref = self.powerbi.get_owner_ref(dashboard_invalid_owners)
|
||||||
|
self.assertIsNone(owner_ref)
|
||||||
|
|
||||||
|
# Verify get_reference_by_email was not called when there are no owners
|
||||||
|
self.powerbi.metadata.get_reference_by_email.assert_not_called()
|
||||||
|
|
||||||
@pytest.mark.order(3)
|
@pytest.mark.order(3)
|
||||||
def test_parse_table_info_from_source_exp(self):
|
def test_parse_table_info_from_source_exp(self):
|
||||||
table = PowerBiTable(
|
table = PowerBiTable(
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user