Skip to content

feat(tem): generate offers cli #910

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
Mar 17, 2025
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
28 changes: 28 additions & 0 deletions scaleway-async/scaleway_async/tem/v1alpha1/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@
from .types import ListEmailsRequestOrderBy
from .types import ListWebhookEventsRequestOrderBy
from .types import ListWebhooksRequestOrderBy
from .types import OfferName
from .types import PoolStatus
from .types import ProjectSettingsPeriodicReportFrequency
from .types import WebhookEventStatus
from .types import WebhookEventType
Expand All @@ -32,6 +34,9 @@
from .types import DomainLastStatusDmarcRecord
from .types import DomainLastStatusSpfRecord
from .types import Domain
from .types import OfferSubscription
from .types import Offer
from .types import Pool
from .types import WebhookEvent
from .types import Webhook
from .types import ProjectSettingsPeriodicReport
Expand All @@ -50,6 +55,7 @@
from .types import GetDomainLastStatusRequest
from .types import GetDomainRequest
from .types import GetEmailRequest
from .types import GetProjectConsumptionRequest
from .types import GetProjectSettingsRequest
from .types import GetStatisticsRequest
from .types import GetWebhookRequest
Expand All @@ -59,14 +65,22 @@
from .types import ListDomainsResponse
from .types import ListEmailsRequest
from .types import ListEmailsResponse
from .types import ListOfferSubscriptionsRequest
from .types import ListOfferSubscriptionsResponse
from .types import ListOffersRequest
from .types import ListOffersResponse
from .types import ListPoolsRequest
from .types import ListPoolsResponse
from .types import ListWebhookEventsRequest
from .types import ListWebhookEventsResponse
from .types import ListWebhooksRequest
from .types import ListWebhooksResponse
from .types import ProjectConsumption
from .types import ProjectSettings
from .types import RevokeDomainRequest
from .types import Statistics
from .types import UpdateDomainRequest
from .types import UpdateOfferSubscriptionRequest
from .types import UpdateProjectSettingsRequest
from .types import UpdateWebhookRequest
from .api import TemV1Alpha1API
Expand All @@ -86,6 +100,8 @@
"ListEmailsRequestOrderBy",
"ListWebhookEventsRequestOrderBy",
"ListWebhooksRequestOrderBy",
"OfferName",
"PoolStatus",
"ProjectSettingsPeriodicReportFrequency",
"WebhookEventStatus",
"WebhookEventType",
Expand All @@ -104,6 +120,9 @@
"DomainLastStatusDmarcRecord",
"DomainLastStatusSpfRecord",
"Domain",
"OfferSubscription",
"Offer",
"Pool",
"WebhookEvent",
"Webhook",
"ProjectSettingsPeriodicReport",
Expand All @@ -122,6 +141,7 @@
"GetDomainLastStatusRequest",
"GetDomainRequest",
"GetEmailRequest",
"GetProjectConsumptionRequest",
"GetProjectSettingsRequest",
"GetStatisticsRequest",
"GetWebhookRequest",
Expand All @@ -131,14 +151,22 @@
"ListDomainsResponse",
"ListEmailsRequest",
"ListEmailsResponse",
"ListOfferSubscriptionsRequest",
"ListOfferSubscriptionsResponse",
"ListOffersRequest",
"ListOffersResponse",
"ListPoolsRequest",
"ListPoolsResponse",
"ListWebhookEventsRequest",
"ListWebhookEventsResponse",
"ListWebhooksRequest",
"ListWebhooksResponse",
"ProjectConsumption",
"ProjectSettings",
"RevokeDomainRequest",
"Statistics",
"UpdateDomainRequest",
"UpdateOfferSubscriptionRequest",
"UpdateProjectSettingsRequest",
"UpdateWebhookRequest",
"TemV1Alpha1API",
Expand Down
225 changes: 225 additions & 0 deletions scaleway-async/scaleway_async/tem/v1alpha1/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
ListEmailsRequestOrderBy,
ListWebhookEventsRequestOrderBy,
ListWebhooksRequestOrderBy,
OfferName,
WebhookEventStatus,
WebhookEventType,
Blocklist,
Expand All @@ -41,11 +42,18 @@
ListBlocklistsResponse,
ListDomainsResponse,
ListEmailsResponse,
ListOfferSubscriptionsResponse,
ListOffersResponse,
ListPoolsResponse,
ListWebhookEventsResponse,
ListWebhooksResponse,
OfferSubscription,
Pool,
ProjectConsumption,
ProjectSettings,
Statistics,
UpdateDomainRequest,
UpdateOfferSubscriptionRequest,
UpdateProjectSettingsRequest,
UpdateProjectSettingsRequestUpdatePeriodicReport,
UpdateWebhookRequest,
Expand All @@ -59,22 +67,28 @@
from .marshalling import (
unmarshal_Email,
unmarshal_Domain,
unmarshal_OfferSubscription,
unmarshal_Webhook,
unmarshal_BulkCreateBlocklistsResponse,
unmarshal_CreateEmailResponse,
unmarshal_DomainLastStatus,
unmarshal_ListBlocklistsResponse,
unmarshal_ListDomainsResponse,
unmarshal_ListEmailsResponse,
unmarshal_ListOfferSubscriptionsResponse,
unmarshal_ListOffersResponse,
unmarshal_ListPoolsResponse,
unmarshal_ListWebhookEventsResponse,
unmarshal_ListWebhooksResponse,
unmarshal_ProjectConsumption,
unmarshal_ProjectSettings,
unmarshal_Statistics,
marshal_BulkCreateBlocklistsRequest,
marshal_CreateDomainRequest,
marshal_CreateEmailRequest,
marshal_CreateWebhookRequest,
marshal_UpdateDomainRequest,
marshal_UpdateOfferSubscriptionRequest,
marshal_UpdateProjectSettingsRequest,
marshal_UpdateWebhookRequest,
)
Expand Down Expand Up @@ -1469,3 +1483,214 @@ async def delete_blocklist(
)

