add edoxid calendar sync dag
Sync jadwal sidang eDOXID ke Google Calendar "Jadwal Sidang" tiap 5 menit (read-only ke doxid2022), plus reminder email H-1/1-jam via Gmail API karena reminder Calendar bawaan tidak ikut ke kalender pribadi attendee.
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
import os
|
||||
from dataclasses import dataclass
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class DbConfig:
|
||||
host: str
|
||||
port: int
|
||||
database: str
|
||||
username: str
|
||||
password: str
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class GoogleConfig:
|
||||
client_id: str
|
||||
client_secret: str
|
||||
refresh_token: str
|
||||
calendar_id: str
|
||||
|
||||
|
||||
def get_db_config() -> DbConfig:
|
||||
return DbConfig(
|
||||
host=os.environ.get("EDOXID_DB_HOST", "203.24.50.52"),
|
||||
port=int(os.environ.get("EDOXID_DB_PORT", "3306")),
|
||||
database=os.environ.get("EDOXID_DB_DATABASE", "doxid2022"),
|
||||
username=os.environ.get("EDOXID_DB_USERNAME", "calendar_sync_ro"),
|
||||
password=os.environ["EDOXID_DB_PASSWORD"],
|
||||
)
|
||||
|
||||
|
||||
def get_google_config() -> GoogleConfig:
|
||||
return GoogleConfig(
|
||||
client_id=os.environ["EDOXID_GOOGLE_CLIENT_ID"],
|
||||
client_secret=os.environ["EDOXID_GOOGLE_CLIENT_SECRET"],
|
||||
refresh_token=os.environ["EDOXID_GOOGLE_REFRESH_TOKEN"],
|
||||
# Calendar "Jadwal Sidang" milik tu@informatika.untan.ac.id
|
||||
calendar_id=os.environ.get(
|
||||
"EDOXID_GOOGLE_CALENDAR_ID",
|
||||
"c_1a4ilomn51i1r0mccnjqe9cumg@group.calendar.google.com",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
def get_state_sqlite_path() -> str:
|
||||
return os.environ.get("EDOXID_STATE_SQLITE_PATH", "/opt/airflow/scripts/edoxid_calendar_state.sqlite")
|
||||
|
||||
|
||||
def get_sync_min_date() -> str:
|
||||
"""Batas bawah tanggal sidang yang disinkron, format 'YYYY-MM-DD'.
|
||||
|
||||
Default: hari ini — supaya run pertama TIDAK langsung mengirim invite
|
||||
Calendar ke semua submission lama (2019-2026, ~1156 baris per cek 2026-07-27)
|
||||
yang sudah punya schedule. Ubah lewat env var kalau memang mau backfill sengaja.
|
||||
"""
|
||||
return os.environ.get("EDOXID_SYNC_MIN_DATE", "today")
|
||||
Reference in New Issue
Block a user