dimples 1.5.2__tar.gz → 1.5.5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. {dimples-1.5.2 → dimples-1.5.5}/PKG-INFO +1 -1
  2. {dimples-1.5.2 → dimples-1.5.5}/dimples/client/messenger.py +17 -0
  3. {dimples-1.5.2 → dimples-1.5.5}/dimples/client/packer.py +4 -17
  4. {dimples-1.5.2 → dimples-1.5.5}/dimples/client/processor.py +8 -11
  5. {dimples-1.5.2 → dimples-1.5.5}/dimples/common/compat/compatible.py +2 -2
  6. {dimples-1.5.2 → dimples-1.5.5}/dimples/common/compat/compressor.py +2 -3
  7. {dimples-1.5.2 → dimples-1.5.5}/dimples/common/compat/loader.py +4 -8
  8. {dimples-1.5.2 → dimples-1.5.5}/dimples/common/messenger.py +24 -1
  9. {dimples-1.5.2 → dimples-1.5.5}/dimples/common/packer.py +0 -26
  10. {dimples-1.5.2 → dimples-1.5.5}/dimples/common/processer.py +1 -1
  11. {dimples-1.5.2 → dimples-1.5.5}/dimples/common/protocol/handshake.py +2 -2
  12. {dimples-1.5.2 → dimples-1.5.5}/dimples/common/protocol/login.py +2 -2
  13. {dimples-1.5.2 → dimples-1.5.5}/dimples/server/trace.py +1 -1
  14. {dimples-1.5.2 → dimples-1.5.5}/dimples.egg-info/PKG-INFO +1 -1
  15. {dimples-1.5.2 → dimples-1.5.5}/dimples.egg-info/requires.txt +2 -2
  16. {dimples-1.5.2 → dimples-1.5.5}/setup.py +6 -6
  17. {dimples-1.5.2 → dimples-1.5.5}/LICENSE +0 -0
  18. {dimples-1.5.2 → dimples-1.5.5}/README.md +0 -0
  19. {dimples-1.5.2 → dimples-1.5.5}/dimples/__init__.py +0 -0
  20. {dimples-1.5.2 → dimples-1.5.5}/dimples/client/__init__.py +0 -0
  21. {dimples-1.5.2 → dimples-1.5.5}/dimples/client/checker.py +0 -0
  22. {dimples-1.5.2 → dimples-1.5.5}/dimples/client/checkpoint.py +0 -0
  23. {dimples-1.5.2 → dimples-1.5.5}/dimples/client/cpu/__init__.py +0 -0
  24. {dimples-1.5.2 → dimples-1.5.5}/dimples/client/cpu/commands.py +0 -0
  25. {dimples-1.5.2 → dimples-1.5.5}/dimples/client/cpu/creator.py +0 -0
  26. {dimples-1.5.2 → dimples-1.5.5}/dimples/client/cpu/customized.py +0 -0
  27. {dimples-1.5.2 → dimples-1.5.5}/dimples/client/cpu/group.py +0 -0
  28. {dimples-1.5.2 → dimples-1.5.5}/dimples/client/cpu/grp_expel.py +0 -0
  29. {dimples-1.5.2 → dimples-1.5.5}/dimples/client/cpu/grp_invite.py +0 -0
  30. {dimples-1.5.2 → dimples-1.5.5}/dimples/client/cpu/grp_join.py +0 -0
  31. {dimples-1.5.2 → dimples-1.5.5}/dimples/client/cpu/grp_query.py +0 -0
  32. {dimples-1.5.2 → dimples-1.5.5}/dimples/client/cpu/grp_quit.py +0 -0
  33. {dimples-1.5.2 → dimples-1.5.5}/dimples/client/cpu/grp_reset.py +0 -0
  34. {dimples-1.5.2 → dimples-1.5.5}/dimples/client/cpu/grp_resign.py +0 -0
  35. {dimples-1.5.2 → dimples-1.5.5}/dimples/client/cpu/handshake.py +0 -0
  36. {dimples-1.5.2 → dimples-1.5.5}/dimples/client/facebook.py +0 -0
  37. {dimples-1.5.2 → dimples-1.5.5}/dimples/client/network/__init__.py +0 -0
  38. {dimples-1.5.2 → dimples-1.5.5}/dimples/client/network/session.py +0 -0
  39. {dimples-1.5.2 → dimples-1.5.5}/dimples/client/network/state.py +0 -0
  40. {dimples-1.5.2 → dimples-1.5.5}/dimples/client/network/transition.py +0 -0
  41. {dimples-1.5.2 → dimples-1.5.5}/dimples/client/terminal.py +0 -0
  42. {dimples-1.5.2 → dimples-1.5.5}/dimples/common/__init__.py +0 -0
  43. {dimples-1.5.2 → dimples-1.5.5}/dimples/common/anonymous.py +0 -0
  44. {dimples-1.5.2 → dimples-1.5.5}/dimples/common/ans.py +0 -0
  45. {dimples-1.5.2 → dimples-1.5.5}/dimples/common/archivist.py +0 -0
  46. {dimples-1.5.2 → dimples-1.5.5}/dimples/common/checker.py +0 -0
  47. {dimples-1.5.2 → dimples-1.5.5}/dimples/common/compat/__init__.py +0 -0
  48. {dimples-1.5.2 → dimples-1.5.5}/dimples/common/compat/address.py +0 -0
  49. {dimples-1.5.2 → dimples-1.5.5}/dimples/common/compat/entity.py +0 -0
  50. {dimples-1.5.2 → dimples-1.5.5}/dimples/common/compat/meta.py +0 -0
  51. {dimples-1.5.2 → dimples-1.5.5}/dimples/common/compat/network.py +0 -0
  52. {dimples-1.5.2 → dimples-1.5.5}/dimples/common/dbi/__init__.py +0 -0
  53. {dimples-1.5.2 → dimples-1.5.5}/dimples/common/dbi/account.py +0 -0
  54. {dimples-1.5.2 → dimples-1.5.5}/dimples/common/dbi/message.py +0 -0
  55. {dimples-1.5.2 → dimples-1.5.5}/dimples/common/dbi/session.py +0 -0
  56. {dimples-1.5.2 → dimples-1.5.5}/dimples/common/facebook.py +0 -0
  57. {dimples-1.5.2 → dimples-1.5.5}/dimples/common/protocol/__init__.py +0 -0
  58. {dimples-1.5.2 → dimples-1.5.5}/dimples/common/protocol/ans.py +0 -0
  59. {dimples-1.5.2 → dimples-1.5.5}/dimples/common/protocol/block.py +0 -0
  60. {dimples-1.5.2 → dimples-1.5.5}/dimples/common/protocol/customized.py +0 -0
  61. {dimples-1.5.2 → dimples-1.5.5}/dimples/common/protocol/mute.py +0 -0
  62. {dimples-1.5.2 → dimples-1.5.5}/dimples/common/protocol/password.py +0 -0
  63. {dimples-1.5.2 → dimples-1.5.5}/dimples/common/protocol/report.py +0 -0
  64. {dimples-1.5.2 → dimples-1.5.5}/dimples/common/protocol/roles.py +0 -0
  65. {dimples-1.5.2 → dimples-1.5.5}/dimples/common/protocol/utils.py +0 -0
  66. {dimples-1.5.2 → dimples-1.5.5}/dimples/common/protocol/version.py +0 -0
  67. {dimples-1.5.2 → dimples-1.5.5}/dimples/common/queue.py +0 -0
  68. {dimples-1.5.2 → dimples-1.5.5}/dimples/common/register.py +0 -0
  69. {dimples-1.5.2 → dimples-1.5.5}/dimples/common/session.py +0 -0
  70. {dimples-1.5.2 → dimples-1.5.5}/dimples/conn/__init__.py +0 -0
  71. {dimples-1.5.2 → dimples-1.5.5}/dimples/conn/flexible.py +0 -0
  72. {dimples-1.5.2 → dimples-1.5.5}/dimples/conn/gate.py +0 -0
  73. {dimples-1.5.2 → dimples-1.5.5}/dimples/conn/gatekeeper.py +0 -0
  74. {dimples-1.5.2 → dimples-1.5.5}/dimples/conn/mars.py +0 -0
  75. {dimples-1.5.2 → dimples-1.5.5}/dimples/conn/mtp.py +0 -0
  76. {dimples-1.5.2 → dimples-1.5.5}/dimples/conn/protocol/__init__.py +0 -0
  77. {dimples-1.5.2 → dimples-1.5.5}/dimples/conn/protocol/mars.py +0 -0
  78. {dimples-1.5.2 → dimples-1.5.5}/dimples/conn/protocol/ws.py +0 -0
  79. {dimples-1.5.2 → dimples-1.5.5}/dimples/conn/queue.py +0 -0
  80. {dimples-1.5.2 → dimples-1.5.5}/dimples/conn/seeker.py +0 -0
  81. {dimples-1.5.2 → dimples-1.5.5}/dimples/conn/session.py +0 -0
  82. {dimples-1.5.2 → dimples-1.5.5}/dimples/conn/ws.py +0 -0
  83. {dimples-1.5.2 → dimples-1.5.5}/dimples/database/__init__.py +0 -0
  84. {dimples-1.5.2 → dimples-1.5.5}/dimples/database/account.py +0 -0
  85. {dimples-1.5.2 → dimples-1.5.5}/dimples/database/dos/__init__.py +0 -0
  86. {dimples-1.5.2 → dimples-1.5.5}/dimples/database/dos/base.py +0 -0
  87. {dimples-1.5.2 → dimples-1.5.5}/dimples/database/dos/document.py +0 -0
  88. {dimples-1.5.2 → dimples-1.5.5}/dimples/database/dos/group.py +0 -0
  89. {dimples-1.5.2 → dimples-1.5.5}/dimples/database/dos/group_history.py +0 -0
  90. {dimples-1.5.2 → dimples-1.5.5}/dimples/database/dos/group_keys.py +0 -0
  91. {dimples-1.5.2 → dimples-1.5.5}/dimples/database/dos/login.py +0 -0
  92. {dimples-1.5.2 → dimples-1.5.5}/dimples/database/dos/meta.py +0 -0
  93. {dimples-1.5.2 → dimples-1.5.5}/dimples/database/dos/private.py +0 -0
  94. {dimples-1.5.2 → dimples-1.5.5}/dimples/database/dos/station.py +0 -0
  95. {dimples-1.5.2 → dimples-1.5.5}/dimples/database/dos/user.py +0 -0
  96. {dimples-1.5.2 → dimples-1.5.5}/dimples/database/message.py +0 -0
  97. {dimples-1.5.2 → dimples-1.5.5}/dimples/database/redis/__init__.py +0 -0
  98. {dimples-1.5.2 → dimples-1.5.5}/dimples/database/redis/base.py +0 -0
  99. {dimples-1.5.2 → dimples-1.5.5}/dimples/database/redis/document.py +0 -0
  100. {dimples-1.5.2 → dimples-1.5.5}/dimples/database/redis/group.py +0 -0
  101. {dimples-1.5.2 → dimples-1.5.5}/dimples/database/redis/grp_history.py +0 -0
  102. {dimples-1.5.2 → dimples-1.5.5}/dimples/database/redis/grp_keys.py +0 -0
  103. {dimples-1.5.2 → dimples-1.5.5}/dimples/database/redis/login.py +0 -0
  104. {dimples-1.5.2 → dimples-1.5.5}/dimples/database/redis/message.py +0 -0
  105. {dimples-1.5.2 → dimples-1.5.5}/dimples/database/redis/meta.py +0 -0
  106. {dimples-1.5.2 → dimples-1.5.5}/dimples/database/redis/station.py +0 -0
  107. {dimples-1.5.2 → dimples-1.5.5}/dimples/database/redis/user.py +0 -0
  108. {dimples-1.5.2 → dimples-1.5.5}/dimples/database/session.py +0 -0
  109. {dimples-1.5.2 → dimples-1.5.5}/dimples/database/t_base.py +0 -0
  110. {dimples-1.5.2 → dimples-1.5.5}/dimples/database/t_cipherkey.py +0 -0
  111. {dimples-1.5.2 → dimples-1.5.5}/dimples/database/t_document.py +0 -0
  112. {dimples-1.5.2 → dimples-1.5.5}/dimples/database/t_group.py +0 -0
  113. {dimples-1.5.2 → dimples-1.5.5}/dimples/database/t_group_history.py +0 -0
  114. {dimples-1.5.2 → dimples-1.5.5}/dimples/database/t_group_keys.py +0 -0
  115. {dimples-1.5.2 → dimples-1.5.5}/dimples/database/t_login.py +0 -0
  116. {dimples-1.5.2 → dimples-1.5.5}/dimples/database/t_message.py +0 -0
  117. {dimples-1.5.2 → dimples-1.5.5}/dimples/database/t_meta.py +0 -0
  118. {dimples-1.5.2 → dimples-1.5.5}/dimples/database/t_private.py +0 -0
  119. {dimples-1.5.2 → dimples-1.5.5}/dimples/database/t_station.py +0 -0
  120. {dimples-1.5.2 → dimples-1.5.5}/dimples/database/t_user.py +0 -0
  121. {dimples-1.5.2 → dimples-1.5.5}/dimples/edge/__init__.py +0 -0
  122. {dimples-1.5.2 → dimples-1.5.5}/dimples/edge/messenger.py +0 -0
  123. {dimples-1.5.2 → dimples-1.5.5}/dimples/edge/octopus.py +0 -0
  124. {dimples-1.5.2 → dimples-1.5.5}/dimples/edge/shared.py +0 -0
  125. {dimples-1.5.2 → dimples-1.5.5}/dimples/edge/start.py +0 -0
  126. {dimples-1.5.2 → dimples-1.5.5}/dimples/emitter.py +0 -0
  127. {dimples-1.5.2 → dimples-1.5.5}/dimples/group/__init__.py +0 -0
  128. {dimples-1.5.2 → dimples-1.5.5}/dimples/group/admin.py +0 -0
  129. {dimples-1.5.2 → dimples-1.5.5}/dimples/group/builder.py +0 -0
  130. {dimples-1.5.2 → dimples-1.5.5}/dimples/group/delegate.py +0 -0
  131. {dimples-1.5.2 → dimples-1.5.5}/dimples/group/emitter.py +0 -0
  132. {dimples-1.5.2 → dimples-1.5.5}/dimples/group/helper.py +0 -0
  133. {dimples-1.5.2 → dimples-1.5.5}/dimples/group/manager.py +0 -0
  134. {dimples-1.5.2 → dimples-1.5.5}/dimples/group/packer.py +0 -0
  135. {dimples-1.5.2 → dimples-1.5.5}/dimples/group/shared.py +0 -0
  136. {dimples-1.5.2 → dimples-1.5.5}/dimples/register/__init__.py +0 -0
  137. {dimples-1.5.2 → dimples-1.5.5}/dimples/register/base.py +0 -0
  138. {dimples-1.5.2 → dimples-1.5.5}/dimples/register/ext.py +0 -0
  139. {dimples-1.5.2 → dimples-1.5.5}/dimples/register/run.py +0 -0
  140. {dimples-1.5.2 → dimples-1.5.5}/dimples/register/shared.py +0 -0
  141. {dimples-1.5.2 → dimples-1.5.5}/dimples/server/__init__.py +0 -0
  142. {dimples-1.5.2 → dimples-1.5.5}/dimples/server/checker.py +0 -0
  143. {dimples-1.5.2 → dimples-1.5.5}/dimples/server/cpu/__init__.py +0 -0
  144. {dimples-1.5.2 → dimples-1.5.5}/dimples/server/cpu/ans.py +0 -0
  145. {dimples-1.5.2 → dimples-1.5.5}/dimples/server/cpu/creator.py +0 -0
  146. {dimples-1.5.2 → dimples-1.5.5}/dimples/server/cpu/document.py +0 -0
  147. {dimples-1.5.2 → dimples-1.5.5}/dimples/server/cpu/handshake.py +0 -0
  148. {dimples-1.5.2 → dimples-1.5.5}/dimples/server/cpu/login.py +0 -0
  149. {dimples-1.5.2 → dimples-1.5.5}/dimples/server/cpu/report.py +0 -0
  150. {dimples-1.5.2 → dimples-1.5.5}/dimples/server/deliver.py +0 -0
  151. {dimples-1.5.2 → dimples-1.5.5}/dimples/server/dis_roamer.py +0 -0
  152. {dimples-1.5.2 → dimples-1.5.5}/dimples/server/dispatcher.py +0 -0
  153. {dimples-1.5.2 → dimples-1.5.5}/dimples/server/facebook.py +0 -0
  154. {dimples-1.5.2 → dimples-1.5.5}/dimples/server/messenger.py +0 -0
  155. {dimples-1.5.2 → dimples-1.5.5}/dimples/server/packer.py +0 -0
  156. {dimples-1.5.2 → dimples-1.5.5}/dimples/server/processor.py +0 -0
  157. {dimples-1.5.2 → dimples-1.5.5}/dimples/server/push.py +0 -0
  158. {dimples-1.5.2 → dimples-1.5.5}/dimples/server/session.py +0 -0
  159. {dimples-1.5.2 → dimples-1.5.5}/dimples/server/session_center.py +0 -0
  160. {dimples-1.5.2 → dimples-1.5.5}/dimples/station/__init__.py +0 -0
  161. {dimples-1.5.2 → dimples-1.5.5}/dimples/station/handler.py +0 -0
  162. {dimples-1.5.2 → dimples-1.5.5}/dimples/station/shared.py +0 -0
  163. {dimples-1.5.2 → dimples-1.5.5}/dimples/station/start.py +0 -0
  164. {dimples-1.5.2 → dimples-1.5.5}/dimples/utils/__init__.py +0 -0
  165. {dimples-1.5.2 → dimples-1.5.5}/dimples/utils/cache.py +0 -0
  166. {dimples-1.5.2 → dimples-1.5.5}/dimples/utils/checker.py +0 -0
  167. {dimples-1.5.2 → dimples-1.5.5}/dimples/utils/config.py +0 -0
  168. {dimples-1.5.2 → dimples-1.5.5}/dimples/utils/http.py +0 -0
  169. {dimples-1.5.2 → dimples-1.5.5}/dimples/utils/log.py +0 -0
  170. {dimples-1.5.2 → dimples-1.5.5}/dimples/utils/thanos.py +0 -0
  171. {dimples-1.5.2 → dimples-1.5.5}/dimples.egg-info/SOURCES.txt +0 -0
  172. {dimples-1.5.2 → dimples-1.5.5}/dimples.egg-info/dependency_links.txt +0 -0
  173. {dimples-1.5.2 → dimples-1.5.5}/dimples.egg-info/entry_points.txt +0 -0
  174. {dimples-1.5.2 → dimples-1.5.5}/dimples.egg-info/top_level.txt +0 -0
  175. {dimples-1.5.2 → dimples-1.5.5}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dimples