self._throw_on_error(res)

async def list_offer_subscriptions(
self,
*,
region: Optional[ScwRegion] = None,
project_id: Optional[str] = None,
) -> ListOfferSubscriptionsResponse:
"""
Get information about subscribed offers.
Retrieve information about the offers you are subscribed to using the `project_id` and `region` parameters.
:param region: Region to target. If none is passed will use default region from the config.
:param project_id: ID of the Project.
:return: :class:`ListOfferSubscriptionsResponse <ListOfferSubscriptionsResponse>`

Usage:
::

result = await api.list_offer_subscriptions()
"""

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

res = self._request(
"GET",
f"/transactional-email/v1alpha1/regions/{param_region}/offer-subscriptions",
params={
"project_id": project_id or self.client.default_project_id,
},
)

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

async def update_offer_subscription(
self,
*,
region: Optional[ScwRegion] = None,
project_id: Optional[str] = None,
name: Optional[OfferName] = None,
) -> OfferSubscription:
"""
Update a subscribed offer.
:param region: Region to target. If none is passed will use default region from the config.
:param project_id: ID of the Project.
:param name: Name of the offer-subscription.
:return: :class:`OfferSubscription <OfferSubscription>`

Usage:
::

result = await api.update_offer_subscription()
"""

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

res = self._request(
"PATCH",
f"/transactional-email/v1alpha1/regions/{param_region}/offer-subscriptions",
body=marshal_UpdateOfferSubscriptionRequest(
UpdateOfferSubscriptionRequest(
region=region,
project_id=project_id,
name=name,
),
self.client,
),
)

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

async def list_offers(
self,
*,
region: Optional[ScwRegion] = None,
) -> ListOffersResponse:
"""
List the available offers.
Retrieve the list of the available and free-of-charge offers you can subscribe to.
:param region: Region to target. If none is passed will use default region from the config.
:return: :class:`ListOffersResponse <ListOffersResponse>`

Usage:
::

result = await api.list_offers()
"""

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

res = self._request(
"GET",
f"/transactional-email/v1alpha1/regions/{param_region}/offers",
)

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

async def list_pools(
self,
*,
region: Optional[ScwRegion] = None,
page: Optional[int] = None,
page_size: Optional[int] = None,
project_id: Optional[str] = None,
) -> ListPoolsResponse:
"""
Get information about a sending pool.
Retrieve information about a sending pool, including its creation status and configuration parameters.
:param region: Region to target. If none is passed will use default region from the config.
: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 1000.
:param project_id: ID of the Project.
:return: :class:`ListPoolsResponse <ListPoolsResponse>`

Usage:
::

result = await api.list_pools()
"""

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

res = self._request(
"GET",
f"/transactional-email/v1alpha1/regions/{param_region}/pools",
params={
"page": page,
"page_size": page_size or self.client.default_page_size,
"project_id": project_id or self.client.default_project_id,
},
)

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

async def list_pools_all(
self,
*,
region: Optional[ScwRegion] = None,
page: Optional[int] = None,
page_size: Optional[int] = None,
project_id: Optional[str] = None,
) -> List[Pool]:
"""
Get information about a sending pool.
Retrieve information about a sending pool, including its creation status and configuration parameters.
:param region: Region to target. If none is passed will use default region from the config.
: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 1000.
:param project_id: ID of the Project.
:return: :class:`List[Pool] <List[Pool]>`

Usage:
::

result = await api.list_pools_all()
"""

return await fetch_all_pages_async(
type=ListPoolsResponse,
key="pools",
fetcher=self.list_pools,
args={
"region": region,
"page": page,
"page_size": page_size,
"project_id": project_id,
},
)

async def get_project_consumption(
self,
*,
region: Optional[ScwRegion] = None,
project_id: Optional[str] = None,
) -> ProjectConsumption:
"""
Get project resource consumption.
:param region: Region to target. If none is passed will use default region from the config.
:param project_id: ID of the project.
:return: :class:`ProjectConsumption <ProjectConsumption>`

Usage:
::

result = await api.get_project_consumption()
"""

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

res = self._request(
"GET",
f"/transactional-email/v1alpha1/regions/{param_region}/project-consumption",
params={
"project_id": project_id or self.client.default_project_id,
},
)

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