Skip to content

Commit be02cbe

Browse files
authored
feat(tem): add project settings endpoint (#664)
1 parent ed66108 commit be02cbe

File tree

8 files changed

+554
-0
lines changed

8 files changed

+554
-0
lines changed

scaleway-async/scaleway_async/tem/v1alpha1/__init__.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from .types import ListEmailsRequestOrderBy
1212
from .types import ListWebhookEventsRequestOrderBy
1313
from .types import ListWebhooksRequestOrderBy
14+
from .types import ProjectSettingsPeriodicReportFrequency
1415
from .types import WebhookEventStatus
1516
from .types import WebhookEventType
1617
from .types import DomainRecordsDMARC
@@ -28,6 +29,8 @@
2829
from .types import Domain
2930
from .types import WebhookEvent
3031
from .types import Webhook
32+
from .types import ProjectSettingsPeriodicReport
33+
from .types import UpdateProjectSettingsRequestUpdatePeriodicReport
3134
from .types import CancelEmailRequest
3235
from .types import CheckDomainRequest
3336
from .types import CreateDomainRequest
@@ -39,6 +42,7 @@
3942
from .types import GetDomainLastStatusRequest
4043
from .types import GetDomainRequest
4144
from .types import GetEmailRequest
45+
from .types import GetProjectSettingsRequest
4246
from .types import GetStatisticsRequest
4347
from .types import GetWebhookRequest
4448
from .types import ListDomainsRequest
@@ -49,9 +53,11 @@
4953
from .types import ListWebhookEventsResponse
5054
from .types import ListWebhooksRequest
5155
from .types import ListWebhooksResponse
56+
from .types import ProjectSettings
5257
from .types import RevokeDomainRequest
5358
from .types import Statistics
5459
from .types import UpdateDomainRequest
60+
from .types import UpdateProjectSettingsRequest
5561
from .types import UpdateWebhookRequest
5662
from .api import TemV1Alpha1API
5763

@@ -67,6 +73,7 @@
6773
"ListEmailsRequestOrderBy",
6874
"ListWebhookEventsRequestOrderBy",
6975
"ListWebhooksRequestOrderBy",
76+
"ProjectSettingsPeriodicReportFrequency",
7077
"WebhookEventStatus",
7178
"WebhookEventType",
7279
"DomainRecordsDMARC",
@@ -84,6 +91,8 @@
8491
"Domain",
8592
"WebhookEvent",
8693
"Webhook",
94+
"ProjectSettingsPeriodicReport",
95+
"UpdateProjectSettingsRequestUpdatePeriodicReport",
8796
"CancelEmailRequest",
8897
"CheckDomainRequest",
8998
"CreateDomainRequest",
@@ -95,6 +104,7 @@
95104
"GetDomainLastStatusRequest",
96105
"GetDomainRequest",
97106
"GetEmailRequest",
107+
"GetProjectSettingsRequest",
98108
"GetStatisticsRequest",
99109
"GetWebhookRequest",
100110
"ListDomainsRequest",
@@ -105,9 +115,11 @@
105115
"ListWebhookEventsResponse",
106116
"ListWebhooksRequest",
107117
"ListWebhooksResponse",
118+
"ProjectSettings",
108119
"RevokeDomainRequest",
109120
"Statistics",
110121
"UpdateDomainRequest",
122+
"UpdateProjectSettingsRequest",
111123
"UpdateWebhookRequest",
112124
"TemV1Alpha1API",
113125
]

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

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,11 @@
3737
ListEmailsResponse,
3838
ListWebhookEventsResponse,
3939
ListWebhooksResponse,
40+
ProjectSettings,
4041
Statistics,
4142
UpdateDomainRequest,
43+
UpdateProjectSettingsRequest,
44+
UpdateProjectSettingsRequestUpdatePeriodicReport,
4245
UpdateWebhookRequest,
4346
Webhook,
4447
WebhookEvent,
@@ -57,11 +60,13 @@
5760
unmarshal_ListEmailsResponse,
5861
unmarshal_ListWebhookEventsResponse,
5962
unmarshal_ListWebhooksResponse,
63+
unmarshal_ProjectSettings,
6064
unmarshal_Statistics,
6165
marshal_CreateDomainRequest,
6266
marshal_CreateEmailRequest,
6367
marshal_CreateWebhookRequest,
6468
marshal_UpdateDomainRequest,
69+
marshal_UpdateProjectSettingsRequest,
6570
marshal_UpdateWebhookRequest,
6671
)
6772

