matrix-appservice-kakaotalk/matrix_appservice_kakaotalk/kt/types/client/client_session.py

59 lines
2.0 KiB
Python

# matrix-appservice-kakaotalk - A Matrix-KakaoTalk puppeting bridge.
# Copyright (C) 2022 Tulir Asokan, Andrew Ferrazzutti
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
from typing import NewType, Union
from attr import dataclass
from mautrix.types import SerializableAttrs, JSON, deserializer
from ..bson import Long
from ..channel.channel_info import ChannelLoginData, NormalChannelData
from ..openlink.open_channel_info import OpenChannelData
ChannelLoginDataItem = NewType("ChannelLoginDataItem", ChannelLoginData[Union[NormalChannelData, OpenChannelData]])
@deserializer(ChannelLoginDataItem)
def deserialize_channel_login_data_item(data: JSON) -> ChannelLoginDataItem:
channel_data = data["channel"]
if "linkId" in channel_data:
data["channel"] = OpenChannelData.deserialize(channel_data)
else:
data["channel"] = NormalChannelData.deserialize(channel_data)
return ChannelLoginData.deserialize(data)
setattr(ChannelLoginDataItem, "deserialize", deserialize_channel_login_data_item)
@dataclass
class LoginResult(SerializableAttrs):
"""Return value of TalkClient.login"""
channelList: list[ChannelLoginDataItem]
userId: Long
lastChannelId: Long
lastTokenId: Long
mcmRevision: int
removedChannelIdList: list[Long]
revision: int
revisionInfo: str
minLogId: Long
# TODO Consider catching SerializerError for channelList entries
__all__ = [
"LoginResult",
]