dimples 0.5.6__tar.gz → 0.5.7__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 (143) hide show
  1. {dimples-0.5.6 → dimples-0.5.7}/PKG-INFO +1 -1
  2. {dimples-0.5.6 → dimples-0.5.7}/dimples/edge/octopus.py +48 -19
  3. {dimples-0.5.6 → dimples-0.5.7}/dimples/server/dispatcher.py +10 -14
  4. {dimples-0.5.6 → dimples-0.5.7}/dimples.egg-info/PKG-INFO +1 -1
  5. {dimples-0.5.6 → dimples-0.5.7}/setup.py +1 -1
  6. {dimples-0.5.6 → dimples-0.5.7}/README.md +0 -0
  7. {dimples-0.5.6 → dimples-0.5.7}/dimples/__init__.py +0 -0
  8. {dimples-0.5.6 → dimples-0.5.7}/dimples/client/__init__.py +0 -0
  9. {dimples-0.5.6 → dimples-0.5.7}/dimples/client/archivist.py +0 -0
  10. {dimples-0.5.6 → dimples-0.5.7}/dimples/client/checkpoint.py +0 -0
  11. {dimples-0.5.6 → dimples-0.5.7}/dimples/client/cpu/__init__.py +0 -0
  12. {dimples-0.5.6 → dimples-0.5.7}/dimples/client/cpu/commands.py +0 -0
  13. {dimples-0.5.6 → dimples-0.5.7}/dimples/client/cpu/creator.py +0 -0
  14. {dimples-0.5.6 → dimples-0.5.7}/dimples/client/cpu/group.py +0 -0
  15. {dimples-0.5.6 → dimples-0.5.7}/dimples/client/cpu/grp_expel.py +0 -0
  16. {dimples-0.5.6 → dimples-0.5.7}/dimples/client/cpu/grp_invite.py +0 -0
  17. {dimples-0.5.6 → dimples-0.5.7}/dimples/client/cpu/grp_join.py +0 -0
  18. {dimples-0.5.6 → dimples-0.5.7}/dimples/client/cpu/grp_query.py +0 -0
  19. {dimples-0.5.6 → dimples-0.5.7}/dimples/client/cpu/grp_quit.py +0 -0
  20. {dimples-0.5.6 → dimples-0.5.7}/dimples/client/cpu/grp_reset.py +0 -0
  21. {dimples-0.5.6 → dimples-0.5.7}/dimples/client/cpu/grp_resign.py +0 -0
  22. {dimples-0.5.6 → dimples-0.5.7}/dimples/client/cpu/handshake.py +0 -0
  23. {dimples-0.5.6 → dimples-0.5.7}/dimples/client/facebook.py +0 -0
  24. {dimples-0.5.6 → dimples-0.5.7}/dimples/client/messenger.py +0 -0
  25. {dimples-0.5.6 → dimples-0.5.7}/dimples/client/network/__init__.py +0 -0
  26. {dimples-0.5.6 → dimples-0.5.7}/dimples/client/network/session.py +0 -0
  27. {dimples-0.5.6 → dimples-0.5.7}/dimples/client/network/state.py +0 -0
  28. {dimples-0.5.6 → dimples-0.5.7}/dimples/client/network/transition.py +0 -0
  29. {dimples-0.5.6 → dimples-0.5.7}/dimples/client/packer.py +0 -0
  30. {dimples-0.5.6 → dimples-0.5.7}/dimples/client/processor.py +0 -0
  31. {dimples-0.5.6 → dimples-0.5.7}/dimples/client/terminal.py +0 -0
  32. {dimples-0.5.6 → dimples-0.5.7}/dimples/common/__init__.py +0 -0
  33. {dimples-0.5.6 → dimples-0.5.7}/dimples/common/anonymous.py +0 -0
  34. {dimples-0.5.6 → dimples-0.5.7}/dimples/common/ans.py +0 -0
  35. {dimples-0.5.6 → dimples-0.5.7}/dimples/common/archivist.py +0 -0
  36. {dimples-0.5.6 → dimples-0.5.7}/dimples/common/compat/__init__.py +0 -0
  37. {dimples-0.5.6 → dimples-0.5.7}/dimples/common/compat/btc.py +0 -0
  38. {dimples-0.5.6 → dimples-0.5.7}/dimples/common/compat/compatible.py +0 -0
  39. {dimples-0.5.6 → dimples-0.5.7}/dimples/common/compat/entity.py +0 -0
  40. {dimples-0.5.6 → dimples-0.5.7}/dimples/common/compat/meta.py +0 -0
  41. {dimples-0.5.6 → dimples-0.5.7}/dimples/common/compat/network.py +0 -0
  42. {dimples-0.5.6 → dimples-0.5.7}/dimples/common/dbi/__init__.py +0 -0
  43. {dimples-0.5.6 → dimples-0.5.7}/dimples/common/dbi/account.py +0 -0
  44. {dimples-0.5.6 → dimples-0.5.7}/dimples/common/dbi/message.py +0 -0
  45. {dimples-0.5.6 → dimples-0.5.7}/dimples/common/dbi/session.py +0 -0
  46. {dimples-0.5.6 → dimples-0.5.7}/dimples/common/facebook.py +0 -0
  47. {dimples-0.5.6 → dimples-0.5.7}/dimples/common/messenger.py +0 -0
  48. {dimples-0.5.6 → dimples-0.5.7}/dimples/common/packer.py +0 -0
  49. {dimples-0.5.6 → dimples-0.5.7}/dimples/common/processer.py +0 -0
  50. {dimples-0.5.6 → dimples-0.5.7}/dimples/common/protocol/__init__.py +0 -0
  51. {dimples-0.5.6 → dimples-0.5.7}/dimples/common/protocol/ans.py +0 -0
  52. {dimples-0.5.6 → dimples-0.5.7}/dimples/common/protocol/block.py +0 -0
  53. {dimples-0.5.6 → dimples-0.5.7}/dimples/common/protocol/handshake.py +0 -0
  54. {dimples-0.5.6 → dimples-0.5.7}/dimples/common/protocol/login.py +0 -0
  55. {dimples-0.5.6 → dimples-0.5.7}/dimples/common/protocol/mute.py +0 -0
  56. {dimples-0.5.6 → dimples-0.5.7}/dimples/common/protocol/report.py +0 -0
  57. {dimples-0.5.6 → dimples-0.5.7}/dimples/common/register.py +0 -0
  58. {dimples-0.5.6 → dimples-0.5.7}/dimples/common/session.py +0 -0
  59. {dimples-0.5.6 → dimples-0.5.7}/dimples/conn/__init__.py +0 -0
  60. {dimples-0.5.6 → dimples-0.5.7}/dimples/conn/gate.py +0 -0
  61. {dimples-0.5.6 → dimples-0.5.7}/dimples/conn/gatekeeper.py +0 -0
  62. {dimples-0.5.6 → dimples-0.5.7}/dimples/conn/mars.py +0 -0
  63. {dimples-0.5.6 → dimples-0.5.7}/dimples/conn/mtp.py +0 -0
  64. {dimples-0.5.6 → dimples-0.5.7}/dimples/conn/protocol/__init__.py +0 -0
  65. {dimples-0.5.6 → dimples-0.5.7}/dimples/conn/protocol/mars.py +0 -0
  66. {dimples-0.5.6 → dimples-0.5.7}/dimples/conn/protocol/ws.py +0 -0
  67. {dimples-0.5.6 → dimples-0.5.7}/dimples/conn/queue.py +0 -0
  68. {dimples-0.5.6 → dimples-0.5.7}/dimples/conn/seeker.py +0 -0
  69. {dimples-0.5.6 → dimples-0.5.7}/dimples/conn/session.py +0 -0
  70. {dimples-0.5.6 → dimples-0.5.7}/dimples/conn/ws.py +0 -0
  71. {dimples-0.5.6 → dimples-0.5.7}/dimples/database/__init__.py +0 -0
  72. {dimples-0.5.6 → dimples-0.5.7}/dimples/database/account.py +0 -0
  73. {dimples-0.5.6 → dimples-0.5.7}/dimples/database/dos/__init__.py +0 -0
  74. {dimples-0.5.6 → dimples-0.5.7}/dimples/database/dos/base.py +0 -0
  75. {dimples-0.5.6 → dimples-0.5.7}/dimples/database/dos/document.py +0 -0
  76. {dimples-0.5.6 → dimples-0.5.7}/dimples/database/dos/group.py +0 -0
  77. {dimples-0.5.6 → dimples-0.5.7}/dimples/database/dos/group_history.py +0 -0
  78. {dimples-0.5.6 → dimples-0.5.7}/dimples/database/dos/group_keys.py +0 -0
  79. {dimples-0.5.6 → dimples-0.5.7}/dimples/database/dos/login.py +0 -0
  80. {dimples-0.5.6 → dimples-0.5.7}/dimples/database/dos/meta.py +0 -0
  81. {dimples-0.5.6 → dimples-0.5.7}/dimples/database/dos/private.py +0 -0
  82. {dimples-0.5.6 → dimples-0.5.7}/dimples/database/dos/station.py +0 -0
  83. {dimples-0.5.6 → dimples-0.5.7}/dimples/database/dos/user.py +0 -0
  84. {dimples-0.5.6 → dimples-0.5.7}/dimples/database/message.py +0 -0
  85. {dimples-0.5.6 → dimples-0.5.7}/dimples/database/session.py +0 -0
  86. {dimples-0.5.6 → dimples-0.5.7}/dimples/database/t_cipherkey.py +0 -0
  87. {dimples-0.5.6 → dimples-0.5.7}/dimples/database/t_document.py +0 -0
  88. {dimples-0.5.6 → dimples-0.5.7}/dimples/database/t_group.py +0 -0
  89. {dimples-0.5.6 → dimples-0.5.7}/dimples/database/t_group_history.py +0 -0
  90. {dimples-0.5.6 → dimples-0.5.7}/dimples/database/t_group_keys.py +0 -0
  91. {dimples-0.5.6 → dimples-0.5.7}/dimples/database/t_login.py +0 -0
  92. {dimples-0.5.6 → dimples-0.5.7}/dimples/database/t_message.py +0 -0
  93. {dimples-0.5.6 → dimples-0.5.7}/dimples/database/t_meta.py +0 -0
  94. {dimples-0.5.6 → dimples-0.5.7}/dimples/database/t_private.py +0 -0
  95. {dimples-0.5.6 → dimples-0.5.7}/dimples/database/t_station.py +0 -0
  96. {dimples-0.5.6 → dimples-0.5.7}/dimples/database/t_user.py +0 -0
  97. {dimples-0.5.6 → dimples-0.5.7}/dimples/edge/__init__.py +0 -0
  98. {dimples-0.5.6 → dimples-0.5.7}/dimples/edge/shared.py +0 -0
  99. {dimples-0.5.6 → dimples-0.5.7}/dimples/edge/start.py +0 -0
  100. {dimples-0.5.6 → dimples-0.5.7}/dimples/group/__init__.py +0 -0
  101. {dimples-0.5.6 → dimples-0.5.7}/dimples/group/admin.py +0 -0
  102. {dimples-0.5.6 → dimples-0.5.7}/dimples/group/builder.py +0 -0
  103. {dimples-0.5.6 → dimples-0.5.7}/dimples/group/delegate.py +0 -0
  104. {dimples-0.5.6 → dimples-0.5.7}/dimples/group/emitter.py +0 -0
  105. {dimples-0.5.6 → dimples-0.5.7}/dimples/group/helper.py +0 -0
  106. {dimples-0.5.6 → dimples-0.5.7}/dimples/group/manager.py +0 -0
  107. {dimples-0.5.6 → dimples-0.5.7}/dimples/group/packer.py +0 -0
  108. {dimples-0.5.6 → dimples-0.5.7}/dimples/register/__init__.py +0 -0
  109. {dimples-0.5.6 → dimples-0.5.7}/dimples/register/base.py +0 -0
  110. {dimples-0.5.6 → dimples-0.5.7}/dimples/register/ext.py +0 -0
  111. {dimples-0.5.6 → dimples-0.5.7}/dimples/register/run.py +0 -0
  112. {dimples-0.5.6 → dimples-0.5.7}/dimples/register/shared.py +0 -0
  113. {dimples-0.5.6 → dimples-0.5.7}/dimples/server/__init__.py +0 -0
  114. {dimples-0.5.6 → dimples-0.5.7}/dimples/server/archivist.py +0 -0
  115. {dimples-0.5.6 → dimples-0.5.7}/dimples/server/cpu/__init__.py +0 -0
  116. {dimples-0.5.6 → dimples-0.5.7}/dimples/server/cpu/ans.py +0 -0
  117. {dimples-0.5.6 → dimples-0.5.7}/dimples/server/cpu/document.py +0 -0
  118. {dimples-0.5.6 → dimples-0.5.7}/dimples/server/cpu/handshake.py +0 -0
  119. {dimples-0.5.6 → dimples-0.5.7}/dimples/server/cpu/login.py +0 -0
  120. {dimples-0.5.6 → dimples-0.5.7}/dimples/server/cpu/report.py +0 -0
  121. {dimples-0.5.6 → dimples-0.5.7}/dimples/server/messenger.py +0 -0
  122. {dimples-0.5.6 → dimples-0.5.7}/dimples/server/packer.py +0 -0
  123. {dimples-0.5.6 → dimples-0.5.7}/dimples/server/processor.py +0 -0
  124. {dimples-0.5.6 → dimples-0.5.7}/dimples/server/push.py +0 -0
  125. {dimples-0.5.6 → dimples-0.5.7}/dimples/server/session.py +0 -0
  126. {dimples-0.5.6 → dimples-0.5.7}/dimples/server/session_center.py +0 -0
  127. {dimples-0.5.6 → dimples-0.5.7}/dimples/server/trace.py +0 -0
  128. {dimples-0.5.6 → dimples-0.5.7}/dimples/station/__init__.py +0 -0
  129. {dimples-0.5.6 → dimples-0.5.7}/dimples/station/handler.py +0 -0
  130. {dimples-0.5.6 → dimples-0.5.7}/dimples/station/shared.py +0 -0
  131. {dimples-0.5.6 → dimples-0.5.7}/dimples/station/start.py +0 -0
  132. {dimples-0.5.6 → dimples-0.5.7}/dimples/utils/__init__.py +0 -0
  133. {dimples-0.5.6 → dimples-0.5.7}/dimples/utils/cache.py +0 -0
  134. {dimples-0.5.6 → dimples-0.5.7}/dimples/utils/config.py +0 -0
  135. {dimples-0.5.6 → dimples-0.5.7}/dimples/utils/dos.py +0 -0
  136. {dimples-0.5.6 → dimples-0.5.7}/dimples/utils/log.py +0 -0
  137. {dimples-0.5.6 → dimples-0.5.7}/dimples/utils/singleton.py +0 -0
  138. {dimples-0.5.6 → dimples-0.5.7}/dimples.egg-info/SOURCES.txt +0 -0
  139. {dimples-0.5.6 → dimples-0.5.7}/dimples.egg-info/dependency_links.txt +0 -0
  140. {dimples-0.5.6 → dimples-0.5.7}/dimples.egg-info/entry_points.txt +0 -0
  141. {dimples-0.5.6 → dimples-0.5.7}/dimples.egg-info/requires.txt +0 -0
  142. {dimples-0.5.6 → dimples-0.5.7}/dimples.egg-info/top_level.txt +0 -0
  143. {dimples-0.5.6 → dimples-0.5.7}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dimples
