HR-ATS-Portal/backend/interview/serializers.py

64 lines
2.2 KiB
Python

def _email_address(block):
if not isinstance(block,dict):
return None,None
inner=block.get("emailAddress") or block.get("email_address") or block
if not isinstance(inner,dict):
return None,None
email=(inner.get("address") or inner.get("email") or "").strip() or None
name=(inner.get("name") or "").strip() or None
return email,name
def participants_from_event(payload):
"""Graph event dict -> (organizer, attendees) as {name, email} snapshots."""
if not isinstance(payload,dict):
payload={}
org_email,org_name=_email_address(payload.get("organizer") or {})
organizer=None
if org_email or org_name:
organizer={"name":org_name,"email":org_email}
attendees=[]
seen=set()
for item in payload.get("attendees") or []:
email,name=_email_address(item)
key=(email or "").lower()
if not email or key in seen:
continue
seen.add(key)
attendees.append({"name":name,"email":email})
return organizer,attendees
def serialize_event(payload) -> dict:
"""Upstream calendar event -> the fields the interview row stores."""
if not isinstance(payload,dict):
payload={}
online=payload.get("onlineMeeting") or payload.get("online_meeting") or {}
if not isinstance(online,dict):
online={}
start=payload.get("start")
end=payload.get("end")
if isinstance(start,dict):
start=start.get("dateTime") or start.get("date_time")
if isinstance(end,dict):
end=end.get("dateTime") or end.get("date_time")
if hasattr(start,"isoformat"):
start=start.isoformat()
if hasattr(end,"isoformat"):
end=end.isoformat()
event_id=payload.get("id")
return {
"id": str(event_id) if event_id is not None else None,
"web_link": payload.get("webLink") or payload.get("web_link") or None,
"online_meeting_url": (
payload.get("onlineMeetingUrl")
or payload.get("online_meeting_url")
or online.get("joinUrl")
or online.get("join_url")
or None
),
"subject": payload.get("subject"),
"start": start,
"end": end,
}