Skip to content

feat(secret_manager): add ListSecretTypes endpoint #568

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Jun 25, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions scaleway-async/scaleway_async/secret/v1beta1/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@
from .types import EnableSecretVersionRequest
from .types import GetSecretRequest
from .types import GetSecretVersionRequest
from .types import ListSecretTypesRequest
from .types import ListSecretTypesResponse
from .types import ListSecretVersionsRequest
from .types import ListSecretVersionsResponse
from .types import ListSecretsRequest
Expand Down Expand Up @@ -74,6 +76,8 @@
"EnableSecretVersionRequest",
"GetSecretRequest",
"GetSecretVersionRequest",
"ListSecretTypesRequest",
"ListSecretTypesResponse",
"ListSecretVersionsRequest",
"ListSecretVersionsResponse",
"ListSecretsRequest",
Expand Down
77 changes: 77 additions & 0 deletions scaleway-async/scaleway_async/secret/v1beta1/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
CreateSecretVersionRequest,
EphemeralPolicy,
EphemeralProperties,
ListSecretTypesResponse,
ListSecretVersionsResponse,
ListSecretsResponse,
ListTagsResponse,
Expand All @@ -37,6 +38,7 @@
unmarshal_Secret,
unmarshal_AccessSecretVersionResponse,
unmarshal_BrowseSecretsResponse,
unmarshal_ListSecretTypesResponse,
unmarshal_ListSecretVersionsResponse,
unmarshal_ListSecretsResponse,
unmarshal_ListTagsResponse,
Expand Down Expand Up @@ -1040,3 +1042,78 @@ async def list_tags_all(
"page_size": page_size,
},
)

async def list_secret_types(
self,
*,
region: Optional[Region] = None,
project_id: Optional[str] = None,
page: Optional[int] = None,
page_size: Optional[int] = None,
) -> ListSecretTypesResponse:
"""
List secret types.
List all secret types created within a given Project.
:param region: Region to target. If none is passed will use default region from the config.
:param project_id: ID of the Project to target.
:param page:
:param page_size:
:return: :class:`ListSecretTypesResponse <ListSecretTypesResponse>`

Usage:
::

result = await api.list_secret_types()
"""

param_region = validate_path_param(
"region", region or self.client.default_region
)

res = self._request(
"GET",
f"/secret-manager/v1beta1/regions/{param_region}/secret-types",
params={
"page": page,
"page_size": page_size or self.client.default_page_size,
"project_id": project_id or self.client.default_project_id,
},
)

self._throw_on_error(res)
return unmarshal_ListSecretTypesResponse(res.json())

async def list_secret_types_all(
self,
*,
region: Optional[Region] = None,
project_id: Optional[str] = None,
page: Optional[int] = None,
page_size: Optional[int] = None,
) -> List[SecretType]:
"""
List secret types.
List all secret types created within a given Project.
:param region: Region to target. If none is passed will use default region from the config.
:param project_id: ID of the Project to target.
:param page:
:param page_size:
:return: :class:`List[SecretType] <List[SecretType]>`

Usage:
::

result = await api.list_secret_types_all()
"""

return await fetch_all_pages_async(
type=ListSecretTypesResponse,
key="types",
fetcher=self.list_secret_types,
args={
"region": region,
"project_id": project_id,
"page": page,
"page_size": page_size,
},
)
21 changes: 21 additions & 0 deletions scaleway-async/scaleway_async/secret/v1beta1/marshalling.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