3
- Version: 0.5.6
3
+ Version: 0.5.7
4
4
  Summary: DIMP Library for Edges and Stations
5
5
  Home-page: https://github.com/dimchat/demo-py
6
6
  Author: Albert Moky
@@ -190,35 +190,64 @@ class Octopus(Runner, Logging):
190
190
 
191
191
  def income_message(self, msg: ReliableMessage, priority: int = 0) -> List[ReliableMessage]:
192
192
  """ redirect message from remote station """
193
+ sender = msg.sender
194
+ receiver = msg.receiver
193
195
  sig = get_msg_sig(msg=msg)
194
196
  messenger = self.inner_messenger
195
197
  if messenger.send_reliable_message(msg=msg, priority=priority):
196
- self.info(msg='redirected msg (%s) for receiver (%s)' % (sig, msg.receiver))
198
+ self.info(msg='redirected msg (%s): %s -> %s' % (sig, sender, receiver))
197
199
  else:
198
- self.error(msg='failed to redirect msg (%s) for receiver (%s)' % (sig, msg.receiver))
200
+ self.error(msg='failed to redirect msg (%s): %s -> %s' % (sig, sender, receiver))
199
201
  # no need to respond receipt for station
200
202
  return []
201
203
 
202
204
  def outgo_message(self, msg: ReliableMessage, priority: int = 0) -> List[ReliableMessage]:
