67 lines
2.2 KiB
Python
67 lines
2.2 KiB
Python
from dataclasses import dataclass
|
|
from typing import Dict, Any, Optional, List
|
|
|
|
|
|
@dataclass
|
|
class Room:
|
|
"""Dataclass representing a Matrix room"""
|
|
room_id: str
|
|
name: Optional[str] = None
|
|
canonical_alias: Optional[str] = None
|
|
joined_members: int = 0
|
|
joined_local_members: int = 0
|
|
version: Optional[str] = None
|
|
creator: Optional[str] = None
|
|
encryption: Optional[str] = None
|
|
federatable: bool = True
|
|
public: bool = True
|
|
join_rules: Optional[str] = None
|
|
guest_access: Optional[str] = None
|
|
history_visibility: Optional[str] = None
|
|
state_events: int = 0
|
|
room_type: Optional[str] = None
|
|
|
|
avatar: Optional[str] = None
|
|
|
|
@classmethod
|
|
def from_api_response(cls, data: Dict[str, Any]) -> "Room":
|
|
"""Create a Room object from a dictionary."""
|
|
return cls(
|
|
room_id=str(data['room_id']),
|
|
name=data.get('name'),
|
|
canonical_alias=data.get('canonical_alias'),
|
|
joined_members=data.get('joined_members', 0),
|
|
joined_local_members=data.get('joined_local_members', 0),
|
|
version=data.get('version'),
|
|
creator=data.get('creator'),
|
|
encryption=data.get('encryption'),
|
|
federatable=data.get('federatable', True),
|
|
public=data.get('public', True),
|
|
join_rules=data.get('join_rules'),
|
|
guest_access=data.get('guest_access'),
|
|
history_visibility=data.get('history_visibility'),
|
|
state_events=data.get('state_events', 0),
|
|
room_type=data.get('room_type'),
|
|
avatar=data.get('avatar'),
|
|
)
|
|
|
|
|
|
@dataclass
|
|
class RoomListResponse:
|
|
"""Response from room list API"""
|
|
rooms: List[Room]
|
|
next_batch: Optional[int]
|
|
prev_batch: Optional[int]
|
|
total_rooms: int
|
|
|
|
@classmethod
|
|
def from_api_response(cls, data: Dict[str, Any]) -> "RoomListResponse":
|
|
"""Create RoomListResponse from API response."""
|
|
rooms = [Room.from_api_response(room_data) for room_data in data.get('rooms', [])]
|
|
|
|
return cls(
|
|
rooms=rooms,
|
|
next_batch=data.get('next_batch'),
|
|
prev_batch=data.get('prev_batch'),
|
|
total_rooms=data.get('total_rooms', len(rooms))
|
|
)
|