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 dataclasses import dataclass
from typing import Optional, List from typing import Optional, List
from .client import Client
from .room import Room
from .content import ContentBase from .content import ContentBase
@dataclass @dataclass
class EventBase: class EventBase:
client: Client
content: ContentBase content: ContentBase
type: str type: str
sender: 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 @dataclass
class UnsignedData: class UnsignedData:
@ -21,19 +41,30 @@ class UnsignedData:
@dataclass @dataclass
class RoomEvent(EventBase): class RoomEvent(EventBase):
from .room import Room
event_id: str event_id: str
origin_server_id: int origin_server_ts: int
unsigned: UnsignedData unsigned: UnsignedData
room: Room room: Room
user_id: str
@dataclass @dataclass
class StateEvent(RoomEvent): class StateEvent(RoomEvent):
state_key: str state_key: str
age: int
prev_content: Optional[EventBase] = None prev_content: Optional[EventBase] = None
@dataclass @dataclass
class RedactionEvent(RoomEvent): class RedactionEvent(RoomEvent):
redacts: EventBase redacts: EventBase
@dataclass
class MessageEvent(RoomEvent):
pass
@dataclass
class PresenceEvent(EventBase):
pass