portal 3.2.2__tar.gz → 3.2.4__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 (35) hide show
  1. {portal-3.2.2/portal.egg-info → portal-3.2.4}/PKG-INFO +1 -1
  2. {portal-3.2.2 → portal-3.2.4}/portal/__init__.py +1 -1
  3. {portal-3.2.2 → portal-3.2.4}/portal/client_socket.py +13 -12
  4. {portal-3.2.2 → portal-3.2.4/portal.egg-info}/PKG-INFO +1 -1
  5. {portal-3.2.2 → portal-3.2.4}/tests/test_client.py +17 -0
  6. {portal-3.2.2 → portal-3.2.4}/LICENSE +0 -0
  7. {portal-3.2.2 → portal-3.2.4}/MANIFEST.in +0 -0
  8. {portal-3.2.2 → portal-3.2.4}/README.md +0 -0
  9. {portal-3.2.2 → portal-3.2.4}/portal/batching.py +0 -0
  10. {portal-3.2.2 → portal-3.2.4}/portal/buffers.py +0 -0
  11. {portal-3.2.2 → portal-3.2.4}/portal/client.py +0 -0
  12. {portal-3.2.2 → portal-3.2.4}/portal/contextlib.py +0 -0
  13. {portal-3.2.2 → portal-3.2.4}/portal/packlib.py +0 -0
  14. {portal-3.2.2 → portal-3.2.4}/portal/poollib.py +0 -0
  15. {portal-3.2.2 → portal-3.2.4}/portal/process.py +0 -0
  16. {portal-3.2.2 → portal-3.2.4}/portal/server.py +0 -0
  17. {portal-3.2.2 → portal-3.2.4}/portal/server_socket.py +0 -0
  18. {portal-3.2.2 → portal-3.2.4}/portal/sharray.py +0 -0
  19. {portal-3.2.2 → portal-3.2.4}/portal/thread.py +0 -0
  20. {portal-3.2.2 → portal-3.2.4}/portal/utils.py +0 -0
  21. {portal-3.2.2 → portal-3.2.4}/portal.egg-info/SOURCES.txt +0 -0
  22. {portal-3.2.2 → portal-3.2.4}/portal.egg-info/dependency_links.txt +0 -0
  23. {portal-3.2.2 → portal-3.2.4}/portal.egg-info/requires.txt +0 -0
  24. {portal-3.2.2 → portal-3.2.4}/portal.egg-info/top_level.txt +0 -0
  25. {portal-3.2.2 → portal-3.2.4}/pyproject.toml +0 -0
  26. {portal-3.2.2 → portal-3.2.4}/requirements.txt +0 -0
  27. {portal-3.2.2 → portal-3.2.4}/setup.cfg +0 -0
  28. {portal-3.2.2 → portal-3.2.4}/setup.py +0 -0
  29. {portal-3.2.2 → portal-3.2.4}/tests/test_batching.py +0 -0
  30. {portal-3.2.2 → portal-3.2.4}/tests/test_errfile.py +0 -0
  31. {portal-3.2.2 → portal-3.2.4}/tests/test_pack.py +0 -0
  32. {portal-3.2.2 → portal-3.2.4}/tests/test_process.py +0 -0
  33. {portal-3.2.2 → portal-3.2.4}/tests/test_server.py +0 -0
  34. {portal-3.2.2 → portal-3.2.4}/tests/test_socket.py +0 -0
  35. {portal-3.2.2 → portal-3.2.4}/tests/test_thread.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: portal
3
- Version: 3.2.2
3
+ Version: 3.2.4
4
4
  Summary: Fast and reliable distributed systems in Python
5
5
  Home-page: http://github.com/danijar/portal
6
6
  Author: Danijar Hafner
@@ -1,4 +1,4 @@
1
- __version__ = '3.2.2'
1
+ __version__ = '3.2.4'
2
2
 
3
3
  import multiprocessing as mp
4
4
  try:
@@ -34,11 +34,11 @@ class Options:
34
34
  class ClientSocket:
35
35
 
36
36
  def __init__(self, host, port=None, name='Client', start=True, **kwargs):
37
- assert (port or ':' in host) and '://' not in host, host
37
+ assert port or ':' in host, (host, port)
38
+ assert '://' not in host, (host, port)
38
39
  if port is None:
39
40
  host, port = host.rsplit(':', 1)
40
- port = int(port)
41
- assert host, host
41
+ assert host and port, (host, port)
42
42
  self.addr = (host, port)
43
43
  self.name = name
44
44
  self.options = Options(**{**contextlib.context.clientkw, **kwargs})
@@ -179,16 +179,19 @@ class ClientSocket:
179
179
  sock.close()
180
180
 
181
181
  def _connect(self):
182
- host, port = self.addr
183
- self._log(f'Connecting to {host}:{port}')
182
+ self._log(f'Connecting to {self.addr[0]}:{self.addr[1]}')
184
183
  once = True
185
184
  while self.running:
186
- sock, addr = self._create()
185
+ # We need to resolve the address regularly.
186
+ host, port = self.addr
187
+ if contextlib.context.resolver:
188
+ host, port = contextlib.context.resolver((host, port))
189
+ assert isinstance(host, str), (host, port)
190
+ port = int(port)
191
+ addr = (host, port, 0, 0) if self.options.ipv6 else (host, port)
192
+ sock = self._create()
187
193
  error = None
188
194
  try:
189
- # We need to resolve the address regularly.
190
- if contextlib.context.resolver:
191
- addr = contextlib.context.resolver(addr)
192
195
  sock.settimeout(10)
193
196
  sock.connect(addr)
194
197
  sock.settimeout(0)
@@ -210,10 +213,8 @@ class ClientSocket:
210
213
  def _create(self):
211
214
  if self.options.ipv6:
212
215
  sock = socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
213
- addr = (*self.addr, 0, 0)
214
216
  else:
215
217
  sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
216
- addr = self.addr
217
218
  # sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
218
219
  after = self.options.keepalive_after
219
220
  every = self.options.keepalive_every
@@ -231,7 +232,7 @@ class ClientSocket:
231
232
  sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPALIVE, every)
232
233
  if sys.platform == 'win32':
233
234
  sock.ioctl(socket.SIO_KEEPALIVE_VALS, (1, after * 1000, every * 1000))
234
- return sock, addr
235
+ return sock
235
236
 
236
237
  def _log(self, *args):
237
238
  if not self.options.logging:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: portal
3
- Version: 3.2.2
3
+ Version: 3.2.4
4
4
  Summary: Fast and reliable distributed systems in Python
5
5
  Home-page: http://github.com/danijar/portal
6
6
  Author: Danijar Hafner
@@ -321,3 +321,20 @@ class TestClient:
321
321
  portal.Thread(server),
322
322
  portal.Thread(client),
323
323
  ])
324
+
325
+ def test_resolver(self):
326
+ portnum = portal.free_port()
327
+
328
+ def client(portnum):
329
+ def resolver(host, portstr):
330
+ assert portstr == 'name'
331
+ return host, portnum
332
+ portal.setup(resolver=resolver)
333
+ client = portal.Client('localhost:name')
334
+ assert client.fn(42).result() == 42
335
+
336
+ server = portal.Server(portnum)
337
+ server.bind('fn', lambda x: x)
338
+ server.start(block=False)
339
+ portal.Process(client, portnum, start=True).join()
340
+ server.close()
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