from scaleway_core.profile import ProfileDefaults
from .types import (
SecretType,
EphemeralProperties,
SecretVersion,
EphemeralPolicy,
Expand All @@ -15,6 +16,7 @@
BrowseSecretsResponseItemSecretDetails,
BrowseSecretsResponseItem,
BrowseSecretsResponse,
ListSecretTypesResponse,
ListSecretVersionsResponse,
ListSecretsResponse,
ListTagsResponse,
Expand Down Expand Up @@ -357,6 +359,25 @@ def unmarshal_BrowseSecretsResponse(data: Any) -> BrowseSecretsResponse:
return BrowseSecretsResponse(**args)


def unmarshal_ListSecretTypesResponse(data: Any) -> ListSecretTypesResponse:
if not isinstance(data, dict):
raise TypeError(
"Unmarshalling the type 'ListSecretTypesResponse' failed as data isn't a dictionary."
)

args: Dict[str, Any] = {}

field = data.get("types", None)
if field is not None:
args["types"] = [SecretType(v) for v in field] if field is not None else None

field = data.get("total_count", None)
if field is not None:
args["total_count"] = field

return ListSecretTypesResponse(**args)


def unmarshal_ListSecretVersionsResponse(data: Any) -> ListSecretVersionsResponse:
if not isinstance(data, dict):
raise TypeError(
Expand Down
30 changes: 30 additions & 0 deletions scaleway-async/scaleway_async/secret/v1beta1/types.py
Original file line number Diff line number Diff line change
Expand Up @@ -662,6 +662,36 @@ class GetSecretVersionRequest:
"""


@dataclass
class ListSecretTypesRequest:
region: Optional[Region]
"""
Region to target. If none is passed will use default region from the config.
"""

project_id: Optional[str]
"""
ID of the Project to target.
"""

page: Optional[int]

page_size: Optional[int]


@dataclass
class ListSecretTypesResponse:
types: List[SecretType]
"""
List of secret types.
"""

total_count: int
"""
Count of all secret types matching the requested criteria.
"""


@dataclass
class ListSecretVersionsRequest:
secret_id: str
Expand Down
4 changes: 4 additions & 0 deletions scaleway/scaleway/secret/v1beta1/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@
from .types import EnableSecretVersionRequest
from .types import GetSecretRequest
from .types import GetSecretVersionRequest
from .types import ListSecretTypesRequest
from .types import ListSecretTypesResponse
from .types import ListSecretVersionsRequest
from .types import ListSecretVersionsResponse
from .types import ListSecretsRequest
Expand Down Expand Up @@ -74,6 +76,8 @@
"EnableSecretVersionRequest",
"GetSecretRequest",
"GetSecretVersionRequest",
"ListSecretTypesRequest",
"ListSecretTypesResponse",
"ListSecretVersionsRequest",
"ListSecretVersionsResponse",
"ListSecretsRequest",
Expand Down
77 changes: 77 additions & 0 deletions scaleway/scaleway/secret/v1beta1/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
CreateSecretVersionRequest,
EphemeralPolicy,
EphemeralProperties,
ListSecretTypesResponse,
ListSecretVersionsResponse,
ListSecretsResponse,
ListTagsResponse,
Expand All @@ -37,6 +38,7 @@
unmarshal_Secret,
unmarshal_AccessSecretVersionResponse,
unmarshal_BrowseSecretsResponse,
unmarshal_ListSecretTypesResponse,
unmarshal_ListSecretVersionsResponse,
unmarshal_ListSecretsResponse,
unmarshal_ListTagsResponse,
Expand Down Expand Up @@ -1040,3 +1042,78 @@ def list_tags_all(
"page_size": page_size,
},
)

def list_secret_types(
self,
*,
region: Optional[Region] = None,
project_id: Optional[str] = None,
page: Optional[int] = None,
page_size: Optional[int] = None,
) -> ListSecretTypesResponse:
"""
List secret types.
List all secret types created within a given Project.
:param region: Region to target. If none is passed will use default region from the config.
:param project_id: ID of the Project to target.
:param page:
:param page_size:
:return: :class:`ListSecretTypesResponse <ListSecretTypesResponse>`

Usage:
::

result = api.list_secret_types()
"""

param_region = validate_path_param(
"region", region or self.client.default_region
)

res = self._request(
"GET",
f"/secret-manager/v1beta1/regions/{param_region}/secret-types",
params={
"page": page,
"page_size": page_size or self.client.default_page_size,
"project_id": project_id or self.client.default_project_id,
},
)

self._throw_on_error(res)
return unmarshal_ListSecretTypesResponse(res.json())

def list_secret_types_all(
self,
*,
region: Optional[Region] = None,
project_id: Optional[str] = None,
page: Optional[int] = None,
page_size: Optional[int] = None,
) -> List[SecretType]:
"""
List secret types.
List all secret types created within a given Project.
:param region: Region to target. If none is passed will use default region from the config.
:param project_id: ID of the Project to target.
:param page:
:param page_size:
:return: :class:`List[SecretType] <List[SecretType]>`

Usage:
::

result = api.list_secret_types_all()
"""

return fetch_all_pages(
type=ListSecretTypesResponse,
key="types",
fetcher=self.list_secret_types,
args={
"region": region,
"project_id": project_id,
"page": page,
"page_size": page_size,
},
)
21 changes: 21 additions & 0 deletions scaleway/scaleway/secret/v1beta1/marshalling.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

from scaleway_core.profile import ProfileDefaults
from .types import (
SecretType,
EphemeralProperties,
SecretVersion,
EphemeralPolicy,
Expand All @@ -15,6 +16,7 @@
BrowseSecretsResponseItemSecretDetails,
BrowseSecretsResponseItem,
BrowseSecretsResponse,
ListSecretTypesResponse,
ListSecretVersionsResponse,
ListSecretsResponse,
ListTagsResponse,
Expand Down Expand Up @@ -357,6 +359,25 @@ def unmarshal_BrowseSecretsResponse(data: Any) -> BrowseSecretsResponse:
return BrowseSecretsResponse(**args)


def unmarshal_ListSecretTypesResponse(data: Any) -> ListSecretTypesResponse:
if not isinstance(data, dict):
raise TypeError(
"Unmarshalling the type 'ListSecretTypesResponse' failed as data isn't a dictionary."
)

args: Dict[str, Any] = {}

field = data.get("types", None)
if field is not None:
args["types"] = [SecretType(v) for v in field] if field is not None else None

field = data.get("total_count", None)
if field is not None:
args["total_count"] = field

return ListSecretTypesResponse(**args)


def unmarshal_ListSecretVersionsResponse(data: Any) -> ListSecretVersionsResponse:
if not isinstance(data, dict):
raise TypeError(
Expand Down
30 changes: 30 additions & 0 deletions scaleway/scaleway/secret/v1beta1/types.py
Original file line number Diff line number Diff line change
Expand Up @@ -662,6 +662,36 @@ class GetSecretVersionRequest:
"""


@dataclass
class ListSecretTypesRequest:
region: Optional[Region]
"""
Region to target. If none is passed will use default region from the config.
"""

project_id: Optional[str]
"""
ID of the Project to target.
"""

page: Optional[int]

page_size: Optional[int]


@dataclass
class ListSecretTypesResponse:
types: List[SecretType]
"""
List of secret types.
"""

total_count: int
"""
Count of all secret types matching the requested criteria.
"""


@dataclass
class ListSecretVersionsRequest:
secret_id: str
Expand Down