Coverage for functions \ flipdare \ wrapper \ persisted_guard.py: 95%
58 statements
« prev ^ index » next coverage.py v7.13.0, created at 2026-05-08 12:22 +1000
« prev ^ index » next coverage.py v7.13.0, created at 2026-05-08 12:22 +1000
1#!/usr/bin/env python
2# Copyright (c) 2026 Flipdare Pty Ltd. All rights reserved.
3#
4# This file is part of Flipdare's proprietary software and contains
5# confidential and copyrighted material. Unauthorised copying,
6# modification, distribution, or use of this file is strictly
7# prohibited without prior written permission from Flipdare Pty Ltd.
8#
9# This software includes third-party components licensed under MIT,
10# BSD, and Apache 2.0 licences. See THIRD_PARTY_NOTICES for details.
11#
14from typing import Any, TypeGuard
15from flipdare.generated.model.chat_comment_model import ChatCommentModel
16from flipdare.generated.model.content_model import ContentModel
17from flipdare.generated.model.dare_model import DareModel
18from flipdare.generated.model.friend_model import FriendModel
19from flipdare.generated.model.group_member_model import GroupMemberModel
20from flipdare.generated.model.group_model import GroupModel
21from flipdare.generated.model.invite_model import InviteModel
22from flipdare.generated.model.issue.flag_model import FlagModel
23from flipdare.generated.model.issue.restriction_model import RestrictionModel
24from flipdare.generated.model.payment.pledge_model import PledgeModel
25from flipdare.generated.model.user_model import UserModel
26from flipdare.wrapper._persisted_wrapper import PersistedWrapper
27from flipdare.wrapper.chat_comment_wrapper import ChatCommentWrapper
28from flipdare.wrapper.content_wrapper import ContentWrapper
29from flipdare.wrapper.dare_wrapper import DareWrapper
30from flipdare.wrapper.friend_wrapper import FriendWrapper
31from flipdare.wrapper.group_member_wrapper import GroupMemberWrapper
32from flipdare.wrapper.group_wrapper import GroupWrapper
33from flipdare.wrapper.invite_wrapper import InviteWrapper
34from flipdare.wrapper.issue.flag_wrapper import FlagWrapper
35from flipdare.wrapper.issue.restriction_wrapper import RestrictionWrapper
36from flipdare.wrapper.payment.pledge_wrapper import PledgeWrapper
37from flipdare.wrapper.user_wrapper import UserWrapper
40class PersistedGuard:
41 """
42 Type guards for checking PersistedWrapper types at runtime.
44 Note: The second isinstance check triggers Pylance warnings because runtime type checks
45 cannot narrow generic type parameters. The # type: ignore comments are correct here.
46 """
48 @staticmethod
49 def is_user(obj: Any) -> TypeGuard[UserWrapper]:
50 return isinstance(obj, PersistedWrapper) and isinstance(
51 getattr(obj, "_model", None), # type: ignore[reportUnknownArgumentType]
52 UserModel,
53 )
55 @staticmethod
56 def is_friend(obj: Any) -> TypeGuard[FriendWrapper]:
57 return isinstance(obj, PersistedWrapper) and isinstance(
58 getattr(obj, "_model", None), # type: ignore[reportUnknownArgumentType]
59 FriendModel,
60 )
62 @staticmethod
63 def is_group(obj: Any) -> TypeGuard[GroupWrapper]:
64 return isinstance(obj, PersistedWrapper) and isinstance(
65 getattr(obj, "_model", None), # type: ignore[reportUnknownArgumentType]
66 GroupModel,
67 )
69 @staticmethod
70 def is_group_member(obj: Any) -> TypeGuard[GroupMemberWrapper]:
71 return isinstance(obj, PersistedWrapper) and isinstance(
72 getattr(obj, "_model", None), # type: ignore[reportUnknownArgumentType]
73 GroupMemberModel,
74 )
76 @staticmethod
77 def is_restriction(obj: Any) -> TypeGuard[RestrictionWrapper]:
78 return isinstance(obj, PersistedWrapper) and isinstance(
79 getattr(obj, "_model", None), # type: ignore[reportUnknownArgumentType]
80 RestrictionModel,
81 )
83 @staticmethod
84 def is_dare(obj: Any) -> TypeGuard[DareWrapper]:
85 return isinstance(obj, PersistedWrapper) and isinstance(
86 getattr(obj, "_model", None), # type: ignore[reportUnknownArgumentType]
87 DareModel,
88 )
90 @staticmethod
91 def is_invite(obj: Any) -> TypeGuard[InviteWrapper]:
92 return isinstance(obj, PersistedWrapper) and isinstance(
93 getattr(obj, "_model", None), # type: ignore[reportUnknownArgumentType]
94 InviteModel,
95 )
97 @staticmethod
98 def is_flag(obj: Any) -> TypeGuard[FlagWrapper]:
99 return isinstance(obj, PersistedWrapper) and isinstance(
100 getattr(obj, "_model", None), # type: ignore[reportUnknownArgumentType]
101 FlagModel,
102 )
104 @staticmethod
105 def is_content(obj: Any) -> TypeGuard[ContentWrapper]:
106 return isinstance(obj, PersistedWrapper) and isinstance(
107 getattr(obj, "_model", None), # type: ignore[reportUnknownArgumentType]
108 ContentModel,
109 )
111 @staticmethod
112 def is_chat_comment(obj: Any) -> TypeGuard[ChatCommentWrapper]:
113 return isinstance(obj, PersistedWrapper) and isinstance(
114 getattr(obj, "_model", None), # type: ignore[reportUnknownArgumentType]
115 ChatCommentModel,
116 )
118 @staticmethod
119 def is_pledge(obj: Any) -> TypeGuard[PledgeWrapper]:
120 return isinstance(obj, PersistedWrapper) and isinstance(
121 getattr(obj, "_model", None), # type: ignore[reportUnknownArgumentType]
122 PledgeModel,
123 )