Add from_dict class method

Add new event types
Add missing attributes
This commit is contained in:
Dusty Pianalto 2019-10-21 01:06:09 -08:00
parent 3e8e9eebbc
commit faaf2ecb39

View File

@ -1,15 +1,35 @@
from dataclasses import dataclass
from typing import Optional, List
from .client import Client
from .room import Room
from .content import ContentBase
@dataclass
class EventBase:
client: Client
content: ContentBase
type: str
sender: str
@classmethod
def from_dict(cls, client: Client, event_dict: dict):
from .content import content_dispatcher
if event_dict['type'] == 'm.room.message':
content_class = content_dispatcher[event_dict['content']['msgtype']]
else:
content_class = content_dispatcher[event_dict['type']]
content_dict = event_dict['content']
del event_dict['content']
return cls(
client=client,
content=content_class(content_dict),
**event_dict
)
@dataclass
class UnsignedData:
@ -21,19 +41,30 @@ class UnsignedData:
@dataclass
class RoomEvent(EventBase):
from .room import Room
event_id: str
origin_server_id: int
origin_server_ts: int
unsigned: UnsignedData
room: Room
user_id: str
@dataclass
class StateEvent(RoomEvent):
state_key: str
age: int
prev_content: Optional[EventBase] = None
@dataclass
class RedactionEvent(RoomEvent):
redacts: EventBase
@dataclass
class MessageEvent(RoomEvent):
pass
@dataclass
class PresenceEvent(EventBase):
pass