Skip to content

Commit f557459

Browse files
authored
feat(secret_manager): add endpoints *ByName() (#60)
1 parent 494064a commit f557459

File tree

4 files changed

+532
-0
lines changed

4 files changed

+532
-0
lines changed

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

Lines changed: 190 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,37 @@ async def get_secret(
121121
self._throw_on_error(res)
122122
return unmarshal_Secret(res.json())
123123

124+
async def get_secret_by_name(
125+
self,
126+
*,
127+
secret_name: str,
128+
region: Optional[Region] = None,
129+
) -> Secret:
130+
"""
131+
Get metadata of a Secret
132+
:param region: Region to target. If none is passed will use default region from the config
133+
:param secret_name: Name of the Secret
134+
:return: :class:`Secret <Secret>`
135+
136+
Usage:
137+
::
138+
139+
result = await api.get_secret_by_name(secret_name="example")
140+
"""
141+
142+
param_region = validate_path_param(
143+
"region", region or self.client.default_region
144+
)
145+
param_secret_name = validate_path_param("secret_name", secret_name)
146+
147+
res = self._request(
148+
"GET",
149+
f"/secret-manager/v1alpha1/regions/{param_region}/secrets-by-name/{param_secret_name}",
150+
)
151+
152+
self._throw_on_error(res)
153+
return unmarshal_Secret(res.json())
154+
124155
async def update_secret(
125156
self,
126157
*,
@@ -174,6 +205,7 @@ async def list_secrets(
174205
region: Optional[Region] = None,
175206
organization_id: Optional[str] = None,
176207
project_id: Optional[str] = None,
208+
name: Optional[str] = None,
177209
tags: Optional[List[str]] = None,
178210
order_by: ListSecretsRequestOrderBy = ListSecretsRequestOrderBy.NAME_ASC,
179211
page: Optional[int] = None,
@@ -184,6 +216,7 @@ async def list_secrets(
184216
:param region: Region to target. If none is passed will use default region from the config
185217
:param organization_id: ID of an organization to filter on (optional)
186218
:param project_id: ID of a project to filter on (optional)
219+
:param name: Secret name to filter on (optional)
187220
:param tags: List of tags to filter on (optional)
188221
:param order_by:
189222
:param page:
@@ -204,6 +237,7 @@ async def list_secrets(
204237
"GET",
205238
f"/secret-manager/v1alpha1/regions/{param_region}/secrets",
206239
params={
240+
"name": name,
207241
"order_by": order_by,
208242
"organization_id": organization_id
209243
or self.client.default_organization_id,
@@ -223,6 +257,7 @@ async def list_secrets_all(
223257
region: Optional[Region] = None,
224258
organization_id: Optional[str] = None,
225259
project_id: Optional[str] = None,
260+
name: Optional[str] = None,
226261
tags: Optional[List[str]] = None,
227262
order_by: Optional[ListSecretsRequestOrderBy] = None,
228263
page: Optional[int] = None,
@@ -233,6 +268,7 @@ async def list_secrets_all(
233268
:param region: Region to target. If none is passed will use default region from the config
234269
:param organization_id: ID of an organization to filter on (optional)
235270
:param project_id: ID of a project to filter on (optional)
271+
:param name: Secret name to filter on (optional)
236272
:param tags: List of tags to filter on (optional)
237273
:param order_by:
238274
:param page:
@@ -253,6 +289,7 @@ async def list_secrets_all(
253289
"region": region,
254290
"organization_id": organization_id,
255291
"project_id": project_id,
292+
"name": name,
256293
"tags": tags,
257294
"order_by": order_by,
258295
"page": page,
@@ -374,6 +411,43 @@ async def get_secret_version(
374411
self._throw_on_error(res)
375412
return unmarshal_SecretVersion(res.json())
376413

414+
async def get_secret_version_by_name(
415+
self,
416+
*,
417+
secret_name: str,
418+
revision: str,
419+
region: Optional[Region] = None,
420+
) -> SecretVersion:
421+
"""
422+
Get metadata of a SecretVersion
423+
:param region: Region to target. If none is passed will use default region from the config
424+
:param secret_name: Name of the Secret
425+
:param revision: Revision of the SecretVersion (may be a number or "latest")
426+
:return: :class:`SecretVersion <SecretVersion>`
427+
428+
Usage:
429+
::
430+
431+
result = await api.get_secret_version_by_name(
432+
secret_name="example",
433+
revision="example",
434+
)
435+
"""
436+
437+
param_region = validate_path_param(
438+
"region", region or self.client.default_region
439+
)
440+
param_secret_name = validate_path_param("secret_name", secret_name)
441+
param_revision = validate_path_param("revision", revision)
442+
443+
res = self._request(
444+
"GET",
445+
f"/secret-manager/v1alpha1/regions/{param_region}/secrets-by-name/{param_secret_name}/versions/{param_revision}",
446+
)
447+
448+
self._throw_on_error(res)
449+
return unmarshal_SecretVersion(res.json())
450+
377451
async def update_secret_version(
378452
self,
379453
*,
@@ -501,6 +575,85 @@ async def list_secret_versions_all(
501575
},
502576
)
503577

578+
async def list_secret_versions_by_name(
579+
self,
580+
*,
581+
secret_name: str,
582+
region: Optional[Region] = None,
583+
page: Optional[int] = None,
584+
page_size: Optional[int] = None,
585+
status: Optional[List[SecretVersionStatus]] = None,
586+
) -> ListSecretVersionsResponse:
587+
"""
588+
List versions of a secret, not returning any sensitive data
589+
:param region: Region to target. If none is passed will use default region from the config
590+
:param secret_name: Name of the Secret
591+
:param page:
592+
:param page_size:
593+
:param status: Filter results by status
594+
:return: :class:`ListSecretVersionsResponse <ListSecretVersionsResponse>`
595+
596+
Usage:
597+
::
598+
599+
result = await api.list_secret_versions_by_name(secret_name="example")
600+
"""
601+
602+
param_region = validate_path_param(
603+
"region", region or self.client.default_region
604+
)
605+
param_secret_name = validate_path_param("secret_name", secret_name)
606+
607+
res = self._request(
608+
"GET",
609+
f"/secret-manager/v1alpha1/regions/{param_region}/secrets-by-name/{param_secret_name}/versions",
610+
params={
611+
"page": page,
612+
"page_size": page_size or self.client.default_page_size,
613+
"status": status,
614+
},
615+
)
616+
617+
self._throw_on_error(res)
618+
return unmarshal_ListSecretVersionsResponse(res.json())
619+
620+
async def list_secret_versions_by_name_all(
621+
self,
622+
*,
623+
secret_name: str,
624+
region: Optional[Region] = None,
625+
page: Optional[int] = None,
626+
page_size: Optional[int] = None,
627+
status: Optional[List[SecretVersionStatus]] = None,
628+
) -> List[SecretVersion]:
629+
"""
630+
List versions of a secret, not returning any sensitive data
631+
:param region: Region to target. If none is passed will use default region from the config
632+
:param secret_name: Name of the Secret
633+
:param page:
634+
:param page_size:
635+
:param status: Filter results by status
636+
:return: :class:`List[ListSecretVersionsResponse] <List[ListSecretVersionsResponse]>`
637+
638+
Usage:
639+
::
640+
641+
result = await api.list_secret_versions_by_name_all(secret_name="example")
642+
"""
643+
644+
return await fetch_all_pages_async(
645+
type=ListSecretVersionsResponse,
646+
key="versions",
647+
fetcher=self.list_secret_versions_by_name,
648+
args={
649+
"secret_name": secret_name,
650+
"region": region,
651+
"page": page,
652+
"page_size": page_size,
653+
"status": status,
654+
},
655+
)
656+
504657
async def destroy_secret_version(
505658
self,
506659
*,
@@ -648,3 +801,40 @@ async def access_secret_version(
648801

649802
self._throw_on_error(res)
650803
return unmarshal_AccessSecretVersionResponse(res.json())
804+
805+
async def access_secret_version_by_name(
806+
self,
807+
*,
808+
secret_name: str,
809+
revision: str,
810+
region: Optional[Region] = None,
811+
) -> AccessSecretVersionResponse:
812+
"""
813+
Access a SecretVersion, returning the sensitive data
814+
:param region: Region to target. If none is passed will use default region from the config
815+
:param secret_name: Name of the Secret
816+
:param revision: Revision of the SecretVersion (may be a number or "latest")
817+
:return: :class:`AccessSecretVersionResponse <AccessSecretVersionResponse>`
818+
819+
Usage:
820+
::
821+
822+
result = await api.access_secret_version_by_name(
823+
secret_name="example",
824+
revision="example",
825+
)
826+
"""
827+
828+
param_region = validate_path_param(
829+
"region", region or self.client.default_region
830+
)
831+
param_secret_name = validate_path_param("secret_name", secret_name)
832+
param_revision = validate_path_param("revision", revision)
833+
834+
res = self._request(
835+
"GET",
836+
f"/secret-manager/v1alpha1/regions/{param_region}/secrets-by-name/{param_secret_name}/versions/{param_revision}/access",
837+
)
838+
839+
self._throw_on_error(res)
840+
return unmarshal_AccessSecretVersionResponse(res.json())

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

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,19 @@ class GetSecretRequest:
239239
"""
240240

241241

242+
@dataclass
243+
class GetSecretByNameRequest:
244+
region: Optional[Region]
245+
"""
246+
Region to target. If none is passed will use default region from the config
247+
"""
248+
249+
secret_name: str
250+
"""
251+
Name of the Secret
252+
"""
253+
254+
242255
@dataclass
243256
class UpdateSecretRequest:
244257
region: Optional[Region]
@@ -284,6 +297,11 @@ class ListSecretsRequest:
284297
ID of a project to filter on (optional)
285298
"""
286299

300+
name: Optional[str]
301+
"""
302+
Secret name to filter on (optional)
303+
"""
304+
287305
tags: Optional[List[str]]
288306
"""
289307
List of tags to filter on (optional)
@@ -350,6 +368,24 @@ class GetSecretVersionRequest:
350368
"""
351369

352370

371+
@dataclass
372+
class GetSecretVersionByNameRequest:
373+
region: Optional[Region]
374+
"""
375+
Region to target. If none is passed will use default region from the config
376+
"""
377+
378+
secret_name: str
379+
"""
380+
Name of the Secret
381+
"""
382+
383+
revision: str
384+
"""
385+
Revision of the SecretVersion (may be a number or "latest")
386+
"""
387+
388+
353389
@dataclass
354390
class UpdateSecretVersionRequest:
355391
region: Optional[Region]
@@ -395,6 +431,28 @@ class ListSecretVersionsRequest:
395431
"""
396432

397433

434+
@dataclass
435+
class ListSecretVersionsByNameRequest:
436+
region: Optional[Region]
437+
"""
438+
Region to target. If none is passed will use default region from the config
439+
"""
440+
441+
secret_name: str
442+
"""
443+
Name of the Secret
444+
"""
445+
446+
page: Optional[int]
447+
448+
page_size: Optional[int]
449+
450+
status: Optional[List[SecretVersionStatus]]
451+
"""
452+
Filter results by status
453+
"""
454+
455+
398456
@dataclass
399457
class DestroySecretVersionRequest:
400458
region: Optional[Region]
@@ -465,3 +523,21 @@ class AccessSecretVersionRequest:
465523
"""
466524
Revision of the SecretVersion (may be a number or "latest")
467525
"""
526+
527+
528+
@dataclass
529+
class AccessSecretVersionByNameRequest:
530+
region: Optional[Region]
531+
"""
532+
Region to target. If none is passed will use default region from the config
533+
"""
534+
535+
secret_name: str
536+
"""
537+
Name of the Secret
538+
"""
539+
540+
revision: str
541+
"""
542+
Revision of the SecretVersion (may be a number or "latest")
543+
"""

0 commit comments

Comments
 (0)