diff --git a/matrix_appservice_kakaotalk/kt/client/client.py b/matrix_appservice_kakaotalk/kt/client/client.py index 0bfba14..e589ea3 100644 --- a/matrix_appservice_kakaotalk/kt/client/client.py +++ b/matrix_appservice_kakaotalk/kt/client/client.py @@ -22,7 +22,7 @@ with any other potential backend. from __future__ import annotations -from typing import TYPE_CHECKING, cast, Awaitable, Callable, Type +from typing import TYPE_CHECKING, cast, Awaitable, Callable, Type, Optional, Union import logging import urllib.request @@ -116,7 +116,7 @@ class Client: http: ClientSession log: TraceLogger - def __init__(self, user: User, log: TraceLogger | None = None): + def __init__(self, user: User, log: Optional[TraceLogger] = None): """Create a per-user client object for user-specific client functionality.""" self.user = user @@ -149,8 +149,8 @@ class Client: def get( self, - url: str | URL, - headers: dict[str, str] | None = None, + url: Union[str, URL], + headers: Optional[dict[str, str]] = None, **kwargs, ) -> _RequestContextManager: # TODO Is auth ever needed? diff --git a/matrix_appservice_kakaotalk/kt/client/types.py b/matrix_appservice_kakaotalk/kt/client/types.py index 47c94fd..07a51c5 100644 --- a/matrix_appservice_kakaotalk/kt/client/types.py +++ b/matrix_appservice_kakaotalk/kt/client/types.py @@ -15,6 +15,8 @@ # along with this program. If not, see . """Custom wrapper classes around types defined by the KakaoTalk API.""" +from typing import Optional, Union + from attr import dataclass from mautrix.types import SerializableAttrs @@ -24,12 +26,12 @@ from ..types.openlink.open_channel_info import OpenChannelInfo from ..types.user.channel_user_info import NormalChannelUserInfo, OpenChannelUserInfo -ChannelInfoUnion = NormalChannelInfo | OpenChannelInfo -UserInfoUnion = NormalChannelUserInfo | OpenChannelUserInfo +ChannelInfoUnion = Union[NormalChannelInfo, OpenChannelInfo] +UserInfoUnion = Union[NormalChannelUserInfo, OpenChannelUserInfo] @dataclass class PortalChannelInfo(SerializableAttrs): name: str #participants: list[PuppetUserInfo] # TODO Image - channel_info: ChannelInfoUnion | None = None # Should be set manually by caller + channel_info: Optional[ChannelInfoUnion] = None # Should be set manually by caller diff --git a/matrix_appservice_kakaotalk/kt/types/api/struct/profile.py b/matrix_appservice_kakaotalk/kt/types/api/struct/profile.py index 6065b58..0701930 100644 --- a/matrix_appservice_kakaotalk/kt/types/api/struct/profile.py +++ b/matrix_appservice_kakaotalk/kt/types/api/struct/profile.py @@ -13,6 +13,8 @@ # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . +from typing import Optional, Union + from attr import dataclass from mautrix.types import SerializableAttrs, JSON @@ -34,9 +36,9 @@ class ProfileFeed(SerializableAttrs): downloadId: str contents: list[ProfileFeedObject] url: str - serviceUrl: str | None = None # NOTE Made optional + serviceUrl: Optional[str] = None # NOTE Made optional webUrl: str - serviceWebUrl: str | None = None # NOTE Made optional + serviceWebUrl: Optional[str] = None # NOTE Made optional updatedAt: int cursor: int feedMessage: str @@ -99,7 +101,7 @@ class ProfileStruct(SerializableAttrs): screenToken: int # NEW nickname: str - userId: int | str | Long # NOTE Should confirm this + userId: Union[int, str, Long] # NOTE Should confirm this suspended: bool meBadge: bool # TODO feeds = {feeds: list, last: bool} diff --git a/matrix_appservice_kakaotalk/kt/types/attachment/mention.py b/matrix_appservice_kakaotalk/kt/types/attachment/mention.py index 103a606..c151b1c 100644 --- a/matrix_appservice_kakaotalk/kt/types/attachment/mention.py +++ b/matrix_appservice_kakaotalk/kt/types/attachment/mention.py @@ -13,6 +13,8 @@ # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . +from typing import Union + from attr import dataclass from mautrix.types import SerializableAttrs @@ -24,4 +26,4 @@ from ..bson import Long class MentionStruct(SerializableAttrs): at: list[int] len: int - user_id: Long | int + user_id: Union[Long, int] diff --git a/matrix_appservice_kakaotalk/kt/types/channel/channel_type.py b/matrix_appservice_kakaotalk/kt/types/channel/channel_type.py index 5a0925a..eb97727 100644 --- a/matrix_appservice_kakaotalk/kt/types/channel/channel_type.py +++ b/matrix_appservice_kakaotalk/kt/types/channel/channel_type.py @@ -31,7 +31,7 @@ class KnownChannelType(str, Enum): return str in [KnownChannelType.DirectChat, KnownChannelType.OD] -ChannelType = KnownChannelType | str # Substitute for ChannelType = "name1" | ... | "nameN" | str +ChannelType = Union[KnownChannelType, str] # Substitute for ChannelType = "name1" | ... | "nameN" | str __all__ = [ diff --git a/matrix_appservice_kakaotalk/kt/types/channel/meta.py b/matrix_appservice_kakaotalk/kt/types/channel/meta.py index c2bd4c0..92b54b9 100644 --- a/matrix_appservice_kakaotalk/kt/types/channel/meta.py +++ b/matrix_appservice_kakaotalk/kt/types/channel/meta.py @@ -13,6 +13,8 @@ # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . +from typing import Optional, Union + from attr import dataclass from enum import Enum, IntEnum @@ -35,7 +37,7 @@ class KnownChannelMetaType(IntEnum): OPEN_CHANNEL_CHAT = 13 BOT = 14 -ChannelMetaType = KnownChannelMetaType | int +ChannelMetaType = Union[KnownChannelMetaType, int] class ChannelClientMetaType(str, Enum): @@ -53,20 +55,20 @@ class ChannelClientMetaType(str, Enum): class ChannelMetaStruct(SerializableAttrs): type: ChannelMetaType revision: Long - authorId: Long | None = None + authorId: Optional[Long] = None content: str updatedAt: int @dataclass(kw_only=True) class ChannelClientMetaStruct(SerializableAttrs): - name: str | None = None - image_path: str | None = None - favourite: bool | None = None - push_sound: bool | None = None - chat_hide: bool | None = None - fullImageUrl: str | None = None - imageUrl: str | None = None + name: Optional[str] = None + image_path: Optional[str] = None + favourite: Optional[bool] = None + push_sound: Optional[bool] = None + chat_hide: Optional[bool] = None + fullImageUrl: Optional[str] = None + imageUrl: Optional[str] = None @dataclass @@ -88,7 +90,7 @@ class TvMetaContent(SerializableAttrs): @dataclass(kw_only=True) class TvLiveMetaContent(SerializableAttrs): url: str - live: str | None = 'on' + live: Optional[str] = 'on' @dataclass @@ -96,7 +98,7 @@ class LiveTalkInfoOnMetaContent(SerializableAttrs): liveon: bool title: str startTime: int - userId: int | Long + userId: Union[int, Long] csIP: str csIP6: str csPort: int @@ -106,17 +108,17 @@ class LiveTalkInfoOnMetaContent(SerializableAttrs): @dataclass(kw_only=True) class LiveTalkInfoOffMetaContent(SerializableAttrs): """Substitute for LiveTalkInfoOffMetaContent extends Partial""" - liveon: bool - title: str | None = None - startTime: int | None = None - userId: int | Long | None - csIP: str | None = None - csIP6: str | None = None - csPort: int | None = None - callId: str | None = None + liveon: bool = False + title: Optional[str] = None + startTime: Optional[int] = None + userId: Union[int, Long, None] = None + csIP: Optional[str] = None + csIP6: Optional[str] = None + csPort: Optional[int] = None + callId: Optional[str] = None -LiveTalkInfoMetaContent = LiveTalkInfoOnMetaContent | LiveTalkInfoOffMetaContent; +LiveTalkInfoMetaContent = Union[LiveTalkInfoOnMetaContent, LiveTalkInfoOffMetaContent] @dataclass @@ -147,10 +149,10 @@ BotDelCommandStruct = BotCommandStruct @dataclass(kw_only=True) class BotMetaContent(SerializableAttrs): - add: list[BotAddCommandStruct] | None = None - update: list[BotAddCommandStruct] | None = None - full: list[BotAddCommandStruct] | None = None - delete: list[BotDelCommandStruct] | None = field(json="del", default=None) + add: Optional[list[BotAddCommandStruct]] = None + update: Optional[list[BotAddCommandStruct]] = None + full: Optional[list[BotAddCommandStruct]] = None + delete: Optional[list[BotDelCommandStruct]] = field(json="del", default=None) __all__ = [ diff --git a/matrix_appservice_kakaotalk/kt/types/chat/chat.py b/matrix_appservice_kakaotalk/kt/types/chat/chat.py index 6aeaf21..0f454a4 100644 --- a/matrix_appservice_kakaotalk/kt/types/chat/chat.py +++ b/matrix_appservice_kakaotalk/kt/types/chat/chat.py @@ -13,6 +13,8 @@ # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . +from typing import Optional, Union + from attr import dataclass from mautrix.types import SerializableAttrs @@ -29,9 +31,9 @@ class ChatTypeComponent(SerializableAttrs): @dataclass(kw_only=True) class Chat(ChatTypeComponent): - text: str | None = None - attachment: Attachment | None = None - supplement: dict | None = None + text: Optional[str] = None + attachment: Optional[Attachment] = None + supplement: Optional[dict] = None @dataclass @@ -57,7 +59,7 @@ class ChatLogLinked(ChatLogged): class ChatWritten(Chat): sender: ChannelUser sendAt: int - messageId: int | Long + messageId: Union[int, Long] @dataclass @@ -73,7 +75,7 @@ class TypedChatlog(Chatlog, TypedChat): @dataclass(kw_only=True) class ChatOptions(SerializableAttrs): - shout: bool | None = None + shout: Optional[bool] = None __all__ = [ diff --git a/matrix_appservice_kakaotalk/kt/types/chat/chat_type.py b/matrix_appservice_kakaotalk/kt/types/chat/chat_type.py index e65521b..d5406db 100644 --- a/matrix_appservice_kakaotalk/kt/types/chat/chat_type.py +++ b/matrix_appservice_kakaotalk/kt/types/chat/chat_type.py @@ -13,6 +13,8 @@ # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . +from typing import Union + from enum import IntEnum @@ -54,7 +56,7 @@ class KnownChatType(IntEnum): OPEN_VOTE = 97 OPEN_POST = 98 -ChatType = KnownChatType | int +ChatType = Union[KnownChatType, int] DELETED_MESSAGE_OFFSET = 16384; diff --git a/matrix_appservice_kakaotalk/kt/types/client/client_session.py b/matrix_appservice_kakaotalk/kt/types/client/client_session.py index a547d88..d9e3624 100644 --- a/matrix_appservice_kakaotalk/kt/types/client/client_session.py +++ b/matrix_appservice_kakaotalk/kt/types/client/client_session.py @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -from typing import NewType +from typing import NewType, Union from attr import dataclass @@ -24,7 +24,7 @@ from ..channel.channel_info import ChannelLoginData, NormalChannelData from ..openlink.open_channel_info import OpenChannelData -ChannelLoginDataItem = NewType("ChannelLoginDataItem", ChannelLoginData[NormalChannelData | OpenChannelData]) +ChannelLoginDataItem = NewType("ChannelLoginDataItem", ChannelLoginData[Union[NormalChannelData, OpenChannelData]]) @deserializer(ChannelLoginDataItem) def deserialize_channel_login_data_item(data: JSON) -> ChannelLoginDataItem: @@ -41,7 +41,7 @@ setattr(ChannelLoginDataItem, "deserialize", deserialize_channel_login_data_item @dataclass class LoginResult(SerializableAttrs): """Return value of TalkClient.login""" - channelList: list[ChannelLoginDataItem] + channelList: list[ChannelLoginDataItem] userId: Long lastChannelId: Long lastTokenId: Long diff --git a/matrix_appservice_kakaotalk/kt/types/openlink/__init__.py b/matrix_appservice_kakaotalk/kt/types/openlink/__init__.py index a850328..7638bcd 100644 --- a/matrix_appservice_kakaotalk/kt/types/openlink/__init__.py +++ b/matrix_appservice_kakaotalk/kt/types/openlink/__init__.py @@ -21,7 +21,7 @@ from .open_link_user_info import * """ -from typing import TYPE_CHECKING +from typing import TYPE_CHECKING, Optional, Union from attr import dataclass from enum import IntEnum @@ -56,7 +56,7 @@ class KnownLinkPrivilegeMask(IntEnum): NON_SPECIAL_LINK = 512 USE_BOT = 1024 -LinkPrivilegeMask = KnownLinkPrivilegeMask | int | Long; +LinkPrivilegeMask = Union[KnownLinkPrivilegeMask, int, Long] @dataclass @@ -67,8 +67,8 @@ class OpenPrivilegeComponent(SerializableAttrs): @dataclass(kw_only=True) class OpenLinkSettings(SerializableAttrs): linkName: str - linkCoverURL: str | None = None - description: str | None = None + linkCoverURL: Optional[str] = None + description: Optional[str] = None searchable: bool activated: bool @@ -109,12 +109,12 @@ class InformedOpenLink(SerializableAttrs): @dataclass(kw_only=True) class OpenLinkUpdateTemplate(SerializableAttrs): - passcode: str | None = None + passcode: Optional[str] = None @dataclass(kw_only=True) class OpenLinkCreateTemplate(SerializableAttrs): - mainProfileOnly: bool | None = None + mainProfileOnly: Optional[bool] = None @dataclass diff --git a/matrix_appservice_kakaotalk/kt/types/request.py b/matrix_appservice_kakaotalk/kt/types/request.py index 204ada3..fa74098 100644 --- a/matrix_appservice_kakaotalk/kt/types/request.py +++ b/matrix_appservice_kakaotalk/kt/types/request.py @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -from typing import Generic, Type, TypeVar +from typing import Generic, Type, TypeVar, Union from attr import dataclass from enum import IntEnum @@ -66,12 +66,12 @@ class KnownDataStatusCode(IntEnum): UPDATE_REQUIRED = -999 SERVER_UNDER_MAINTENANCE = -9797 -DataStatusCode = KnownDataStatusCode | int +DataStatusCode = Union[KnownDataStatusCode, int] @dataclass class ResponseState(SerializableAttrs): - status: DataStatusCode | KnownAuthStatusCode # NOTE Added KnownAuthStatusCode + status: Union[DataStatusCode, KnownAuthStatusCode] # NOTE Added KnownAuthStatusCode @dataclass @@ -96,7 +96,7 @@ class CommandResultDoneValue(RootCommandResult, Generic[ResultType]): def deserialize_result( result_type: Type[ResultType], data: JSON -) -> CommandResultDoneValue[ResultType] | RootCommandResult: +) -> Union[CommandResultDoneValue[ResultType], RootCommandResult]: """Returns equivalent of CommandResult. Does no consistency checking on success & result properties.""" if "result" in data: # TODO Allow arbitrary result object? diff --git a/matrix_appservice_kakaotalk/matrix.py b/matrix_appservice_kakaotalk/matrix.py index c4ab31d..b8ccba2 100644 --- a/matrix_appservice_kakaotalk/matrix.py +++ b/matrix_appservice_kakaotalk/matrix.py @@ -15,7 +15,7 @@ # along with this program. If not, see . from __future__ import annotations -from typing import TYPE_CHECKING +from typing import TYPE_CHECKING, Union import time from mautrix.bridge import BaseMatrixHandler @@ -249,7 +249,7 @@ class MatrixHandler(BaseMatrixHandler): """ async def handle_ephemeral_event( - self, evt: ReceiptEvent | PresenceEvent | TypingEvent + self, evt: Union[ReceiptEvent, PresenceEvent, TypingEvent] ) -> None: if evt.type == EventType.TYPING: await self.handle_typing(evt.room_id, evt.content.user_ids)