Skip to content

Commit 536f9e2

Browse files
authored
feat(secret-manager): add endpoints for using name to retrieve secrets (#46)
1 parent f9361f5 commit 536f9e2

File tree

4 files changed

+210
-46
lines changed

4 files changed

+210
-46
lines changed

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

Lines changed: 67 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@
88
Region,
99
)
1010
from scaleway_core.utils import (
11+
OneOfPossibility,
1112
fetch_all_pages_async,
13+
resolve_one_of,
1214
validate_path_param,
1315
)
1416
from .types import (
@@ -93,19 +95,23 @@ async def create_secret(
9395
async def get_secret(
9496
self,
9597
*,
96-
secret_id: str,
9798
region: Optional[Region] = None,
99+
secret_id: Optional[str] = None,
100+
secret_name: Optional[str] = None,
98101
) -> Secret:
99102
"""
100103
Get metadata of a Secret
101104
:param region: Region to target. If none is passed will use default region from the config
102105
:param secret_id: ID of the Secret
106+
:param secret_name: Name of the Secret (alternative to secret_id).
107+
108+
One-of ('secret_ref'): at most one of 'secret_name' could be set.
103109
:return: :class:`Secret <Secret>`
104110
105111
Usage:
106112
::
107113
108-
result = await api.get_secret(secret_id="example")
114+
result = await api.get_secret()
109115
"""
110116

111117
param_region = validate_path_param(
@@ -116,6 +122,13 @@ async def get_secret(
116122
res = self._request(
117123
"GET",
118124
f"/secret-manager/v1alpha1/regions/{param_region}/secrets/{param_secret_id}",
125+
params={
126+
**resolve_one_of(
127+
[
128+
OneOfPossibility("secret_name", secret_name),
129+
]
130+
),
131+
},
119132
)
120133

121134
self._throw_on_error(res)
@@ -175,6 +188,7 @@ async def list_secrets(
175188
organization_id: Optional[str] = None,
176189
project_id: Optional[str] = None,
177190
tags: Optional[List[str]] = None,
191+
name: Optional[str] = None,
178192
order_by: ListSecretsRequestOrderBy = ListSecretsRequestOrderBy.NAME_ASC,
179193
page: Optional[int] = None,
180194
page_size: Optional[int] = None,
@@ -185,6 +199,7 @@ async def list_secrets(
185199
:param organization_id: ID of an organization to filter on (optional)
186200
:param project_id: ID of a project to filter on (optional)
187201
:param tags: List of tags to filter on (optional)
202+
:param name: Name of the secrets (optional)
188203
:param order_by:
189204
:param page:
190205
:param page_size:
@@ -204,6 +219,7 @@ async def list_secrets(
204219
"GET",
205220
f"/secret-manager/v1alpha1/regions/{param_region}/secrets",
206221
params={
222+
"name": name,
207223
"order_by": order_by,
208224
"organization_id": organization_id
209225
or self.client.default_organization_id,
@@ -224,6 +240,7 @@ async def list_secrets_all(
224240
organization_id: Optional[str] = None,
225241
project_id: Optional[str] = None,
226242
tags: Optional[List[str]] = None,
243+
name: Optional[str] = None,
227244
order_by: Optional[ListSecretsRequestOrderBy] = None,
228245
page: Optional[int] = None,
229246
page_size: Optional[int] = None,
@@ -234,6 +251,7 @@ async def list_secrets_all(
234251
:param organization_id: ID of an organization to filter on (optional)
235252
:param project_id: ID of a project to filter on (optional)
236253
:param tags: List of tags to filter on (optional)
254+
:param name: Name of the secrets (optional)
237255
:param order_by:
238256
:param page:
239257
:param page_size:
@@ -254,6 +272,7 @@ async def list_secrets_all(
254272
"organization_id": organization_id,
255273
"project_id": project_id,
256274
"tags": tags,
275+
"name": name,
257276
"order_by": order_by,
258277
"page": page,
259278
"page_size": page_size,
@@ -340,24 +359,25 @@ async def create_secret_version(
340359
async def get_secret_version(
341360
self,
342361
*,
343-
secret_id: str,
344362
revision: str,
345363
region: Optional[Region] = None,
364+
secret_id: Optional[str] = None,
365+
secret_name: Optional[str] = None,
346366
) -> SecretVersion:
347367
"""
348368
Get metadata of a SecretVersion
349369
:param region: Region to target. If none is passed will use default region from the config
350370
:param secret_id: ID of the Secret
351371
:param revision: Revision of the SecretVersion (may be a number or "latest")
372+
:param secret_name: Name of the Secret (alternative to secret_id).
373+
374+
One-of ('secret_ref'): at most one of 'secret_name' could be set.
352375
:return: :class:`SecretVersion <SecretVersion>`
353376
354377
Usage:
355378
::
356379
357-
result = await api.get_secret_version(
358-
secret_id="example",
359-
revision="example",
360-
)
380+
result = await api.get_secret_version(revision="example")
361381
"""
362382

363383
param_region = validate_path_param(
@@ -369,6 +389,13 @@ async def get_secret_version(
369389
res = self._request(
370390
"GET",
371391
f"/secret-manager/v1alpha1/regions/{param_region}/secrets/{param_secret_id}/versions/{param_revision}",
392+
params={
393+
**resolve_one_of(
394+
[
395+
OneOfPossibility("secret_name", secret_name),
396+
]
397+
),
398+
},
372399
)
373400

374401
self._throw_on_error(res)
@@ -425,8 +452,9 @@ async def update_secret_version(
425452
async def list_secret_versions(
426453
self,
427454
*,
428-
secret_id: str,
429455
region: Optional[Region] = None,
456+
secret_id: Optional[str] = None,
457+
secret_name: Optional[str] = None,
430458
page: Optional[int] = None,
431459
page_size: Optional[int] = None,
432460
status: Optional[List[SecretVersionStatus]] = None,
@@ -435,6 +463,9 @@ async def list_secret_versions(
435463
List versions of a secret, not returning any sensitive data
436464
:param region: Region to target. If none is passed will use default region from the config
437465
:param secret_id: ID of the Secret
466+
:param secret_name: Name of the Secret (alternative to secret_id).
467+
468+
One-of ('secret_ref'): at most one of 'secret_name' could be set.
438469
:param page:
439470
:param page_size:
440471
:param status: Filter results by status
@@ -443,7 +474,7 @@ async def list_secret_versions(
443474
Usage:
444475
::
445476
446-
result = await api.list_secret_versions(secret_id="example")
477+
result = await api.list_secret_versions()
447478
"""
448479

449480
param_region = validate_path_param(
@@ -458,6 +489,11 @@ async def list_secret_versions(
458489
"page": page,
459490
"page_size": page_size or self.client.default_page_size,
460491
"status": status,
492+
**resolve_one_of(
493+
[
494+
OneOfPossibility("secret_name", secret_name),
495+
]
496+
),
461497
},
462498
)
463499

@@ -467,8 +503,9 @@ async def list_secret_versions(
467503
async def list_secret_versions_all(
468504
self,
469505
*,
470-
secret_id: str,
471506
region: Optional[Region] = None,
507+
secret_id: Optional[str] = None,
508+
secret_name: Optional[str] = None,
472509
page: Optional[int] = None,
473510
page_size: Optional[int] = None,
474511
status: Optional[List[SecretVersionStatus]] = None,
@@ -477,6 +514,9 @@ async def list_secret_versions_all(
477514
List versions of a secret, not returning any sensitive data
478515
:param region: Region to target. If none is passed will use default region from the config
479516
:param secret_id: ID of the Secret
517+
:param secret_name: Name of the Secret (alternative to secret_id).
518+
519+
One-of ('secret_ref'): at most one of 'secret_name' could be set.
480520
:param page:
481521
:param page_size:
482522
:param status: Filter results by status
@@ -485,16 +525,17 @@ async def list_secret_versions_all(
485525
Usage:
486526
::
487527
488-
result = await api.list_secret_versions_all(secret_id="example")
528+
result = await api.list_secret_versions_all()
489529
"""
490530

491531
return await fetch_all_pages_async(
492532
type=ListSecretVersionsResponse,
493533
key="versions",
494534
fetcher=self.list_secret_versions,
495535
args={
496-
"secret_id": secret_id,
497536
"region": region,
537+
"secret_id": secret_id,
538+
"secret_name": secret_name,
498539
"page": page,
499540
"page_size": page_size,
500541
"status": status,
@@ -615,24 +656,25 @@ async def disable_secret_version(
615656
async def access_secret_version(
616657
self,
617658
*,
618-
secret_id: str,
619659
revision: str,
620660
region: Optional[Region] = None,
661+
secret_id: Optional[str] = None,
662+
secret_name: Optional[str] = None,
621663
) -> AccessSecretVersionResponse:
622664
"""
623665
Access a SecretVersion, returning the sensitive data
624666
:param region: Region to target. If none is passed will use default region from the config
625667
:param secret_id: ID of the Secret
626-
:param revision: Revision of the SecretVersion (may be a number or "latest")
668+
:param revision: Revision of the SecretVersion (may be a number, "latest" or "latest_enabled")
669+
:param secret_name: Name of the Secret (alternative to secret_id).
670+
671+
One-of ('secret_ref'): at most one of 'secret_name' could be set.
627672
:return: :class:`AccessSecretVersionResponse <AccessSecretVersionResponse>`
628673
629674
Usage:
630675
::
631676
632-
result = await api.access_secret_version(
633-
secret_id="example",
634-
revision="example",
635-
)
677+
result = await api.access_secret_version(revision="example")
636678
"""
637679

638680
param_region = validate_path_param(
@@ -644,6 +686,13 @@ async def access_secret_version(
644686
res = self._request(
645687
"GET",
646688
f"/secret-manager/v1alpha1/regions/{param_region}/secrets/{param_secret_id}/versions/{param_revision}/access",
689+
params={
690+
**resolve_one_of(
691+
[
692+
OneOfPossibility("secret_name", secret_name),
693+
]
694+
),
695+
},
647696
)
648697

649698
self._throw_on_error(res)

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

Lines changed: 38 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -233,11 +233,18 @@ class GetSecretRequest:
233233
Region to target. If none is passed will use default region from the config
234234
"""
235235

236-
secret_id: str
236+
secret_id: Optional[str]
237237
"""
238238
ID of the Secret
239239
"""
240240

241+
secret_name: Optional[str]
242+
"""
243+
Name of the Secret (alternative to secret_id).
244+
245+
One-of ('secret_ref'): at most one of 'secret_name' could be set.
246+
"""
247+
241248

242249
@dataclass
243250
class UpdateSecretRequest:
@@ -289,6 +296,11 @@ class ListSecretsRequest:
289296
List of tags to filter on (optional)
290297
"""
291298

299+
name: Optional[str]
300+
"""
301+
Name of the secrets (optional)
302+
"""
303+
292304
order_by: Optional[ListSecretsRequestOrderBy]
293305

294306
page: Optional[int]
@@ -339,7 +351,7 @@ class GetSecretVersionRequest:
339351
Region to target. If none is passed will use default region from the config
340352
"""
341353

342-
secret_id: str
354+
secret_id: Optional[str]
343355
"""
344356
ID of the Secret
345357
"""
@@ -349,6 +361,13 @@ class GetSecretVersionRequest:
349361
Revision of the SecretVersion (may be a number or "latest")
350362
"""
351363

364+
secret_name: Optional[str]
365+
"""
366+
Name of the Secret (alternative to secret_id).
367+
368+
One-of ('secret_ref'): at most one of 'secret_name' could be set.
369+
"""
370+
352371

353372
@dataclass
354373
class UpdateSecretVersionRequest:
@@ -380,11 +399,18 @@ class ListSecretVersionsRequest:
380399
Region to target. If none is passed will use default region from the config
381400
"""
382401

383-
secret_id: str
402+
secret_id: Optional[str]
384403
"""
385404
ID of the Secret
386405
"""
387406

407+
secret_name: Optional[str]
408+
"""
409+
Name of the Secret (alternative to secret_id).
410+
411+
One-of ('secret_ref'): at most one of 'secret_name' could be set.
412+
"""
413+
388414
page: Optional[int]
389415

390416
page_size: Optional[int]
@@ -456,12 +482,19 @@ class AccessSecretVersionRequest:
456482
Region to target. If none is passed will use default region from the config
457483
"""
458484

459-
secret_id: str
485+
secret_id: Optional[str]
460486
"""
461487
ID of the Secret
462488
"""
463489

464490
revision: str
465491
"""
466-
Revision of the SecretVersion (may be a number or "latest")
492+
Revision of the SecretVersion (may be a number, "latest" or "latest_enabled")
493+
"""
494+
495+
secret_name: Optional[str]
496+
"""
497+
Name of the Secret (alternative to secret_id).
498+
499+
One-of ('secret_ref'): at most one of 'secret_name' could be set.
467500
"""

0 commit comments

Comments
 (0)