Skip to content

Commit af4a5ee

Browse files
feat(secret_manager): add ListSecretTypes endpoint (scaleway#568)
Co-authored-by: Laure-di <62625835+Laure-di@users.noreply.github.com>
1 parent 6de15e9 commit af4a5ee

File tree

8 files changed

+264
-0
lines changed

8 files changed

+264
-0
lines changed

scaleway-async/scaleway_async/secret/v1beta1/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@
3030
from .types import EnableSecretVersionRequest
3131
from .types import GetSecretRequest
3232
from .types import GetSecretVersionRequest
33+
from .types import ListSecretTypesRequest
34+
from .types import ListSecretTypesResponse
3335
from .types import ListSecretVersionsRequest
3436
from .types import ListSecretVersionsResponse
3537
from .types import ListSecretsRequest
@@ -74,6 +76,8 @@
7476
"EnableSecretVersionRequest",
7577
"GetSecretRequest",
7678
"GetSecretVersionRequest",
79+
"ListSecretTypesRequest",
80+
"ListSecretTypesResponse",
7781
"ListSecretVersionsRequest",
7882
"ListSecretVersionsResponse",
7983
"ListSecretsRequest",

scaleway-async/scaleway_async/secret/v1beta1/api.py

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
CreateSecretVersionRequest,
2525
EphemeralPolicy,
2626
EphemeralProperties,
27+
ListSecretTypesResponse,
2728
ListSecretVersionsResponse,
2829
ListSecretsResponse,
2930
ListTagsResponse,
@@ -37,6 +38,7 @@
3738
unmarshal_Secret,
3839
unmarshal_AccessSecretVersionResponse,
3940
unmarshal_BrowseSecretsResponse,
41+
unmarshal_ListSecretTypesResponse,
4042
unmarshal_ListSecretVersionsResponse,
4143
unmarshal_ListSecretsResponse,
4244
unmarshal_ListTagsResponse,
@@ -1040,3 +1042,78 @@ async def list_tags_all(
10401042
"page_size": page_size,
10411043
},
10421044
)
1045+
1046+
async def list_secret_types(
1047+
self,
1048+
*,
1049+
region: Optional[Region] = None,
1050+
project_id: Optional[str] = None,
1051+
page: Optional[int] = None,
1052+
page_size: Optional[int] = None,
1053+
) -> ListSecretTypesResponse:
1054+
"""
1055+
List secret types.
1056+
List all secret types created within a given Project.
1057+
:param region: Region to target. If none is passed will use default region from the config.
1058+
:param project_id: ID of the Project to target.
1059+
:param page:
1060+
:param page_size:
1061+
:return: :class:`ListSecretTypesResponse <ListSecretTypesResponse>`
1062+
1063+
Usage:
1064+
::
1065+
1066+
result = await api.list_secret_types()
1067+
"""
1068+
1069+
param_region = validate_path_param(
1070+
"region", region or self.client.default_region
1071+
)
1072+
1073+
res = self._request(
1074+
"GET",
1075+
f"/secret-manager/v1beta1/regions/{param_region}/secret-types",
1076+
params={
1077+
"page": page,
1078+
"page_size": page_size or self.client.default_page_size,
1079+
"project_id": project_id or self.client.default_project_id,
1080+
},
1081+
)
1082+
1083+
self._throw_on_error(res)
1084+
return unmarshal_ListSecretTypesResponse(res.json())
1085+
1086+
async def list_secret_types_all(
1087+
self,
1088+
*,
1089+
region: Optional[Region] = None,
1090+
project_id: Optional[str] = None,
1091+
page: Optional[int] = None,
1092+
page_size: Optional[int] = None,
1093+
) -> List[SecretType]:
1094+
"""
1095+
List secret types.
1096+
List all secret types created within a given Project.
1097+
:param region: Region to target. If none is passed will use default region from the config.
1098+
:param project_id: ID of the Project to target.
1099+
:param page:
1100+
:param page_size:
1101+
:return: :class:`List[SecretType] <List[SecretType]>`
1102+
1103+
Usage:
1104+
::
1105+
1106+
result = await api.list_secret_types_all()
1107+
"""
1108+
1109+
return await fetch_all_pages_async(
1110+
type=ListSecretTypesResponse,
1111+
key="types",
1112+
fetcher=self.list_secret_types,
1113+
args={
1114+
"region": region,
1115+
"project_id": project_id,
1116+
"page": page,
1117+
"page_size": page_size,
1118+
},
1119+
)