203
205
  """ redirect message to remote station """
204
- target = ID.parse(identifier=msg.get('neighbor'))
205
- if target is None:
206
- # target station not found
207
- self.info(msg='cannot get target station for receiver (%s)' % msg.receiver)
208
- return []
209
- messenger = self.get_outer_messenger(identifier=target)
210
- if messenger is None:
211
- # target station not my neighbor
212
- self.info(msg='receiver (%s) is targeted to (%s), but not my neighbor' % (msg.receiver, target))
213
- return []
214
- msg.pop('neighbor', None)
215
- if messenger.send_reliable_message(msg=msg, priority=priority):
216
- sig = get_msg_sig(msg=msg)
217
- self.info(msg='redirected msg (%s) to target (%s) for receiver (%s)' % (sig, target, msg.receiver))
218
- # no need to respond receipt for station
219
- return []
206
+ receiver = msg.receiver
207
+ # get neighbor stations
208
+ neighbor = ID.parse(identifier=msg.get('neighbor'))
209
+ if neighbor is not None:
210
+ neighbors = set()
211
+ neighbors.add(neighbor)
212
+ msg.pop('neighbor', None)
213
+ else:
214
+ with self.__outer_lock:
215
+ neighbors = set(self.__outer_map.keys())
216
+ #
217
+ # 0. check recipients
218
+ #
219
+ new_recipients = set()
220
+ old_recipients = msg.get('recipients')
221
+ old_recipients = [] if old_recipients is None else ID.convert(old_recipients)
222
+ for item in neighbors:
223
+ if item not in old_recipients:
224
+ new_recipients.add(item)
225
+ all_recipients = []
226
+ for item in old_recipients:
227
+ all_recipients.append(item)
228
+ # avoid the new recipients redirect it to same targets
229
+ self.info(msg='append new recipients: %s, %s => %s' % (receiver, new_recipients, all_recipients))
230
+ for item in new_recipients:
231
+ all_recipients.append(item)
232
+ msg['recipients'] = ID.revert(all_recipients)
233
+ #
234
+ # 1. send to the new recipients (neighbor stations)
235
+ #
220
236
  sig = get_msg_sig(msg=msg)
