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.
- {portal-3.2.2/portal.egg-info → portal-3.2.4}/PKG-INFO +1 -1
- {portal-3.2.2 → portal-3.2.4}/portal/__init__.py +1 -1
- {portal-3.2.2 → portal-3.2.4}/portal/client_socket.py +13 -12
- {portal-3.2.2 → portal-3.2.4/portal.egg-info}/PKG-INFO +1 -1
- {portal-3.2.2 → portal-3.2.4}/tests/test_client.py +17 -0
- {portal-3.2.2 → portal-3.2.4}/LICENSE +0 -0
- {portal-3.2.2 → portal-3.2.4}/MANIFEST.in +0 -0
- {portal-3.2.2 → portal-3.2.4}/README.md +0 -0
- {portal-3.2.2 → portal-3.2.4}/portal/batching.py +0 -0
- {portal-3.2.2 → portal-3.2.4}/portal/buffers.py +0 -0
- {portal-3.2.2 → portal-3.2.4}/portal/client.py +0 -0
- {portal-3.2.2 → portal-3.2.4}/portal/contextlib.py +0 -0
- {portal-3.2.2 → portal-3.2.4}/portal/packlib.py +0 -0
- {portal-3.2.2 → portal-3.2.4}/portal/poollib.py +0 -0
- {portal-3.2.2 → portal-3.2.4}/portal/process.py +0 -0
- {portal-3.2.2 → portal-3.2.4}/portal/server.py +0 -0
- {portal-3.2.2 → portal-3.2.4}/portal/server_socket.py +0 -0
- {portal-3.2.2 → portal-3.2.4}/portal/sharray.py +0 -0
- {portal-3.2.2 → portal-3.2.4}/portal/thread.py +0 -0
- {portal-3.2.2 → portal-3.2.4}/portal/utils.py +0 -0
- {portal-3.2.2 → portal-3.2.4}/portal.egg-info/SOURCES.txt +0 -0
- {portal-3.2.2 → portal-3.2.4}/portal.egg-info/dependency_links.txt +0 -0
- {portal-3.2.2 → portal-3.2.4}/portal.egg-info/requires.txt +0 -0
- {portal-3.2.2 → portal-3.2.4}/portal.egg-info/top_level.txt +0 -0
- {portal-3.2.2 → portal-3.2.4}/pyproject.toml +0 -0
- {portal-3.2.2 → portal-3.2.4}/requirements.txt +0 -0
- {portal-3.2.2 → portal-3.2.4}/setup.cfg +0 -0
- {portal-3.2.2 → portal-3.2.4}/setup.py +0 -0
- {portal-3.2.2 → portal-3.2.4}/tests/test_batching.py +0 -0
- {portal-3.2.2 → portal-3.2.4}/tests/test_errfile.py +0 -0
- {portal-3.2.2 → portal-3.2.4}/tests/test_pack.py +0 -0
- {portal-3.2.2 → portal-3.2.4}/tests/test_process.py +0 -0
- {portal-3.2.2 → portal-3.2.4}/tests/test_server.py +0 -0
- {portal-3.2.2 → portal-3.2.4}/tests/test_socket.py +0 -0
- {portal-3.2.2 → portal-3.2.4}/tests/test_thread.py +0 -0
@@ -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
|
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
|
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
|
-
|
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
|
-
|
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
|
235
|
+
return sock
|
235
236
|
|
236
237
|
def _log(self, *args):
|
237
238
|
if not self.options.logging:
|
@@ -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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|