3
- Version: 1.5.2
3
+ Version: 1.5.5
4
4
  Summary: DIMP Library for Edges and Stations
5
5
  Home-page: https://github.com/dimchat/demo-py
6
6
  Author: Albert Moky
@@ -40,9 +40,11 @@ from dimsdk import ContentType, Command
40
40
  from dimsdk import ReceiptCommand
41
41
  from dimsdk import MessageUtils
42
42
 
43
+ from ..utils import get_msg_sig
43
44
  from ..common import HandshakeCommand, ReportCommand, LoginCommand
44
45
  from ..common import CommonMessenger
45
46
 
47
+ from .checkpoint import Checkpoint
46
48
  from .network import ClientSession
47
49
 
48
50
 
@@ -54,6 +56,21 @@ class ClientMessenger(CommonMessenger):
54
56
  assert isinstance(sess, ClientSession), 'session error: %s' % sess
55
57
  return sess
56
58
 
59
+ # Override
60
+ async def deserialize_message(self, data: bytes) -> Optional[ReliableMessage]:
61
+ msg = await super().deserialize_message(data=data)
62
+ if msg is not None and self._check_message_duplicated(msg=msg):
63
+ msg = None
64
+ return msg
65
+
66
+ def _check_message_duplicated(self, msg: ReliableMessage) -> bool:
67
+ """ check duplicated """
68
+ cp = Checkpoint()
69
+ if cp.duplicated(msg=msg):
70
+ sig = get_msg_sig(msg=msg)
71
+ self.warning(msg='drop duplicated message (%s): %s -> %s' % (sig, msg.sender, msg.receiver))
72
+ return True
73
+
57
74
  # Override
