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

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# 

12 

13 

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 

38 

39 

40class PersistedGuard: 

41 """ 

42 Type guards for checking PersistedWrapper types at runtime. 

43 

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 """ 

47 

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 ) 

54 

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 ) 

61 

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 ) 

68 

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 ) 

75 

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 ) 

82 

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 ) 

89 

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 ) 

96 

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 ) 

103 

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 ) 

110 

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 ) 

117 

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 )