11from __future__ import annotations
22
3+ from collections .abc import Iterator
34from typing import Any
45
56from ..errors import (
67 InvalidOrgError ,
78 ValidationError ,
89)
910from ..models .reserved_tag_key import (
10- ReservedTagKey as ReservedTagKeyModel ,
11- )
12- from ..models .reserved_tag_key import (
11+ ReservedTagKey ,
1312 ReservedTagKeyCreateOptions ,
14- ReservedTagKeyList ,
1513 ReservedTagKeyListOptions ,
1614 ReservedTagKeyUpdateOptions ,
1715)
1816from ..utils import valid_string_id
1917from ._base import _Service
2018
2119
22- class ReservedTagKey (_Service ):
20+ class ReservedTagKeys (_Service ):
2321 """Reserved Tag Key API for Terraform Enterprise."""
2422
2523 def list (
2624 self , organization : str , options : ReservedTagKeyListOptions | None = None
27- ) -> ReservedTagKeyList :
25+ ) -> Iterator [ ReservedTagKey ] :
2826 """List reserved tag keys for the given organization."""
2927 if not valid_string_id (organization ):
3028 raise InvalidOrgError ()
3129
3230 params = (
3331 options .model_dump (by_alias = True , exclude_none = True ) if options else None
3432 )
35-
36- r = self .t .request (
37- "GET" ,
38- f"/api/v2/organizations/{ organization } /reserved-tag-keys" ,
39- params = params ,
40- )
41-
42- jd = r .json ()
43- items = []
44- meta = jd .get ("meta" , {})
45- pagination = meta .get ("pagination" , {})
46-
47- for d in jd .get ("data" , []):
48- items .append (self ._parse_reserved_tag_key (d ))
49-
50- return ReservedTagKeyList (
51- items = items ,
52- current_page = pagination .get ("current-page" ),
53- total_pages = pagination .get ("total-pages" ),
54- prev_page = pagination .get ("prev-page" ),
55- next_page = pagination .get ("next-page" ),
56- total_count = pagination .get ("total-count" ),
57- )
33+ path = f"/api/v2/organizations/{ organization } /reserved-tag-keys"
34+ for item in self ._list (path , params = params ):
35+ yield self ._parse_reserved_tag_key (item )
5836
5937 def create (
6038 self , organization : str , options : ReservedTagKeyCreateOptions
61- ) -> ReservedTagKeyModel :
39+ ) -> ReservedTagKey :
6240 """Create a new reserved tag key for the given organization."""
6341 if not valid_string_id (organization ):
6442 raise InvalidOrgError ()
@@ -82,20 +60,9 @@ def create(
8260
8361 return self ._parse_reserved_tag_key (data )
8462
85- def read (self , reserved_tag_key_id : str ) -> ReservedTagKeyModel :
86- """Read a reserved tag key by its ID."""
87- if not valid_string_id (reserved_tag_key_id ):
88- raise ValidationError ("Invalid reserved tag key ID" )
89-
90- # Note: Based on the API docs, there's no explicit GET endpoint for individual reserved tag keys
91- # This method would need to be implemented if such an endpoint exists
92- raise NotImplementedError (
93- "Individual reserved tag key read is not supported by the API"
94- )
95-
9663 def update (
9764 self , reserved_tag_key_id : str , options : ReservedTagKeyUpdateOptions
98- ) -> ReservedTagKeyModel :
65+ ) -> ReservedTagKey :
9966 """Update a reserved tag key."""
10067 if not valid_string_id (reserved_tag_key_id ):
10168 raise ValidationError ("Invalid reserved tag key ID" )
@@ -125,10 +92,10 @@ def delete(self, reserved_tag_key_id: str) -> None:
12592 raise ValidationError ("Invalid reserved tag key ID" )
12693
12794 self .t .request ("DELETE" , f"/api/v2/reserved-tag-keys/{ reserved_tag_key_id } " )
128- # DELETE returns 204 No Content on success
95+ return None
12996
130- def _parse_reserved_tag_key (self , data : dict [str , Any ]) -> ReservedTagKeyModel :
97+ def _parse_reserved_tag_key (self , data : dict [str , Any ]) -> ReservedTagKey :
13198 """Parse reserved tag key data from API response."""
13299 attrs = data .get ("attributes" , {})
133100 attrs ["id" ] = data .get ("id" )
134- return ReservedTagKeyModel .model_validate (attrs )
101+ return ReservedTagKey .model_validate (attrs )
0 commit comments