|
7 | 7 | from dataclasses import dataclass |
8 | 8 | from typing import Optional, Any |
9 | 9 | from enum import Enum |
| 10 | +from datetime import datetime |
10 | 11 |
|
11 | 12 | from bs4 import Tag |
12 | 13 |
|
13 | 14 | from . import user, project, studio, session, forum |
| 15 | +from .typed_dicts import ActivityDict |
14 | 16 | from ._base import BaseSiteComponent |
15 | 17 | from scratchattach.utils import exceptions |
16 | 18 |
|
@@ -72,7 +74,8 @@ class Activity(BaseSiteComponent): |
72 | 74 | changed_fields: Optional[dict[str, str]] = None |
73 | 75 | is_reshare: Optional[bool] = None |
74 | 76 |
|
75 | | - datetime_created: Optional[str] = None |
| 77 | + datetime_created: Optional[datetime] = None |
| 78 | + datetime_created_raw: Optional[str] = None |
76 | 79 | time: Any = None |
77 | 80 | type: Optional[ActivityTypes] = None |
78 | 81 |
|
@@ -180,7 +183,7 @@ def update(self): |
180 | 183 | print("Warning: Activity objects can't be updated") |
181 | 184 | return False # Objects of this type cannot be updated |
182 | 185 |
|
183 | | - def _update_from_dict(self, data): |
| 186 | + def _update_from_dict(self, data: ActivityDict): |
184 | 187 | self.raw = data |
185 | 188 |
|
186 | 189 | self._session = data.get("_session", self._session) |
@@ -214,7 +217,8 @@ def _update_from_dict(self, data): |
214 | 217 | self.changed_fields = data.get("changed_fields", self.changed_fields) |
215 | 218 | self.is_reshare = data.get("is_reshare", self.is_reshare) |
216 | 219 |
|
217 | | - self.datetime_created = data.get("datetime_created", self.datetime_created) |
| 220 | + self.datetime_created_raw = data.get("datetime_created", self.datetime_created_raw) |
| 221 | + self.datetime_created = datetime.fromisoformat(self.datetime_created_raw) |
218 | 222 | self.time = data.get("time", self.time) |
219 | 223 |
|
220 | 224 | _type = data.get("type", self.type) |
@@ -252,7 +256,8 @@ def _update_from_json(self, data: dict): |
252 | 256 | self.actor_username = username |
253 | 257 | self.username = username |
254 | 258 | self.raw = data |
255 | | - self.datetime_created = _time |
| 259 | + self.datetime_created_raw = _time |
| 260 | + self.datetime_created = datetime.fromisoformat(self.datetime_created_raw) |
256 | 261 | if activity_type == 0: |
257 | 262 | self.type = ActivityTypes.followuser |
258 | 263 | self.followed_username = data["followed_username"] |
@@ -339,7 +344,8 @@ def _update_from_html(self, data: Tag): |
339 | 344 | while '\xa0' in _time: |
340 | 345 | _time = _time.replace('\xa0', ' ') |
341 | 346 |
|
342 | | - self.datetime_created = _time |
| 347 | + self.datetime_created_raw = _time |
| 348 | + self.datetime_created = datetime.fromisoformat(self.datetime_created_raw) |
343 | 349 | self.actor_username = data.find('div').find('span').text |
344 | 350 |
|
345 | 351 | self.target_name = data.find('div').find('span').find_next().text |
|
0 commit comments