Skip to content

Commit 02cde60

Browse files
vaibhavatlanAryamanz29
authored andcommitted
Adding new method called remove_atlan_tags()
1 parent 998b6ff commit 02cde60

File tree

7 files changed

+81
-31
lines changed

7 files changed

+81
-31
lines changed

pyatlan/client/asset.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1002,6 +1002,48 @@ def update_atlan_tags(
10021002
return assets[0]
10031003
return updated_asset
10041004

1005+
@validate_arguments
1006+
def remove_atlan_tag(
1007+
self,
1008+
asset_type: Type[A],
1009+
qualified_name: str,
1010+
atlan_tag_name: str,
1011+
) -> A:
1012+
"""
1013+
Removes a single Atlan tag from the provided asset.
1014+
1015+
:param asset_type: type of asset to which to add the Atlan tags
1016+
:param qualified_name: qualified_name of the asset to which to add the Atlan tags
1017+
:param atlan_tag_name: human-readable name of the Atlan tag to remove from the asset
1018+
:raises AtlanError: on any API communication issue
1019+
"""
1020+
from pyatlan.client.atlan import AtlanClient
1021+
1022+
client = AtlanClient.get_current_client()
1023+
name_asset = client.asset.get_by_qualified_name(
1024+
qualified_name=qualified_name,
1025+
asset_type=asset_type,
1026+
ignore_relationships=False,
1027+
)
1028+
1029+
if asset_type in (AtlasGlossaryTerm, AtlasGlossaryCategory):
1030+
updated_asset = asset_type.updater(
1031+
qualified_name=qualified_name,
1032+
name=name_asset.name,
1033+
glossary_guid=name_asset.anchor.guid, # type: ignore
1034+
)
1035+
else:
1036+
updated_asset = asset_type.updater(
1037+
qualified_name=qualified_name, name=name_asset.name
1038+
)
1039+
1040+
atlan_tag = [AtlanTag(type_name=AtlanTagName(display_text=atlan_tag_name))]
1041+
updated_asset.remove_classifications = atlan_tag
1042+
response = self.save(entity=updated_asset, append_atlan_tags=True)
1043+
if assets := response.assets_updated(asset_type=asset_type):
1044+
return assets[0]
1045+
return updated_asset
1046+
10051047
@validate_arguments
10061048
def remove_atlan_tags(
10071049
self,

pyatlan/client/atlan.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1339,19 +1339,19 @@ def add_atlan_tags(
13391339

13401340
@validate_arguments
13411341
def remove_atlan_tag(
1342-
self, asset_type: Type[A], qualified_name: str, atlan_tag_names: List[str]
1342+
self, asset_type: Type[A], qualified_name: str, atlan_tag_name: str
13431343
) -> None:
1344-
"""Deprecated - use asset.remove_atlan_tags() instead."""
1344+
"""Deprecated - use asset.remove_atlan_tag() instead."""
13451345
warn(
1346-
"This method is deprecated, please use 'asset.remove_atlan_tags' instead, which offers identical "
1346+
"This method is deprecated, please use 'asset.remove_atlan_tag' instead, which offers identical "
13471347
"functionality.",
13481348
DeprecationWarning,
13491349
stacklevel=2,
13501350
)
1351-
self.asset.remove_atlan_tags(
1351+
self.asset.remove_atlan_tag(
13521352
asset_type=asset_type,
13531353
qualified_name=qualified_name,
1354-
atlan_tag_names=atlan_tag_names,
1354+
atlan_tag_name=atlan_tag_name,
13551355
)
13561356

13571357
@validate_arguments

tests/integration/suggestions_test.py

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -287,25 +287,25 @@ def create_atlan_tag1(
287287
assert table1.qualified_name and table3.qualified_name
288288
assert t1c1.qualified_name and v2c1.qualified_name
289289
yield make_atlan_tag(ATLAN_TAG_NAME1)
290-
client.asset.remove_atlan_tags(
290+
client.asset.remove_atlan_tag(
291291
asset_type=Table,
292292
qualified_name=table1.qualified_name,
293-
atlan_tag_names=[ATLAN_TAG_NAME1],
293+
atlan_tag_name=ATLAN_TAG_NAME1,
294294
)
295-
client.asset.remove_atlan_tags(
295+
client.asset.remove_atlan_tag(
296296
asset_type=Table,
297297
qualified_name=table3.qualified_name,
298-
atlan_tag_names=[ATLAN_TAG_NAME1],
298+
atlan_tag_name=ATLAN_TAG_NAME1,
299299
)
300-
client.asset.remove_atlan_tags(
300+
client.asset.remove_atlan_tag(
301301
asset_type=Column,
302302
qualified_name=t1c1.qualified_name,
303-
atlan_tag_names=[ATLAN_TAG_NAME1],
303+
atlan_tag_name=ATLAN_TAG_NAME1,
304304
)
305-
client.asset.remove_atlan_tags(
305+
client.asset.remove_atlan_tag(
306306
asset_type=Column,
307307
qualified_name=v2c1.qualified_name,
308-
atlan_tag_names=[ATLAN_TAG_NAME1],
308+
atlan_tag_name=ATLAN_TAG_NAME1,
309309
)
310310

311311

@@ -324,35 +324,35 @@ def create_atlan_tag2(
324324
assert t1c1.qualified_name and t2c1.qualified_name
325325
assert v1c1.qualified_name and v2c1.qualified_name
326326
yield make_atlan_tag(ATLAN_TAG_NAME2)
327-
client.asset.remove_atlan_tags(
327+
client.asset.remove_atlan_tag(
328328
asset_type=Table,
329329
qualified_name=table1.qualified_name,
330-
atlan_tag_names=[ATLAN_TAG_NAME2],
330+
atlan_tag_name=ATLAN_TAG_NAME2,
331331
)
332-
client.asset.remove_atlan_tags(
332+
client.asset.remove_atlan_tag(
333333
asset_type=Table,
334334
qualified_name=table3.qualified_name,
335-
atlan_tag_names=[ATLAN_TAG_NAME2],
335+
atlan_tag_name=ATLAN_TAG_NAME2,
336336
)
337-
client.asset.remove_atlan_tags(
337+
client.asset.remove_atlan_tag(
338338
asset_type=Column,
339339
qualified_name=t1c1.qualified_name,
340-
atlan_tag_names=[ATLAN_TAG_NAME2],
340+
atlan_tag_name=ATLAN_TAG_NAME2,
341341
)
342-
client.asset.remove_atlan_tags(
342+
client.asset.remove_atlan_tag(
343343
asset_type=Column,
344344
qualified_name=v1c1.qualified_name,
345-
atlan_tag_names=[ATLAN_TAG_NAME2],
345+
atlan_tag_name=ATLAN_TAG_NAME2,
346346
)
347-
client.asset.remove_atlan_tags(
347+
client.asset.remove_atlan_tag(
348348
asset_type=Column,
349349
qualified_name=t2c1.qualified_name,
350-
atlan_tag_names=[ATLAN_TAG_NAME2],
350+
atlan_tag_name=ATLAN_TAG_NAME2,
351351
)
352-
client.asset.remove_atlan_tags(
352+
client.asset.remove_atlan_tag(
353353
asset_type=Column,
354354
qualified_name=v2c1.qualified_name,
355-
atlan_tag_names=[ATLAN_TAG_NAME2],
355+
atlan_tag_name=ATLAN_TAG_NAME2,
356356
)
357357

358358

tests/integration/test_client.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -812,8 +812,8 @@ def test_update_classification(client: AtlanClient, term1: AtlasGlossaryTerm):
812812
@pytest.mark.order(after="test_update_classification")
813813
def test_remove_classification(client: AtlanClient, term1: AtlasGlossaryTerm):
814814
assert term1.qualified_name
815-
client.asset.remove_atlan_tags(
816-
AtlasGlossaryTerm, term1.qualified_name, [CLASSIFICATION_NAME]
815+
client.asset.remove_atlan_tag(
816+
AtlasGlossaryTerm, term1.qualified_name, CLASSIFICATION_NAME
817817
)
818818
glossary_term = client.asset.get_by_guid(
819819
term1.guid, asset_type=AtlasGlossaryTerm, ignore_relationships=False

tests/integration/test_task_client.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,10 @@ def snowflake_column(
5050
)
5151
yield snowflake_column
5252

53-
client.asset.remove_atlan_tags(
53+
client.asset.remove_atlan_tag(
5454
asset_type=Column,
5555
qualified_name=snowflake_column_qn,
56-
atlan_tag_names=[TAG_NAME],
56+
atlan_tag_name=TAG_NAME,
5757
)
5858

5959

tests/unit/constants.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,14 @@
115115
([AtlasGlossary, "qn", [int]], "atlan_tag_names -> 0\n str type expected"),
116116
([AtlasGlossary, "qn", None], "none is not an allowed value"),
117117
],
118+
"remove_atlan_tag": [
119+
(["asset-type", [123], "tag-name"], "name\n str type expected"),
120+
(["asset-type", None, "tag-name"], "none is not an allowed value"),
121+
([None, "qn", "tag-name"], "none is not an allowed value"),
122+
(["asset-type", "qn", "tag-name"], "asset_type\n a class is expected"),
123+
([AtlasGlossary, "qn", [123]], "atlan_tag_name\n str type expected"),
124+
([AtlasGlossary, "qn", None], "none is not an allowed value"),
125+
],
118126
"remove_atlan_tags": [
119127
(["asset-type", [123], ["tag-name"]], "name\n str type expected"),
120128
(["asset-type", None, ["tag-name"]], "none is not an allowed value"),

tests/unit/test_deprecated.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -478,11 +478,11 @@ def test_get_user_by_username(mock_type_def_client, client: AtlanClient):
478478
),
479479
(
480480
"remove_atlan_tag",
481-
"remove_atlan_tags",
481+
"remove_atlan_tag",
482482
{
483483
"asset_type": AtlasGlossary,
484484
"qualified_name": "qname",
485-
"atlan_tag_names": ["Something"],
485+
"atlan_tag_name": "Something",
486486
},
487487
),
488488
(

0 commit comments

Comments
 (0)