58
75
  async def process_reliable_message(self, msg: ReliableMessage) -> List[ReliableMessage]:
59
76
  # call super
@@ -33,12 +33,9 @@ from dimsdk import ID
33
33
  from dimsdk import ContentType, TextContent, FileContent
34
34
  from dimsdk import InstantMessage, SecureMessage, ReliableMessage
35
35
 
36
- from ..utils import get_msg_sig
37
36
  from ..common import CommonFacebook
38
37
  from ..common import CommonMessagePacker
39
38
 
40
- from .checkpoint import Checkpoint
41
-
42
39
 
43
40
  class ClientMessagePacker(CommonMessagePacker):
44
41
 
@@ -141,20 +138,6 @@ class ClientMessagePacker(CommonMessagePacker):
141
138
  return None
142
139
  return await super().verify_message(msg=msg)
143
140
 
144
- # Override
145
- async def deserialize_message(self, data: bytes) -> Optional[ReliableMessage]:
146
- msg = await super().deserialize_message(data=data)
147
- if msg is not None and self._message_duplicated(msg=msg):
148
- msg = None
149
- return msg
150
-
151
- def _message_duplicated(self, msg: ReliableMessage) -> bool:
152
- cp = Checkpoint()
153
- if cp.duplicated(msg=msg):
154
- sig = get_msg_sig(msg=msg)
155
- self.warning(msg='drop duplicated message (%s): %s -> %s' % (sig, msg.sender, msg.receiver))
156
- return True
157
-
158
141
  # Override
