SIENTIAPDE-1646
SIENTIAPDE-1646: Refactor TemporalManager by extracting schedule update and task queue name building logic into dedicated helper methods.
This commit is contained in:
@@ -217,12 +217,7 @@ class TemporalManager(SientiaMonitoring):
|
||||
f'{json.dumps(schedule, indent=4, sort_keys=True)}', metadata=metadata
|
||||
)
|
||||
|
||||
runtime_name = (
|
||||
schedule.get('runtime', 'legacy')
|
||||
if workflow_type in RUNTIME_WORKFLOWS
|
||||
else None
|
||||
)
|
||||
task_queue_name = build_queue_name(workflow_type, runtime_name)
|
||||
task_queue_name = self._build_task_queue_name(workflow_type, schedule)
|
||||
schedule['task_queue'] = task_queue_name
|
||||
|
||||
await client.create_schedule(
|
||||
@@ -285,6 +280,68 @@ class TemporalManager(SientiaMonitoring):
|
||||
|
||||
return report
|
||||
|
||||
@staticmethod
|
||||
def _build_task_queue_name(workflow_type: str, schedule: dict[str, Any]) -> str:
|
||||
"""
|
||||
Build the Temporal task queue name for a schedule.
|
||||
|
||||
Only workflow types listed in ``RUNTIME_WORKFLOWS`` get an environment/tenant
|
||||
specific ``runtime`` suffix; every other workflow type gets a plain queue name.
|
||||
"""
|
||||
runtime_name = (
|
||||
schedule.get('runtime', 'legacy') if workflow_type in RUNTIME_WORKFLOWS else None
|
||||
)
|
||||
return build_queue_name(workflow_type, runtime_name)
|
||||
|
||||
def _make_schedule_updater(self, schedule: dict[str, Any], metadata: dict[str, Any]):
|
||||
"""Build the ``ScheduleUpdate`` callback used by ``handler.update`` for one schedule."""
|
||||
|
||||
# fmt: off
|
||||
async def update_schedule(input_data: ScheduleUpdateInput) -> ScheduleUpdate: # NOSONAR
|
||||
schedule_action = input_data.description.schedule.action
|
||||
|
||||
self.debug("Updating schedule:", metadata=metadata)
|
||||
|
||||
if hasattr(schedule_action, "args"):
|
||||
self.debug("New schedule:", metadata=metadata)
|
||||
self.debug(
|
||||
f"{json.dumps(schedule, indent=4, sort_keys=True)}", metadata=metadata) # NOSONAR
|
||||
|
||||
schedule_action.args = [schedule]
|
||||
|
||||
input_data.description.schedule.spec.intervals = [
|
||||
ScheduleIntervalSpec(
|
||||
every=timedelta(
|
||||
seconds=parse_frequency(schedule.get('frequency', '1m'))),
|
||||
offset=timedelta(
|
||||
seconds=parse_frequency(schedule.get('offset', '0m'))),
|
||||
)
|
||||
]
|
||||
|
||||
return ScheduleUpdate(schedule=input_data.description.schedule)
|
||||
|
||||
# fmt: on
|
||||
return update_schedule
|
||||
|
||||
async def _update_single_schedule(
|
||||
self,
|
||||
client: Client,
|
||||
schedule_name: str,
|
||||
schedule: dict[str, Any],
|
||||
metadata: dict[str, Any],
|
||||
) -> None:
|
||||
"""Update a single schedule in Temporal, raising if the schedule handle is missing."""
|
||||
handler = client.get_schedule_handle(schedule_name)
|
||||
|
||||
if not handler:
|
||||
raise ValueError(f'Schedule {schedule_name} not found')
|
||||
|
||||
workflow_type = schedule['workflow_type']
|
||||
schedule['task_queue'] = self._build_task_queue_name(workflow_type, schedule)
|
||||
|
||||
update_schedule = self._make_schedule_updater(schedule, metadata)
|
||||
await handler.update(update_schedule)
|
||||
|
||||
@activity.defn(name='update_schedules')
|
||||
async def update_schedules(self, input_data: dict[str, Any]) -> list[dict[str, Any]]:
|
||||
"""
|
||||
@@ -321,47 +378,7 @@ class TemporalManager(SientiaMonitoring):
|
||||
|
||||
for schedule_name, schedule in schedules.items():
|
||||
try:
|
||||
handler = client.get_schedule_handle(schedule_name)
|
||||
|
||||
if not handler:
|
||||
raise ValueError(f'Schedule {schedule_name} not found')
|
||||
|
||||
workflow_type = schedule['workflow_type']
|
||||
runtime_name = (
|
||||
schedule.get('runtime', 'legacy')
|
||||
if workflow_type in RUNTIME_WORKFLOWS
|
||||
else None
|
||||
)
|
||||
schedule['task_queue'] = build_queue_name(workflow_type, runtime_name)
|
||||
|
||||
# fmt: off
|
||||
async def update_schedule(input_data: ScheduleUpdateInput) -> ScheduleUpdate: # NOSONAR
|
||||
schedule_action = input_data.description.schedule.action
|
||||
|
||||
self.debug("Updating schedule:", metadata=metadata)
|
||||
|
||||
if hasattr(schedule_action, "args"):
|
||||
self.debug("New schedule:", metadata=metadata)
|
||||
self.debug(
|
||||
f"{json.dumps(schedule, indent=4, sort_keys=True)}", metadata=metadata) # NOSONAR
|
||||
|
||||
schedule_action.args = [schedule]
|
||||
|
||||
input_data.description.schedule.spec.intervals = [
|
||||
ScheduleIntervalSpec(
|
||||
every=timedelta(
|
||||
seconds=parse_frequency(schedule.get('frequency', '1m'))),
|
||||
offset=timedelta(
|
||||
seconds=parse_frequency(schedule.get('offset', '0m'))),
|
||||
)
|
||||
]
|
||||
|
||||
return ScheduleUpdate(schedule=input_data.description.schedule)
|
||||
|
||||
# fmt: on
|
||||
await handler.update(update_schedule)
|
||||
|
||||
del update_schedule
|
||||
await self._update_single_schedule(client, schedule_name, schedule, metadata)
|
||||
|
||||
report.append(
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user