221
- self.error(msg='failed to redirect msg (%s) to target (%s) for receiver (%s)' % (sig, target, msg.receiver))
237
+ failed_neighbors = []
238
+ for target in new_recipients:
239
+ messenger = self.get_outer_messenger(identifier=target)
240
+ if messenger is None:
241
+ # target station not my neighbor
242
+ self.warning(msg='not my neighbor: %s (%s)' % (target, receiver))
243
+ failed_neighbors.append(target)
244
+ elif messenger.send_reliable_message(msg=msg, priority=priority):
245
+ self.info(msg='redirected msg (%s) to neighbor: %s (%s)' % (sig, target, receiver))
246
+ else:
247
+ self.error(msg='failed to send to neighbor: %s (%s)' % (target, receiver))
248
+ failed_neighbors.append(target)
249
+ if len(failed_neighbors) > 0:
250
+ self.error(msg='failed to redirect msg (%s) for receiver (%s): %s' % (sig, receiver, failed_neighbors))
222
251
  return []
223
252
 
224
253
 
@@ -209,23 +209,19 @@ class Dispatcher(MessageDeliver, Logging):
209
209
  #
210
210
  # 0. check recipients
211
211
  #
212
- new_recipients = neighbors.copy()
212
+ new_recipients = set()
213
213
  old_recipients = msg.get('recipients')
