fix: vobject 의존성 추가 + calendar 파싱 icalendar fallback
CalDAV 3.x에서 vobject 분리됨 → 이벤트 파싱 실패 원인. vobject 설치 + icalendar fallback 파싱 추가. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -5,3 +5,4 @@ pydantic-settings==2.5.0
|
||||
aiosqlite==0.20.0
|
||||
python-multipart==0.0.9
|
||||
caldav>=1.3.0
|
||||
vobject>=0.9.8
|
||||
|
||||
@@ -31,8 +31,9 @@ def _get_client():
|
||||
|
||||
|
||||
def _parse_event(event) -> dict:
|
||||
"""VEVENT → dict."""
|
||||
"""VEVENT → dict. vobject 있으면 사용, 없으면 icalendar fallback."""
|
||||
try:
|
||||
# vobject 방식
|
||||
vevent = event.vobject_instance.vevent
|
||||
summary = str(vevent.summary.value) if hasattr(vevent, "summary") else "(제목 없음)"
|
||||
dtstart = vevent.dtstart.value
|
||||
@@ -43,7 +44,24 @@ def _parse_event(event) -> dict:
|
||||
|
||||
return {"summary": summary, "start": start_str, "end": end_str}
|
||||
except Exception:
|
||||
return {"summary": "(파싱 실패)", "start": "", "end": ""}
|
||||
pass
|
||||
|
||||
# fallback: icalendar 라이브러리로 raw data 파싱
|
||||
try:
|
||||
from icalendar import Calendar
|
||||
cal = Calendar.from_ical(event.data)
|
||||
for comp in cal.walk():
|
||||
if comp.name == "VEVENT":
|
||||
summary = str(comp.get("summary", "(제목 없음)"))
|
||||
dtstart = comp.get("dtstart")
|
||||
dtend = comp.get("dtend")
|
||||
start_str = dtstart.dt.strftime("%Y-%m-%d %H:%M") if dtstart else ""
|
||||
end_str = dtend.dt.strftime("%Y-%m-%d %H:%M") if dtend else ""
|
||||
return {"summary": summary, "start": start_str, "end": end_str}
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
return {"summary": "(파싱 실패)", "start": "", "end": ""}
|
||||
|
||||
|
||||
async def today() -> dict:
|
||||
|
||||
Reference in New Issue
Block a user