From abe1f5634c0521f49c8ab5e183a57d871fb7f2a2 Mon Sep 17 00:00:00 2001 From: scaleway-bot Date: Tue, 21 Oct 2025 16:17:27 +0000 Subject: [PATCH] feat: update generated APIs --- .../scaleway_async/iam/v1alpha1/__init__.py | 4 ++ .../scaleway_async/iam/v1alpha1/api.py | 42 ++++++++++++++ .../iam/v1alpha1/marshalling.py | 57 +++++++++++++++++++ .../scaleway_async/iam/v1alpha1/types.py | 23 ++++++++ scaleway/scaleway/iam/v1alpha1/__init__.py | 4 ++ scaleway/scaleway/iam/v1alpha1/api.py | 42 ++++++++++++++ scaleway/scaleway/iam/v1alpha1/marshalling.py | 57 +++++++++++++++++++ scaleway/scaleway/iam/v1alpha1/types.py | 23 ++++++++ 8 files changed, 252 insertions(+) diff --git a/scaleway-async/scaleway_async/iam/v1alpha1/__init__.py b/scaleway-async/scaleway_async/iam/v1alpha1/__init__.py index fcb4941f..7be11678 100644 --- a/scaleway-async/scaleway_async/iam/v1alpha1/__init__.py +++ b/scaleway-async/scaleway_async/iam/v1alpha1/__init__.py @@ -112,6 +112,8 @@ from .types import MFAOTP from .types import Organization from .types import OrganizationSecuritySettings +from .types import ParseSamlMetadataRequest +from .types import ParseSamlMetadataResponse from .types import RemoveGroupMemberRequest from .types import RemoveUserConnectionRequest from .types import Saml @@ -248,6 +250,8 @@ "MFAOTP", "Organization", "OrganizationSecuritySettings", + "ParseSamlMetadataRequest", + "ParseSamlMetadataResponse", "RemoveGroupMemberRequest", "RemoveUserConnectionRequest", "Saml", diff --git a/scaleway-async/scaleway_async/iam/v1alpha1/api.py b/scaleway-async/scaleway_async/iam/v1alpha1/api.py index 13b9b9f9..9d47e95a 100644 --- a/scaleway-async/scaleway_async/iam/v1alpha1/api.py +++ b/scaleway-async/scaleway_async/iam/v1alpha1/api.py @@ -5,6 +5,9 @@ from typing import Optional from scaleway_core.api import API +from scaleway_core.bridge import ( + ScwFile, +) from scaleway_core.utils import ( OneOfPossibility, random_name, @@ -64,6 +67,8 @@ MFAOTP, Organization, OrganizationSecuritySettings, + ParseSamlMetadataRequest, + ParseSamlMetadataResponse, PermissionSet, Policy, Quotum, @@ -123,6 +128,7 @@ unmarshal_MFAOTP, unmarshal_Organization, unmarshal_OrganizationSecuritySettings, + unmarshal_ParseSamlMetadataResponse, unmarshal_Saml, unmarshal_SetRulesResponse, unmarshal_ValidateUserMFAOTPResponse, @@ -137,6 +143,7 @@ marshal_CreateSSHKeyRequest, marshal_CreateUserRequest, marshal_JoinUserConnectionRequest, + marshal_ParseSamlMetadataRequest, marshal_RemoveGroupMemberRequest, marshal_RemoveUserConnectionRequest, marshal_SetGroupMembersRequest, @@ -2913,6 +2920,7 @@ async def update_organization_security_settings( grace_period_duration: Optional[str] = None, login_attempts_before_locked: Optional[int] = None, max_login_session_duration: Optional[str] = None, + max_api_key_expiration_duration: Optional[str] = None, ) -> OrganizationSecuritySettings: """ Update the security settings of an Organization. @@ -2921,6 +2929,7 @@ async def update_organization_security_settings( :param grace_period_duration: Duration of the grace period to renew password or enable MFA. :param login_attempts_before_locked: Number of login attempts before the account is locked. :param max_login_session_duration: Maximum duration a login session will stay active before needing to relogin. + :param max_api_key_expiration_duration: Maximum duration the `expires_at` field of an API key can represent. A value of 0 means there is no maximum duration. :return: :class:`OrganizationSecuritySettings ` Usage: @@ -2943,6 +2952,7 @@ async def update_organization_security_settings( grace_period_duration=grace_period_duration, login_attempts_before_locked=login_attempts_before_locked, max_login_session_duration=max_login_session_duration, + max_api_key_expiration_duration=max_api_key_expiration_duration, ), self.client, ), @@ -3188,6 +3198,38 @@ async def delete_saml( self._throw_on_error(res) + async def parse_saml_metadata( + self, + *, + file: ScwFile, + ) -> ParseSamlMetadataResponse: + """ + Parse SAML xml metadata file. + :param file: + :return: :class:`ParseSamlMetadataResponse ` + + Usage: + :: + + result = await api.parse_saml_metadata( + file=, + ) + """ + + res = self._request( + "POST", + "/iam/v1alpha1/parse-saml-metadata", + body=marshal_ParseSamlMetadataRequest( + ParseSamlMetadataRequest( + file=file, + ), + self.client, + ), + ) + + self._throw_on_error(res) + return unmarshal_ParseSamlMetadataResponse(res.json()) + async def list_saml_certificates( self, *, diff --git a/scaleway-async/scaleway_async/iam/v1alpha1/marshalling.py b/scaleway-async/scaleway_async/iam/v1alpha1/marshalling.py index 0bc990e1..9146f4b0 100644 --- a/scaleway-async/scaleway_async/iam/v1alpha1/marshalling.py +++ b/scaleway-async/scaleway_async/iam/v1alpha1/marshalling.py @@ -5,6 +5,9 @@ from dateutil import parser from scaleway_core.profile import ProfileDefaults +from scaleway_core.bridge import ( + marshal_ScwFile, +) from scaleway_core.utils import ( OneOfPossibility, resolve_one_of, @@ -56,6 +59,7 @@ MFAOTP, Organization, OrganizationSecuritySettings, + ParseSamlMetadataResponse, SamlServiceProvider, Saml, SetRulesResponse, @@ -73,6 +77,7 @@ CreateUserRequestMember, CreateUserRequest, JoinUserConnectionRequest, + ParseSamlMetadataRequest, RemoveGroupMemberRequest, RemoveUserConnectionRequest, SetGroupMembersRequest, @@ -1598,9 +1603,44 @@ def unmarshal_OrganizationSecuritySettings(data: Any) -> OrganizationSecuritySet else: args["max_login_session_duration"] = None + field = data.get("max_api_key_expiration_duration", None) + if field is not None: + args["max_api_key_expiration_duration"] = field + else: + args["max_api_key_expiration_duration"] = None + return OrganizationSecuritySettings(**args) +def unmarshal_ParseSamlMetadataResponse(data: Any) -> ParseSamlMetadataResponse: + if not isinstance(data, dict): + raise TypeError( + "Unmarshalling the type 'ParseSamlMetadataResponse' failed as data isn't a dictionary." + ) + + args: dict[str, Any] = {} + + field = data.get("single_sign_on_url", None) + if field is not None: + args["single_sign_on_url"] = field + else: + args["single_sign_on_url"] = None + + field = data.get("entity_id", None) + if field is not None: + args["entity_id"] = field + else: + args["entity_id"] = None + + field = data.get("signing_certificates", None) + if field is not None: + args["signing_certificates"] = field + else: + args["signing_certificates"] = None + + return ParseSamlMetadataResponse(**args) + + def unmarshal_SamlServiceProvider(data: Any) -> SamlServiceProvider: if not isinstance(data, dict): raise TypeError( @@ -2020,6 +2060,18 @@ def marshal_JoinUserConnectionRequest( return output +def marshal_ParseSamlMetadataRequest( + request: ParseSamlMetadataRequest, + defaults: ProfileDefaults, +) -> dict[str, Any]: + output: dict[str, Any] = {} + + if request.file is not None: + output["file"] = marshal_ScwFile(request.file, defaults) + + return output + + def marshal_RemoveGroupMemberRequest( request: RemoveGroupMemberRequest, defaults: ProfileDefaults, @@ -2187,6 +2239,11 @@ def marshal_UpdateOrganizationSecuritySettingsRequest( if request.max_login_session_duration is not None: output["max_login_session_duration"] = request.max_login_session_duration + if request.max_api_key_expiration_duration is not None: + output["max_api_key_expiration_duration"] = ( + request.max_api_key_expiration_duration + ) + return output diff --git a/scaleway-async/scaleway_async/iam/v1alpha1/types.py b/scaleway-async/scaleway_async/iam/v1alpha1/types.py index 60984d5b..5a6394f7 100644 --- a/scaleway-async/scaleway_async/iam/v1alpha1/types.py +++ b/scaleway-async/scaleway_async/iam/v1alpha1/types.py @@ -9,6 +9,7 @@ from scaleway_core.bridge import ( Region as ScwRegion, + ScwFile, Zone as ScwZone, ) from scaleway_core.utils import ( @@ -2138,6 +2139,23 @@ class OrganizationSecuritySettings: Maximum duration a login session will stay active before needing to relogin. """ + max_api_key_expiration_duration: Optional[str] = None + """ + Maximum duration the `expires_at` field of an API key can represent. A value of 0 means there is no maximum duration. + """ + + +@dataclass +class ParseSamlMetadataRequest: + file: ScwFile + + +@dataclass +class ParseSamlMetadataResponse: + single_sign_on_url: str + entity_id: str + signing_certificates: list[str] + @dataclass class RemoveGroupMemberRequest: @@ -2360,6 +2378,11 @@ class UpdateOrganizationSecuritySettingsRequest: Maximum duration a login session will stay active before needing to relogin. """ + max_api_key_expiration_duration: Optional[str] = None + """ + Maximum duration the `expires_at` field of an API key can represent. A value of 0 means there is no maximum duration. + """ + @dataclass class UpdatePolicyRequest: diff --git a/scaleway/scaleway/iam/v1alpha1/__init__.py b/scaleway/scaleway/iam/v1alpha1/__init__.py index fcb4941f..7be11678 100644 --- a/scaleway/scaleway/iam/v1alpha1/__init__.py +++ b/scaleway/scaleway/iam/v1alpha1/__init__.py @@ -112,6 +112,8 @@ from .types import MFAOTP from .types import Organization from .types import OrganizationSecuritySettings +from .types import ParseSamlMetadataRequest +from .types import ParseSamlMetadataResponse from .types import RemoveGroupMemberRequest from .types import RemoveUserConnectionRequest from .types import Saml @@ -248,6 +250,8 @@ "MFAOTP", "Organization", "OrganizationSecuritySettings", + "ParseSamlMetadataRequest", + "ParseSamlMetadataResponse", "RemoveGroupMemberRequest", "RemoveUserConnectionRequest", "Saml", diff --git a/scaleway/scaleway/iam/v1alpha1/api.py b/scaleway/scaleway/iam/v1alpha1/api.py index d4856b3a..e765fc73 100644 --- a/scaleway/scaleway/iam/v1alpha1/api.py +++ b/scaleway/scaleway/iam/v1alpha1/api.py @@ -5,6 +5,9 @@ from typing import Optional from scaleway_core.api import API +from scaleway_core.bridge import ( + ScwFile, +) from scaleway_core.utils import ( OneOfPossibility, random_name, @@ -64,6 +67,8 @@ MFAOTP, Organization, OrganizationSecuritySettings, + ParseSamlMetadataRequest, + ParseSamlMetadataResponse, PermissionSet, Policy, Quotum, @@ -123,6 +128,7 @@ unmarshal_MFAOTP, unmarshal_Organization, unmarshal_OrganizationSecuritySettings, + unmarshal_ParseSamlMetadataResponse, unmarshal_Saml, unmarshal_SetRulesResponse, unmarshal_ValidateUserMFAOTPResponse, @@ -137,6 +143,7 @@ marshal_CreateSSHKeyRequest, marshal_CreateUserRequest, marshal_JoinUserConnectionRequest, + marshal_ParseSamlMetadataRequest, marshal_RemoveGroupMemberRequest, marshal_RemoveUserConnectionRequest, marshal_SetGroupMembersRequest, @@ -2913,6 +2920,7 @@ def update_organization_security_settings( grace_period_duration: Optional[str] = None, login_attempts_before_locked: Optional[int] = None, max_login_session_duration: Optional[str] = None, + max_api_key_expiration_duration: Optional[str] = None, ) -> OrganizationSecuritySettings: """ Update the security settings of an Organization. @@ -2921,6 +2929,7 @@ def update_organization_security_settings( :param grace_period_duration: Duration of the grace period to renew password or enable MFA. :param login_attempts_before_locked: Number of login attempts before the account is locked. :param max_login_session_duration: Maximum duration a login session will stay active before needing to relogin. + :param max_api_key_expiration_duration: Maximum duration the `expires_at` field of an API key can represent. A value of 0 means there is no maximum duration. :return: :class:`OrganizationSecuritySettings ` Usage: @@ -2943,6 +2952,7 @@ def update_organization_security_settings( grace_period_duration=grace_period_duration, login_attempts_before_locked=login_attempts_before_locked, max_login_session_duration=max_login_session_duration, + max_api_key_expiration_duration=max_api_key_expiration_duration, ), self.client, ), @@ -3188,6 +3198,38 @@ def delete_saml( self._throw_on_error(res) + def parse_saml_metadata( + self, + *, + file: ScwFile, + ) -> ParseSamlMetadataResponse: + """ + Parse SAML xml metadata file. + :param file: + :return: :class:`ParseSamlMetadataResponse ` + + Usage: + :: + + result = api.parse_saml_metadata( + file=, + ) + """ + + res = self._request( + "POST", + "/iam/v1alpha1/parse-saml-metadata", + body=marshal_ParseSamlMetadataRequest( + ParseSamlMetadataRequest( + file=file, + ), + self.client, + ), + ) + + self._throw_on_error(res) + return unmarshal_ParseSamlMetadataResponse(res.json()) + def list_saml_certificates( self, *, diff --git a/scaleway/scaleway/iam/v1alpha1/marshalling.py b/scaleway/scaleway/iam/v1alpha1/marshalling.py index 0bc990e1..9146f4b0 100644 --- a/scaleway/scaleway/iam/v1alpha1/marshalling.py +++ b/scaleway/scaleway/iam/v1alpha1/marshalling.py @@ -5,6 +5,9 @@ from dateutil import parser from scaleway_core.profile import ProfileDefaults +from scaleway_core.bridge import ( + marshal_ScwFile, +) from scaleway_core.utils import ( OneOfPossibility, resolve_one_of, @@ -56,6 +59,7 @@ MFAOTP, Organization, OrganizationSecuritySettings, + ParseSamlMetadataResponse, SamlServiceProvider, Saml, SetRulesResponse, @@ -73,6 +77,7 @@ CreateUserRequestMember, CreateUserRequest, JoinUserConnectionRequest, + ParseSamlMetadataRequest, RemoveGroupMemberRequest, RemoveUserConnectionRequest, SetGroupMembersRequest, @@ -1598,9 +1603,44 @@ def unmarshal_OrganizationSecuritySettings(data: Any) -> OrganizationSecuritySet else: args["max_login_session_duration"] = None + field = data.get("max_api_key_expiration_duration", None) + if field is not None: + args["max_api_key_expiration_duration"] = field + else: + args["max_api_key_expiration_duration"] = None + return OrganizationSecuritySettings(**args) +def unmarshal_ParseSamlMetadataResponse(data: Any) -> ParseSamlMetadataResponse: + if not isinstance(data, dict): + raise TypeError( + "Unmarshalling the type 'ParseSamlMetadataResponse' failed as data isn't a dictionary." + ) + + args: dict[str, Any] = {} + + field = data.get("single_sign_on_url", None) + if field is not None: + args["single_sign_on_url"] = field + else: + args["single_sign_on_url"] = None + + field = data.get("entity_id", None) + if field is not None: + args["entity_id"] = field + else: + args["entity_id"] = None + + field = data.get("signing_certificates", None) + if field is not None: + args["signing_certificates"] = field + else: + args["signing_certificates"] = None + + return ParseSamlMetadataResponse(**args) + + def unmarshal_SamlServiceProvider(data: Any) -> SamlServiceProvider: if not isinstance(data, dict): raise TypeError( @@ -2020,6 +2060,18 @@ def marshal_JoinUserConnectionRequest( return output +def marshal_ParseSamlMetadataRequest( + request: ParseSamlMetadataRequest, + defaults: ProfileDefaults, +) -> dict[str, Any]: + output: dict[str, Any] = {} + + if request.file is not None: + output["file"] = marshal_ScwFile(request.file, defaults) + + return output + + def marshal_RemoveGroupMemberRequest( request: RemoveGroupMemberRequest, defaults: ProfileDefaults, @@ -2187,6 +2239,11 @@ def marshal_UpdateOrganizationSecuritySettingsRequest( if request.max_login_session_duration is not None: output["max_login_session_duration"] = request.max_login_session_duration + if request.max_api_key_expiration_duration is not None: + output["max_api_key_expiration_duration"] = ( + request.max_api_key_expiration_duration + ) + return output diff --git a/scaleway/scaleway/iam/v1alpha1/types.py b/scaleway/scaleway/iam/v1alpha1/types.py index 60984d5b..5a6394f7 100644 --- a/scaleway/scaleway/iam/v1alpha1/types.py +++ b/scaleway/scaleway/iam/v1alpha1/types.py @@ -9,6 +9,7 @@ from scaleway_core.bridge import ( Region as ScwRegion, + ScwFile, Zone as ScwZone, ) from scaleway_core.utils import ( @@ -2138,6 +2139,23 @@ class OrganizationSecuritySettings: Maximum duration a login session will stay active before needing to relogin. """ + max_api_key_expiration_duration: Optional[str] = None + """ + Maximum duration the `expires_at` field of an API key can represent. A value of 0 means there is no maximum duration. + """ + + +@dataclass +class ParseSamlMetadataRequest: + file: ScwFile + + +@dataclass +class ParseSamlMetadataResponse: + single_sign_on_url: str + entity_id: str + signing_certificates: list[str] + @dataclass class RemoveGroupMemberRequest: @@ -2360,6 +2378,11 @@ class UpdateOrganizationSecuritySettingsRequest: Maximum duration a login session will stay active before needing to relogin. """ + max_api_key_expiration_duration: Optional[str] = None + """ + Maximum duration the `expires_at` field of an API key can represent. A value of 0 means there is no maximum duration. + """ + @dataclass class UpdatePolicyRequest: