dimples 1.3.4__tar.gz → 1.3.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 (170) hide show
  1. {dimples-1.3.4 → dimples-1.3.5}/PKG-INFO +1 -1
  2. {dimples-1.3.4 → dimples-1.3.5}/dimples/client/checker.py +3 -3
  3. {dimples-1.3.4 → dimples-1.3.5}/dimples/client/terminal.py +14 -5
  4. {dimples-1.3.4 → dimples-1.3.5}/dimples/conn/gatekeeper.py +1 -1
  5. {dimples-1.3.4 → dimples-1.3.5}/dimples/database/dos/document.py +4 -34
  6. {dimples-1.3.4 → dimples-1.3.5}/dimples/database/dos/group_history.py +2 -70
  7. {dimples-1.3.4 → dimples-1.3.5}/dimples/database/redis/document.py +11 -11
  8. {dimples-1.3.4 → dimples-1.3.5}/dimples/database/t_document.py +2 -2
  9. {dimples-1.3.4 → dimples-1.3.5}/dimples/database/t_group_history.py +11 -11
  10. {dimples-1.3.4 → dimples-1.3.5}/dimples/edge/start.py +3 -2
  11. {dimples-1.3.4 → dimples-1.3.5}/dimples.egg-info/PKG-INFO +1 -1
  12. {dimples-1.3.4 → dimples-1.3.5}/dimples.egg-info/requires.txt +1 -1
  13. {dimples-1.3.4 → dimples-1.3.5}/setup.py +2 -2
  14. {dimples-1.3.4 → dimples-1.3.5}/README.md +0 -0
  15. {dimples-1.3.4 → dimples-1.3.5}/dimples/__init__.py +0 -0
  16. {dimples-1.3.4 → dimples-1.3.5}/dimples/client/__init__.py +0 -0
  17. {dimples-1.3.4 → dimples-1.3.5}/dimples/client/checkpoint.py +0 -0
  18. {dimples-1.3.4 → dimples-1.3.5}/dimples/client/cpu/__init__.py +0 -0
  19. {dimples-1.3.4 → dimples-1.3.5}/dimples/client/cpu/commands.py +0 -0
  20. {dimples-1.3.4 → dimples-1.3.5}/dimples/client/cpu/creator.py +0 -0
  21. {dimples-1.3.4 → dimples-1.3.5}/dimples/client/cpu/customized.py +0 -0
  22. {dimples-1.3.4 → dimples-1.3.5}/dimples/client/cpu/group.py +0 -0
  23. {dimples-1.3.4 → dimples-1.3.5}/dimples/client/cpu/grp_expel.py +0 -0
  24. {dimples-1.3.4 → dimples-1.3.5}/dimples/client/cpu/grp_invite.py +0 -0
  25. {dimples-1.3.4 → dimples-1.3.5}/dimples/client/cpu/grp_join.py +0 -0
  26. {dimples-1.3.4 → dimples-1.3.5}/dimples/client/cpu/grp_query.py +0 -0
  27. {dimples-1.3.4 → dimples-1.3.5}/dimples/client/cpu/grp_quit.py +0 -0
  28. {dimples-1.3.4 → dimples-1.3.5}/dimples/client/cpu/grp_reset.py +0 -0
  29. {dimples-1.3.4 → dimples-1.3.5}/dimples/client/cpu/grp_resign.py +0 -0
  30. {dimples-1.3.4 → dimples-1.3.5}/dimples/client/cpu/handshake.py +0 -0
  31. {dimples-1.3.4 → dimples-1.3.5}/dimples/client/facebook.py +0 -0
  32. {dimples-1.3.4 → dimples-1.3.5}/dimples/client/messenger.py +0 -0
  33. {dimples-1.3.4 → dimples-1.3.5}/dimples/client/network/__init__.py +0 -0
  34. {dimples-1.3.4 → dimples-1.3.5}/dimples/client/network/session.py +0 -0
  35. {dimples-1.3.4 → dimples-1.3.5}/dimples/client/network/state.py +0 -0
  36. {dimples-1.3.4 → dimples-1.3.5}/dimples/client/network/transition.py +0 -0
  37. {dimples-1.3.4 → dimples-1.3.5}/dimples/client/packer.py +0 -0
  38. {dimples-1.3.4 → dimples-1.3.5}/dimples/client/processor.py +0 -0
  39. {dimples-1.3.4 → dimples-1.3.5}/dimples/common/__init__.py +0 -0
  40. {dimples-1.3.4 → dimples-1.3.5}/dimples/common/anonymous.py +0 -0
  41. {dimples-1.3.4 → dimples-1.3.5}/dimples/common/ans.py +0 -0
  42. {dimples-1.3.4 → dimples-1.3.5}/dimples/common/archivist.py +0 -0
  43. {dimples-1.3.4 → dimples-1.3.5}/dimples/common/checker.py +0 -0
  44. {dimples-1.3.4 → dimples-1.3.5}/dimples/common/compat/__init__.py +0 -0
  45. {dimples-1.3.4 → dimples-1.3.5}/dimples/common/compat/address.py +0 -0
  46. {dimples-1.3.4 → dimples-1.3.5}/dimples/common/compat/compatible.py +0 -0
  47. {dimples-1.3.4 → dimples-1.3.5}/dimples/common/compat/entity.py +0 -0
  48. {dimples-1.3.4 → dimples-1.3.5}/dimples/common/compat/loader.py +0 -0
  49. {dimples-1.3.4 → dimples-1.3.5}/dimples/common/compat/meta.py +0 -0
  50. {dimples-1.3.4 → dimples-1.3.5}/dimples/common/compat/network.py +0 -0
  51. {dimples-1.3.4 → dimples-1.3.5}/dimples/common/dbi/__init__.py +0 -0
  52. {dimples-1.3.4 → dimples-1.3.5}/dimples/common/dbi/account.py +0 -0
  53. {dimples-1.3.4 → dimples-1.3.5}/dimples/common/dbi/message.py +0 -0
  54. {dimples-1.3.4 → dimples-1.3.5}/dimples/common/dbi/session.py +0 -0
  55. {dimples-1.3.4 → dimples-1.3.5}/dimples/common/facebook.py +0 -0
  56. {dimples-1.3.4 → dimples-1.3.5}/dimples/common/messenger.py +0 -0
  57. {dimples-1.3.4 → dimples-1.3.5}/dimples/common/packer.py +0 -0
  58. {dimples-1.3.4 → dimples-1.3.5}/dimples/common/processer.py +0 -0
  59. {dimples-1.3.4 → dimples-1.3.5}/dimples/common/protocol/__init__.py +0 -0
  60. {dimples-1.3.4 → dimples-1.3.5}/dimples/common/protocol/ans.py +0 -0
  61. {dimples-1.3.4 → dimples-1.3.5}/dimples/common/protocol/block.py +0 -0
  62. {dimples-1.3.4 → dimples-1.3.5}/dimples/common/protocol/customized.py +0 -0
  63. {dimples-1.3.4 → dimples-1.3.5}/dimples/common/protocol/group.py +0 -0
  64. {dimples-1.3.4 → dimples-1.3.5}/dimples/common/protocol/handshake.py +0 -0
  65. {dimples-1.3.4 → dimples-1.3.5}/dimples/common/protocol/login.py +0 -0
  66. {dimples-1.3.4 → dimples-1.3.5}/dimples/common/protocol/mute.py +0 -0
  67. {dimples-1.3.4 → dimples-1.3.5}/dimples/common/protocol/password.py +0 -0
  68. {dimples-1.3.4 → dimples-1.3.5}/dimples/common/protocol/report.py +0 -0
  69. {dimples-1.3.4 → dimples-1.3.5}/dimples/common/protocol/utils.py +0 -0
  70. {dimples-1.3.4 → dimples-1.3.5}/dimples/common/protocol/version.py +0 -0
  71. {dimples-1.3.4 → dimples-1.3.5}/dimples/common/register.py +0 -0
  72. {dimples-1.3.4 → dimples-1.3.5}/dimples/common/session.py +0 -0
  73. {dimples-1.3.4 → dimples-1.3.5}/dimples/conn/__init__.py +0 -0
  74. {dimples-1.3.4 → dimples-1.3.5}/dimples/conn/flexible.py +0 -0
  75. {dimples-1.3.4 → dimples-1.3.5}/dimples/conn/gate.py +0 -0
  76. {dimples-1.3.4 → dimples-1.3.5}/dimples/conn/mars.py +0 -0
  77. {dimples-1.3.4 → dimples-1.3.5}/dimples/conn/mtp.py +0 -0
  78. {dimples-1.3.4 → dimples-1.3.5}/dimples/conn/protocol/__init__.py +0 -0
  79. {dimples-1.3.4 → dimples-1.3.5}/dimples/conn/protocol/mars.py +0 -0
  80. {dimples-1.3.4 → dimples-1.3.5}/dimples/conn/protocol/ws.py +0 -0
  81. {dimples-1.3.4 → dimples-1.3.5}/dimples/conn/queue.py +0 -0
  82. {dimples-1.3.4 → dimples-1.3.5}/dimples/conn/seeker.py +0 -0
  83. {dimples-1.3.4 → dimples-1.3.5}/dimples/conn/session.py +0 -0
  84. {dimples-1.3.4 → dimples-1.3.5}/dimples/conn/ws.py +0 -0
  85. {dimples-1.3.4 → dimples-1.3.5}/dimples/database/__init__.py +0 -0
  86. {dimples-1.3.4 → dimples-1.3.5}/dimples/database/account.py +0 -0
  87. {dimples-1.3.4 → dimples-1.3.5}/dimples/database/dos/__init__.py +0 -0
  88. {dimples-1.3.4 → dimples-1.3.5}/dimples/database/dos/base.py +0 -0
  89. {dimples-1.3.4 → dimples-1.3.5}/dimples/database/dos/group.py +0 -0
  90. {dimples-1.3.4 → dimples-1.3.5}/dimples/database/dos/group_keys.py +0 -0
  91. {dimples-1.3.4 → dimples-1.3.5}/dimples/database/dos/login.py +0 -0
  92. {dimples-1.3.4 → dimples-1.3.5}/dimples/database/dos/meta.py +0 -0
  93. {dimples-1.3.4 → dimples-1.3.5}/dimples/database/dos/private.py +0 -0
  94. {dimples-1.3.4 → dimples-1.3.5}/dimples/database/dos/station.py +0 -0
  95. {dimples-1.3.4 → dimples-1.3.5}/dimples/database/dos/user.py +0 -0
  96. {dimples-1.3.4 → dimples-1.3.5}/dimples/database/message.py +0 -0
  97. {dimples-1.3.4 → dimples-1.3.5}/dimples/database/redis/__init__.py +0 -0
  98. {dimples-1.3.4 → dimples-1.3.5}/dimples/database/redis/base.py +0 -0
  99. {dimples-1.3.4 → dimples-1.3.5}/dimples/database/redis/group.py +0 -0
  100. {dimples-1.3.4 → dimples-1.3.5}/dimples/database/redis/grp_history.py +0 -0
  101. {dimples-1.3.4 → dimples-1.3.5}/dimples/database/redis/grp_keys.py +0 -0
  102. {dimples-1.3.4 → dimples-1.3.5}/dimples/database/redis/login.py +0 -0
  103. {dimples-1.3.4 → dimples-1.3.5}/dimples/database/redis/message.py +0 -0
  104. {dimples-1.3.4 → dimples-1.3.5}/dimples/database/redis/meta.py +0 -0
  105. {dimples-1.3.4 → dimples-1.3.5}/dimples/database/redis/station.py +0 -0
  106. {dimples-1.3.4 → dimples-1.3.5}/dimples/database/redis/user.py +0 -0
  107. {dimples-1.3.4 → dimples-1.3.5}/dimples/database/session.py +0 -0
  108. {dimples-1.3.4 → dimples-1.3.5}/dimples/database/t_base.py +0 -0
  109. {dimples-1.3.4 → dimples-1.3.5}/dimples/database/t_cipherkey.py +0 -0
  110. {dimples-1.3.4 → dimples-1.3.5}/dimples/database/t_group.py +0 -0
  111. {dimples-1.3.4 → dimples-1.3.5}/dimples/database/t_group_keys.py +0 -0
  112. {dimples-1.3.4 → dimples-1.3.5}/dimples/database/t_login.py +0 -0
  113. {dimples-1.3.4 → dimples-1.3.5}/dimples/database/t_message.py +0 -0
  114. {dimples-1.3.4 → dimples-1.3.5}/dimples/database/t_meta.py +0 -0
  115. {dimples-1.3.4 → dimples-1.3.5}/dimples/database/t_private.py +0 -0
  116. {dimples-1.3.4 → dimples-1.3.5}/dimples/database/t_station.py +0 -0
  117. {dimples-1.3.4 → dimples-1.3.5}/dimples/database/t_user.py +0 -0
  118. {dimples-1.3.4 → dimples-1.3.5}/dimples/edge/__init__.py +0 -0
  119. {dimples-1.3.4 → dimples-1.3.5}/dimples/edge/messenger.py +0 -0
  120. {dimples-1.3.4 → dimples-1.3.5}/dimples/edge/octopus.py +0 -0
  121. {dimples-1.3.4 → dimples-1.3.5}/dimples/edge/shared.py +0 -0
  122. {dimples-1.3.4 → dimples-1.3.5}/dimples/emitter.py +0 -0
  123. {dimples-1.3.4 → dimples-1.3.5}/dimples/group/__init__.py +0 -0
  124. {dimples-1.3.4 → dimples-1.3.5}/dimples/group/admin.py +0 -0
  125. {dimples-1.3.4 → dimples-1.3.5}/dimples/group/builder.py +0 -0
  126. {dimples-1.3.4 → dimples-1.3.5}/dimples/group/delegate.py +0 -0
  127. {dimples-1.3.4 → dimples-1.3.5}/dimples/group/emitter.py +0 -0
  128. {dimples-1.3.4 → dimples-1.3.5}/dimples/group/helper.py +0 -0
  129. {dimples-1.3.4 → dimples-1.3.5}/dimples/group/manager.py +0 -0
  130. {dimples-1.3.4 → dimples-1.3.5}/dimples/group/packer.py +0 -0
  131. {dimples-1.3.4 → dimples-1.3.5}/dimples/group/shared.py +0 -0
  132. {dimples-1.3.4 → dimples-1.3.5}/dimples/register/__init__.py +0 -0
  133. {dimples-1.3.4 → dimples-1.3.5}/dimples/register/base.py +0 -0
  134. {dimples-1.3.4 → dimples-1.3.5}/dimples/register/ext.py +0 -0
  135. {dimples-1.3.4 → dimples-1.3.5}/dimples/register/run.py +0 -0
  136. {dimples-1.3.4 → dimples-1.3.5}/dimples/register/shared.py +0 -0
  137. {dimples-1.3.4 → dimples-1.3.5}/dimples/server/__init__.py +0 -0
  138. {dimples-1.3.4 → dimples-1.3.5}/dimples/server/checker.py +0 -0
  139. {dimples-1.3.4 → dimples-1.3.5}/dimples/server/cpu/__init__.py +0 -0
  140. {dimples-1.3.4 → dimples-1.3.5}/dimples/server/cpu/ans.py +0 -0
  141. {dimples-1.3.4 → dimples-1.3.5}/dimples/server/cpu/creator.py +0 -0
  142. {dimples-1.3.4 → dimples-1.3.5}/dimples/server/cpu/document.py +0 -0
  143. {dimples-1.3.4 → dimples-1.3.5}/dimples/server/cpu/handshake.py +0 -0
  144. {dimples-1.3.4 → dimples-1.3.5}/dimples/server/cpu/login.py +0 -0
  145. {dimples-1.3.4 → dimples-1.3.5}/dimples/server/cpu/report.py +0 -0
  146. {dimples-1.3.4 → dimples-1.3.5}/dimples/server/deliver.py +0 -0
  147. {dimples-1.3.4 → dimples-1.3.5}/dimples/server/dis_roamer.py +0 -0
  148. {dimples-1.3.4 → dimples-1.3.5}/dimples/server/dispatcher.py +0 -0
  149. {dimples-1.3.4 → dimples-1.3.5}/dimples/server/facebook.py +0 -0
  150. {dimples-1.3.4 → dimples-1.3.5}/dimples/server/messenger.py +0 -0
  151. {dimples-1.3.4 → dimples-1.3.5}/dimples/server/packer.py +0 -0
  152. {dimples-1.3.4 → dimples-1.3.5}/dimples/server/processor.py +0 -0
  153. {dimples-1.3.4 → dimples-1.3.5}/dimples/server/push.py +0 -0
  154. {dimples-1.3.4 → dimples-1.3.5}/dimples/server/session.py +0 -0
  155. {dimples-1.3.4 → dimples-1.3.5}/dimples/server/session_center.py +0 -0
  156. {dimples-1.3.4 → dimples-1.3.5}/dimples/server/trace.py +0 -0
  157. {dimples-1.3.4 → dimples-1.3.5}/dimples/station/__init__.py +0 -0
  158. {dimples-1.3.4 → dimples-1.3.5}/dimples/station/handler.py +0 -0
  159. {dimples-1.3.4 → dimples-1.3.5}/dimples/station/shared.py +0 -0
  160. {dimples-1.3.4 → dimples-1.3.5}/dimples/station/start.py +0 -0
  161. {dimples-1.3.4 → dimples-1.3.5}/dimples/utils/__init__.py +0 -0
  162. {dimples-1.3.4 → dimples-1.3.5}/dimples/utils/cache.py +0 -0
  163. {dimples-1.3.4 → dimples-1.3.5}/dimples/utils/checker.py +0 -0
  164. {dimples-1.3.4 → dimples-1.3.5}/dimples/utils/config.py +0 -0
  165. {dimples-1.3.4 → dimples-1.3.5}/dimples/utils/log.py +0 -0
  166. {dimples-1.3.4 → dimples-1.3.5}/dimples.egg-info/SOURCES.txt +0 -0
  167. {dimples-1.3.4 → dimples-1.3.5}/dimples.egg-info/dependency_links.txt +0 -0
  168. {dimples-1.3.4 → dimples-1.3.5}/dimples.egg-info/entry_points.txt +0 -0
  169. {dimples-1.3.4 → dimples-1.3.5}/dimples.egg-info/top_level.txt +0 -0
  170. {dimples-1.3.4 → dimples-1.3.5}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dimples
3
- Version: 1.3.4
3
+ Version: 1.3.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
@@ -71,7 +71,7 @@ class ClientChecker(EntityChecker, Logging):
71
71
  return False
72
72
  elif not self.is_meta_query_expired(identifier=identifier):
73
73
  # query not expired yet
74
- self.info(msg='meta query not expired yet: %s' % identifier)
74
+ self.debug(msg='meta query not expired yet: %s' % identifier)
75
75
  return False
76
76
  self.info(msg='querying meta for: %s' % identifier)
77
77
  content = MetaCommand.query(identifier=identifier)
@@ -86,7 +86,7 @@ class ClientChecker(EntityChecker, Logging):
86
86
  return False
87
87
  elif not self.is_document_query_expired(identifier=identifier):
88
88
  # query not expired yet
89
- self.info(msg='document query not expired yet: %s' % identifier)
89
+ self.debug(msg='document query not expired yet: %s' % identifier)
90
90
  return False
91
91
  last_time = self.get_last_document_time(identifier=identifier, documents=documents)
92
92
  self.info(msg='querying document for: %s, last time: %s' % (identifier, last_time))
@@ -103,7 +103,7 @@ class ClientChecker(EntityChecker, Logging):
103
103
  return False
104
104
  elif not self.is_members_query_expired(identifier=group):
105
105
  # query not expired yet
106
- self.info('members query not expired yet: %s' % group)
106
+ self.debug('members query not expired yet: %s' % group)
107
107
  return False
108
108
  user = await facebook.current_user
109
109
  if user is None:
@@ -240,14 +240,25 @@ class Terminal(Runner, DeviceMixin, Logging, StateDelegate, ABC):
240
240
  async def enter_state(self, state: SessionState, ctx: StateMachine, now: float):
241
241
  # called before state changed
242
242
  session = self.session
243
- station = session.station
244
- self.info(msg='enter state: %s, %s => %s' % (state, session.identifier, station.identifier))
243
+ if session is None:
244
+ sess_id = None
245
+ srv_id = None
246
+ else:
247
+ sess_id = session.identifier
248
+ station = session.station
249
+ if station is None:
250
+ srv_id = None
251
+ else:
252
+ srv_id = station.identifier
253
+ self.info(msg='enter state: %s, %s => %s' % (state, sess_id, srv_id))
245
254
 
246
255
  # Override
247
256
  async def exit_state(self, state: SessionState, ctx: StateMachine, now: float):
248
257
  # called after state changed
249
258
  current = ctx.current_state
250
- self.info(msg='server state changed: %s -> %s, %s' % (state, current, self.session.station))
259
+ session = self.session
260
+ remote = None if session is None else session.remote_address
261
+ self.info(msg='server state changed: %s -> %s, %s' % (state, current, remote))
251
262
  index = current.index if isinstance(current, SessionState) else -1
252
263
  if index == -1 or index == StateOrder.ERROR:
253
264
  self.__last_time = 0
@@ -259,8 +270,6 @@ class Terminal(Runner, DeviceMixin, Logging, StateDelegate, ABC):
259
270
  self.warning(msg='current user not set')
260
271
  return
261
272
  self.info(msg='connect for user: %s' % user)
262
- session = self.session
263
- remote = None if session is None else session.remote_address
264
273
  if remote is None:
265
274
  self.warning(msg='failed to get remote address: %s' % session)
266
275
  return
@@ -130,7 +130,7 @@ def reset_send_buffer_size(conn: Connection = None, sock: socket.socket = None)
130
130
  return False
131
131
  channel = conn.channel
132
132
  if not isinstance(channel, BaseChannel):
133
- print('[SOCKET] channel error: %s, %s' % (channel, conn))
133
+ print('[SOCKET] channel error: %s, %s' % (channel, conn.remote_address))
134
134
  return False
135
135
  sock = channel.sock
136
136
  if sock is None:
@@ -26,15 +26,14 @@
26
26
  from typing import Optional, List
27
27
 
28
28
  from dimsdk import TransportableData
29
- from dimsdk import ID, Document, DocumentUtils
29
+ from dimsdk import ID, Document
30
30
 
31
31
  from ...utils import template_replace
32
- from ...common import DocumentDBI
33
32
 
34
33
  from .base import Storage
35
34
 
36
35
 
37
- class DocumentStorage(Storage, DocumentDBI):
36
+ class DocumentStorage(Storage):
38
37
  """
39
38
  Document for Entities (User/Group)
40
39
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -72,40 +71,11 @@ class DocumentStorage(Storage, DocumentDBI):
72
71
  documents = []
73
72
  for info in array:
74
73
  doc = parse_document(dictionary=info, identifier=identifier)
75
- assert doc is not None, 'document error: %s, %s' % (identifier, info)
76
- documents.append(doc)
74
+ if doc is not None:
75
+ documents.append(doc)
77
76
  self.info(msg='Loaded %d documents from: %s' % (len(documents), path))
78
77
  return documents
79
78
 
80
- #
81
- # Document DBI
82
- #
83
-
84
- # Override
85
- async def save_document(self, document: Document) -> bool:
86
- """ save document into file """
87
- identifier = document.identifier
88
- doc_type = document.type
89
- # check old documents
90
- all_documents = await self.get_documents(identifier=identifier)
91
- old = DocumentUtils.last_document(all_documents, doc_type)
92
- if old is None and doc_type == Document.VISA:
93
- old = DocumentUtils.last_document(all_documents, 'profile')
94
- if old is not None:
95
- if DocumentUtils.is_expired(document, old):
96
- self.warning(msg='drop expired document: %s' % identifier)
97
- return False
98
- all_documents.remove(old)
99
- # append it
100
- all_documents.append(document)
101
- return await self.save_documents(documents=all_documents, identifier=identifier)
102
-
103
- # Override
104
- async def get_documents(self, identifier: ID) -> List[Document]:
105
- """ load documents from file """
106
- docs = await self.load_documents(identifier=identifier)
107
- return [] if docs is None else docs
108
-
109
79
 
110
80
  def parse_document(dictionary: dict, identifier: ID = None, doc_type: str = '*') -> Optional[Document]:
111
81
  # check document ID
@@ -23,20 +23,18 @@
23
23
  # SOFTWARE.
24
24
  # ==============================================================================
25
25
 
26
- from typing import Optional, Tuple, List
26
+ from typing import Tuple, List
27
27
 
28
28
  from dimsdk import ID
29
29
  from dimsdk import ReliableMessage
30
30
  from dimsdk import Command, GroupCommand
31
- from dimsdk import ResetCommand, ResignCommand
32
31
 
33
32
  from ...utils import template_replace
34
- from ...common import GroupHistoryDBI
35
33
 
36
34
  from .base import Storage
37
35
 
38
36
 
39
- class GroupHistoryStorage(Storage, GroupHistoryDBI):
37
+ class GroupHistoryStorage(Storage):
40
38
  """
41
39
  Group History Command Storage
42
40
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -89,69 +87,3 @@ class GroupHistoryStorage(Storage, GroupHistoryDBI):
89
87
  path = self.__history_path(group=group)
90
88
  self.info(msg='Saving %d group history(ies) into: %s' % (len(histories), path))
91
89
  return await self.write_json(container=array, path=path)
92
-
93
- #
94
- # Group History DBI
95
- #
96
-
97
- # Override
98
- async def save_group_history(self, group: ID, content: GroupCommand, message: ReliableMessage) -> bool:
99
- histories = await self.load_group_histories(group=group)
100
- item = (content, message)
101
- histories.append(item)
102
- return await self.save_group_histories(group=group, histories=histories)
103
-
104
- # Override
105
- async def get_group_histories(self, group: ID) -> List[Tuple[GroupCommand, ReliableMessage]]:
106
- return await self.load_group_histories(group=group)
107
-
108
- # Override
109
- async def get_reset_command_message(self, group: ID) -> Tuple[Optional[ResetCommand], Optional[ReliableMessage]]:
110
- histories = await self.load_group_histories(group=group)
111
- pos = len(histories)
112
- while pos > 0:
113
- pos -= 1
114
- his = histories[pos]
115
- cmd = his[0]
116
- msg = his[1]
117
- if isinstance(cmd, ResetCommand):
118
- return cmd, msg
119
- return None, None
120
-
121
- # Override
122
- async def clear_group_member_histories(self, group: ID) -> bool:
123
- histories = await self.load_group_histories(group=group)
124
- if len(histories) == 0:
125
- # history empty
126
- return True
127
- array = []
128
- removed = 0
129
- for his in histories:
130
- if isinstance(his[0], ResignCommand):
131
- # keep 'resign' command messages
132
- array.append(his)
133
- else:
134
- # remove other command messages
135
- removed += 1
136
- # if nothing changed, return True
137
- # else, save new histories
138
- return removed == 0 or await self.save_group_histories(group=group, histories=array)
139
-
140
- # Override
141
- async def clear_group_admin_histories(self, group: ID) -> bool:
142
- histories = await self.load_group_histories(group=group)
143
- if len(histories) == 0:
144
- # history empty
145
- return True
146
- array = []
147
- removed = 0
148
- for his in histories:
149
- if isinstance(his[0], ResignCommand):
150
- # remove 'resign' command messages
151
- removed += 1
152
- else:
153
- # keep other command messages
154
- array.append(his)
155
- # if nothing changed, return True
156
- # else, save new histories
157
- return removed == 0 or await self.save_group_histories(group=group, histories=array)
@@ -56,7 +56,17 @@ class DocumentCache(Cache):
56
56
  def __cache_name(self, identifier: ID) -> str:
57
57
  return '%s.%s.%s' % (self.db_name, self.tbl_name, identifier)
58
58
 
59
- async def get_documents(self, identifier: ID) -> Optional[List[Document]]:
59
+ async def save_documents(self, documents: List[Document], identifier: ID) -> bool:
60
+ array = []
61
+ for doc in documents:
62
+ assert doc.identifier == identifier, 'document ID not matched: %s, %s' % (identifier, doc)
63
+ array.append(doc.dictionary)
64
+ js = json_encode(obj=array)
65
+ value = utf8_encode(string=js)
66
+ name = self.__cache_name(identifier=identifier)
67
+ return await self.set(name=name, value=value, expires=self.EXPIRES)
68
+
69
+ async def load_documents(self, identifier: ID) -> Optional[List[Document]]:
60
70
  name = self.__cache_name(identifier=identifier)
61
71
  value = await self.get(name=name)
62
72
  if value is None:
@@ -79,13 +89,3 @@ class DocumentCache(Cache):
79
89
  else:
80
90
  assert info is None, 'document error: %s' % value
81
91
  return array
82
-
83
- async def save_documents(self, documents: List[Document], identifier: ID) -> bool:
84
- array = []
85
- for doc in documents:
86
- assert doc.identifier == identifier, 'document ID not matched: %s, %s' % (identifier, doc)
87
- array.append(doc.dictionary)
88
- js = json_encode(obj=array)
89
- value = utf8_encode(string=js)
90
- name = self.__cache_name(identifier=identifier)
91
- return await self.set(name=name, value=value, expires=self.EXPIRES)
@@ -63,7 +63,7 @@ class DocTask(DbTask):
63
63
  async def _load_redis_cache(self) -> Optional[List[Document]]:
64
64
  # 1. the redis server will return None when cache not found
65
65
  # 2. when redis server return an empty array, no need to check local storage again
66
- return await self._redis.get_documents(identifier=self._identifier)
66
+ return await self._redis.load_documents(identifier=self._identifier)
67
67
 
68
68
  # Override
69
69
  async def _save_redis_cache(self, value: List[Document]) -> bool:
@@ -73,7 +73,7 @@ class DocTask(DbTask):
73
73
  async def _load_local_storage(self) -> Optional[List[Document]]:
74
74
  # 1. the local storage will return an empty array, when no document for this id
75
75
  # 2. return empty array as a placeholder for the memory cache
76
- return await self._dos.get_documents(identifier=self._identifier)
76
+ return await self._dos.load_documents(identifier=self._identifier)
77
77
 
78
78
  # Override
79
79
  async def _save_local_storage(self, value: List[Document]) -> bool:
@@ -75,7 +75,7 @@ class HisTask(DbTask):
75
75
  async def _load_local_storage(self) -> Optional[List[Tuple[GroupCommand, ReliableMessage]]]:
76
76
  # 1. the local storage will return an empty array, when no history in this group
77
77
  # 2. return empty array as a placeholder for the memory cache
78
- return await self._dos.get_group_histories(group=self._group)
78
+ return await self._dos.load_group_histories(group=self._group)
79
79
 
80
80
  # Override
81
81
  async def _save_local_storage(self, value: List[Tuple[GroupCommand, ReliableMessage]]) -> bool:
@@ -101,14 +101,14 @@ class GroupHistoryTable(GroupHistoryDBI):
101
101
  cache_pool=self._cache, redis=self._redis, storage=self._dos,
102
102
  mutex_lock=self._lock)
103
103
 
104
- async def load_group_histories(self, group: ID) -> List[Tuple[GroupCommand, ReliableMessage]]:
104
+ async def _load_group_histories(self, group: ID) -> List[Tuple[GroupCommand, ReliableMessage]]:
105
105
  task = self._new_task(group=group)
106
106
  histories = await task.load()
107
107
  if histories is None:
108
108
  histories = []
109
109
  return histories
110
110
 
111
- async def save_group_histories(self, group: ID, histories: List[Tuple[GroupCommand, ReliableMessage]]) -> bool:
111
+ async def _save_group_histories(self, group: ID, histories: List[Tuple[GroupCommand, ReliableMessage]]) -> bool:
112
112
  task = self._new_task(group=group)
113
113
  return await task.save(value=histories)
114
114
 
@@ -119,17 +119,17 @@ class GroupHistoryTable(GroupHistoryDBI):
119
119
  # Override
120
120
  async def save_group_history(self, group: ID, content: GroupCommand, message: ReliableMessage) -> bool:
121
121
  item = (content, message)
122
- histories = await self.load_group_histories(group=group)
122
+ histories = await self._load_group_histories(group=group)
123
123
  histories.append(item)
124
- return await self.save_group_histories(group=group, histories=histories)
124
+ return await self._save_group_histories(group=group, histories=histories)
125
125
 
126
126
  # Override
127
127
  async def get_group_histories(self, group: ID) -> List[Tuple[GroupCommand, ReliableMessage]]:
128
- return await self.load_group_histories(group=group)
128
+ return await self._load_group_histories(group=group)
129
129
 
130
130
  # Override
131
131
  async def get_reset_command_message(self, group: ID) -> Tuple[Optional[ResetCommand], Optional[ReliableMessage]]:
132
- histories = await self.load_group_histories(group=group)
132
+ histories = await self._load_group_histories(group=group)
133
133
  pos = len(histories)
134
134
  while pos > 0:
135
135
  pos -= 1
@@ -142,7 +142,7 @@ class GroupHistoryTable(GroupHistoryDBI):
142
142
 
143
143
  # Override
144
144
  async def clear_group_member_histories(self, group: ID) -> bool:
145
- histories = await self.load_group_histories(group=group)
145
+ histories = await self._load_group_histories(group=group)
146
146
  if len(histories) == 0:
147
147
  # history empty
148
148
  return True
@@ -157,11 +157,11 @@ class GroupHistoryTable(GroupHistoryDBI):
157
157
  removed += 1
158
158
  # if nothing changed, return True
159
159
  # else, save new histories
160
- return removed == 0 or await self.save_group_histories(group=group, histories=array)
160
+ return removed == 0 or await self._save_group_histories(group=group, histories=array)
161
161
 
162
162
  # Override
163
163
  async def clear_group_admin_histories(self, group: ID) -> bool:
164
- histories = await self.load_group_histories(group=group)
164
+ histories = await self._load_group_histories(group=group)
165
165
  if len(histories) == 0:
166
166
  # history empty
167
167
  return True
@@ -176,4 +176,4 @@ class GroupHistoryTable(GroupHistoryDBI):
176
176
  array.append(his)
177
177
  # if nothing changed, return True
178
178
  # else, save new histories
179
- return removed == 0 or await self.save_group_histories(group=group, histories=array)
179
+ return removed == 0 or await self._save_group_histories(group=group, histories=array)
@@ -40,6 +40,7 @@ sys.path.insert(0, path)
40
40
  from dimples.utils import Log, Runner
41
41
 
42
42
  from dimples.client import ClientFacebook
43
+ from dimples.client import ClientMessenger
43
44
  from dimples.client import ClientSession
44
45
  from dimples.client import Terminal
45
46
 
@@ -52,7 +53,7 @@ from dimples.edge.messenger import InnerMessenger, OuterMessenger
52
53
  class InnerClient(Terminal):
53
54
 
54
55
  # Override
55
- def _create_messenger(self, facebook: ClientFacebook, session: ClientSession):
56
+ def _create_messenger(self, facebook: ClientFacebook, session: ClientSession) -> ClientMessenger:
56
57
  shared = GlobalVariable()
57
58
  messenger = InnerMessenger(session=session, facebook=facebook, database=shared.mdb)
58
59
  messenger.terminal = self # Weak Reference
@@ -63,7 +64,7 @@ class InnerClient(Terminal):
63
64
  class OuterClient(Terminal):
64
65
 
65
66
  # Override
66
- def _create_messenger(self, facebook: ClientFacebook, session: ClientSession):
67
+ def _create_messenger(self, facebook: ClientFacebook, session: ClientSession) -> ClientMessenger:
67
68
  shared = GlobalVariable()
68
69
  messenger = OuterMessenger(session=session, facebook=facebook, database=shared.mdb)
69
70
  messenger.terminal = self
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dimples
3
- Version: 1.3.4
3
+ Version: 1.3.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
@@ -3,4 +3,4 @@ dimsdk>=2.2.2
3
3
  startrek>=2.2.2
4
4
  tcp>=2.2.2
5
5
  udp>=2.2.2
6
- aiou>=0.3.0
6
+ aiou>=1.0.0
@@ -14,7 +14,7 @@ import io
14
14
 
15
15
  from setuptools import setup, find_packages
16
16
 
17
- __version__ = '1.3.4'
17
+ __version__ = '1.3.5'
18
18
  __author__ = 'Albert Moky'
19
19
  __contact__ = 'albert.moky@gmail.com'
20
20
 
@@ -62,6 +62,6 @@ setup(
62
62
  'tcp>=2.2.2',
63
63
  'udp>=2.2.2',
64
64
 
65
- 'aiou>=0.3.0',
65
+ 'aiou>=1.0.0',
66
66
  ]
67
67
  )
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