159
142
  async def decrypt_message(self, msg: SecureMessage) -> Optional[InstantMessage]:
160
143
  try:
@@ -199,7 +182,11 @@ class ClientMessagePacker(CommonMessagePacker):
199
182
  checker = facebook.checker
200
183
  # visa.key not updated?
201
184
  user = await facebook.current_user
185
+ if user is None:
186
+ self.error(msg='current user not found')
187
+ return False
202
188
  visa = await user.visa
189
+ assert visa is not None, 'user visa error: %s' % user
203
190
  return await checker.send_visa(visa=visa, receiver=receiver)
204
191
 
205
192
  # protected
@@ -39,18 +39,12 @@ from dimsdk import Facebook, Messenger
39
39
  from dimsdk import ContentProcessorCreator
40
40
 
41
41
  from ..common import HandshakeCommand
42
- from ..common import CommonFacebook, CommonMessenger
42
+ from ..common import CommonMessenger
43
43
  from ..common import CommonMessageProcessor
44
44
 
45
45
 
46
46
  class ClientMessageProcessor(CommonMessageProcessor):
47
47
 
48
- @property
49
- def facebook(self) -> Optional[CommonFacebook]:
50
- barrack = super().facebook
51
- assert isinstance(barrack, CommonFacebook), 'facebook error: %s' % barrack
52
- return barrack
53
-
54
48
  @property
