Skip to content

Commit 1a06403

Browse files
authored
Merge pull request #797 from atlanhq/BLDX-460
[release] Bumped to release `8.5.1`
2 parents f8e74fe + 9a5373a commit 1a06403

9 files changed

Lines changed: 28 additions & 30 deletions

File tree

HISTORY.md

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,16 @@
1-
## 8.5.0 (January 14, 2025)
1+
## 8.5.1 (January 29, 2026)
2+
3+
### Bug Fixes
4+
5+
- Fixed iterative pagination in User and Role caches that prevented all records from being properly populated during cache refresh operations.
6+
7+
### QOL Improvements
8+
9+
- Enhanced SDK client retry mechanism to automatically retry HTTP `302` redirect responses, improving reliability when handling temporary redirects.
10+
- Updated admin integration tests to align with latest backend API changes.
11+
12+
13+
## 8.5.0 (January 14, 2026)
214

315
### New Features
416

@@ -9,7 +21,7 @@
921
- `DataQualityRule.table_level_rule_creator()` and `DataQualityRule.column_level_rule_creator()` now accept `rule_type` as a `DataQualityRuleTemplateType` enum instead of `str`.
1022
- `threshold_compare_operator` is now an optional parameter for `DataQualityRule.table_level_rule_creator()`.
1123

12-
## 8.4.6 (January 13, 2025)
24+
## 8.4.6 (January 13, 2026)
1325

1426
### New Features
1527

pyatlan/cache/aio/group_cache.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -82,13 +82,11 @@ async def refresh_cache(self) -> None:
8282

8383
async def _refresh_cache(self) -> None:
8484
async with self.lock:
85-
groups = await self.client.group.get_all()
85+
groups = [group async for group in await self.client.group.get_all()]
8686
if not groups:
8787
return
88-
# Process response using shared logic - extract records from response
89-
group_list = groups.records or []
9088
(self.map_id_to_name, self.map_name_to_id, self.map_alias_to_id) = (
91-
GroupCacheCommon.refresh_cache_data(group_list)
89+
GroupCacheCommon.refresh_cache_data(groups)
9290
)
9391

9492
async def _get_id_for_name(self, name: str) -> Optional[str]:

pyatlan/cache/aio/user_cache.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -74,13 +74,11 @@ async def refresh_cache(self) -> None:
7474

7575
async def _refresh_cache(self) -> None:
7676
async with self.lock:
77-
users = await self.client.user.get_all()
77+
users = [user async for user in await self.client.user.get_all()]
7878
if not users:
7979
return
80-
# Process response using shared logic - extract records from response
81-
user_list = users.records or []
8280
(self.map_id_to_name, self.map_name_to_id, self.map_email_to_id) = (
83-
UserCacheCommon.refresh_cache_data(user_list)
81+
UserCacheCommon.refresh_cache_data(users)
8482
)
8583

8684
async def _get_id_for_name(self, name: str) -> Optional[str]:

pyatlan/cache/group_cache.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,11 @@ def validate_aliases(self, aliases: Iterable[str]):
6464

6565
def _refresh_cache(self) -> None:
6666
with self.lock:
67-
groups = self.client.group.get_all()
67+
groups = [group for group in self.client.group.get_all()]
6868
if not groups:
6969
return
70-
# Process response using shared logic - extract records from response
71-
group_list = groups.records or []
7270
(self.map_id_to_name, self.map_name_to_id, self.map_alias_to_id) = (
73-
GroupCacheCommon.refresh_cache_data(group_list)
71+
GroupCacheCommon.refresh_cache_data(groups)
7472
)
7573

7674
def _get_id_for_name(self, name: str) -> Optional[str]:

pyatlan/cache/user_cache.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,11 @@ def validate_names(self, names: Iterable[str]):
6464

6565
def _refresh_cache(self) -> None:
6666
with self.lock:
67-
users = self.client.user.get_all()
67+
users = [user for user in self.client.user.get_all()]
6868
if not users:
6969
return
70-
# Process response using shared logic - extract records from response
71-
user_list = users.records or []
7270
(self.map_id_to_name, self.map_name_to_id, self.map_email_to_id) = (
73-
UserCacheCommon.refresh_cache_data(user_list)
71+
UserCacheCommon.refresh_cache_data(users)
7472
)
7573

7674
def _get_id_for_name(self, name: str) -> Optional[str]:

pyatlan/client/atlan.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ def get_adapter() -> logging.LoggerAdapter:
111111
DEFAULT_RETRY = Retry(
112112
total=5,
113113
backoff_factor=1,
114-
status_forcelist=[403, 429, 500, 502, 503, 504],
114+
status_forcelist=[302, 403, 429, 500, 502, 503, 504],
115115
allowed_methods=["HEAD", "GET", "OPTIONS", "POST", "PUT", "DELETE"],
116116
# When response.status is in `status_forcelist`
117117
# and the "Retry-After" header is present, the retry mechanism

pyatlan/version.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
8.5.0
1+
8.5.1

tests/integration/admin_test.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -149,8 +149,7 @@ def test_group_get_members_pagination(client: AtlanClient, group: CreateGroupRes
149149
assert len(current_page) == 1
150150
for test_user in response:
151151
assert test_user.username
152-
assert test_user.email
153-
assert test_user.attributes
152+
assert test_user.enabled
154153
current_page = response.current_page()
155154
assert current_page is not None
156155
assert len(current_page) == 0
@@ -167,8 +166,7 @@ def test_user_list_pagination(client: AtlanClient, group: CreateGroupResponse):
167166
assert len(current_page) == 1
168167
for test_user in response:
169168
assert test_user.username
170-
assert test_user.email
171-
assert test_user.attributes
169+
assert test_user.enabled
172170
assert test_user.login_events is not None
173171
assert len(test_user.login_events) >= 0
174172
current_page = response.current_page()
@@ -247,7 +245,6 @@ def test_retrieve_existing_user(client: AtlanClient, group: CreateGroupResponse)
247245
user1 = client.user.get_by_username(FIXED_USER)
248246
assert user1
249247
assert user1.id
250-
assert user1.attributes
251248
assert user1.group_count == 1 + _default_group_count
252249
response = client.user.get_by_usernames(usernames=[FIXED_USER])
253250
assert response

tests/integration/aio/test_admin.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -160,8 +160,7 @@ async def test_group_get_members_pagination(
160160
assert len(current_page) == 1
161161
async for test_user in response:
162162
assert test_user.username
163-
assert test_user.email
164-
assert test_user.attributes
163+
assert test_user.enabled
165164
current_page = response.current_page()
166165
assert current_page is not None
167166
assert len(current_page) == 0
@@ -180,8 +179,7 @@ async def test_user_list_pagination(
180179
assert len(current_page) == 1
181180
async for test_user in response:
182181
assert test_user.username
183-
assert test_user.email
184-
assert test_user.attributes
182+
assert test_user.enabled
185183
assert test_user.login_events is not None
186184
assert len(test_user.login_events) >= 0
187185
current_page = response.current_page()
@@ -266,7 +264,6 @@ async def test_retrieve_existing_user(
266264
user1 = await client.user.get_by_username(FIXED_USER)
267265
assert user1
268266
assert user1.id
269-
assert user1.attributes
270267
assert user1.group_count == 1 + _default_group_count
271268
response = await client.user.get_by_usernames(usernames=[FIXED_USER])
272269
assert response

0 commit comments

Comments
 (0)