Skip to content

Commit 71ba51d

Browse files
committed
[tests/fix] Fixed failing cm test due to incorrect refactoring (save_replacing_cm)
1 parent 278b626 commit 71ba51d

File tree

3 files changed

+128
-2
lines changed

3 files changed

+128
-2
lines changed

pyatlan/client/aio/asset.py

Lines changed: 119 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
Type,
1111
TypeVar,
1212
Union,
13+
overload,
1314
)
1415

1516
from pydantic.v1 import StrictStr, constr
@@ -460,8 +461,8 @@ async def save_replacing_cm(
460461
query_params, request = Save.prepare_request_replacing_cm(
461462
entity=entity,
462463
replace_atlan_tags=replace_atlan_tags,
464+
client=self._async_client,
463465
)
464-
Save.validate_and_flush_entities(request.entities, self._async_client)
465466
raw_json = await self._async_client._call_api(
466467
BULK_UPDATE, query_params, request
467468
)
@@ -929,6 +930,39 @@ async def _update_asset_by_attribute(
929930
# Process response using shared logic
930931
return UpdateAssetByAttribute.process_response(raw_json, asset_type)
931932

933+
@overload
934+
async def update_certificate(
935+
self,
936+
asset_type: Type[AtlasGlossaryTerm],
937+
qualified_name: str,
938+
name: str,
939+
certificate_status: CertificateStatus,
940+
glossary_guid: str,
941+
message: Optional[str] = None,
942+
) -> Optional[AtlasGlossaryTerm]: ...
943+
944+
@overload
945+
async def update_certificate(
946+
self,
947+
asset_type: Type[AtlasGlossaryCategory],
948+
qualified_name: str,
949+
name: str,
950+
certificate_status: CertificateStatus,
951+
glossary_guid: str,
952+
message: Optional[str] = None,
953+
) -> Optional[AtlasGlossaryCategory]: ...
954+
955+
@overload
956+
async def update_certificate(
957+
self,
958+
asset_type: Type[A],
959+
qualified_name: str,
960+
name: str,
961+
certificate_status: CertificateStatus,
962+
glossary_guid: Optional[str] = None,
963+
message: Optional[str] = None,
964+
) -> Optional[A]: ...
965+
932966
async def update_certificate(
933967
self,
934968
asset_type: Type[A],
@@ -965,6 +999,33 @@ async def update_certificate(
965999
# Execute update using shared logic
9661000
return await self._update_asset_by_attribute(asset, asset_type, qualified_name)
9671001

1002+
@overload
1003+
async def remove_certificate(
1004+
self,
1005+
asset_type: Type[AtlasGlossaryTerm],
1006+
qualified_name: str,
1007+
name: str,
1008+
glossary_guid: str,
1009+
) -> Optional[AtlasGlossaryTerm]: ...
1010+
1011+
@overload
1012+
async def remove_certificate(
1013+
self,
1014+
asset_type: Type[AtlasGlossaryCategory],
1015+
qualified_name: str,
1016+
name: str,
1017+
glossary_guid: str,
1018+
) -> Optional[AtlasGlossaryCategory]: ...
1019+
1020+
@overload
1021+
async def remove_certificate(
1022+
self,
1023+
asset_type: Type[A],
1024+
qualified_name: str,
1025+
name: str,
1026+
glossary_guid: Optional[str] = None,
1027+
) -> Optional[A]: ...
1028+
9681029
async def remove_certificate(
9691030
self,
9701031
asset_type: Type[A],
@@ -994,6 +1055,36 @@ async def remove_certificate(
9941055
# Execute update using shared logic
9951056
return await self._update_asset_by_attribute(asset, asset_type, qualified_name)
9961057

1058+
@overload
1059+
async def update_announcement(
1060+
self,
1061+
asset_type: Type[AtlasGlossaryTerm],
1062+
qualified_name: str,
1063+
name: str,
1064+
announcement: Announcement,
1065+
glossary_guid: str,
1066+
) -> Optional[AtlasGlossaryTerm]: ...
1067+
1068+
@overload
1069+
async def update_announcement(
1070+
self,
1071+
asset_type: Type[AtlasGlossaryCategory],
1072+
qualified_name: str,
1073+
name: str,
1074+
announcement: Announcement,
1075+
glossary_guid: str,
1076+
) -> Optional[AtlasGlossaryCategory]: ...
1077+
1078+
@overload
1079+
async def update_announcement(
1080+
self,
1081+
asset_type: Type[A],
1082+
qualified_name: str,
1083+
name: str,
1084+
announcement: Announcement,
1085+
glossary_guid: Optional[str] = None,
1086+
) -> Optional[A]: ...
1087+
9971088
async def update_announcement(
9981089
self,
9991090
asset_type: Type[A],
@@ -1026,6 +1117,33 @@ async def update_announcement(
10261117
# Execute update using shared logic
10271118
return await self._update_asset_by_attribute(asset, asset_type, qualified_name)
10281119

1120+
@overload
1121+
async def remove_announcement(
1122+
self,
1123+
asset_type: Type[AtlasGlossaryTerm],
1124+
qualified_name: str,
1125+
name: str,
1126+
glossary_guid: str,
1127+
) -> Optional[AtlasGlossaryTerm]: ...
1128+
1129+
@overload
1130+
async def remove_announcement(
1131+
self,
1132+
asset_type: Type[AtlasGlossaryCategory],
1133+
qualified_name: str,
1134+
name: str,
1135+
glossary_guid: str,
1136+
) -> Optional[AtlasGlossaryCategory]: ...
1137+
1138+
@overload
1139+
async def remove_announcement(
1140+
self,
1141+
asset_type: Type[A],
1142+
qualified_name: str,
1143+
name: str,
1144+
glossary_guid: Optional[str] = None,
1145+
) -> Optional[A]: ...
1146+
10291147
async def remove_announcement(
10301148
self,
10311149
asset_type: Type[A],

pyatlan/client/asset.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -550,8 +550,8 @@ def save_replacing_cm(
550550
query_params, request = Save.prepare_request_replacing_cm(
551551
entity=entity,
552552
replace_atlan_tags=replace_atlan_tags,
553+
client=self._client,
553554
)
554-
Save.validate_and_flush_entities(request.entities, self._client)
555555
raw_json = self._client._call_api(BULK_UPDATE, query_params, request)
556556
return Save.process_response_replacing_cm(raw_json)
557557

pyatlan/client/common/asset.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -739,13 +739,15 @@ def log_connections_finished():
739739
def prepare_request_replacing_cm(
740740
entity: Union[Asset, List[Asset]],
741741
replace_atlan_tags: bool = False,
742+
client=None,
742743
) -> tuple[Dict[str, Any], BulkRequest[Asset]]:
743744
"""
744745
Prepare the request for saving assets with replacing custom metadata.
745746
This uses different query parameter names than the regular save method.
746747
747748
:param entity: one or more assets to save
748749
:param replace_atlan_tags: whether to replace AtlanTags during an update
750+
:param client: the Atlan client instance for flushing custom metadata
749751
:returns: tuple of (query_params, bulk_request)
750752
"""
751753
query_params = {
@@ -760,6 +762,12 @@ def prepare_request_replacing_cm(
760762
else:
761763
entities.append(entity)
762764

765+
# Validate and flush entities BEFORE creating the BulkRequest
766+
if client:
767+
for asset in entities:
768+
asset.validate_required()
769+
asset.flush_custom_metadata(client=client)
770+
763771
return query_params, BulkRequest[Asset](entities=entities)
764772

765773
@staticmethod

0 commit comments

Comments
 (0)