@@ -1192,3 +1197,83 @@ async def list_webhook_events_all(
11921197
"domain_id": domain_id,
11931198
},
11941199
)
1200+
1201+
async def get_project_settings(
1202+
self,
1203+
*,
1204+
region: Optional[Region] = None,
1205+
project_id: Optional[str] = None,
1206+
) -> ProjectSettings:
1207+
"""
1208+
List project settings.
1209+
Retrieve the project settings including periodic reports.
1210+
:param region: Region to target. If none is passed will use default region from the config.
1211+
:param project_id: ID of the project.
1212+
:return: :class:`ProjectSettings <ProjectSettings>`
1213+
1214+
Usage:
1215+
::
1216+
1217+
result = await api.get_project_settings()
1218+
"""
1219+
1220+
param_region = validate_path_param(
1221+
"region", region or self.client.default_region
1222+
)
1223+
param_project_id = validate_path_param(
1224+
"project_id", project_id or self.client.default_project_id
1225+
)
1226+
1227+
res = self._request(
1228+
"GET",
1229+
f"/transactional-email/v1alpha1/regions/{param_region}/project/{param_project_id}/settings",
1230+
)
1231+
1232+
self._throw_on_error(res)
1233+
return unmarshal_ProjectSettings(res.json())
1234+
1235+
async def update_project_settings(
1236+
self,
1237+
*,
1238+
region: Optional[Region] = None,
1239+
project_id: Optional[str] = None,
1240+
periodic_report: Optional[
1241+
UpdateProjectSettingsRequestUpdatePeriodicReport
1242+
] = None,
1243+
) -> ProjectSettings:
1244+
"""
1245+
Update project settings.
1246+
Update the project settings including periodic reports.
1247+
:param region: Region to target. If none is passed will use default region from the config.
1248+
:param project_id: ID of the project.
1249+
:param periodic_report: Periodic report update details - all fields are optional.
1250+
:return: :class:`ProjectSettings <ProjectSettings>`
1251+
1252+
Usage:
1253+
::
1254+
1255+
result = await api.update_project_settings()
1256+
"""
1257+
1258+
param_region = validate_path_param(
1259+
"region", region or self.client.default_region
1260+
)
1261+
param_project_id = validate_path_param(
1262+
"project_id", project_id or self.client.default_project_id
1263+
)
1264+
1265+
res = self._request(
1266+
"PATCH",
1267+
f"/transactional-email/v1alpha1/regions/{param_region}/project/{param_project_id}/settings",
1268+
body=marshal_UpdateProjectSettingsRequest(
1269+
UpdateProjectSettingsRequest(
1270+
region=region,
1271+
project_id=project_id,
1272+
periodic_report=periodic_report,
1273+
),
1274+
self.client,
1275+
),
1276+
)
1277+
1278+
self._throw_on_error(res)
1279+
return unmarshal_ProjectSettings(res.json())

scaleway-async/scaleway_async/tem/v1alpha1/marshalling.py

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
WebhookEvent,
2727
ListWebhookEventsResponse,
2828
ListWebhooksResponse,
29+
ProjectSettingsPeriodicReport,
30+
ProjectSettings,
2931
Statistics,
3032
CreateDomainRequest,
3133
CreateEmailRequestAddress,
@@ -34,6 +36,8 @@
3436
CreateEmailRequest,
3537
CreateWebhookRequest,
3638
UpdateDomainRequest,
39+
UpdateProjectSettingsRequestUpdatePeriodicReport,
40+
UpdateProjectSettingsRequest,
3741
UpdateWebhookRequest,
3842
)
3943

@@ -688,6 +692,50 @@ def unmarshal_ListWebhooksResponse(data: Any) -> ListWebhooksResponse:
688692
return ListWebhooksResponse(**args)
689693

690694

695+
def unmarshal_ProjectSettingsPeriodicReport(data: Any) -> ProjectSettingsPeriodicReport:
696+
if not isinstance(data, dict):
697+
raise TypeError(
698+
"Unmarshalling the type 'ProjectSettingsPeriodicReport' failed as data isn't a dictionary."
699+
)
700+
701+
args: Dict[str, Any] = {}
702+
703+
field = data.get("enabled", None)
704+
if field is not None:
705+
args["enabled"] = field
706+
707+
field = data.get("frequency", None)
708+
if field is not None:
709+
args["frequency"] = field
710+
711+
field = data.get("sending_hour", None)
712+
if field is not None:
713+
args["sending_hour"] = field
714+
715+
field = data.get("sending_day", None)
716+
if field is not None:
717+
args["sending_day"] = field
718+
719+
return ProjectSettingsPeriodicReport(**args)
720+
721+
722+
def unmarshal_ProjectSettings(data: Any) -> ProjectSettings:
723+
if not isinstance(data, dict):
724+
raise TypeError(
725+
"Unmarshalling the type 'ProjectSettings' failed as data isn't a dictionary."
726+
)
727+
728+
args: Dict[str, Any] = {}
729+
730+
field = data.get("periodic_report", None)
731+
if field is not None:
732+
args["periodic_report"] = unmarshal_ProjectSettingsPeriodicReport(field)
733+
else:
734+
args["periodic_report"] = None
735+
736+
return ProjectSettings(**args)
737+
738+
691739
def unmarshal_Statistics(data: Any) -> Statistics:
692740
if not isinstance(data, dict):
693741
raise TypeError(
@@ -882,6 +930,43 @@ def marshal_UpdateDomainRequest(
882930
return output
883931

884932

933+
def marshal_UpdateProjectSettingsRequestUpdatePeriodicReport(
934+
request: UpdateProjectSettingsRequestUpdatePeriodicReport,
935+
defaults: ProfileDefaults,
936+
) -> Dict[str, Any]:
937+
output: Dict[str, Any] = {}
938+
939+
if request.enabled is not None:
940+
output["enabled"] = request.enabled
941+
942+
if request.frequency is not None:
943+
output["frequency"] = str(request.frequency)
944+
945+
if request.sending_hour is not None:
946+
output["sending_hour"] = request.sending_hour
947+
948+
if request.sending_day is not None:
949+
output["sending_day"] = request.sending_day
950+
951+
return output
952+
953+
954+
def marshal_UpdateProjectSettingsRequest(
955+
request: UpdateProjectSettingsRequest,
956+
defaults: ProfileDefaults,
957+
) -> Dict[str, Any]:
958+
output: Dict[str, Any] = {}
959+
960+
if request.periodic_report is not None:
961+
output["periodic_report"] = (
962+
marshal_UpdateProjectSettingsRequestUpdatePeriodicReport(
963+
request.periodic_report, defaults
964+
)
965+
)
966+
967+
return output
968+
969+
885970
def marshal_UpdateWebhookRequest(
886971
request: UpdateWebhookRequest,
887972
defaults: ProfileDefaults,

0 commit comments

Comments
 (0)