Skip to content

feat(secret_manager): add endpoints *ByName() #60

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 1 commit into from
Feb 27, 2023
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
190 changes: 190 additions & 0 deletions scaleway-async/scaleway_async/secret/v1alpha1/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,37 @@ async def get_secret(
self._throw_on_error(res)
return unmarshal_Secret(res.json())

async def get_secret_by_name(
self,
*,
secret_name: str,
region: Optional[Region] = None,
) -> Secret:
"""
Get metadata of a Secret
:param region: Region to target. If none is passed will use default region from the config
:param secret_name: Name of the Secret
:return: :class:`Secret <Secret>`

Usage:
::

result = await api.get_secret_by_name(secret_name="example")
"""

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

res = self._request(
"GET",
f"/secret-manager/v1alpha1/regions/{param_region}/secrets-by-name/{param_secret_name}",
)

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

async def update_secret(
self,
*,
Expand Down Expand Up @@ -174,6 +205,7 @@ async def list_secrets(
region: Optional[Region] = None,
organization_id: Optional[str] = None,
project_id: Optional[str] = None,
name: Optional[str] = None,
tags: Optional[List[str]] = None,
order_by: ListSecretsRequestOrderBy = ListSecretsRequestOrderBy.NAME_ASC,
page: Optional[int] = None,
Expand All @@ -184,6 +216,7 @@ async def list_secrets(
:param region: Region to target. If none is passed will use default region from the config
:param organization_id: ID of an organization to filter on (optional)
:param project_id: ID of a project to filter on (optional)
:param name: Secret name to filter on (optional)
:param tags: List of tags to filter on (optional)
:param order_by:
:param page:
Expand All @@ -204,6 +237,7 @@ async def list_secrets(
"GET",
f"/secret-manager/v1alpha1/regions/{param_region}/secrets",
params={
"name": name,
"order_by": order_by,
"organization_id": organization_id
or self.client.default_organization_id,
Expand All @@ -223,6 +257,7 @@ async def list_secrets_all(
region: Optional[Region] = None,
organization_id: Optional[str] = None,
project_id: Optional[str] = None,
name: Optional[str] = None,
tags: Optional[List[str]] = None,
order_by: Optional[ListSecretsRequestOrderBy] = None,
page: Optional[int] = None,
Expand All @@ -233,6 +268,7 @@ async def list_secrets_all(
:param region: Region to target. If none is passed will use default region from the config
:param organization_id: ID of an organization to filter on (optional)
:param project_id: ID of a project to filter on (optional)
:param name: Secret name to filter on (optional)
:param tags: List of tags to filter on (optional)
:param order_by:
:param page:
Expand All @@ -253,6 +289,7 @@ async def list_secrets_all(
"region": region,
"organization_id": organization_id,
"project_id": project_id,
"name": name,
"tags": tags,
"order_by": order_by,
"page": page,
Expand Down Expand Up @@ -374,6 +411,43 @@ async def get_secret_version(
self._throw_on_error(res)
return unmarshal_SecretVersion(res.json())

async def get_secret_version_by_name(
self,
*,
secret_name: str,
revision: str,
region: Optional[Region] = None,
) -> SecretVersion:
"""
Get metadata of a SecretVersion
:param region: Region to target. If none is passed will use default region from the config
:param secret_name: Name of the Secret
:param revision: Revision of the SecretVersion (may be a number or "latest")
:return: :class:`SecretVersion <SecretVersion>`

Usage:
::

result = await api.get_secret_version_by_name(
secret_name="example",
revision="example",
)
"""

param_region = validate_path_param(
"region", region or self.client.default_region
)
param_secret_name = validate_path_param("secret_name", secret_name)
param_revision = validate_path_param("revision", revision)

res = self._request(
"GET",
f"/secret-manager/v1alpha1/regions/{param_region}/secrets-by-name/{param_secret_name}/versions/{param_revision}",
)

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

async def update_secret_version(
self,
*,
Expand Down Expand Up @@ -501,6 +575,85 @@ async def list_secret_versions_all(
},
)

async def list_secret_versions_by_name(
self,
*,
secret_name: str,
region: Optional[Region] = None,
page: Optional[int] = None,
page_size: Optional[int] = None,
status: Optional[List[SecretVersionStatus]] = None,
) -> ListSecretVersionsResponse:
"""
List versions of a secret, not returning any sensitive data
:param region: Region to target. If none is passed will use default region from the config
:param secret_name: Name of the Secret
:param page:
:param page_size:
:param status: Filter results by status
:return: :class:`ListSecretVersionsResponse <ListSecretVersionsResponse>`

Usage:
::

result = await api.list_secret_versions_by_name(secret_name="example")
"""

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

res = self._request(
"GET",
f"/secret-manager/v1alpha1/regions/{param_region}/secrets-by-name/{param_secret_name}/versions",
params={
"page": page,
"page_size": page_size or self.client.default_page_size,
"status": status,
},
)

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

async def list_secret_versions_by_name_all(
self,
*,
secret_name: str,
region: Optional[Region] = None,
page: Optional[int] = None,
page_size: Optional[int] = None,
status: Optional[List[SecretVersionStatus]] = None,
) -> List[SecretVersion]:
"""
List versions of a secret, not returning any sensitive data
:param region: Region to target. If none is passed will use default region from the config
:param secret_name: Name of the Secret
:param page:
:param page_size:
:param status: Filter results by status
:return: :class:`List[ListSecretVersionsResponse] <List[ListSecretVersionsResponse]>`

Usage:
::

result = await api.list_secret_versions_by_name_all(secret_name="example")
"""

return await fetch_all_pages_async(
type=ListSecretVersionsResponse,
key="versions",
fetcher=self.list_secret_versions_by_name,
args={
"secret_name": secret_name,
"region": region,
"page": page,
"page_size": page_size,
"status": status,
},
)

async def destroy_secret_version(
self,
*,
Expand Down Expand Up @@ -648,3 +801,40 @@ async def access_secret_version(

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

async def access_secret_version_by_name(
self,
*,
secret_name: str,
revision: str,
region: Optional[Region] = None,
) -> AccessSecretVersionResponse:
"""
Access a SecretVersion, returning the sensitive data
:param region: Region to target. If none is passed will use default region from the config
:param secret_name: Name of the Secret
:param revision: Revision of the SecretVersion (may be a number or "latest")
:return: :class:`AccessSecretVersionResponse <AccessSecretVersionResponse>`

Usage:
::

result = await api.access_secret_version_by_name(
secret_name="example",
revision="example",
)
"""

param_region = validate_path_param(
"region", region or self.client.default_region
)
param_secret_name = validate_path_param("secret_name", secret_name)
param_revision = validate_path_param("revision", revision)

res = self._request(
"GET",
f"/secret-manager/v1alpha1/regions/{param_region}/secrets-by-name/{param_secret_name}/versions/{param_revision}/access",
)

self._throw_on_error(res)
return unmarshal_AccessSecretVersionResponse(res.json())
76 changes: 76 additions & 0 deletions scaleway-async/scaleway_async/secret/v1alpha1/types.py
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,19 @@ class GetSecretRequest:
"""


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

secret_name: str
"""
Name of the Secret
"""


@dataclass
class UpdateSecretRequest:
region: Optional[Region]
Expand Down Expand Up @@ -284,6 +297,11 @@ class ListSecretsRequest:
ID of a project to filter on (optional)
"""

name: Optional[str]
"""
Secret name to filter on (optional)
"""

tags: Optional[List[str]]
"""
List of tags to filter on (optional)
Expand Down Expand Up @@ -350,6 +368,24 @@ class GetSecretVersionRequest:
"""


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

secret_name: str
"""
Name of the Secret
"""

revision: str
"""
Revision of the SecretVersion (may be a number or "latest")
"""


@dataclass
class UpdateSecretVersionRequest:
region: Optional[Region]
Expand Down Expand Up @@ -395,6 +431,28 @@ class ListSecretVersionsRequest:
"""


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

secret_name: str
"""
Name of the Secret
"""

page: Optional[int]

page_size: Optional[int]

status: Optional[List[SecretVersionStatus]]
"""
Filter results by status
"""


@dataclass
class DestroySecretVersionRequest:
region: Optional[Region]
Expand Down Expand Up @@ -465,3 +523,21 @@ class AccessSecretVersionRequest:
"""
Revision of the SecretVersion (may be a number or "latest")
"""


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

secret_name: str
"""
Name of the Secret
"""

revision: str
"""
Revision of the SecretVersion (may be a number or "latest")
"""
Loading