Explorar el Código

add periodic push-closed syncs (short 6h, long daily)

ZiB hace 4 meses
padre
commit
88e72b6ecc
Se han modificado 2 ficheros con 24 adiciones y 2 borrados
  1. 1 0
      room_cal/_periodic.py
  2. 23 2
      room_cal/workflows/closed.py

+ 1 - 0
room_cal/_periodic.py

@@ -35,6 +35,7 @@ def _register_all_periodics() -> None:
   """Import every module that registers periodic callbacks. Add new modules here."""
   import room_cal.workflows.reservations  # noqa: F401
   import room_cal.workflows.prices        # noqa: F401
+  import room_cal.workflows.closed        # noqa: F401
 
 
 async def run_due(api: ServiceAPI) -> None:

+ 23 - 2
room_cal/workflows/closed.py

@@ -1,5 +1,5 @@
-from datetime import date
-from typing import Callable
+from datetime import date, timedelta
+from typing import Callable, TYPE_CHECKING
 from fastapi import APIRouter, BackgroundTasks
 from pydantic import BaseModel
 
@@ -9,6 +9,11 @@ from room_cal.actions.fetch_closed import fetch_closed
 from room_cal.actions.push_closed import push_closed
 from room_cal.workflows import _bg, _push
 from room_cal._api_source import API_SOURCE
+from room_cal._periodic import register_periodic
+from room_cal._utils import local_today, get_config
+
+if TYPE_CHECKING:
+  from room_cal.service_api import ServiceAPI
 
 router = APIRouter(prefix='/workflow')
 
@@ -64,3 +69,19 @@ async def workflow_delete_closed(target_date: date, bg: BackgroundTasks):
 @router.post('/closed/{start_date}/{end_date}', status_code=204)
 async def workflow_sync_closed(start_date: date, end_date: date, bg: BackgroundTasks):
   await sync_closed(start_date, end_date, schedule=lambda c: bg.add_task(_bg, c))
+
+
+async def _periodic_push_short(api: 'ServiceAPI') -> None:
+  start = local_today()
+  window = get_config().global_.reservation_window_days
+  await push_closed(start, start + timedelta(days=window), api=api)
+
+
+async def _periodic_push_long(api: 'ServiceAPI') -> None:
+  start = local_today()
+  window = get_config().global_.long_window_days
+  await push_closed(start, start + timedelta(days=window), api=api)
+
+
+register_periodic(_periodic_push_short, timedelta(hours=6))
+register_periodic(_periodic_push_long, timedelta(days=1))