Skip to content
Open
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
14 changes: 12 additions & 2 deletions scaleway-async/scaleway_async/mailbox/v1alpha1/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
from .content import DOMAIN_RECORD_TRANSIENT_STATUSES
from .types import DomainStatus
from .content import DOMAIN_TRANSIENT_STATUSES
from .types import ListAliasesRequestOrderBy
from .types import ListDomainsRequestOrderBy
from .types import ListMailboxesRequestOrderBy
from .types import MailboxStatus
Expand All @@ -16,18 +17,22 @@
from .types import BatchCreateMailboxesRequestMailboxParameters
from .types import Mailbox
from .types import DomainRecord
from .types import Domain
from .types import Alias
from .types import Domain
from .types import BatchCreateMailboxesRequest
from .types import BatchCreateMailboxesResponse
from .types import CreateAliasRequest
from .types import CreateDomainRequest
from .types import DeleteAliasRequest
from .types import DeleteDomainRequest
from .types import DeleteMailboxRequest
from .types import GetAliasRequest
from .types import GetDomainRecordsRequest
from .types import GetDomainRecordsResponse
from .types import GetDomainRequest
from .types import GetMailboxRequest
from .types import ListAliasesRequest
from .types import ListAliasesResponse
from .types import ListDomainsRequest
from .types import ListDomainsResponse
from .types import ListMailboxesRequest
Expand All @@ -46,6 +51,7 @@
"DOMAIN_RECORD_TRANSIENT_STATUSES",
"DomainStatus",
"DOMAIN_TRANSIENT_STATUSES",
"ListAliasesRequestOrderBy",
"ListDomainsRequestOrderBy",
"ListMailboxesRequestOrderBy",
"MailboxStatus",
Expand All @@ -54,18 +60,22 @@
"BatchCreateMailboxesRequestMailboxParameters",
"Mailbox",
"DomainRecord",
"Domain",
"Alias",
"Domain",
"BatchCreateMailboxesRequest",
"BatchCreateMailboxesResponse",
"CreateAliasRequest",
"CreateDomainRequest",
"DeleteAliasRequest",
"DeleteDomainRequest",
"DeleteMailboxRequest",
"GetAliasRequest",
"GetDomainRecordsRequest",
"GetDomainRecordsResponse",
"GetDomainRequest",
"GetMailboxRequest",
"ListAliasesRequest",
"ListAliasesResponse",
"ListDomainsRequest",
"ListDomainsResponse",
"ListMailboxesRequest",
Expand Down
188 changes: 184 additions & 4 deletions scaleway-async/scaleway_async/mailbox/v1alpha1/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,9 @@
wait_for_resource_async,
)
from .types import (
AliasStatus,
DomainStatus,
ListAliasesRequestOrderBy,
ListDomainsRequestOrderBy,
ListMailboxesRequestOrderBy,
MailboxStatus,
Expand All @@ -24,21 +26,24 @@
CreateDomainRequest,
Domain,
GetDomainRecordsResponse,
ListAliasesResponse,
ListDomainsResponse,
ListMailboxesResponse,
Mailbox,
UpdateMailboxRequest,
)
from .content import (
ALIAS_TRANSIENT_STATUSES,
DOMAIN_TRANSIENT_STATUSES,
MAILBOX_TRANSIENT_STATUSES,
)
from .marshalling import (
unmarshal_Mailbox,
unmarshal_Domain,
unmarshal_Alias,
unmarshal_Domain,
unmarshal_BatchCreateMailboxesResponse,
unmarshal_GetDomainRecordsResponse,
unmarshal_ListAliasesResponse,
unmarshal_ListDomainsResponse,
unmarshal_ListMailboxesResponse,
marshal_BatchCreateMailboxesRequest,
Expand Down Expand Up @@ -364,6 +369,7 @@ async def list_mailboxes(
domain_id: Optional[str] = None,
statuses: Optional[list[MailboxStatus]] = None,
search: Optional[str] = None,
project_id: Optional[str] = None,
) -> ListMailboxesResponse:
"""
List mailboxes in an organization.
Expand All @@ -374,6 +380,7 @@ async def list_mailboxes(
:param domain_id: (Optional) ID of the domain in which to list the mailboxes.
:param statuses: (Optional) Filter mailboxes by their statuses.
:param search: (Optional) Search term to filter mailboxes on name and local_part.
:param project_id: (Optional) Project ID to filter mailboxes on.
:return: :class:`ListMailboxesResponse <ListMailboxesResponse>`

Usage:
Expand All @@ -390,6 +397,7 @@ async def list_mailboxes(
"order_by": order_by,
"page": page,
"page_size": page_size or self.client.default_page_size,
"project_id": project_id or self.client.default_project_id,
"search": search,
"statuses": statuses,
},
Expand All @@ -407,6 +415,7 @@ async def list_mailboxes_all(
domain_id: Optional[str] = None,
statuses: Optional[list[MailboxStatus]] = None,
search: Optional[str] = None,
project_id: Optional[str] = None,
) -> list[Mailbox]:
"""
List mailboxes in an organization.
Expand All @@ -417,6 +426,7 @@ async def list_mailboxes_all(
:param domain_id: (Optional) ID of the domain in which to list the mailboxes.
:param statuses: (Optional) Filter mailboxes by their statuses.
:param search: (Optional) Search term to filter mailboxes on name and local_part.
:param project_id: (Optional) Project ID to filter mailboxes on.
:return: :class:`list[Mailbox] <list[Mailbox]>`

Usage:
Expand All @@ -436,6 +446,7 @@ async def list_mailboxes_all(
"domain_id": domain_id,
"statuses": statuses,
"search": search,
"project_id": project_id,
},
)

Expand Down Expand Up @@ -620,11 +631,9 @@ async def create_alias(
)
"""

param_mailbox_id = validate_path_param("mailbox_id", mailbox_id)

res = self._request(
"POST",
f"/mailbox/v1alpha1/mailboxes/{param_mailbox_id}/aliases",
"/mailbox/v1alpha1/aliases",
body=marshal_CreateAliasRequest(
CreateAliasRequest(
local_part=local_part,
Expand All @@ -637,3 +646,174 @@ async def create_alias(

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

async def list_aliases(
self,
*,
order_by: Optional[ListAliasesRequestOrderBy] = None,
page: Optional[int] = None,
page_size: Optional[int] = None,
mailbox_id: Optional[str] = None,
status: Optional[AliasStatus] = None,
project_id: Optional[str] = None,
) -> ListAliasesResponse:
"""
List aliases for a mailbox.
:param order_by: Order aliases by specific criteria.
:param page: Requested page number. Value must be greater or equal to 1.
:param page_size: Requested page size. Value must be between 1 and 100.
:param mailbox_id: ID of the mailbox for which to list aliases.
:param status: (Optional) Filter aliases by their status.
:param project_id: Project ID to filter on.
:return: :class:`ListAliasesResponse <ListAliasesResponse>`

Usage:
::

result = await api.list_aliases()
"""

res = self._request(
"GET",
"/mailbox/v1alpha1/aliases",
params={
"mailbox_id": mailbox_id,
"order_by": order_by,
"page": page,
"page_size": page_size or self.client.default_page_size,
"project_id": project_id or self.client.default_project_id,
"status": status,
},
)

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

async def list_aliases_all(
self,
*,
order_by: Optional[ListAliasesRequestOrderBy] = None,
page: Optional[int] = None,
page_size: Optional[int] = None,
mailbox_id: Optional[str] = None,
status: Optional[AliasStatus] = None,
project_id: Optional[str] = None,
) -> list[Alias]:
"""
List aliases for a mailbox.
:param order_by: Order aliases by specific criteria.
:param page: Requested page number. Value must be greater or equal to 1.
:param page_size: Requested page size. Value must be between 1 and 100.
:param mailbox_id: ID of the mailbox for which to list aliases.
:param status: (Optional) Filter aliases by their status.
:param project_id: Project ID to filter on.
:return: :class:`list[Alias] <list[Alias]>`

Usage:
::

result = await api.list_aliases_all()
"""

return await fetch_all_pages_async(
type=ListAliasesResponse,
key="aliases",
fetcher=self.list_aliases,
args={
"order_by": order_by,
"page": page,
"page_size": page_size,
"mailbox_id": mailbox_id,
"status": status,
"project_id": project_id,
},
)

async def get_alias(
self,
*,
alias_id: str,
) -> Alias:
"""
Get an alias by its ID.
:param alias_id: ID of the alias to get.
:return: :class:`Alias <Alias>`

Usage:
::

result = await api.get_alias(
alias_id="example",
)
"""

param_alias_id = validate_path_param("alias_id", alias_id)

res = self._request(
"GET",
f"/mailbox/v1alpha1/aliases/{param_alias_id}",
)

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

async def wait_for_alias(
self,
*,
alias_id: str,
options: Optional[WaitForOptions[Alias, Union[bool, Awaitable[bool]]]] = None,
) -> Alias:
"""
Get an alias by its ID.
:param alias_id: ID of the alias to get.
:return: :class:`Alias <Alias>`

Usage:
::

result = await api.get_alias(
alias_id="example",
)
"""

if not options:
options = WaitForOptions()

if not options.stop:
options.stop = lambda res: res.status not in ALIAS_TRANSIENT_STATUSES

return await wait_for_resource_async(
fetcher=self.get_alias,
options=options,
args={
"alias_id": alias_id,
},
)

async def delete_alias(
self,
*,
alias_id: str,
) -> Alias:
"""
Delete an alias by its ID.
:param alias_id: ID of the alias to delete.
:return: :class:`Alias <Alias>`

Usage:
::

result = await api.delete_alias(
alias_id="example",
)
"""

param_alias_id = validate_path_param("alias_id", alias_id)

res = self._request(
"DELETE",
f"/mailbox/v1alpha1/aliases/{param_alias_id}",
)

self._throw_on_error(res)
return unmarshal_Alias(res.json())
Loading
Loading