Skip to content

Commit 12e8227

Browse files
authored
Merge pull request #909 from atlanhq/BLDX-1096
feat(enums): add deprecated Phosphor icon names to AtlanIcon [BLDX-1096]
2 parents d32c766 + f871c69 commit 12e8227

3 files changed

Lines changed: 98 additions & 6 deletions

File tree

.github/workflows/trivy.yml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ jobs:
4545
with:
4646
image-ref: pyatlan-trivy:latest
4747
scanners: 'vuln'
48-
version: 'v0.69.0'
48+
version: 'v0.70.0'
4949
ignore-unfixed: true
5050
format: 'table'
5151
output: 'trivy-image.txt'
@@ -71,7 +71,7 @@ jobs:
7171
with:
7272
image-ref: pyatlan-trivy:latest
7373
scanners: 'vuln'
74-
version: 'v0.69.0'
74+
version: 'v0.70.0'
7575
ignore-unfixed: true
7676
format: 'sarif'
7777
output: 'trivy-image.sarif'
@@ -87,7 +87,7 @@ jobs:
8787
scan-type: fs
8888
scan-ref: uv.lock
8989
scanners: 'vuln'
90-
version: 'v0.69.0'
90+
version: 'v0.70.0'
9191
ignore-unfixed: true
9292
format: 'table'
9393
output: 'trivy-deps.txt'
@@ -113,7 +113,7 @@ jobs:
113113
scan-type: fs
114114
scan-ref: uv.lock
115115
scanners: 'vuln'
116-
version: 'v0.69.0'
116+
version: 'v0.70.0'
117117
ignore-unfixed: true
118118
format: 'sarif'
119119
output: 'trivy-deps.sarif'
@@ -167,7 +167,7 @@ jobs:
167167
with:
168168
image-ref: pyatlan-trivy:latest
169169
scanners: 'vuln'
170-
version: 'v0.69.0'
170+
version: 'v0.70.0'
171171
ignore-unfixed: true
172172
format: 'table'
173173
severity: 'CRITICAL,HIGH'
@@ -182,7 +182,7 @@ jobs:
182182
scan-type: fs
183183
scan-ref: uv.lock
184184
scanners: 'vuln'
185-
version: 'v0.69.0'
185+
version: 'v0.70.0'
186186
ignore-unfixed: true
187187
format: 'table'
188188
severity: 'CRITICAL,HIGH'

pyatlan/model/enums.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -413,6 +413,7 @@ class AtlanDeleteType(str, Enum):
413413

414414
class AtlanIcon(str, Enum):
415415
ACORN = "PhAcorn"
416+
ACTIVITY = "PhActivity" # Deprecated: use PULSE
416417
ADDRESS_BOOK = "PhAddressBook"
417418
ADDRESS_BOOK_TABS = "PhAddressBookTabs"
418419
AIRPLANE = "PhAirplane"
@@ -791,6 +792,10 @@ class AtlanIcon(str, Enum):
791792
CIRCLE_HALF = "PhCircleHalf"
792793
CIRCLE_HALF_TILT = "PhCircleHalfTilt"
793794
CIRCLE_NOTCH = "PhCircleNotch"
795+
CIRCLE_WAVY = "PhCircleWavy" # Deprecated: use SEAL
796+
CIRCLE_WAVY_CHECK = "PhCircleWavyCheck" # Deprecated: use SEAL_CHECK
797+
CIRCLE_WAVY_QUESTION = "PhCircleWavyQuestion" # Deprecated: use SEAL_QUESTION
798+
CIRCLE_WAVY_WARNING = "PhCircleWavyWarning" # Deprecated: use SEAL_WARNING
794799
CIRCUITRY = "PhCircuitry"
795800
CITY = "PhCity"
796801
CLIPBOARD = "PhClipboard"
@@ -996,6 +1001,7 @@ class AtlanIcon(str, Enum):
9961001
FILE_CSV = "PhFileCsv"
9971002
FILE_C_SHARP = "PhFileCSharp"
9981003
FILE_DASHED = "PhFileDashed"
1004+
FILE_DOTTED = "PhFileDotted" # Deprecated: use FILE_DASHED
9991005
FILE_DOC = "PhFileDoc"
10001006
FILE_HTML = "PhFileHtml"
10011007
FILE_IMAGE = "PhFileImage"
@@ -1005,6 +1011,7 @@ class AtlanIcon(str, Enum):
10051011
FILE_JSX = "PhFileJsx"
10061012
FILE_LOCK = "PhFileLock"
10071013
FILE_MAGNIFYING_GLASS = "PhFileMagnifyingGlass"
1014+
FILE_SEARCH = "PhFileSearch" # Deprecated: use FILE_MAGNIFYING_GLASS
10081015
FILE_MD = "PhFileMd"
10091016
FILE_MINUS = "PhFileMinus"
10101017
FILE_PDF = "PhFilePdf"
@@ -1059,6 +1066,7 @@ class AtlanIcon(str, Enum):
10591066
FOLDER = "PhFolder"
10601067
FOLDERS = "PhFolders"
10611068
FOLDER_DASHED = "PhFolderDashed"
1069+
FOLDER_DOTTED = "PhFolderDotted" # Deprecated: use FOLDER_DASHED
10621070
FOLDER_LOCK = "PhFolderLock"
10631071
FOLDER_MINUS = "PhFolderMinus"
10641072
FOLDER_NOTCH = "PhFolderNotch"
@@ -1069,6 +1077,9 @@ class AtlanIcon(str, Enum):
10691077
FOLDER_PLUS = "PhFolderPlus"
10701078
FOLDER_SIMPLE = "PhFolderSimple"
10711079
FOLDER_SIMPLE_DASHED = "PhFolderSimpleDashed"
1080+
FOLDER_SIMPLE_DOTTED = (
1081+
"PhFolderSimpleDotted" # Deprecated: use FOLDER_SIMPLE_DASHED
1082+
)
10721083
FOLDER_SIMPLE_LOCK = "PhFolderSimpleLock"
10731084
FOLDER_SIMPLE_MINUS = "PhFolderSimpleMinus"
10741085
FOLDER_SIMPLE_PLUS = "PhFolderSimplePlus"
@@ -1462,6 +1473,7 @@ class AtlanIcon(str, Enum):
14621473
PEN_NIB_STRAIGHT = "PhPenNibStraight"
14631474
PEPPER = "PhPepper"
14641475
PERCENT = "PhPercent"
1476+
PEDESTRIAN = "PhPedestrian" # Deprecated: use PERSON
14651477
PERSON = "PhPerson"
14661478
PERSON_ARMS_SPREAD = "PhPersonArmsSpread"
14671479
PERSON_SIMPLE = "PhPersonSimple"
@@ -1770,6 +1782,7 @@ class AtlanIcon(str, Enum):
17701782
TEXT_ALIGN_RIGHT = "PhTextAlignRight"
17711783
TEXT_A_UNDERLINE = "PhTextAUnderline"
17721784
TEXT_B = "PhTextB"
1785+
TEXT_BOLDER = "PhTextBolder" # Deprecated: use TEXT_B
17731786
TEXT_COLUMNS = "PhTextColumns"
17741787
TEXT_H = "PhTextH"
17751788
TEXT_H_FIVE = "PhTextHFive"

tests/unit/model/icon_enum_test.py

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
"""Tests for AtlanIcon enum — deprecated Phosphor icon backward compat (BLDX-1096)."""
2+
3+
import pytest
4+
5+
from pyatlan.model.enums import AtlanIcon
6+
7+
# Mapping of deprecated enum names to their string values
8+
DEPRECATED_ICONS = {
9+
"ACTIVITY": "PhActivity",
10+
"CIRCLE_WAVY": "PhCircleWavy",
11+
"CIRCLE_WAVY_CHECK": "PhCircleWavyCheck",
12+
"CIRCLE_WAVY_QUESTION": "PhCircleWavyQuestion",
13+
"CIRCLE_WAVY_WARNING": "PhCircleWavyWarning",
14+
"FILE_DOTTED": "PhFileDotted",
15+
"FILE_SEARCH": "PhFileSearch",
16+
"FOLDER_DOTTED": "PhFolderDotted",
17+
"FOLDER_SIMPLE_DOTTED": "PhFolderSimpleDotted",
18+
"PEDESTRIAN": "PhPedestrian",
19+
"TEXT_BOLDER": "PhTextBolder",
20+
}
21+
22+
# Mapping of deprecated → replacement enum names
23+
REPLACEMENT_MAP = {
24+
"ACTIVITY": "PULSE",
25+
"CIRCLE_WAVY": "SEAL",
26+
"CIRCLE_WAVY_CHECK": "SEAL_CHECK",
27+
"CIRCLE_WAVY_QUESTION": "SEAL_QUESTION",
28+
"CIRCLE_WAVY_WARNING": "SEAL_WARNING",
29+
"FILE_DOTTED": "FILE_DASHED",
30+
"FILE_SEARCH": "FILE_MAGNIFYING_GLASS",
31+
"FOLDER_DOTTED": "FOLDER_DASHED",
32+
"FOLDER_SIMPLE_DOTTED": "FOLDER_SIMPLE_DASHED",
33+
"PEDESTRIAN": "PERSON",
34+
"TEXT_BOLDER": "TEXT_B",
35+
}
36+
37+
38+
class TestDeprecatedIconsExist:
39+
"""All deprecated Phosphor icon names must be valid AtlanIcon enum members."""
40+
41+
@pytest.mark.parametrize("name,value", DEPRECATED_ICONS.items())
42+
def test_deprecated_icon_exists_in_enum(self, name, value):
43+
icon = AtlanIcon[name]
44+
assert icon.value == value
45+
46+
@pytest.mark.parametrize("name,value", DEPRECATED_ICONS.items())
47+
def test_deprecated_icon_deserializes_from_value(self, name, value):
48+
"""Simulates deserialization — looking up by string value."""
49+
icon = AtlanIcon(value)
50+
assert icon.name == name
51+
52+
53+
class TestReplacementIconsExist:
54+
"""Each deprecated icon has a valid replacement in the enum."""
55+
56+
@pytest.mark.parametrize("deprecated,replacement", REPLACEMENT_MAP.items())
57+
def test_replacement_exists(self, deprecated, replacement):
58+
assert replacement in AtlanIcon.__members__
59+
60+
@pytest.mark.parametrize("deprecated,replacement", REPLACEMENT_MAP.items())
61+
def test_deprecated_and_replacement_are_different_values(
62+
self, deprecated, replacement
63+
):
64+
"""Deprecated and replacement icons have different string values."""
65+
assert AtlanIcon[deprecated].value != AtlanIcon[replacement].value
66+
67+
68+
class TestIconEnumIntegrity:
69+
"""General enum health checks."""
70+
71+
def test_no_duplicate_values(self):
72+
"""All enum values must be unique."""
73+
values = [icon.value for icon in AtlanIcon]
74+
assert len(values) == len(set(values)), "Duplicate values found in AtlanIcon"
75+
76+
def test_all_values_are_non_empty(self):
77+
"""All AtlanIcon values must be non-empty strings."""
78+
for icon in AtlanIcon:
79+
assert icon.value, f"{icon.name} has empty value"

0 commit comments

Comments
 (0)