55
49
  def messenger(self) -> Optional[CommonMessenger]:
56
50
  transceiver = super().messenger
@@ -74,7 +68,7 @@ class ClientMessageProcessor(CommonMessageProcessor):
74
68
  doc_updated = False
75
69
  mem_updated = False
76
70
  # check group document time
77
- last_doc_time = r_msg.get_datetime(key='GDT', default=None)
71
+ last_doc_time = r_msg.get_datetime(key='GDT')
78
72
  if last_doc_time is not None:
79
73
  if last_doc_time.after(now):
80
74
  # calibrate the clock
@@ -85,7 +79,7 @@ class ClientMessageProcessor(CommonMessageProcessor):
85
79
  self.info(msg='checking for new bulletin: %s' % group)
86
80
  await facebook.get_documents(identifier=group)
87
81
  # check group history time
88
- last_his_time = r_msg.get_datetime(key='GHT', default=None)
82
+ last_his_time = r_msg.get_datetime(key='GHT')
89
83
  if last_his_time is not None:
90
84
  if last_his_time.after(now):
91
85
  # calibrate the clock
@@ -112,13 +106,16 @@ class ClientMessageProcessor(CommonMessageProcessor):
112
106
  elif isinstance(responses[0], HandshakeCommand):
113
107
  # urgent command
