dimples 1.0.2__tar.gz → 1.1.0__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-1.0.2 → dimples-1.1.0}/PKG-INFO +1 -1
  2. {dimples-1.0.2 → dimples-1.1.0}/dimples/client/network/state.py +1 -1
  3. {dimples-1.0.2 → dimples-1.1.0}/dimples/client/terminal.py +1 -1
  4. {dimples-1.0.2 → dimples-1.1.0}/dimples/edge/octopus.py +1 -6
  5. {dimples-1.0.2 → dimples-1.1.0}/dimples/edge/shared.py +6 -5
  6. {dimples-1.0.2 → dimples-1.1.0}/dimples/edge/start.py +1 -0
  7. {dimples-1.0.2 → dimples-1.1.0}/dimples/server/dispatcher.py +2 -1
  8. {dimples-1.0.2 → dimples-1.1.0}/dimples/server/push.py +2 -1
  9. {dimples-1.0.2 → dimples-1.1.0}/dimples/server/session.py +6 -2
  10. {dimples-1.0.2 → dimples-1.1.0}/dimples/station/shared.py +6 -5
  11. {dimples-1.0.2 → dimples-1.1.0}/dimples/utils/__init__.py +35 -0
  12. {dimples-1.0.2 → dimples-1.1.0}/dimples.egg-info/PKG-INFO +1 -1
  13. {dimples-1.0.2 → dimples-1.1.0}/setup.py +1 -1
  14. {dimples-1.0.2 → dimples-1.1.0}/README.md +0 -0
  15. {dimples-1.0.2 → dimples-1.1.0}/dimples/__init__.py +0 -0
  16. {dimples-1.0.2 → dimples-1.1.0}/dimples/client/__init__.py +0 -0
  17. {dimples-1.0.2 → dimples-1.1.0}/dimples/client/archivist.py +0 -0
  18. {dimples-1.0.2 → dimples-1.1.0}/dimples/client/checkpoint.py +0 -0
  19. {dimples-1.0.2 → dimples-1.1.0}/dimples/client/cpu/__init__.py +0 -0
  20. {dimples-1.0.2 → dimples-1.1.0}/dimples/client/cpu/commands.py +0 -0
  21. {dimples-1.0.2 → dimples-1.1.0}/dimples/client/cpu/creator.py +0 -0
  22. {dimples-1.0.2 → dimples-1.1.0}/dimples/client/cpu/group.py +0 -0
  23. {dimples-1.0.2 → dimples-1.1.0}/dimples/client/cpu/grp_expel.py +0 -0
  24. {dimples-1.0.2 → dimples-1.1.0}/dimples/client/cpu/grp_invite.py +0 -0
  25. {dimples-1.0.2 → dimples-1.1.0}/dimples/client/cpu/grp_join.py +0 -0
  26. {dimples-1.0.2 → dimples-1.1.0}/dimples/client/cpu/grp_query.py +0 -0
  27. {dimples-1.0.2 → dimples-1.1.0}/dimples/client/cpu/grp_quit.py +0 -0
  28. {dimples-1.0.2 → dimples-1.1.0}/dimples/client/cpu/grp_reset.py +0 -0
  29. {dimples-1.0.2 → dimples-1.1.0}/dimples/client/cpu/grp_resign.py +0 -0
  30. {dimples-1.0.2 → dimples-1.1.0}/dimples/client/cpu/handshake.py +0 -0
  31. {dimples-1.0.2 → dimples-1.1.0}/dimples/client/facebook.py +0 -0
  32. {dimples-1.0.2 → dimples-1.1.0}/dimples/client/messenger.py +0 -0
  33. {dimples-1.0.2 → dimples-1.1.0}/dimples/client/network/__init__.py +0 -0
  34. {dimples-1.0.2 → dimples-1.1.0}/dimples/client/network/session.py +0 -0
  35. {dimples-1.0.2 → dimples-1.1.0}/dimples/client/network/transition.py +0 -0
  36. {dimples-1.0.2 → dimples-1.1.0}/dimples/client/packer.py +0 -0
  37. {dimples-1.0.2 → dimples-1.1.0}/dimples/client/processor.py +0 -0
  38. {dimples-1.0.2 → dimples-1.1.0}/dimples/common/__init__.py +0 -0
  39. {dimples-1.0.2 → dimples-1.1.0}/dimples/common/anonymous.py +0 -0
  40. {dimples-1.0.2 → dimples-1.1.0}/dimples/common/ans.py +0 -0
  41. {dimples-1.0.2 → dimples-1.1.0}/dimples/common/archivist.py +0 -0
  42. {dimples-1.0.2 → dimples-1.1.0}/dimples/common/compat/__init__.py +0 -0
  43. {dimples-1.0.2 → dimples-1.1.0}/dimples/common/compat/btc.py +0 -0
  44. {dimples-1.0.2 → dimples-1.1.0}/dimples/common/compat/compatible.py +0 -0
  45. {dimples-1.0.2 → dimples-1.1.0}/dimples/common/compat/entity.py +0 -0
  46. {dimples-1.0.2 → dimples-1.1.0}/dimples/common/compat/meta.py +0 -0
  47. {dimples-1.0.2 → dimples-1.1.0}/dimples/common/compat/network.py +0 -0
  48. {dimples-1.0.2 → dimples-1.1.0}/dimples/common/dbi/__init__.py +0 -0
  49. {dimples-1.0.2 → dimples-1.1.0}/dimples/common/dbi/account.py +0 -0
  50. {dimples-1.0.2 → dimples-1.1.0}/dimples/common/dbi/message.py +0 -0
  51. {dimples-1.0.2 → dimples-1.1.0}/dimples/common/dbi/session.py +0 -0
  52. {dimples-1.0.2 → dimples-1.1.0}/dimples/common/facebook.py +0 -0
  53. {dimples-1.0.2 → dimples-1.1.0}/dimples/common/messenger.py +0 -0
  54. {dimples-1.0.2 → dimples-1.1.0}/dimples/common/packer.py +0 -0
  55. {dimples-1.0.2 → dimples-1.1.0}/dimples/common/processer.py +0 -0
  56. {dimples-1.0.2 → dimples-1.1.0}/dimples/common/protocol/__init__.py +0 -0
  57. {dimples-1.0.2 → dimples-1.1.0}/dimples/common/protocol/ans.py +0 -0
  58. {dimples-1.0.2 → dimples-1.1.0}/dimples/common/protocol/block.py +0 -0
  59. {dimples-1.0.2 → dimples-1.1.0}/dimples/common/protocol/handshake.py +0 -0
  60. {dimples-1.0.2 → dimples-1.1.0}/dimples/common/protocol/login.py +0 -0
  61. {dimples-1.0.2 → dimples-1.1.0}/dimples/common/protocol/mute.py +0 -0
  62. {dimples-1.0.2 → dimples-1.1.0}/dimples/common/protocol/report.py +0 -0
  63. {dimples-1.0.2 → dimples-1.1.0}/dimples/common/register.py +0 -0
  64. {dimples-1.0.2 → dimples-1.1.0}/dimples/common/session.py +0 -0
  65. {dimples-1.0.2 → dimples-1.1.0}/dimples/conn/__init__.py +0 -0
  66. {dimples-1.0.2 → dimples-1.1.0}/dimples/conn/flexible.py +0 -0
  67. {dimples-1.0.2 → dimples-1.1.0}/dimples/conn/gate.py +0 -0
  68. {dimples-1.0.2 → dimples-1.1.0}/dimples/conn/gatekeeper.py +0 -0
  69. {dimples-1.0.2 → dimples-1.1.0}/dimples/conn/mars.py +0 -0
  70. {dimples-1.0.2 → dimples-1.1.0}/dimples/conn/mtp.py +0 -0
  71. {dimples-1.0.2 → dimples-1.1.0}/dimples/conn/protocol/__init__.py +0 -0
  72. {dimples-1.0.2 → dimples-1.1.0}/dimples/conn/protocol/mars.py +0 -0
  73. {dimples-1.0.2 → dimples-1.1.0}/dimples/conn/protocol/ws.py +0 -0
  74. {dimples-1.0.2 → dimples-1.1.0}/dimples/conn/queue.py +0 -0
  75. {dimples-1.0.2 → dimples-1.1.0}/dimples/conn/seeker.py +0 -0
  76. {dimples-1.0.2 → dimples-1.1.0}/dimples/conn/session.py +0 -0
  77. {dimples-1.0.2 → dimples-1.1.0}/dimples/conn/ws.py +0 -0
  78. {dimples-1.0.2 → dimples-1.1.0}/dimples/database/__init__.py +0 -0
  79. {dimples-1.0.2 → dimples-1.1.0}/dimples/database/account.py +0 -0
  80. {dimples-1.0.2 → dimples-1.1.0}/dimples/database/dos/__init__.py +0 -0
  81. {dimples-1.0.2 → dimples-1.1.0}/dimples/database/dos/base.py +0 -0
  82. {dimples-1.0.2 → dimples-1.1.0}/dimples/database/dos/document.py +0 -0
  83. {dimples-1.0.2 → dimples-1.1.0}/dimples/database/dos/group.py +0 -0
  84. {dimples-1.0.2 → dimples-1.1.0}/dimples/database/dos/group_history.py +0 -0
  85. {dimples-1.0.2 → dimples-1.1.0}/dimples/database/dos/group_keys.py +0 -0
  86. {dimples-1.0.2 → dimples-1.1.0}/dimples/database/dos/login.py +0 -0
  87. {dimples-1.0.2 → dimples-1.1.0}/dimples/database/dos/meta.py +0 -0
  88. {dimples-1.0.2 → dimples-1.1.0}/dimples/database/dos/private.py +0 -0
  89. {dimples-1.0.2 → dimples-1.1.0}/dimples/database/dos/station.py +0 -0
  90. {dimples-1.0.2 → dimples-1.1.0}/dimples/database/dos/user.py +0 -0
  91. {dimples-1.0.2 → dimples-1.1.0}/dimples/database/message.py +0 -0
  92. {dimples-1.0.2 → dimples-1.1.0}/dimples/database/session.py +0 -0
  93. {dimples-1.0.2 → dimples-1.1.0}/dimples/database/t_cipherkey.py +0 -0
  94. {dimples-1.0.2 → dimples-1.1.0}/dimples/database/t_document.py +0 -0
  95. {dimples-1.0.2 → dimples-1.1.0}/dimples/database/t_group.py +0 -0
  96. {dimples-1.0.2 → dimples-1.1.0}/dimples/database/t_group_history.py +0 -0
  97. {dimples-1.0.2 → dimples-1.1.0}/dimples/database/t_group_keys.py +0 -0
  98. {dimples-1.0.2 → dimples-1.1.0}/dimples/database/t_login.py +0 -0
  99. {dimples-1.0.2 → dimples-1.1.0}/dimples/database/t_message.py +0 -0
  100. {dimples-1.0.2 → dimples-1.1.0}/dimples/database/t_meta.py +0 -0
  101. {dimples-1.0.2 → dimples-1.1.0}/dimples/database/t_private.py +0 -0
  102. {dimples-1.0.2 → dimples-1.1.0}/dimples/database/t_station.py +0 -0
  103. {dimples-1.0.2 → dimples-1.1.0}/dimples/database/t_user.py +0 -0
  104. {dimples-1.0.2 → dimples-1.1.0}/dimples/edge/__init__.py +0 -0
  105. {dimples-1.0.2 → dimples-1.1.0}/dimples/group/__init__.py +0 -0
  106. {dimples-1.0.2 → dimples-1.1.0}/dimples/group/admin.py +0 -0
  107. {dimples-1.0.2 → dimples-1.1.0}/dimples/group/builder.py +0 -0
  108. {dimples-1.0.2 → dimples-1.1.0}/dimples/group/delegate.py +0 -0
  109. {dimples-1.0.2 → dimples-1.1.0}/dimples/group/emitter.py +0 -0
  110. {dimples-1.0.2 → dimples-1.1.0}/dimples/group/helper.py +0 -0
  111. {dimples-1.0.2 → dimples-1.1.0}/dimples/group/manager.py +0 -0
  112. {dimples-1.0.2 → dimples-1.1.0}/dimples/group/packer.py +0 -0
  113. {dimples-1.0.2 → dimples-1.1.0}/dimples/register/__init__.py +0 -0
  114. {dimples-1.0.2 → dimples-1.1.0}/dimples/register/base.py +0 -0
  115. {dimples-1.0.2 → dimples-1.1.0}/dimples/register/ext.py +0 -0
  116. {dimples-1.0.2 → dimples-1.1.0}/dimples/register/run.py +0 -0
  117. {dimples-1.0.2 → dimples-1.1.0}/dimples/register/shared.py +0 -0
  118. {dimples-1.0.2 → dimples-1.1.0}/dimples/server/__init__.py +0 -0
  119. {dimples-1.0.2 → dimples-1.1.0}/dimples/server/archivist.py +0 -0
  120. {dimples-1.0.2 → dimples-1.1.0}/dimples/server/cpu/__init__.py +0 -0
  121. {dimples-1.0.2 → dimples-1.1.0}/dimples/server/cpu/ans.py +0 -0
  122. {dimples-1.0.2 → dimples-1.1.0}/dimples/server/cpu/document.py +0 -0
  123. {dimples-1.0.2 → dimples-1.1.0}/dimples/server/cpu/handshake.py +0 -0
  124. {dimples-1.0.2 → dimples-1.1.0}/dimples/server/cpu/login.py +0 -0
  125. {dimples-1.0.2 → dimples-1.1.0}/dimples/server/cpu/report.py +0 -0
  126. {dimples-1.0.2 → dimples-1.1.0}/dimples/server/messenger.py +0 -0
  127. {dimples-1.0.2 → dimples-1.1.0}/dimples/server/packer.py +0 -0
  128. {dimples-1.0.2 → dimples-1.1.0}/dimples/server/processor.py +0 -0
  129. {dimples-1.0.2 → dimples-1.1.0}/dimples/server/session_center.py +0 -0
  130. {dimples-1.0.2 → dimples-1.1.0}/dimples/server/trace.py +0 -0
  131. {dimples-1.0.2 → dimples-1.1.0}/dimples/station/__init__.py +0 -0
  132. {dimples-1.0.2 → dimples-1.1.0}/dimples/station/handler.py +0 -0
  133. {dimples-1.0.2 → dimples-1.1.0}/dimples/station/start.py +0 -0
  134. {dimples-1.0.2 → dimples-1.1.0}/dimples/utils/cache.py +0 -0
  135. {dimples-1.0.2 → dimples-1.1.0}/dimples/utils/config.py +0 -0
  136. {dimples-1.0.2 → dimples-1.1.0}/dimples/utils/dos.py +0 -0
  137. {dimples-1.0.2 → dimples-1.1.0}/dimples/utils/log.py +0 -0
  138. {dimples-1.0.2 → dimples-1.1.0}/dimples.egg-info/SOURCES.txt +0 -0
  139. {dimples-1.0.2 → dimples-1.1.0}/dimples.egg-info/dependency_links.txt +0 -0
  140. {dimples-1.0.2 → dimples-1.1.0}/dimples.egg-info/entry_points.txt +0 -0
  141. {dimples-1.0.2 → dimples-1.1.0}/dimples.egg-info/requires.txt +0 -0
  142. {dimples-1.0.2 → dimples-1.1.0}/dimples.egg-info/top_level.txt +0 -0
  143. {dimples-1.0.2 → dimples-1.1.0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dimples
3
- Version: 1.0.2
3
+ Version: 1.1.0
4
4
  Summary: DIMP Library for Edges and Stations
5
5
  Home-page: https://github.com/dimchat/demo-py
6
6
  Author: Albert Moky
@@ -107,7 +107,7 @@ class StateMachine(AutoMachine, Context):
107
107
 
108
108
 
109
109
  class StateOrder(IntEnum):
110
- """ Connection State Order """
110
+ """ Session State Order """
111
111
  INIT = 0 # default
112
112
  CONNECTING = 1
113
113
  CONNECTED = 2
@@ -125,7 +125,7 @@ class Terminal(DaemonRunner, DeviceMixin, Logging, StateDelegate):
125
125
  async def exit_state(self, state: SessionState, ctx: StateMachine, now: float):
126
126
  # called after state changed
127
127
  current = ctx.current_state
128
- self.info(msg='server state changed: %s -> %s' % (state, current))
128
+ self.info(msg='server state changed: %s -> %s, %s' % (state, current, self.session.station))
129
129
  if isinstance(current, SessionState):
130
130
  index = current.index
131
131
  else:
@@ -380,15 +380,10 @@ def create_messenger(facebook: ClientFacebook, database: MessageDBI,
380
380
  def create_terminal(messenger: OctopusMessenger) -> Terminal:
381
381
  terminal = Terminal(messenger=messenger)
382
382
  messenger.terminal = terminal
383
- thr = threading.Thread(target=_start_terminal, args=(terminal,))
384
- thr.start()
383
+ Runner.thread_run(terminal)
385
384
  return terminal
386
385
 
387
386
 
388
- def _start_terminal(terminal: Terminal):
389
- Runner.sync_run(main=terminal.start())
390
-
391
-
392
387
  async def update_station(station: Station, database: SessionDBI):
393
388
  Log.info(msg='update station: %s' % station)
394
389
  # SP ID
@@ -110,13 +110,14 @@ async def create_database(config: Config) -> Tuple[AccountDBI, MessageDBI, Sessi
110
110
  adb.show_info()
111
111
  mdb.show_info()
112
112
  sdb.show_info()
113
- # default provider
113
+ # update neighbor stations (default provider)
114
114
  provider = ProviderInfo.GSP
115
- # add neighbors
116
115
  neighbors = config.neighbors
117
- for node in neighbors:
118
- print('adding neighbor node: %s' % node)
119
- await sdb.add_station(identifier=None, host=node.host, port=node.port, provider=provider)
116
+ if len(neighbors) > 0:
117
+ await sdb.remove_stations(provider=provider)
118
+ for node in neighbors:
119
+ print('adding neighbor node: %s' % node)
120
+ await sdb.add_station(identifier=None, host=node.host, port=node.port, provider=provider)
120
121
  return adb, mdb, sdb
121
122
 
122
123
 
@@ -77,6 +77,7 @@ async def main():
77
77
  await octopus.start()
78
78
  while octopus.running:
79
79
  await Runner.sleep(seconds=1.0)
80
+ Log.warning(msg='bot stopped: %s' % octopus)
80
81
 
81
82
 
82
83
  if __name__ == '__main__':
@@ -133,7 +133,8 @@ class Dispatcher(MessageDeliver, Logging):
133
133
  assert db is not None, 'dispatcher not initialized'
134
134
  runner = Roamer(database=db)
135
135
  self.__roamer = runner
136
- Runner.async_run(coroutine=runner.start())
136
+ # Runner.async_run(coroutine=runner.start())
137
+ Runner.thread_run(runner)
137
138
  return runner
138
139
 
139
140
  def add_roaming(self, user: ID, station: ID) -> bool:
@@ -124,7 +124,8 @@ class PushCenter(DaemonRunner, Logging):
124
124
  self.__queue = MessageQueue()
125
125
  self.__keeper = BadgeKeeper()
126
126
  self.__service: Optional[PushService] = None
127
- Runner.async_run(coroutine=self.start())
127
+ # Runner.async_run(coroutine=self.start())
128
+ Runner.thread_run(self)
128
129
 
129
130
  @property
130
131
  def service(self) -> Optional[PushService]:
@@ -95,7 +95,9 @@ class ServerSession(BaseSession):
95
95
  if super().set_identifier(identifier=identifier):
96
96
  session_change_id(session=self, new_id=identifier, old_id=old)
97
97
  # load cached message asynchronously
98
- Runner.async_run(coroutine=load_cached_messages(session=self))
98
+ crt = load_cached_messages(session=self)
99
+ # Runner.async_run(coroutine=crt)
100
+ Runner.thread_run(crt)
99
101
  return True
100
102
 
101
103
  # Override
@@ -103,7 +105,9 @@ class ServerSession(BaseSession):
103
105
  if super().set_active(active=active, when=when):
104
106
  session_change_active(session=self, active=active)
105
107
  # load cached message asynchronously
106
- Runner.async_run(coroutine=load_cached_messages(session=self))
108
+ crt = load_cached_messages(session=self)
109
+ # Runner.async_run(coroutine=crt)
110
+ Runner.thread_run(crt)
107
111
  return True
108
112
 
109
113
  # Override
@@ -117,13 +117,14 @@ async def create_database(config: Config) -> Tuple[AccountDBI, MessageDBI, Sessi
117
117
  adb.show_info()
118
118
  mdb.show_info()
119
119
  sdb.show_info()
120
- # default provider
120
+ # update neighbor stations (default provider)
121
121
  provider = ProviderInfo.GSP
122
- # add neighbors
123
122
  neighbors = config.neighbors
124
- for node in neighbors:
125
- print('adding neighbor node: %s' % node)
126
- await sdb.add_station(identifier=None, host=node.host, port=node.port, provider=provider)
123
+ if len(neighbors) > 0:
124
+ await sdb.remove_stations(provider=provider)
125
+ for node in neighbors:
126
+ print('adding neighbor node: %s' % node)
127
+ await sdb.add_station(identifier=None, host=node.host, port=node.port, provider=provider)
127
128
  return adb, mdb, sdb
128
129
 
129
130
 
@@ -33,6 +33,7 @@
33
33
  -- Albert Moky @ Jan. 23, 2019
34
34
  """
35
35
 
36
+ import threading
36
37
  from typing import Optional, List, Dict
37
38
 
38
39
  from dimsdk import md5, sha1, sha256, keccak256, ripemd160
@@ -142,3 +143,37 @@ __all__ = [
142
143
  'template_replace',
143
144
 
144
145
  ]
146
+
147
+
148
+ #
149
+ # Patch for Runner
150
+ #
151
+ async def _run_forever(runner: Runner):
152
+ await runner.start()
153
+ while True:
154
+ await Runner.sleep(seconds=2.0)
155
+ if not runner.running:
156
+ break
157
+ Log.warning(msg='runner stopped: %s' % runner)
158
+
159
+
160
+ def _start_runner(runner: Runner):
161
+ Runner.sync_run(main=_run_forever(runner=runner))
162
+
163
+
164
+ def _start_coroutine(coroutine):
165
+ Runner.sync_run(main=coroutine)
166
+
167
+
168
+ def _bg_run(target):
169
+ if isinstance(target, Runner):
170
+ fn = _start_runner
171
+ else:
172
+ fn = _start_coroutine
173
+ thr = threading.Thread(target=fn, args=(target,), daemon=True)
174
+ thr.start()
175
+ return thr
176
+
177
+
178
+ """ Run coroutine in background thread """
179
+ Runner.thread_run = _bg_run
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dimples
3
- Version: 1.0.2
3
+ Version: 1.1.0
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__ = '1.0.2'
17
+ __version__ = '1.1.0'
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