214
- if old_recipients is None:
215
- all_recipients = []
216
- else:
217
- all_recipients = ID.convert(old_recipients)
218
- # check duplicated
219
- self.info(msg='discard recipients: %s, new recipients: %s' % (old_recipients, new_recipients))
220
- for item in all_recipients:
221
- new_recipients.discard(item)
222
- if len(new_recipients) == 0:
223
- self.info(msg='new recipients empty: %s => %s' % (receiver, neighbors))
224
- return []
214
+ old_recipients = [] if old_recipients is None else ID.convert(old_recipients)
215
+ for item in neighbors:
216
+ if item not in old_recipients:
217
+ new_recipients.add(item)
218
+ all_recipients = []
219
+ for item in old_recipients:
220
+ all_recipients.append(item)
221
+ # avoid the new recipients redirect it to same targets
225
222
  self.info(msg='append new recipients: %s, %s => %s' % (receiver, new_recipients, all_recipients))
226
223
  for item in new_recipients:
227
224
  all_recipients.append(item)
228
- # avoid the new recipients redirect it to same targets
229
225
  msg['recipients'] = ID.revert(all_recipients)
230
226
  #
231
227
  # 1. push to neighbor stations directly
@@ -384,7 +380,7 @@ class DeliverWorker(Logging):
384
380
  :return: responses
385
381
  """
386
382
  """ Redirect message to neighbor station """
387
- assert neighbor.type == EntityType.STATION, 'neighbor station ID error: %s' % neighbor
383
+ assert neighbor is None or neighbor.type == EntityType.STATION, 'neighbor station ID error: %s' % neighbor
388
384
  self.info(msg='redirect message %s => %s to neighbor station: %s' % (msg.sender, msg.receiver, neighbor))
389
385
  # 0. check current station
390
386
  current = self.facebook.current_user.identifier
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dimples
3
- Version: 0.5.6
3
+ Version: 0.5.7
4
4
  Summary: DIMP Library for Edges and Stations
5
5
  Home-page: https://github.com/dimchat/demo-py
6
6
  Author: Albert Moky
@@ -14,7 +14,7 @@ import io
14
14
 
15
15
  from setuptools import setup, find_packages
16
16
 
17
- __version__ = '0.5.6'
17
+ __version__ = '0.5.7'
18
18
  __author__ = 'Albert Moky'
19
19
  __contact__ = 'albert.moky@gmail.com'
20
20
 
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