114
108
  return responses
109
+ else:
110
+ facebook = self.facebook
111
+ messenger = self.messenger
112
+ assert facebook is not None and messenger is not None, 'twins not ready: %s, %s' % (facebook, messenger)
115
113
  sender = r_msg.sender
116
114
  receiver = r_msg.receiver
117
- me = await self.facebook.select_local_user(receiver=receiver)
115
+ me = await facebook.select_local_user(receiver=receiver)
118
116
  if me is None:
119
117
  # assert False, 'receiver error: %s' % receiver
120
118
  return responses
121
- messenger = self.messenger
122
119
  # check responses
123
120
  from_bots = sender.type == EntityType.STATION or sender.type == EntityType.BOT
124
121
  for res in responses:
@@ -172,7 +172,7 @@ class CompatibleIncoming:
172
172
  # get command name
173
173
  #
174
174
  cmd = content.get('command')
175
- # cmd = Converter.get_str(value=cmd, default=None)
175
+ # cmd = Converter.get_str(value=cmd)
176
176
  if cmd is None or len(cmd) == 0:
177
177
  return
178
178
 
@@ -270,7 +270,7 @@ class CompatibleOutgoing:
270
270
  def _fix_type(cls, content: Dict[str, Any]):
271
271
  msg_type = content.get('type')
272
272
  if isinstance(msg_type, str):
273
- num_type = Converter.get_int(value=msg_type, default=-1)
273
+ num_type = Converter.get_int(value=msg_type)
274
274
  if num_type is not None and num_type >= 0:
275
275
  content['type'] = num_type
276
276
 
@@ -33,9 +33,8 @@ from .compatible import CompatibleIncoming
33
33
 
34
34
  class CompatibleCompressor(MessageCompressor):
35
35
 
36
- # Override
37
- def _create_shortener(self) -> MessageShortener:
38
- return CompatibleShortener()
36
+ def __init__(self):
37
+ super().__init__(shortener=CompatibleShortener())
39
38
 
40
39
  # Override
41
40
  def compress_content(self, content: Dict, key: Dict) -> bytes:
@@ -132,29 +132,25 @@ class _SafeConverter(BaseConverter):
132
132
  try:
133
133
  return super().get_bool(value=value, default=default)
134
134
  except ValueError:
135
- # return default
136
- pass
135
+ return default
137
136
 
