Skip to content

Commit a088311

Browse files
authored
Merge pull request #95 from TanyaSingh369-svg/refactor/iterator-pattern/policy-set
Refactor(policy-set): convert list to Iterator pattern
2 parents b3a8acb + 4f1e276 commit a088311

3 files changed

Lines changed: 365 additions & 44 deletions

File tree

examples/policy_set.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -163,16 +163,15 @@ def main():
163163
)
164164

165165
try:
166-
ps_list = client.policy_sets.list(args.org, list_options)
166+
ps_list = list(client.policy_sets.list(args.org, list_options))
167167

168-
print(f"Total policy sets: {ps_list.total_count}")
169-
print(f"Page {ps_list.current_page} of {ps_list.total_pages}")
168+
print(f"Total policy sets: {len(ps_list)}")
170169
print()
171170

172-
if not ps_list.items:
171+
if not ps_list:
173172
print("No policy sets found for this organization.")
174173
else:
175-
for ps in ps_list.items:
174+
for ps in ps_list:
176175
print(
177176
f"- ID: {ps.id} | Name: {ps.name} | Kind: {ps.kind} | Global: {ps.Global}"
178177
)

src/pytfe/resources/policy_set.py

Lines changed: 34 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
from __future__ import annotations
22

3+
from collections.abc import Iterator
4+
35
from ..errors import (
46
InvalidNameError,
57
InvalidOrgError,
@@ -17,7 +19,6 @@
1719
PolicySetAddWorkspaceExclusionsOptions,
1820
PolicySetAddWorkspacesOptions,
1921
PolicySetCreateOptions,
20-
PolicySetList,
2122
PolicySetListOptions,
2223
PolicySetReadOptions,
2324
PolicySetRemovePoliciesOptions,
@@ -38,47 +39,41 @@ class PolicySets(_Service):
3839

3940
def list(
4041
self, organization: str, options: PolicySetListOptions | None = None
41-
) -> PolicySetList:
42-
"""List all the policy sets of the given organization."""
42+
) -> Iterator[PolicySet]:
43+
"""Iterate all the policy sets of the given organization."""
4344
if not valid_string_id(organization):
4445
raise InvalidOrgError()
46+
47+
# Build params from options but do not pass page[number] — let _list handle pagination.
4548
params = options.model_dump(by_alias=True, exclude_none=True) if options else {}
46-
r = self.t.request(
47-
"GET",
48-
f"/api/v2/organizations/{organization}/policy-sets",
49-
params=params,
50-
)
51-
jd = r.json()
52-
items = []
53-
meta = jd.get("meta", {})
54-
pagination = meta.get("pagination", {})
55-
for d in jd.get("data", []):
56-
attrs = d.get("attributes", {})
57-
attrs["id"] = d.get("id")
58-
attrs["organization"] = d.get("relationships", {}).get("organization", {})
59-
attrs["workspace_exclusions"] = (
60-
d.get("relationships", {})
61-
.get("workspace-exclusions", {})
62-
.get("data", [])
63-
)
64-
attrs["workspaces"] = (
65-
d.get("relationships", {}).get("workspaces", {}).get("data", [])
66-
)
67-
attrs["projects"] = (
68-
d.get("relationships", {}).get("projects", {}).get("data", [])
69-
)
70-
attrs["policies"] = (
71-
d.get("relationships", {}).get("policies", {}).get("data", [])
72-
)
73-
items.append(PolicySet.model_validate(attrs))
74-
return PolicySetList(
75-
items=items,
76-
current_page=pagination.get("current-page"),
77-
total_pages=pagination.get("total-pages"),
78-
prev_page=pagination.get("prev-page"),
79-
next_page=pagination.get("next-page"),
80-
total_count=pagination.get("total-count"),
81-
)
49+
params.pop("page[number]", None)
50+
51+
path = f"/api/v2/organizations/{organization}/policy-sets"
52+
53+
def _gen() -> Iterator[PolicySet]:
54+
for d in self._list(path, params=params):
55+
attrs = d.get("attributes", {})
56+
attrs["id"] = d.get("id")
57+
attrs["organization"] = d.get("relationships", {}).get(
58+
"organization", {}
59+
)
60+
attrs["workspace_exclusions"] = (
61+
d.get("relationships", {})
62+
.get("workspace-exclusions", {})
63+
.get("data", [])
64+
)
65+
attrs["workspaces"] = (
66+
d.get("relationships", {}).get("workspaces", {}).get("data", [])
67+
)
68+
attrs["projects"] = (
69+
d.get("relationships", {}).get("projects", {}).get("data", [])
70+
)
71+
attrs["policies"] = (
72+
d.get("relationships", {}).get("policies", {}).get("data", [])
73+
)
74+
yield PolicySet.model_validate(attrs)
75+
76+
return _gen()
8277

8378
def create(self, organization: str, options: PolicySetCreateOptions) -> PolicySet:
8479
"""Create a new policy set in the given organization."""

0 commit comments

Comments
 (0)