Replace manual upsert logic with SQLite native upsert in Docker CRUD repositories, enhance Ansible backup playbook with better error handling and file permissions, add favicon endpoint, and improve playbook editor UI with syntax highlighting, lint integration, quality badges, and enhanced code editing features
Tests / Backend Tests (Python) (3.10) (push) Has been cancelled
Tests / Backend Tests (Python) (3.11) (push) Has been cancelled
Tests / Backend Tests (Python) (3.12) (push) Has been cancelled
Tests / Frontend Tests (JS) (push) Has been cancelled
Tests / Integration Tests (push) Has been cancelled
Tests / All Tests Passed (push) Has been cancelled

This commit is contained in:
2025-12-17 15:36:49 -05:00
parent 785db4b302
commit 05087aa380
77 changed files with 15286 additions and 304 deletions
+17 -4
View File
@@ -152,6 +152,17 @@ class SchedulerService:
else:
return CronTrigger(hour=hour, minute=minute, timezone=tz)
def _get_job_next_run_time(self, job: Any) -> Optional[datetime]:
"""Retourne la prochaine exécution d'un job APScheduler (compat APScheduler 3/4)."""
if job is None:
return None
# APScheduler 3.x
next_run = getattr(job, "next_run_time", None)
if next_run is not None:
return next_run
# APScheduler 4.x
return getattr(job, "next_fire_time", None)
def _add_job_for_schedule(self, schedule: Schedule):
"""Ajoute un job APScheduler pour un schedule."""
job_id = f"schedule_{schedule.id}"
@@ -184,8 +195,9 @@ class SchedulerService:
# Mettre à jour next_run_at
job = self.scheduler.get_job(job_id)
if job and job.next_run_time:
schedule.next_run_at = job.next_run_time
next_run = self._get_job_next_run_time(job)
if next_run:
schedule.next_run_at = next_run
self._schedules_cache[schedule.id] = schedule
async def _execute_schedule(self, schedule_id: str):
@@ -363,8 +375,9 @@ class SchedulerService:
# Mettre à jour next_run
job = self.scheduler.get_job(f"schedule_{schedule_id}")
if job and job.next_run_time:
schedule.next_run_at = job.next_run_time
next_run = self._get_job_next_run_time(job)
if next_run:
schedule.next_run_at = next_run
# Notifier via WebSocket
await ws_manager.broadcast({