فهرست منبع

Remove SerializableAttrs type param

Tulir Asokan 4 سال پیش
والد
کامیت
7a8b8535dd

+ 1 - 1
mauigpapi/state/application.py

@@ -25,7 +25,7 @@ default_capabilities = json.loads(pkgutil.get_data("mauigpapi.state",
 
 
 @dataclass
-class AndroidApplication(SerializableAttrs['AndroidApplication']):
+class AndroidApplication(SerializableAttrs):
     # TODO these newer versions make the iris subscribe stop working for some reason
     # APP_VERSION: str = "168.0.0.40.355"
     # APP_VERSION_CODE: str = "261079771"

+ 1 - 1
mauigpapi/state/device.py

@@ -31,7 +31,7 @@ descriptors = json.loads(pkgutil.get_data("mauigpapi.state", "samples/devices.js
 
 
 @dataclass
-class AndroidDevice(SerializableAttrs['AndroidDevice']):
+class AndroidDevice(SerializableAttrs):
     id: Optional[str] = None
     descriptor: Optional[str] = None
     uuid: Optional[str] = None

+ 1 - 1
mauigpapi/state/session.py

@@ -21,7 +21,7 @@ from mautrix.types import SerializableAttrs
 
 
 @dataclass
-class AndroidSession(SerializableAttrs['AndroidSession']):
+class AndroidSession(SerializableAttrs):
     eu_dc_enabled: Optional[bool] = None
     thumbnail_cache_busting_value: int = 1000
     ads_opt_out: bool = False

+ 1 - 1
mauigpapi/state/state.py

@@ -33,7 +33,7 @@ from .cookies import Cookies
 
 
 @dataclass
-class AndroidState(SerializableAttrs['AndroidState']):
+class AndroidState(SerializableAttrs):
     device: AndroidDevice = attr.ib(factory=lambda: AndroidDevice())
     session: AndroidSession = attr.ib(factory=lambda: AndroidSession())
     application: AndroidApplication = attr.ib(factory=lambda: AndroidApplication())

+ 9 - 9
mauigpapi/types/account.py

@@ -22,7 +22,7 @@ from mautrix.types import SerializableAttrs, SerializableEnum
 
 
 @dataclass(kw_only=True)
-class FriendshipStatus(SerializableAttrs['FriendshipStatus']):
+class FriendshipStatus(SerializableAttrs):
     following: bool
     outgoing_request: bool
     is_bestie: bool
@@ -33,13 +33,13 @@ class FriendshipStatus(SerializableAttrs['FriendshipStatus']):
 
 
 @dataclass(kw_only=True)
-class UserIdentifier(SerializableAttrs['UserIdentifier']):
+class UserIdentifier(SerializableAttrs):
     pk: int
     username: str
 
 
 @dataclass(kw_only=True)
-class BaseResponseUser(UserIdentifier, SerializableAttrs['BaseResponseUser']):
+class BaseResponseUser(UserIdentifier, SerializableAttrs):
     full_name: str
     is_private: bool
     is_verified: bool = False
@@ -58,7 +58,7 @@ class BaseResponseUser(UserIdentifier, SerializableAttrs['BaseResponseUser']):
 
 
 @dataclass(kw_only=True)
-class BaseFullResponseUser(BaseResponseUser, SerializableAttrs['BaseFullResponseUser']):
+class BaseFullResponseUser(BaseResponseUser, SerializableAttrs):
     phone_number: str
     country_code: Optional[int] = None
     national_number: Optional[int] = None
@@ -73,21 +73,21 @@ class BaseFullResponseUser(BaseResponseUser, SerializableAttrs['BaseFullResponse
 
 
 @dataclass
-class EntityText(SerializableAttrs['EntityText']):
+class EntityText(SerializableAttrs):
     raw_text: str
     # TODO figure out type
     entities: List[Any]
 
 
 @dataclass
-class HDProfilePictureVersion(SerializableAttrs['HDProfilePictureVersion']):
+class HDProfilePictureVersion(SerializableAttrs):
     url: str
     width: int
     height: int
 
 
 @dataclass
-class ProfileEditParams(SerializableAttrs['ProfileEditParams']):
+class ProfileEditParams(SerializableAttrs):
     should_show_confirmation_dialog: bool
     is_pending_review: bool
     confirmation_dialog_text: str
@@ -102,7 +102,7 @@ class Gender(SerializableEnum):
 
 
 @dataclass(kw_only=True)
-class CurrentUser(BaseFullResponseUser, SerializableAttrs['CurrentUser']):
+class CurrentUser(BaseFullResponseUser, SerializableAttrs):
     biography: str
     can_link_entities_in_bio: bool
     biography_with_entities: EntityText
@@ -121,6 +121,6 @@ class CurrentUser(BaseFullResponseUser, SerializableAttrs['CurrentUser']):
 
 
 @dataclass
-class CurrentUserResponse(SerializableAttrs['CurrentUserResponse']):
+class CurrentUserResponse(SerializableAttrs):
     status: str
     user: CurrentUser

+ 2 - 2
mauigpapi/types/challenge.py

@@ -22,7 +22,7 @@ from .login import LoginResponseUser
 
 
 @dataclass
-class ChallengeStateData(SerializableAttrs['ChallengeStateData']):
+class ChallengeStateData(SerializableAttrs):
     # Only for reset step
     choice: Optional[str] = None
     fb_access_token: Optional[str] = None
@@ -38,7 +38,7 @@ class ChallengeStateData(SerializableAttrs['ChallengeStateData']):
 
 
 @dataclass(kw_only=True)
-class ChallengeStateResponse(SerializableAttrs['ChallengeStateResponse']):
+class ChallengeStateResponse(SerializableAttrs):
     # TODO enum?
     step_name: Optional[str] = None
     step_data: Optional[ChallengeStateData] = None

+ 4 - 4
mauigpapi/types/direct_inbox.py

@@ -22,13 +22,13 @@ from .thread import Thread, ThreadUser
 
 
 @dataclass
-class DMInboxCursor(SerializableAttrs['DMInboxCursor']):
+class DMInboxCursor(SerializableAttrs):
     cursor_timestamp_seconds: int
     cursor_thread_v2_id: int
 
 
 @dataclass
-class DMInbox(SerializableAttrs['DMInbox']):
+class DMInbox(SerializableAttrs):
     threads: List[Thread]
     has_older: bool
     unseen_count: int
@@ -41,7 +41,7 @@ class DMInbox(SerializableAttrs['DMInbox']):
 
 
 @dataclass
-class DMInboxResponse(SerializableAttrs['DMInboxResponse']):
+class DMInboxResponse(SerializableAttrs):
     status: str
     seq_id: int
     snapshot_at_ms: int
@@ -54,6 +54,6 @@ class DMInboxResponse(SerializableAttrs['DMInboxResponse']):
 
 
 @dataclass
-class DMThreadResponse(SerializableAttrs['DMThreadResponse']):
+class DMThreadResponse(SerializableAttrs):
     thread: Thread
     status: str

+ 8 - 8
mauigpapi/types/error.py

@@ -21,7 +21,7 @@ from mautrix.types import SerializableAttrs
 
 
 @dataclass
-class SpamResponse(SerializableAttrs['SpamResponse']):
+class SpamResponse(SerializableAttrs):
     feedback_title: str
     feedback_message: str
     feedback_url: str
@@ -35,7 +35,7 @@ class SpamResponse(SerializableAttrs['SpamResponse']):
 
 
 @dataclass
-class CheckpointChallenge(SerializableAttrs['CheckpointChallenge']):
+class CheckpointChallenge(SerializableAttrs):
     url: str
     api_path: str
     hide_webview_header: bool
@@ -45,7 +45,7 @@ class CheckpointChallenge(SerializableAttrs['CheckpointChallenge']):
 
 
 @dataclass
-class CheckpointResponse(SerializableAttrs['CheckpointResponse']):
+class CheckpointResponse(SerializableAttrs):
     message: str  # challenge_required
     status: str  # fail
     challenge: CheckpointChallenge
@@ -53,7 +53,7 @@ class CheckpointResponse(SerializableAttrs['CheckpointResponse']):
 
 
 @dataclass
-class LoginRequiredResponse(SerializableAttrs['LoginRequiredResponse']):
+class LoginRequiredResponse(SerializableAttrs):
     # TODO enum?
     logout_reason: int
     message: str  # login_required or user_has_logged_out
@@ -61,13 +61,13 @@ class LoginRequiredResponse(SerializableAttrs['LoginRequiredResponse']):
 
 
 @dataclass
-class LoginErrorResponseButton(SerializableAttrs['LoginErrorResponseButton']):
+class LoginErrorResponseButton(SerializableAttrs):
     title: str
     action: str
 
 
 @dataclass
-class LoginPhoneVerificationSettings(SerializableAttrs['LoginPhoneVerificationSettings']):
+class LoginPhoneVerificationSettings(SerializableAttrs):
     max_sms_count: int
     resend_sms_delay_sec: int
     robocall_count_down_time_sec: int
@@ -75,7 +75,7 @@ class LoginPhoneVerificationSettings(SerializableAttrs['LoginPhoneVerificationSe
 
 
 @dataclass
-class LoginTwoFactorInfo(SerializableAttrs['LoginTwoFactorInfo']):
+class LoginTwoFactorInfo(SerializableAttrs):
     username: str
     sms_two_factor_on: bool
     totp_two_factor_on: bool
@@ -92,7 +92,7 @@ class LoginTwoFactorInfo(SerializableAttrs['LoginTwoFactorInfo']):
 
 
 @dataclass
-class LoginErrorResponse(SerializableAttrs['LoginErrorResponse']):
+class LoginErrorResponse(SerializableAttrs):
     message: str
     status: str
     error_type: str

+ 4 - 4
mauigpapi/types/login.py

@@ -23,7 +23,7 @@ from .account import BaseFullResponseUser
 
 
 @dataclass
-class LoginResponseNametag(SerializableAttrs['LoginResponseNametag']):
+class LoginResponseNametag(SerializableAttrs):
     mode: Optional[int] = None
     emoji: Optional[str] = None
     emoji_color: Optional[str] = None
@@ -32,7 +32,7 @@ class LoginResponseNametag(SerializableAttrs['LoginResponseNametag']):
 
 
 @dataclass
-class LoginResponseUser(BaseFullResponseUser, SerializableAttrs['LoginResponseUser']):
+class LoginResponseUser(BaseFullResponseUser, SerializableAttrs):
     can_boost_post: bool
     can_see_organic_insights: bool
     show_insights_terms: bool
@@ -48,12 +48,12 @@ class LoginResponseUser(BaseFullResponseUser, SerializableAttrs['LoginResponseUs
 
 
 @dataclass
-class LoginResponse(SerializableAttrs['LoginResponse']):
+class LoginResponse(SerializableAttrs):
     logged_in_user: LoginResponseUser
     status: str
 
 
 @dataclass
-class LogoutResponse(SerializableAttrs['LogoutResponse']):
+class LogoutResponse(SerializableAttrs):
     status: str
     login_nonce: Optional[str] = None

+ 24 - 24
mauigpapi/types/mqtt.py

@@ -52,7 +52,7 @@ class TypingStatus(SerializableEnum):
 
 
 @dataclass(kw_only=True)
-class CommandResponsePayload(SerializableAttrs['CommandResponsePayload']):
+class CommandResponsePayload(SerializableAttrs):
     client_context: Optional[str] = None
     item_id: Optional[str] = None
     timestamp: Optional[str] = None
@@ -61,7 +61,7 @@ class CommandResponsePayload(SerializableAttrs['CommandResponsePayload']):
 
 
 @dataclass(kw_only=True)
-class CommandResponse(SerializableAttrs['CommandResponse']):
+class CommandResponse(SerializableAttrs):
     action: str
     status: str
     status_code: Optional[str] = None
@@ -69,14 +69,14 @@ class CommandResponse(SerializableAttrs['CommandResponse']):
 
 
 @dataclass(kw_only=True)
-class IrisPayloadData(SerializableAttrs['IrisPayloadData']):
+class IrisPayloadData(SerializableAttrs):
     op: Operation
     path: str
     value: str
 
 
 @dataclass(kw_only=True)
-class IrisPayload(SerializableAttrs['IrisPayload']):
+class IrisPayload(SerializableAttrs):
     data: List[IrisPayloadData]
     message_type: int
     seq_id: int
@@ -87,7 +87,7 @@ class IrisPayload(SerializableAttrs['IrisPayload']):
 
 
 @dataclass(kw_only=True)
-class MessageSyncMessage(ThreadItem, SerializableAttrs['MessageSyncMessage']):
+class MessageSyncMessage(ThreadItem, SerializableAttrs):
     path: str
     op: Operation = Operation.ADD
 
@@ -99,25 +99,25 @@ class MessageSyncMessage(ThreadItem, SerializableAttrs['MessageSyncMessage']):
 
 
 @dataclass(kw_only=True)
-class MessageSyncEvent(SerializableAttrs['MessageSyncEvent']):
+class MessageSyncEvent(SerializableAttrs):
     iris: IrisPayload
     message: MessageSyncMessage
 
 
 @dataclass
-class ThreadSyncEvent(Thread, SerializableAttrs['ThreadSyncEvent']):
+class ThreadSyncEvent(Thread, SerializableAttrs):
     path: str
     op: Operation
 
 
 @dataclass(kw_only=True)
-class PubsubPublishMetadata(SerializableAttrs['PubsubPublishMetadata']):
+class PubsubPublishMetadata(SerializableAttrs):
     publish_time_ms: str
     topic_publish_id: int
 
 
 @dataclass(kw_only=True)
-class PubsubBasePayload(SerializableAttrs['PubsubBasePayload']):
+class PubsubBasePayload(SerializableAttrs):
     lazy: Optional[bool] = False
     event: str = "patch"
     publish_metadata: Optional[PubsubPublishMetadata] = None
@@ -125,7 +125,7 @@ class PubsubBasePayload(SerializableAttrs['PubsubBasePayload']):
 
 
 @dataclass(kw_only=True)
-class ActivityIndicatorData(SerializableAttrs['ActivityIndicatorData']):
+class ActivityIndicatorData(SerializableAttrs):
     timestamp: Union[int, str]
     sender_id: str
     ttl: int
@@ -141,7 +141,7 @@ class ActivityIndicatorData(SerializableAttrs['ActivityIndicatorData']):
 
 
 @dataclass(kw_only=True)
-class PubsubPayloadData(SerializableAttrs['PubsubPayloadData']):
+class PubsubPayloadData(SerializableAttrs):
     double_publish: bool = attr.ib(metadata={"json": "doublePublish"})
     value: ActivityIndicatorData
     path: str
@@ -149,12 +149,12 @@ class PubsubPayloadData(SerializableAttrs['PubsubPayloadData']):
 
 
 @dataclass(kw_only=True)
-class PubsubPayload(PubsubBasePayload, SerializableAttrs['PubsubPayload']):
+class PubsubPayload(PubsubBasePayload, SerializableAttrs):
     data: List[PubsubPayloadData] = attr.ib(factory=lambda: [])
 
 
 @dataclass(kw_only=True)
-class PubsubEvent(SerializableAttrs['PubsubEvent']):
+class PubsubEvent(SerializableAttrs):
     base: PubsubBasePayload
     data: PubsubPayloadData
     thread_id: str
@@ -162,7 +162,7 @@ class PubsubEvent(SerializableAttrs['PubsubEvent']):
 
 
 @dataclass(kw_only=True)
-class AppPresenceEvent(SerializableAttrs['AppPresenceEvent']):
+class AppPresenceEvent(SerializableAttrs):
     user_id: str
     is_active: bool
     last_activity_at_ms: str
@@ -170,24 +170,24 @@ class AppPresenceEvent(SerializableAttrs['AppPresenceEvent']):
 
 
 @dataclass(kw_only=True)
-class AppPresenceEventPayload(SerializableAttrs['AppPresenceEventPayload']):
+class AppPresenceEventPayload(SerializableAttrs):
     presence_event: AppPresenceEvent
 
 
 @dataclass(kw_only=True)
-class ZeroProductProvisioningEvent(SerializableAttrs['ZeroProductProvisioningEvent']):
+class ZeroProductProvisioningEvent(SerializableAttrs):
     device_id: str
     product_name: str
     zero_provisioned_time: str
 
 
 @dataclass(kw_only=True)
-class RealtimeZeroProvisionPayload(SerializableAttrs['RealtimeZeroProvisionPayload']):
+class RealtimeZeroProvisionPayload(SerializableAttrs):
     zero_product_provisioning_event: ZeroProductProvisioningEvent
 
 
 @dataclass(kw_only=True)
-class ClientConfigUpdateEvent(SerializableAttrs['ClientConfigUpdateEvent']):
+class ClientConfigUpdateEvent(SerializableAttrs):
     publish_id: str
     client_config_name: str
     backing: str  # might be "QE"
@@ -195,7 +195,7 @@ class ClientConfigUpdateEvent(SerializableAttrs['ClientConfigUpdateEvent']):
 
 
 @dataclass(kw_only=True)
-class ClientConfigUpdatePayload(SerializableAttrs['ClientConfigUpdatePayload']):
+class ClientConfigUpdatePayload(SerializableAttrs):
     client_config_update_event: ClientConfigUpdateEvent
 
 
@@ -204,7 +204,7 @@ RealtimeDirectData = ActivityIndicatorData
 
 
 @dataclass(kw_only=True)
-class RealtimeDirectEvent(SerializableAttrs['RealtimeDirectEvent']):
+class RealtimeDirectEvent(SerializableAttrs):
     op: Operation
     path: str
     value: RealtimeDirectData
@@ -217,7 +217,7 @@ class RealtimeDirectEvent(SerializableAttrs['RealtimeDirectEvent']):
 
 
 @dataclass(kw_only=True)
-class LiveVideoSystemComment(SerializableAttrs['LiveVideoSystemComment']):
+class LiveVideoSystemComment(SerializableAttrs):
     pk: str
     created_at: int
     text: str
@@ -226,7 +226,7 @@ class LiveVideoSystemComment(SerializableAttrs['LiveVideoSystemComment']):
 
 
 @dataclass(kw_only=True)
-class LiveVideoComment(SerializableAttrs['LiveVideoComment']):
+class LiveVideoComment(SerializableAttrs):
     pk: str
     user_id: str
     text: str
@@ -242,7 +242,7 @@ class LiveVideoComment(SerializableAttrs['LiveVideoComment']):
 
 
 @dataclass(kw_only=True)
-class LiveVideoCommentEvent(SerializableAttrs['LiveVideoCommentEvent']):
+class LiveVideoCommentEvent(SerializableAttrs):
     client_subscription_id: str
     live_seconds_per_comment: int
     comment_likes_enabled: bool
@@ -259,5 +259,5 @@ class LiveVideoCommentEvent(SerializableAttrs['LiveVideoCommentEvent']):
 
 
 @dataclass(kw_only=True)
-class LiveVideoCommentPayload(SerializableAttrs['LiveVideoCommentPayload']):
+class LiveVideoCommentPayload(SerializableAttrs):
     live_video_comment_event: LiveVideoCommentEvent

+ 3 - 3
mauigpapi/types/qe.py

@@ -22,7 +22,7 @@ from mautrix.types import SerializableAttrs
 
 
 @dataclass
-class QeSyncExperimentParam(SerializableAttrs['QeSyncExperimentParam']):
+class QeSyncExperimentParam(SerializableAttrs):
     name: str
     value: str
 
@@ -43,7 +43,7 @@ def _try_parse(val: str) -> Any:
 
 
 @dataclass
-class QeSyncExperiment(SerializableAttrs['QeSyncResponseExperiment']):
+class QeSyncExperiment(SerializableAttrs):
     name: str
     group: str
     additional_params: List[Any]
@@ -58,6 +58,6 @@ class QeSyncExperiment(SerializableAttrs['QeSyncResponseExperiment']):
 
 
 @dataclass
-class QeSyncResponse(SerializableAttrs['QeSyncResponse']):
+class QeSyncResponse(SerializableAttrs):
     experiments: List[QeSyncExperiment]
     status: str

+ 4 - 4
mauigpapi/types/thread.py

@@ -24,25 +24,25 @@ from .thread_item import ThreadItem
 
 
 @dataclass
-class ThreadUser(BaseResponseUser, SerializableAttrs['ThreadUser']):
+class ThreadUser(BaseResponseUser, SerializableAttrs):
     interop_messaging_user_fbid: int
     is_using_unified_inbox_for_direct: bool
 
 
 @dataclass
-class ThreadTheme(SerializableAttrs['ThreadTheme']):
+class ThreadTheme(SerializableAttrs):
     id: str
 
 
 @dataclass
-class ThreadUserLastSeenAt(SerializableAttrs['UserLastSeenAt']):
+class ThreadUserLastSeenAt(SerializableAttrs):
     timestamp: str
     item_id: str
     shh_seen_state: Dict[str, Any]
 
 
 @dataclass(kw_only=True)
-class Thread(SerializableAttrs['Thread']):
+class Thread(SerializableAttrs):
     thread_id: str
     thread_v2_id: str
 

+ 29 - 29
mauigpapi/types/thread_item.py

@@ -68,7 +68,7 @@ class ThreadItemType(SerializableEnum):
 
 
 @dataclass(kw_only=True)
-class ThreadItemActionLog(SerializableAttrs['ThreadItemActionLog']):
+class ThreadItemActionLog(SerializableAttrs):
     description: str
     # TODO bold, text_attributes
 
@@ -80,20 +80,20 @@ class ViewMode(SerializableEnum):
 
 
 @dataclass(kw_only=True)
-class CreativeConfig(SerializableAttrs['CreativeConfig']):
+class CreativeConfig(SerializableAttrs):
     capture_type: str
     camera_facing: str
     should_render_try_it_on: bool
 
 
 @dataclass(kw_only=True)
-class CreateModeAttribution(SerializableAttrs['CreateModeAttribution']):
+class CreateModeAttribution(SerializableAttrs):
     type: str
     name: str
 
 
 @dataclass(kw_only=True)
-class ImageVersion(SerializableAttrs['ImageVersion']):
+class ImageVersion(SerializableAttrs):
     width: int
     height: int
     url: str
@@ -101,12 +101,12 @@ class ImageVersion(SerializableAttrs['ImageVersion']):
 
 
 @dataclass(kw_only=True)
-class ImageVersions(SerializableAttrs['ImageVersions']):
+class ImageVersions(SerializableAttrs):
     candidates: List[ImageVersion]
 
 
 @dataclass(kw_only=True)
-class VideoVersion(SerializableAttrs['VideoVersion']):
+class VideoVersion(SerializableAttrs):
     type: int
     width: int
     height: int
@@ -127,13 +127,13 @@ class MediaType(SerializableEnum):
 
 
 @dataclass(kw_only=True)
-class ExpiredMediaItem(SerializableAttrs['ExpiredMediaItem']):
+class ExpiredMediaItem(SerializableAttrs):
     media_type: Optional[MediaType] = None
     user: Optional[BaseResponseUser] = None
 
 
 @dataclass(kw_only=True)
-class RegularMediaItem(SerializableAttrs['RegularMediaItem']):
+class RegularMediaItem(SerializableAttrs):
     id: str
     image_versions2: Optional[ImageVersions] = None
     video_versions: Optional[List[VideoVersion]] = None
@@ -173,7 +173,7 @@ class RegularMediaItem(SerializableAttrs['RegularMediaItem']):
 
 
 @dataclass(kw_only=True)
-class Caption(SerializableAttrs['Caption']):
+class Caption(SerializableAttrs):
     pk: int
     user_id: int
     text: str
@@ -198,7 +198,7 @@ class Caption(SerializableAttrs['Caption']):
 
 
 @dataclass
-class Location(SerializableAttrs['Location']):
+class Location(SerializableAttrs):
     pk: int
     short_name: str
     facebook_places_id: int
@@ -212,7 +212,7 @@ class Location(SerializableAttrs['Location']):
 
 
 @dataclass(kw_only=True)
-class MediaShareItem(RegularMediaItem, SerializableAttrs['MediaShareItem']):
+class MediaShareItem(RegularMediaItem, SerializableAttrs):
     taken_at: int
     pk: int
     device_timestamp: int
@@ -239,7 +239,7 @@ class MediaShareItem(RegularMediaItem, SerializableAttrs['MediaShareItem']):
 
 
 @dataclass
-class SharingFrictionInfo(SerializableAttrs['SharingFrictionInfo']):
+class SharingFrictionInfo(SerializableAttrs):
     should_have_sharing_friction: bool
     bloks_app_url: Optional[str]
 
@@ -247,7 +247,7 @@ class SharingFrictionInfo(SerializableAttrs['SharingFrictionInfo']):
 # The fields in this class have been observed in reel share items, but may exist elsewhere too.
 # If they're observed in other types, they should be moved to MediaShareItem.
 @dataclass(kw_only=True)
-class ReelMediaShareItem(MediaShareItem, SerializableAttrs['ReelMediaShareItem']):
+class ReelMediaShareItem(MediaShareItem, SerializableAttrs):
     # These three are apparently sometimes not present
     # TODO enum?
     caption_position: Optional[int] = None
@@ -268,7 +268,7 @@ class ReelMediaShareItem(MediaShareItem, SerializableAttrs['ReelMediaShareItem']
 
 
 @dataclass(kw_only=True)
-class ReplayableMediaItem(SerializableAttrs['ReplayableMediaItem']):
+class ReplayableMediaItem(SerializableAttrs):
     view_mode: ViewMode
     seen_count: int
     seen_user_ids: List[int]
@@ -276,7 +276,7 @@ class ReplayableMediaItem(SerializableAttrs['ReplayableMediaItem']):
 
 
 @dataclass(kw_only=True)
-class VisualMedia(ReplayableMediaItem, SerializableAttrs['VisualMedia']):
+class VisualMedia(ReplayableMediaItem, SerializableAttrs):
     url_expire_at_secs: Optional[int] = None
     playback_duration_secs: Optional[int] = None
     media: Union[RegularMediaItem, ExpiredMediaItem]
@@ -292,7 +292,7 @@ class VisualMedia(ReplayableMediaItem, SerializableAttrs['VisualMedia']):
 
 
 @dataclass(kw_only=True)
-class AudioInfo(SerializableAttrs['AudioInfo']):
+class AudioInfo(SerializableAttrs):
     audio_src: str
     duration: int
     waveform_data: Optional[List[int]] = None
@@ -300,7 +300,7 @@ class AudioInfo(SerializableAttrs['AudioInfo']):
 
 
 @dataclass(kw_only=True)
-class VoiceMediaData(SerializableAttrs['VoiceMediaData']):
+class VoiceMediaData(SerializableAttrs):
     id: str
     audio: AudioInfo
     organic_tracking_token: str
@@ -311,12 +311,12 @@ class VoiceMediaData(SerializableAttrs['VoiceMediaData']):
 
 
 @dataclass(kw_only=True)
-class VoiceMediaItem(ReplayableMediaItem, SerializableAttrs['VoiceMediaItem']):
+class VoiceMediaItem(ReplayableMediaItem, SerializableAttrs):
     media: VoiceMediaData
 
 
 @dataclass(kw_only=True)
-class AnimatedMediaImage(SerializableAttrs['AnimatedMediaImage']):
+class AnimatedMediaImage(SerializableAttrs):
     height: str
     mp4: str
     mp4_size: str
@@ -328,12 +328,12 @@ class AnimatedMediaImage(SerializableAttrs['AnimatedMediaImage']):
 
 
 @dataclass(kw_only=True)
-class AnimatedMediaImages(SerializableAttrs['AnimatedMediaImages']):
+class AnimatedMediaImages(SerializableAttrs):
     fixed_height: Optional[AnimatedMediaImage] = None
 
 
 @dataclass(kw_only=True)
-class AnimatedMediaItem(SerializableAttrs['AnimatedMediaItem']):
+class AnimatedMediaItem(SerializableAttrs):
     id: str
     is_random: str
     is_sticker: str
@@ -341,7 +341,7 @@ class AnimatedMediaItem(SerializableAttrs['AnimatedMediaItem']):
 
 
 @dataclass
-class Reaction(SerializableAttrs['Reaction']):
+class Reaction(SerializableAttrs):
     sender_id: int
     timestamp: int
     client_context: int
@@ -350,14 +350,14 @@ class Reaction(SerializableAttrs['Reaction']):
 
 
 @dataclass
-class Reactions(SerializableAttrs['Reactions']):
+class Reactions(SerializableAttrs):
     likes_count: int = 0
     likes: List[Reaction] = attr.ib(factory=lambda: [])
     emojis: List[Reaction] = attr.ib(factory=lambda: [])
 
 
 @dataclass
-class LinkContext(SerializableAttrs['LinkContext']):
+class LinkContext(SerializableAttrs):
     link_url: str
     link_title: str
     link_summary: str
@@ -365,7 +365,7 @@ class LinkContext(SerializableAttrs['LinkContext']):
 
 
 @dataclass
-class LinkItem(SerializableAttrs['LinkItem']):
+class LinkItem(SerializableAttrs):
     text: str
     link_context: LinkContext
     client_context: str
@@ -379,14 +379,14 @@ class ReelShareType(SerializableEnum):
 
 
 @dataclass
-class ReelShareReactionInfo(SerializableAttrs['ReelShareReactionInfo']):
+class ReelShareReactionInfo(SerializableAttrs):
     emoji: str
     # TODO find type
     # intensity: Any
 
 
 @dataclass
-class ReelShareItem(SerializableAttrs['ReelShareItem']):
+class ReelShareItem(SerializableAttrs):
     text: str
     type: ReelShareType
     reel_owner_id: int
@@ -407,7 +407,7 @@ class ReelShareItem(SerializableAttrs['ReelShareItem']):
 
 
 @dataclass
-class StoryShareItem(SerializableAttrs['StoryShareItem']):
+class StoryShareItem(SerializableAttrs):
     text: str
     is_reel_persisted: bool
     # TODO enum?
@@ -433,7 +433,7 @@ class StoryShareItem(SerializableAttrs['StoryShareItem']):
 
 
 @dataclass(kw_only=True)
-class ThreadItem(SerializableAttrs['ThreadItem']):
+class ThreadItem(SerializableAttrs):
     item_id: Optional[str] = None
     user_id: Optional[int] = None
     timestamp: Optional[int] = None

+ 1 - 1
mauigpapi/types/upload.py

@@ -21,7 +21,7 @@ from mautrix.types import SerializableAttrs
 
 
 @dataclass
-class UploadPhotoResponse(SerializableAttrs['UploadPhotoResponse']):
+class UploadPhotoResponse(SerializableAttrs):
     upload_id: str
     status: str
     xsharing_nonces: Any

+ 2 - 2
mauigpapi/types/user.py

@@ -23,14 +23,14 @@ from .account import BaseResponseUser
 
 
 @dataclass
-class SearchResultUser(BaseResponseUser, SerializableAttrs['SearchResultUser']):
+class SearchResultUser(BaseResponseUser, SerializableAttrs):
     mutual_followers_count: int
     social_context: Optional[str] = None
     search_social_context: Optional[str] = None
 
 
 @dataclass
-class UserSearchResponse(SerializableAttrs['UserSearchResponse']):
+class UserSearchResponse(SerializableAttrs):
     num_results: int
     users: List[SearchResultUser]
     has_more: bool

+ 1 - 1
requirements.txt

@@ -4,7 +4,7 @@ commonmark>=0.8,<0.10
 aiohttp>=3,<4
 yarl>=1,<2
 attrs>=20.1
-mautrix>=0.9.4,<0.10
+mautrix>=0.9.6,<0.10
 asyncpg>=0.20,<0.24
 pycryptodome>=3,<4
 paho-mqtt>=1.5,<2