scaleway-async/scaleway_async/secret/v1beta1/marshalling.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
from scaleway_core.profile import ProfileDefaults
88
from .types import (
9+
SecretType,
910
EphemeralProperties,
1011
SecretVersion,
1112
EphemeralPolicy,
@@ -15,6 +16,7 @@
1516
BrowseSecretsResponseItemSecretDetails,
1617
BrowseSecretsResponseItem,
1718
BrowseSecretsResponse,
19+
ListSecretTypesResponse,
1820
ListSecretVersionsResponse,
1921
ListSecretsResponse,
2022
ListTagsResponse,
@@ -357,6 +359,25 @@ def unmarshal_BrowseSecretsResponse(data: Any) -> BrowseSecretsResponse:
357359
return BrowseSecretsResponse(**args)
358360

359361

362+
def unmarshal_ListSecretTypesResponse(data: Any) -> ListSecretTypesResponse:
363+
if not isinstance(data, dict):
364+
raise TypeError(
365+
"Unmarshalling the type 'ListSecretTypesResponse' failed as data isn't a dictionary."
366+
)
367+
368+
args: Dict[str, Any] = {}
369+
370+
field = data.get("types", None)
371+
if field is not None:
372+
args["types"] = [SecretType(v) for v in field] if field is not None else None
373+
374+
field = data.get("total_count", None)
375+
if field is not None:
376+
args["total_count"] = field
377+
378+
return ListSecretTypesResponse(**args)
379+
380+
360381
def unmarshal_ListSecretVersionsResponse(data: Any) -> ListSecretVersionsResponse:
361382
if not isinstance(data, dict):
362383
raise TypeError(

scaleway-async/scaleway_async/secret/v1beta1/types.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -662,6 +662,36 @@ class GetSecretVersionRequest:
662662
"""
663663

664664

665+
@dataclass
666+
class ListSecretTypesRequest:
667+
region: Optional[Region]
668+
"""
669+
Region to target. If none is passed will use default region from the config.
670+
"""
671+
672+
project_id: Optional[str]
673+
"""
674+
ID of the Project to target.
675+
"""
676+
677+
page: Optional[int]
678+
679+
page_size: Optional[int]
680+
681+
682+
@dataclass
683+
class ListSecretTypesResponse:
684+
types: List[SecretType]
685+
"""
686+
List of secret types.
687+
"""
688+
689+
total_count: int
690+
"""
691+
Count of all secret types matching the requested criteria.
692+
"""
693+
694+
665695
@dataclass
666696
class ListSecretVersionsRequest:
667697
secret_id: str

scaleway/scaleway/secret/v1beta1/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@
3030
from .types import EnableSecretVersionRequest
3131
from .types import GetSecretRequest
3232
from .types import GetSecretVersionRequest
33+
from .types import ListSecretTypesRequest
34+
from .types import ListSecretTypesResponse
3335
from .types import ListSecretVersionsRequest
3436
from .types import ListSecretVersionsResponse
3537
from .types import ListSecretsRequest
@@ -74,6 +76,8 @@
7476
"EnableSecretVersionRequest",
7577
"GetSecretRequest",
7678
"GetSecretVersionRequest",
79+
"ListSecretTypesRequest",
80+
"ListSecretTypesResponse",
7781
"ListSecretVersionsRequest",
7882
"ListSecretVersionsResponse",
7983
"ListSecretsRequest",

scaleway/scaleway/secret/v1beta1/api.py

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
CreateSecretVersionRequest,
2525
EphemeralPolicy,
2626
EphemeralProperties,
27+
ListSecretTypesResponse,
2728
ListSecretVersionsResponse,
2829
ListSecretsResponse,
2930
ListTagsResponse,
@@ -37,6 +38,7 @@
3738
unmarshal_Secret,
3839
unmarshal_AccessSecretVersionResponse,
3940
unmarshal_BrowseSecretsResponse,
41+
unmarshal_ListSecretTypesResponse,
4042
unmarshal_ListSecretVersionsResponse,
4143
unmarshal_ListSecretsResponse,
4244
unmarshal_ListTagsResponse,
@@ -1040,3 +1042,78 @@ def list_tags_all(
10401042
"page_size": page_size,
10411043
},
10421044
)
1045+
1046+
def list_secret_types(
1047+
self,
1048+
*,
1049+
region: Optional[Region] = None,
1050+
project_id: Optional[str] = None,
1051+
page: Optional[int] = None,
1052+
page_size: Optional[int] = None,
1053+
) -> ListSecretTypesResponse:
1054+
"""
1055+
List secret types.
1056+
List all secret types created within a given Project.
1057+
:param region: Region to target. If none is passed will use default region from the config.
1058+
:param project_id: ID of the Project to target.
1059+
:param page:
1060+
:param page_size:
1061+
:return: :class:`ListSecretTypesResponse <ListSecretTypesResponse>`
1062+
1063+
Usage:
1064+
::
1065+
1066+
result = api.list_secret_types()
1067+
"""
1068+
1069+
param_region = validate_path_param(
1070+
"region", region or self.client.default_region
1071+
)
1072+
1073+
res = self._request(
1074+
"GET",
1075+
f"/secret-manager/v1beta1/regions/{param_region}/secret-types",
1076+
params={
1077+
"page": page,
1078+
"page_size": page_size or self.client.default_page_size,
1079+
"project_id": project_id or self.client.default_project_id,
1080+
},
1081+
)
1082+
1083+
self._throw_on_error(res)
1084+
return unmarshal_ListSecretTypesResponse(res.json())
1085+
1086+
def list_secret_types_all(
1087+
self,
1088+
*,
1089+
region: Optional[Region] = None,
1090+
project_id: Optional[str] = None,
1091+
page: Optional[int] = None,
1092+
page_size: Optional[int] = None,
1093+
) -> List[SecretType]:
1094+
"""
1095+
List secret types.
1096+
List all secret types created within a given Project.
1097+
:param region: Region to target. If none is passed will use default region from the config.
1098+
:param project_id: ID of the Project to target.
1099+
:param page:
1100+
:param page_size:
1101+
:return: :class:`List[SecretType] <List[SecretType]>`
1102+
1103+
Usage:
1104+
::
1105+
1106+
result = api.list_secret_types_all()
1107+
"""
1108+
1109+
return fetch_all_pages(
1110+
type=ListSecretTypesResponse,
1111+
key="types",
1112+
fetcher=self.list_secret_types,
1113+
args={
1114+
"region": region,
1115+
"project_id": project_id,
1116+
"page": page,
1117+
"page_size": page_size,
1118+
},
1119+
)

scaleway/scaleway/secret/v1beta1/marshalling.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
from scaleway_core.profile import ProfileDefaults
88
from .types import (
9+
SecretType,
910
EphemeralProperties,
1011
SecretVersion,
1112
EphemeralPolicy,
@@ -15,6 +16,7 @@
1516
BrowseSecretsResponseItemSecretDetails,
1617
BrowseSecretsResponseItem,
1718
BrowseSecretsResponse,
19+
ListSecretTypesResponse,
1820
ListSecretVersionsResponse,
1921
ListSecretsResponse,
2022
ListTagsResponse,
@@ -357,6 +359,25 @@ def unmarshal_BrowseSecretsResponse(data: Any) -> BrowseSecretsResponse:
357359
return BrowseSecretsResponse(**args)
358360

359361

362+
def unmarshal_ListSecretTypesResponse(data: Any) -> ListSecretTypesResponse:
363+
if not isinstance(data, dict):
364+
raise TypeError(
365+
"Unmarshalling the type 'ListSecretTypesResponse' failed as data isn't a dictionary."
366+
)
367+
368+
args: Dict[str, Any] = {}
369+
370+
field = data.get("types", None)
371+
if field is not None:
372+
args["types"] = [SecretType(v) for v in field] if field is not None else None
373+
374+
field = data.get("total_count", None)
375+
if field is not None:
376+
args["total_count"] = field
377+
378+
return ListSecretTypesResponse(**args)
379+
380+
360381
def unmarshal_ListSecretVersionsResponse(data: Any) -> ListSecretVersionsResponse:
361382
if not isinstance(data, dict):
362383
raise TypeError(

scaleway/scaleway/secret/v1beta1/types.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -662,6 +662,36 @@ class GetSecretVersionRequest:
662662
"""
663663

664664

665+
@dataclass
666+
class ListSecretTypesRequest:
667+
region: Optional[Region]
668+
"""
669+
Region to target. If none is passed will use default region from the config.
670+
"""
671+
672+
project_id: Optional[str]
673+
"""
674+
ID of the Project to target.
675+
"""
676+
677+
page: Optional[int]
678+
679+
page_size: Optional[int]
680+
681+
682+
@dataclass
683+
class ListSecretTypesResponse:
684+
types: List[SecretType]
685+
"""
686+
List of secret types.
687+
"""
688+
689+
total_count: int
690+
"""
691+
Count of all secret types matching the requested criteria.
692+
"""
693+
694+
665695
@dataclass
666696
class ListSecretVersionsRequest:
667697
secret_id: str

0 commit comments

Comments
 (0)