138
137
  # Override
139
138
  def get_int(self, value: Any, default: Optional[int]) -> Optional[int]:
140
139
  try:
141
140
  return super().get_int(value=value, default=default)
142
141
  except ValueError:
143
- # return default
144
- pass
142
+ return default
145
143
 
146
144
  # Override
147
145
  def get_float(self, value: Any, default: Optional[float]) -> Optional[float]:
148
146
  try:
149
147
  return super().get_float(value=value, default=default)
150
148
  except ValueError:
151
- # return default
152
- pass
149
+ return default
153
150
 
154
151
  # Override
155
152
  def get_datetime(self, value: Any, default: Optional[DateTime]) -> Optional[DateTime]:
156
153
  try:
157
154
  return super().get_datetime(value=value, default=default)
158
155
  except ValueError:
159
- # return default
160
- pass
156
+ return default
@@ -56,6 +56,7 @@ from .session import Transmitter, Session
56
56
 
57
57
  from .compat import CompatibleOutgoing
58
58
  from .compat import CompatibleCompressor
59
+ from .compat import Compatible
59
60
 
60
61
 
61
62
  class CommonMessenger(Messenger, Transmitter, Logging, ABC):
@@ -105,6 +106,28 @@ class CommonMessenger(Messenger, Transmitter, Logging, ABC):
105
106
  def session(self) -> Session:
106
107
  return self.__session
107
108
 
109
+ # Override
110
+ async def serialize_message(self, msg: ReliableMessage) -> bytes:
111
+ Compatible.fix_meta_attachment(msg=msg)
112
+ Compatible.fix_visa_attachment(msg=msg)
113
+ return await super().serialize_message(msg=msg)
114
+
115
+ # Override
116
+ async def deserialize_message(self, data: bytes) -> Optional[ReliableMessage]:
117
+ if data is None or len(data) <= 4:
118
+ # message data error
119
+ return None
120
+ # elif not (data.startswith(b'{') and data.endswith(b'}')):
121
+ # # only support JsON format now
122
+ # return None
123
+ msg = await super().deserialize_message(data=data)
124
+ if msg is not None:
125
+ Compatible.fix_meta_attachment(msg=msg)
126
+ Compatible.fix_visa_attachment(msg=msg)
127
+ return msg
128
+
129
+ # -------- InstantMessageDelegate
130
+
108
131
  # Override
109
132
  async def encrypt_key(self, data: bytes, receiver: ID, msg: InstantMessage) -> Optional[bytes]:
110
133
  try:
@@ -129,7 +152,7 @@ class CommonMessenger(Messenger, Transmitter, Logging, ABC):
129
152
  # 2. serialize key without flags
130
153
  data = await super().serialize_key(key=key, msg=msg)
131
154
  # 3. put them back after serialized
132
- if Converter.get_bool(value=reused, default=False):
155
+ if Converter.get_bool(value=reused):
133
156
  key['reused'] = reused
134
157
  if digest is not None:
135
158
  key['digest'] = digest
@@ -31,13 +31,11 @@ from dimsdk import ID
31
31
  from dimsdk import InstantMessage, SecureMessage, ReliableMessage
32
32
  from dimsdk import MessagePacker
33
33
  from dimsdk import MessageUtils
34
- from dimsdk import Compressor
35
34
 
36
35
  from ..utils import Logging
37
36
 
38
37
  from .facebook import CommonFacebook
39
38
  from .messenger import CommonMessenger
40
- from .compat import Compatible
41
39
 
42
40
  from .queue import SuspendedMessageQueue
43
41
 
@@ -54,10 +52,6 @@ class CommonMessagePacker(MessagePacker, Logging, ABC):
54
52
  assert isinstance(transceiver, CommonMessenger), 'transceiver error: %s' % transceiver
55
53
  return transceiver
56
54
 
57
- @property # Override
58
- def compressor(self) -> Compressor:
59
- return self.messenger.compressor
60
-
61
55
  def suspend_reliable_message(self, msg: ReliableMessage, error: Dict):
62
56
  self.__queue.suspend_reliable_message(msg=msg, error=error)
63
57
 
@@ -163,23 +157,3 @@ class CommonMessagePacker(MessagePacker, Logging, ABC):
163
157
  # already signed
164
158
  return msg
165
159
  return await super().sign_message(msg=msg)
