Skip to content

Commit df78b8a

Browse files
committed
refactor
1 parent 47785ab commit df78b8a

3 files changed

Lines changed: 35 additions & 9 deletions

File tree

src/maastemporalworker/schedules.py

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
ScheduleOverlapPolicy,
1313
SchedulePolicy,
1414
ScheduleSpec,
15+
ScheduleState,
1516
ScheduleUpdate,
1617
ScheduleUpdateInput,
1718
)
@@ -43,12 +44,16 @@
4344
# Will be updated at startup with the value from the db
4445
intervals=[ScheduleIntervalSpec(every=timedelta(minutes=60))]
4546
),
47+
# Will be updated at startup with the value from the db
48+
state=ScheduleState(paused=True),
4649
policy=SchedulePolicy(overlap=ScheduleOverlapPolicy.CANCEL_OTHER),
4750
),
4851
}
4952

5053

51-
def _master_image_sync_updater(sync_interval_minutes: int):
54+
def _master_image_sync_updater(
55+
sync_interval_minutes: int, auto_import_enabled_config: bool | None = None
56+
):
5257
async def do_update(input: ScheduleUpdateInput) -> ScheduleUpdate:
5358
master_image_sync_schedule = SCHEDULES[MASTER_IMAGE_SYNC_WORKFLOW_NAME]
5459
master_image_sync_schedule.spec = ScheduleSpec(
@@ -63,6 +68,9 @@ async def do_update(input: ScheduleUpdateInput) -> ScheduleUpdate:
6368
# Here we save the current state in order to avoid un-pausing the schedule
6469
# when only changing the sync interval
6570
current_state = schedule_description.schedule.state
71+
if auto_import_enabled_config is not None:
72+
# On startup, set the state based on the config
73+
current_state.paused = not auto_import_enabled_config
6674
schedule_description.schedule = master_image_sync_schedule
6775
schedule_description.schedule.state = current_state
6876
return ScheduleUpdate(schedule=schedule_description.schedule)
@@ -71,11 +79,15 @@ async def do_update(input: ScheduleUpdateInput) -> ScheduleUpdate:
7179

7280

7381
async def update_master_image_sync_schedule_interval(
74-
client: Client, sync_interval_minutes_config: int
82+
client: Client,
83+
sync_interval_minutes_config: int,
84+
auto_import_enabled_config: bool | None = None,
7585
):
7686
handle = client.get_schedule_handle(MASTER_IMAGE_SYNC_WORKFLOW_NAME)
7787
await handle.update(
78-
_master_image_sync_updater(sync_interval_minutes_config)
88+
_master_image_sync_updater(
89+
sync_interval_minutes_config, auto_import_enabled_config
90+
)
7991
)
8092

8193

src/maastemporalworker/temporal_script.py

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
TemporalServiceCache,
2424
)
2525
from maastemporalworker.schedules import (
26-
pause_or_unpause_master_image_sync_schedule,
2726
setup_schedules,
2827
update_master_image_sync_schedule_interval,
2928
)
@@ -294,12 +293,12 @@ async def main() -> None:
294293
}
295294
)
296295

297-
await pause_or_unpause_master_image_sync_schedule(
298-
temporal_client, configs[BootImagesAutoImportConfig.name]
299-
)
300-
301296
await update_master_image_sync_schedule_interval(
302-
temporal_client, configs[BootImagesImportIntervalMinutesConfig.name]
297+
temporal_client,
298+
sync_interval_minutes_config=configs[
299+
BootImagesImportIntervalMinutesConfig.name
300+
],
301+
auto_import_enabled_config=configs[BootImagesAutoImportConfig.name],
303302
)
304303

305304
log.info("temporal-worker started")

src/tests/maastemporalworker/test_schedules.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,12 +125,27 @@ async def test_updates_sync_interval(self):
125125

126126
async def test_preserves_current_state(self):
127127
mock_state = Mock()
128+
mock_state.paused = False
128129
mock_input = Mock()
129130
mock_input.description.schedule.state = mock_state
130131

131132
result = await _master_image_sync_updater(30)(mock_input)
132133

133134
assert result.schedule.state is mock_state
135+
assert result.schedule.state.paused is False
136+
137+
async def test_state_changes_based_on_config(self):
138+
mock_state = Mock()
139+
mock_state.paused = True
140+
mock_input = Mock()
141+
mock_input.description.schedule.state = mock_state
142+
143+
result = await _master_image_sync_updater(
144+
sync_interval_minutes=30, auto_import_enabled_config=True
145+
)(mock_input)
146+
147+
assert result.schedule.state is mock_state
148+
assert result.schedule.state.paused is False
134149

135150

136151
@pytest.mark.asyncio

0 commit comments

Comments
 (0)