|
1 | 1 | from datetime import datetime |
2 | 2 | from enum import IntEnum, StrEnum |
| 3 | +from typing import Any |
3 | 4 |
|
4 | 5 | from pydantic import BaseModel, EmailStr, Field, computed_field |
5 | 6 |
|
@@ -95,6 +96,18 @@ class Meeting(BaseModel): |
95 | 96 | datetime_: datetime | None = Field(None, alias="datetime") |
96 | 97 | tutor_id: int | None = None |
97 | 98 |
|
| 99 | + def update_from_dict(self, meeting_update: dict[str, Any]): |
| 100 | + """Update Meeting using meeting_update dictionary |
| 101 | +
|
| 102 | + Handle "datetime", "datetime_" key mismatch |
| 103 | + """ |
| 104 | + for orig_key, orig_value in meeting_update.items(): |
| 105 | + key, value = (orig_key, orig_value) |
| 106 | + if key in ["datetime", "datetime_"]: |
| 107 | + key = "datetime_" |
| 108 | + value = datetime.fromisoformat(value) if value else None |
| 109 | + setattr(self, key, value) |
| 110 | + |
98 | 111 | def assign_tutor(self, tutor: "Tutor"): |
99 | 112 | self.tutor_id = tutor.id |
100 | 113 |
|
@@ -183,3 +196,14 @@ class MeetingUpdate(BaseModel): |
183 | 196 | id: int |
184 | 197 | room: str | None = None |
185 | 198 | datetime_: datetime | None = Field(None, alias="datetime") |
| 199 | + |
| 200 | + @staticmethod |
| 201 | + def from_dict(meeting_id: int, meeting_update: dict[str, Any]) -> "MeetingUpdate": |
| 202 | + """Construct MeetingUpdate object from meeting_id and meeting_update dict |
| 203 | +
|
| 204 | + Handle "datetime", "datetime_" key mismatch |
| 205 | + """ |
| 206 | + meeting_update["datetime"] = meeting_update.get("datetime_") or meeting_update.get("datetime") |
| 207 | + if "datetime_" in meeting_update: |
| 208 | + del meeting_update["datetime_"] |
| 209 | + return MeetingUpdate(id=meeting_id, **meeting_update) |
0 commit comments