166
-
167
- # Override
168
- async def deserialize_message(self, data: bytes) -> Optional[ReliableMessage]:
169
- if data is None or len(data) <= 4:
170
- # message data error
171
- return None
172
- # elif not (data.startswith(b'{') and data.endswith(b'}')):
173
- # # only support JsON format now
174
- # return None
175
- msg = await super().deserialize_message(data=data)
176
- if msg is not None:
177
- Compatible.fix_meta_attachment(msg=msg)
178
- Compatible.fix_visa_attachment(msg=msg)
179
- return msg
180
-
181
- # Override
182
- async def serialize_message(self, msg: ReliableMessage) -> bytes:
183
- Compatible.fix_meta_attachment(msg=msg)
184
- Compatible.fix_visa_attachment(msg=msg)
185
- return await super().serialize_message(msg=msg)
@@ -61,7 +61,7 @@ class CommonMessageProcessor(MessageProcessor, Logging, ABC):
61
61
  assert False, 'entity checker lost'
62
62
  doc_updated = False
63
63
  # check sender document time
64
- last_doc_time = r_msg.get_datetime(key='SDT', default=None)
64
+ last_doc_time = r_msg.get_datetime(key='SDT')
65
65
  if last_doc_time is not None:
66
66
  now = DateTime.now()
67
67
  if last_doc_time.after(now):
@@ -85,7 +85,7 @@ class HandshakeCommand(BaseCommand):
85
85
  @property
86
86
  def title(self) -> str:
87
87
  # TODO: modify after all clients upgraded
88
- text = self.get_str(key='title', default=None)
88
+ text = self.get_str(key='title')
89
89
  if text is None:
90
90
  # compatible with v1.0
91
91
  text = self.get_str(key='message', default='')
@@ -93,7 +93,7 @@ class HandshakeCommand(BaseCommand):
93
93
 
94
94
  @property
95
95
  def session(self) -> Optional[str]:
96
- return self.get_str(key='session', default=None)
96
+ return self.get_str(key='session')
97
97
 
98
98
  @property
99
99
  def state(self) -> HandshakeState:
@@ -92,7 +92,7 @@ class LoginCommand(BaseCommand):
92
92
  # Device ID
93
93
  @property
94
94
  def device(self) -> Optional[str]:
95
- return self.get_str(key='device', default=None)
95
+ return self.get_str(key='device')
96
96
 
97
97
  @device.setter
98
98
  def device(self, value: str):
@@ -104,7 +104,7 @@ class LoginCommand(BaseCommand):
104
104
  # User Agent
105
105
  @property
106
106
  def agent(self) -> Optional[str]:
107
- return self.get_str(key='agent', default=None)
107
+ return self.get_str(key='agent')
108
108
 
109
109
  @agent.setter
110
110
  def agent(self, value: str):
@@ -48,7 +48,7 @@ class TraceNode(Dictionary):
48
48
 
49
49
  @property
50
50
  def time(self) -> float:
51
- return self.get_float(key='time', default=0)
51
+ return self.get_float(key='time', default=0.0)
52
52
 
53
53
  def __eq__(self, other) -> bool:
54
54
  """ Return self == other. """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dimples
3
- Version: 1.5.2
3
+ Version: 1.5.5
4
4
  Summary: DIMP Library for Edges and Stations
5
5
  Home-page: https://github.com/dimchat/demo-py
6
6
  Author: Albert Moky
@@ -1,6 +1,6 @@
1
1
  requests
2
- dimplugins>=2.3.1
3
- dimsdk>=2.3.1
2
+ dimplugins>=2.3.2
3
+ dimsdk>=2.3.2
4
4
  startrek>=2.2.2
5
5
  tcp>=2.2.2
6
6
  udp>=2.2.2
@@ -14,7 +14,7 @@ import io
14
14
 
15
15
  from setuptools import setup, find_packages
16
16
 
17
- __version__ = '1.5.2'
17
+ __version__ = '1.5.5'
18
18
  __author__ = 'Albert Moky'
19
19
  __contact__ = 'albert.moky@gmail.com'
20
20
 
@@ -53,12 +53,12 @@ setup(
53
53
  # 'pycryptodome', # 3.14.1
54
54
  # 'base58', # 1.0.3
55
55
  # 'ecdsa', # 0.16.1
56
- 'dimplugins>=2.3.1',
56
+ 'dimplugins>=2.3.2',
57
57
 
58
- 'dimsdk>=2.3.1',
59
- # 'dimp>=2.3.1',
60
- # 'dkd>=2.3.1',
61
- # 'mkm>=2.3.1',
58
+ 'dimsdk>=2.3.2',
59
+ # 'dimp>=2.3.2',
60
+ # 'dkd>=2.3.2',
61
+ # 'mkm>=2.3.2',
62
62
 
63
63
  'startrek>=2.2.2',
64
64
  'tcp>=2.2.2',
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes