def _fix_prev_content(raw_event: JSON) -> None: try: raw_event["unsigned"]["prev_content"] except KeyError: try: raw_event.setdefault("unsigned", {})["prev_content"] = raw_event["prev_content"] except KeyError: pass
def deserialize(cls, raw: JSON) -> Cookies: cookie = SimpleCookie() for key, data in raw.items(): cookie[key] = data.pop("value") cookie[key].update(data) cookies = cls() cookies.jar.update_cookies(cookie, ig_url) return cookies
def handle_sync(self, data: JSON) -> List[asyncio.Task]: """ Handle a /sync object. Args: data: The data from a /sync request. """ tasks = [] otk_count = data.get("device_one_time_keys_count", {}) tasks += self.dispatch_internal_event( InternalEventType.DEVICE_OTK_COUNT, custom_type=DeviceOTKCount(curve25519=otk_count.get("curve25519", 0), signed_curve25519=otk_count.get("signed_curve25519", 0))) device_lists = data.get("device_lists", {}) tasks += self.dispatch_internal_event(InternalEventType.DEVICE_LISTS, custom_type=DeviceLists( changed=device_lists.get("changed", []), left=device_lists.get("left", []))) for raw_event in data.get("account_data", {}).get("events", []): tasks += self.dispatch_event(AccountDataEvent.deserialize(raw_event), source=SyncStream.ACCOUNT_DATA) for raw_event in data.get("ephemeral", {}).get("events", []): tasks += self.dispatch_event(EphemeralEvent.deserialize(raw_event), source=SyncStream.EPHEMERAL) for raw_event in data.get("to_device", {}).get("events", []): tasks += self.dispatch_event(ToDeviceEvent.deserialize(raw_event), source=SyncStream.TO_DEVICE) rooms = data.get("rooms", {}) for room_id, room_data in rooms.get("join", {}).items(): for raw_event in room_data.get("state", {}).get("events", []): raw_event["room_id"] = room_id tasks += self.dispatch_event(StateEvent.deserialize(raw_event), source=SyncStream.JOINED_ROOM | SyncStream.STATE) for raw_event in room_data.get("timeline", {}).get("events", []): raw_event["room_id"] = room_id tasks += self.dispatch_event(Event.deserialize(raw_event), source=SyncStream.JOINED_ROOM | SyncStream.TIMELINE) for room_id, room_data in rooms.get("invite", {}).items(): events: List[Dict[str, Any]] = room_data.get("invite_state", {}).get("events", []) for raw_event in events: raw_event["room_id"] = room_id raw_invite = next(raw_event for raw_event in events if raw_event.get("type", "") == "m.room.member" and raw_event.get("state_key", "") == self.mxid) # These aren't required by the spec, so make sure they're set raw_invite.setdefault("event_id", None) raw_invite.setdefault("origin_server_ts", int(time() * 1000)) raw_invite.setdefault("unsigned", {}) invite = StateEvent.deserialize(raw_invite) invite.unsigned.invite_room_state = [StrippedStateEvent.deserialize(raw_event) for raw_event in events if raw_event != raw_invite] tasks += self.dispatch_event(invite, source=SyncStream.INVITED_ROOM | SyncStream.STATE) for room_id, room_data in rooms.get("leave", {}).items(): for raw_event in room_data.get("timeline", {}).get("events", []): if "state_key" in raw_event: raw_event["room_id"] = room_id tasks += self.dispatch_event(StateEvent.deserialize(raw_event), source=SyncStream.LEFT_ROOM | SyncStream.TIMELINE) return tasks