11from __future__ import annotations
22
3+ from collections .abc import Iterator
4+
35from ..errors import (
46 InvalidNameError ,
57 InvalidOrgError ,
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