Skip to content

Commit 9a3b6d7

Browse files
authored
feat(serverless): add CronSchedule to job definitions (#406)
1 parent c14f827 commit 9a3b6d7

File tree

8 files changed

+264
-0
lines changed

8 files changed

+264
-0
lines changed

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,27 @@
33
from .types import JobRunState
44
from .types import ListJobDefinitionsRequestOrderBy
55
from .types import ListJobRunsRequestOrderBy
6+
from .types import CreateJobDefinitionRequestCronScheduleConfig
7+
from .types import CronSchedule
68
from .types import JobDefinition
79
from .types import JobRun
810
from .types import ListJobDefinitionsResponse
911
from .types import ListJobRunsResponse
12+
from .types import UpdateJobDefinitionRequestCronScheduleConfig
1013
from .content import JOB_RUN_TRANSIENT_STATUSES
1114
from .api import JobsV1Alpha1API
1215

1316
__all__ = [
1417
"JobRunState",
1518
"ListJobDefinitionsRequestOrderBy",
1619
"ListJobRunsRequestOrderBy",
20+
"CreateJobDefinitionRequestCronScheduleConfig",
21+
"CronSchedule",
1722
"JobDefinition",
1823
"JobRun",
1924
"ListJobDefinitionsResponse",
2025
"ListJobRunsResponse",
26+
"UpdateJobDefinitionRequestCronScheduleConfig",
2127
"JOB_RUN_TRANSIENT_STATUSES",
2228
"JobsV1Alpha1API",
2329
]

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,12 @@
1515
from .types import (
1616
ListJobDefinitionsRequestOrderBy,
1717
ListJobRunsRequestOrderBy,
18+
CreateJobDefinitionRequestCronScheduleConfig,
1819
JobDefinition,
1920
JobRun,
2021
ListJobDefinitionsResponse,
2122
ListJobRunsResponse,
23+
UpdateJobDefinitionRequestCronScheduleConfig,
2224
CreateJobDefinitionRequest,
2325
UpdateJobDefinitionRequest,
2426
)
@@ -52,6 +54,7 @@ async def create_job_definition(
5254
project_id: Optional[str] = None,
5355
environment_variables: Optional[Dict[str, str]] = None,
5456
job_timeout: Optional[str] = None,
57+
cron_schedule: Optional[CreateJobDefinitionRequestCronScheduleConfig] = None,
5558
) -> JobDefinition:
5659
"""
5760
Create a new job definition in a specified Project.
@@ -65,6 +68,7 @@ async def create_job_definition(
6568
:param environment_variables: Environment variables of the job.
6669
:param description: Description of the job.
6770
:param job_timeout: Timeout of the job in seconds.
71+
:param cron_schedule:
6872
:return: :class:`JobDefinition <JobDefinition>`
6973
7074
Usage:
@@ -98,6 +102,7 @@ async def create_job_definition(
98102
project_id=project_id,
99103
environment_variables=environment_variables,
100104
job_timeout=job_timeout,
105+
cron_schedule=cron_schedule,
101106
),
102107
self.client,
103108
),
@@ -231,6 +236,7 @@ async def update_job_definition(
231236
environment_variables: Optional[Dict[str, str]] = None,
232237
description: Optional[str] = None,
233238
job_timeout: Optional[str] = None,
239+
cron_schedule: Optional[UpdateJobDefinitionRequestCronScheduleConfig] = None,
234240
) -> JobDefinition:
235241
"""
236242
Update an existing job definition associated with the specified unique identifier.
@@ -244,6 +250,7 @@ async def update_job_definition(
244250
:param environment_variables: Environment variables of the job.
245251
:param description: Description of the job.
246252
:param job_timeout: Timeout of the job in seconds.
253+
:param cron_schedule:
247254
:return: :class:`JobDefinition <JobDefinition>`
248255
249256
Usage:
@@ -274,6 +281,7 @@ async def update_job_definition(
274281
environment_variables=environment_variables,
275282
description=description,
276283
job_timeout=job_timeout,
284+
cron_schedule=cron_schedule,
277285
),
278286
self.client,
279287
),

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

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,41 @@
44
from typing import Any, Dict
55

66
from scaleway_core.profile import ProfileDefaults
7+
from scaleway_core.utils import (
8+
OneOfPossibility,
9+
resolve_one_of,
10+
)
711
from dateutil import parser
812
from .types import (
13+
CreateJobDefinitionRequestCronScheduleConfig,
14+
CronSchedule,
915
JobDefinition,
1016
JobRun,
1117
ListJobDefinitionsResponse,
1218
ListJobRunsResponse,
19+
UpdateJobDefinitionRequestCronScheduleConfig,
1320
CreateJobDefinitionRequest,
1421
UpdateJobDefinitionRequest,
1522
)
1623

1724

25+
def unmarshal_CronSchedule(data: Any) -> CronSchedule:
26+
if type(data) is not dict:
27+
raise TypeError(
28+
f"Unmarshalling the type 'CronSchedule' failed as data isn't a dictionary."
29+
)
30+
31+
args: Dict[str, Any] = {}
32+
33+
field = data.get("schedule", None)
34+
args["schedule"] = field
35+
36+
field = data.get("timezone", None)
37+
args["timezone"] = field
38+
39+
return CronSchedule(**args)
40+
41+
1842
def unmarshal_JobDefinition(data: Any) -> JobDefinition:
1943
if type(data) is not dict:
2044
raise TypeError(
@@ -32,6 +56,9 @@ def unmarshal_JobDefinition(data: Any) -> JobDefinition:
3256
field = data.get("created_at", None)
3357
args["created_at"] = parser.isoparse(field) if type(field) is str else field
3458

59+
field = data.get("cron_schedule", None)
60+
args["cron_schedule"] = unmarshal_CronSchedule(field) if field is not None else None
61+
3562
field = data.get("description", None)
3663
args["description"] = field
3764

@@ -150,6 +177,50 @@ def unmarshal_ListJobRunsResponse(data: Any) -> ListJobRunsResponse:
150177
return ListJobRunsResponse(**args)
151178

152179

180+
def marshal_CreateJobDefinitionRequestCronScheduleConfig(
181+
request: CreateJobDefinitionRequestCronScheduleConfig,
182+
defaults: ProfileDefaults,
183+
) -> Dict[str, Any]:
184+
output: Dict[str, Any] = {}
185+
186+
if request.schedule is not None:
187+
output["schedule"] = request.schedule
188+
189+
if request.timezone is not None:
190+
output["timezone"] = request.timezone
191+
192+
return output
193+
194+
195+
def marshal_UpdateJobDefinitionRequestCronScheduleConfig(
196+
request: UpdateJobDefinitionRequestCronScheduleConfig,
197+
defaults: ProfileDefaults,
198+
) -> Dict[str, Any]:
199+
output: Dict[str, Any] = {}
200+
output.update(
201+
resolve_one_of(
202+
[
203+
OneOfPossibility(
204+
"schedule",
205+
request.schedule if request.schedule is not None else None,
206+
),
207+
]
208+
),
209+
)
210+
output.update(
211+
resolve_one_of(
212+
[
213+
OneOfPossibility(
214+
"timezone",
215+
request.timezone if request.timezone is not None else None,
216+
),
217+
]
218+
),
219+
)
220+
221+
return output
222+
223+
153224
def marshal_CreateJobDefinitionRequest(
154225
request: CreateJobDefinitionRequest,
155226
defaults: ProfileDefaults,
@@ -162,6 +233,11 @@ def marshal_CreateJobDefinitionRequest(
162233
if request.cpu_limit is not None:
163234
output["cpu_limit"] = request.cpu_limit
164235

236+
if request.cron_schedule is not None:
237+
output["cron_schedule"] = marshal_CreateJobDefinitionRequestCronScheduleConfig(
238+
request.cron_schedule, defaults
239+
)
240+
165241
if request.description is not None:
166242
output["description"] = request.description
167243

@@ -198,6 +274,11 @@ def marshal_UpdateJobDefinitionRequest(
198274
if request.cpu_limit is not None:
199275
output["cpu_limit"] = request.cpu_limit
200276

277+
if request.cron_schedule is not None:
278+
output["cron_schedule"] = marshal_UpdateJobDefinitionRequestCronScheduleConfig(
279+
request.cron_schedule, defaults
280+
)
281+
201282
if request.description is not None:
202283
output["description"] = request.description
203284

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

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,24 @@ def __str__(self) -> str:
4444
return str(self.value)
4545

4646

47+
@dataclass
48+
class CreateJobDefinitionRequestCronScheduleConfig:
49+
schedule: str
50+
51+
timezone: str
52+
53+
54+
@dataclass
55+
class CronSchedule:
56+
"""
57+
Cron schedule.
58+
"""
59+
60+
schedule: str
61+
62+
timezone: str
63+
64+
4765
@dataclass
4866
class JobDefinition:
4967
id: str
@@ -70,6 +88,8 @@ class JobDefinition:
7088

7189
job_timeout: Optional[str]
7290

91+
cron_schedule: Optional[CronSchedule]
92+
7393
region: Region
7494

7595

@@ -114,6 +134,19 @@ class ListJobRunsResponse:
114134
total_count: int
115135

116136

137+
@dataclass
138+
class UpdateJobDefinitionRequestCronScheduleConfig:
139+
schedule: Optional[str]
140+
"""
141+
One-of ('_schedule'): at most one of 'schedule' could be set.
142+
"""
143+
144+
timezone: Optional[str]
145+
"""
146+
One-of ('_timezone'): at most one of 'timezone' could be set.
147+
"""
148+
149+
117150
@dataclass
118151
class CreateJobDefinitionRequest:
119152
region: Optional[Region]
@@ -166,6 +199,8 @@ class CreateJobDefinitionRequest:
166199
Timeout of the job in seconds.
167200
"""
168201

202+
cron_schedule: Optional[CreateJobDefinitionRequestCronScheduleConfig]
203+
169204

170205
@dataclass
171206
class GetJobDefinitionRequest:
@@ -248,6 +283,8 @@ class UpdateJobDefinitionRequest:
248283
Timeout of the job in seconds.
249284
"""
250285

286+
cron_schedule: Optional[UpdateJobDefinitionRequestCronScheduleConfig]
287+
251288

252289
@dataclass
253290
class DeleteJobDefinitionRequest:

scaleway/scaleway/jobs/v1alpha1/__init__.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,27 @@
33
from .types import JobRunState
44
from .types import ListJobDefinitionsRequestOrderBy
55
from .types import ListJobRunsRequestOrderBy
6+
from .types import CreateJobDefinitionRequestCronScheduleConfig
7+
from .types import CronSchedule
68
from .types import JobDefinition
79
from .types import JobRun
810
from .types import ListJobDefinitionsResponse
911
from .types import ListJobRunsResponse
12+
from .types import UpdateJobDefinitionRequestCronScheduleConfig
1013
from .content import JOB_RUN_TRANSIENT_STATUSES
1114
from .api import JobsV1Alpha1API
1215

1316
__all__ = [
1417
"JobRunState",
1518
"ListJobDefinitionsRequestOrderBy",
1619
"ListJobRunsRequestOrderBy",
20+
"CreateJobDefinitionRequestCronScheduleConfig",
21+
"CronSchedule",
1722
"JobDefinition",
1823
"JobRun",
1924
"ListJobDefinitionsResponse",
2025
"ListJobRunsResponse",
26+
"UpdateJobDefinitionRequestCronScheduleConfig",
2127
"JOB_RUN_TRANSIENT_STATUSES",
2228
"JobsV1Alpha1API",
2329
]

scaleway/scaleway/jobs/v1alpha1/api.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,12 @@
1515
from .types import (
1616
ListJobDefinitionsRequestOrderBy,
1717
ListJobRunsRequestOrderBy,
18+
CreateJobDefinitionRequestCronScheduleConfig,
1819
JobDefinition,
1920
JobRun,
2021
ListJobDefinitionsResponse,
2122
ListJobRunsResponse,
23+
UpdateJobDefinitionRequestCronScheduleConfig,
2224
CreateJobDefinitionRequest,
2325
UpdateJobDefinitionRequest,
2426
)
@@ -52,6 +54,7 @@ def create_job_definition(
5254
project_id: Optional[str] = None,
5355
environment_variables: Optional[Dict[str, str]] = None,
5456
job_timeout: Optional[str] = None,
57+
cron_schedule: Optional[CreateJobDefinitionRequestCronScheduleConfig] = None,
5558
) -> JobDefinition:
5659
"""
5760
Create a new job definition in a specified Project.
@@ -65,6 +68,7 @@ def create_job_definition(
6568
:param environment_variables: Environment variables of the job.
6669
:param description: Description of the job.
6770
:param job_timeout: Timeout of the job in seconds.
71+
:param cron_schedule:
6872
:return: :class:`JobDefinition <JobDefinition>`
6973
7074
Usage:
@@ -98,6 +102,7 @@ def create_job_definition(
98102
project_id=project_id,
99103
environment_variables=environment_variables,
100104
job_timeout=job_timeout,
105+
cron_schedule=cron_schedule,
101106
),
102107
self.client,
103108
),
@@ -231,6 +236,7 @@ def update_job_definition(
231236
environment_variables: Optional[Dict[str, str]] = None,
232237
description: Optional[str] = None,
233238
job_timeout: Optional[str] = None,
239+
cron_schedule: Optional[UpdateJobDefinitionRequestCronScheduleConfig] = None,
234240
) -> JobDefinition:
235241
"""
236242
Update an existing job definition associated with the specified unique identifier.
@@ -244,6 +250,7 @@ def update_job_definition(
244250
:param environment_variables: Environment variables of the job.
245251
:param description: Description of the job.
246252
:param job_timeout: Timeout of the job in seconds.
253+
:param cron_schedule:
247254
:return: :class:`JobDefinition <JobDefinition>`
248255
249256
Usage:
@@ -274,6 +281,7 @@ def update_job_definition(
274281
environment_variables=environment_variables,
275282
description=description,
276283
job_timeout=job_timeout,
284+
cron_schedule=cron_schedule,
277285
),
278286
self.client,
279287
),

0 commit comments

Comments
 (0)