diff --git a/capnp/lib/capnp.pyx b/capnp/lib/capnp.pyx index 4a3a974..c8b9aba 100644 --- a/capnp/lib/capnp.pyx +++ b/capnp/lib/capnp.pyx @@ -3224,7 +3224,13 @@ cdef class SchemaParser: module._parser = parser - fileSchema = parser._parse_disk_file(display_name, file_name, imports) + # Some systems (Windows running pytest) add non-directories to the sys.path used for imports + # Filter these out so kj doesn't implode when searching paths + filtered_imports = [] + for imp in imports: + if _os.path.isdir(imp): + filtered_imports.append(imp) + fileSchema = parser._parse_disk_file(display_name, file_name, filtered_imports) _load(fileSchema, module) abs_path = _os.path.abspath(file_name) diff --git a/examples/async_client.py b/examples/async_client.py index 7ffed54..63c3e42 100755 --- a/examples/async_client.py +++ b/examples/async_client.py @@ -39,7 +39,6 @@ async def mywriter(client, writer): while True: data = await client.read(4096) writer.write(data.tobytes()) - await writer.drain() async def background(cap): diff --git a/examples/async_server.py b/examples/async_server.py index 5d534fb..e6fa225 100755 --- a/examples/async_server.py +++ b/examples/async_server.py @@ -36,7 +36,6 @@ async def mywriter(server, writer): while True: data = await server.read(4096) writer.write(data.tobytes()) - await writer.drain() async def myserver(reader, writer): diff --git a/test/test_examples.py b/test/test_examples.py index 1477f59..1167418 100644 --- a/test/test_examples.py +++ b/test/test_examples.py @@ -1,13 +1,15 @@ import os import socket import subprocess +import sys import time examples_dir = os.path.join(os.path.dirname(__file__), '..', 'examples') def run_subprocesses(address, server, client): - server = subprocess.Popen([os.path.join(examples_dir, server), address]) + cmd = [sys.executable, os.path.join(examples_dir, server), address] + server = subprocess.Popen(cmd) retries = 30 addr, port = address.split(':') while True: @@ -24,9 +26,10 @@ def run_subprocesses(address, server, client): retries -= 1 if retries == 0: assert False, "Timed out waiting for server to start" - client = subprocess.Popen([os.path.join(examples_dir, client), address]) + cmd = [sys.executable, os.path.join(examples_dir, client), address] + client = subprocess.Popen(cmd) - ret = client.wait() + ret = client.wait(timeout=30) server.kill() assert ret == 0 @@ -46,7 +49,7 @@ def test_thread_example(): def test_addressbook_example(): - proc = subprocess.Popen([os.path.join(examples_dir, 'addressbook.py')]) + proc = subprocess.Popen([sys.executable, os.path.join(examples_dir, 'addressbook.py')]) ret = proc.wait() assert ret == 0 diff --git a/test/test_regression.py b/test/test_regression.py index 12bde05..acddcee 100644 --- a/test/test_regression.py +++ b/test/test_regression.py @@ -309,7 +309,7 @@ def init_all_types(builder): subBuilder.uInt64Field = 345678901234567890 subBuilder.float32Field = -1.25e-10 subBuilder.float64Field = 345 - subBuilder.textField = b"\xe2\x98\x83".decode('utf-8') # This is u"☃", but py3.2 doesn't support u + subBuilder.textField = "☃" subBuilder.dataField = b"qux" subSubBuilder = subBuilder.structField subSubBuilder.textField = "nested" @@ -486,26 +486,26 @@ def check_all_types(reader): def test_build(all_types): root = all_types.TestAllTypes.new_message() init_all_types(root) - expectedText = open(os.path.join(this_dir, 'all-types.txt'), 'r').read() + expectedText = open(os.path.join(this_dir, 'all-types.txt'), 'r', encoding='utf8').read() assert str(root) + '\n' == expectedText def test_build_first_segment_size(all_types): root = all_types.TestAllTypes.new_message(1) init_all_types(root) - expectedText = open(os.path.join(this_dir, 'all-types.txt'), 'r').read() + expectedText = open(os.path.join(this_dir, 'all-types.txt'), 'r', encoding='utf8').read() assert str(root) + '\n' == expectedText root = all_types.TestAllTypes.new_message(1024 * 1024) init_all_types(root) - expectedText = open(os.path.join(this_dir, 'all-types.txt'), 'r').read() + expectedText = open(os.path.join(this_dir, 'all-types.txt'), 'r', encoding='utf8').read() assert str(root) + '\n' == expectedText def test_binary_read(all_types): - f = open(os.path.join(this_dir, 'all-types.binary'), 'r') + f = open(os.path.join(this_dir, 'all-types.binary'), 'r', encoding='utf8') root = all_types.TestAllTypes.read(f) check_all_types(root) - expectedText = open(os.path.join(this_dir, 'all-types.txt'), 'r').read() + expectedText = open(os.path.join(this_dir, 'all-types.txt'), 'r', encoding='utf8').read() assert str(root) + '\n' == expectedText # Test set_root(). @@ -518,11 +518,11 @@ def test_binary_read(all_types): check_all_types(builder2.get_root(all_types.TestAllTypes)) def test_packed_read(all_types): - f = open(os.path.join(this_dir, 'all-types.packed'), 'r') + f = open(os.path.join(this_dir, 'all-types.packed'), 'r', encoding='utf8') root = all_types.TestAllTypes.read_packed(f) check_all_types(root) - expectedText = open(os.path.join(this_dir, 'all-types.txt'), 'r').read() + expectedText = open(os.path.join(this_dir, 'all-types.txt'), 'r', encoding='utf8').read() assert str(root) + '\n' == expectedText def test_binary_write(all_types): diff --git a/test/test_rpc.py b/test/test_rpc.py index 535cba1..ba1c5e8 100644 --- a/test/test_rpc.py +++ b/test/test_rpc.py @@ -19,7 +19,7 @@ class Server(test_capability_capnp.TestInterface.Server): def test_simple_rpc_with_options(): - read, write = socket.socketpair(socket.AF_UNIX) + read, write = socket.socketpair() _ = capnp.TwoPartyServer(write, bootstrap=Server()) # This traversal limit is too low to receive the response in, so we expect @@ -34,7 +34,7 @@ def test_simple_rpc_with_options(): def test_simple_rpc_bootstrap(): - read, write = socket.socketpair(socket.AF_UNIX) + read, write = socket.socketpair() _ = capnp.TwoPartyServer(write, bootstrap=Server(100)) client = capnp.TwoPartyClient(read) diff --git a/test/test_rpc_calculator.py b/test/test_rpc_calculator.py index ed54094..50ba4e6 100644 --- a/test/test_rpc_calculator.py +++ b/test/test_rpc_calculator.py @@ -1,5 +1,6 @@ import gc import os +import pytest import socket import subprocess import sys # add examples dir to sys.path @@ -15,14 +16,15 @@ import calculator_server # noqa: E402 def test_calculator(): - read, write = socket.socketpair(socket.AF_UNIX) + read, write = socket.socketpair() _ = capnp.TwoPartyServer(write, bootstrap=calculator_server.CalculatorImpl()) calculator_client.main(read) def run_subprocesses(address): - server = subprocess.Popen([examples_dir + '/calculator_server.py', address]) + cmd = [sys.executable, os.path.join(examples_dir, 'calculator_server.py'), address] + server = subprocess.Popen(cmd) retries = 30 if 'unix' in address: addr = address.split(':')[1] @@ -52,7 +54,8 @@ def run_subprocesses(address): retries -= 1 if retries == 0: assert False, "Timed out waiting for server to start" - client = subprocess.Popen([examples_dir + '/calculator_client.py', address]) + cmd = [sys.executable, os.path.join(examples_dir, 'calculator_client.py'), address] + client = subprocess.Popen(cmd) ret = client.wait() server.kill() @@ -64,6 +67,7 @@ def test_calculator_tcp(): run_subprocesses(address) +@pytest.mark.skipif(os.name == 'nt', reason="socket.AF_UNIX not supported on Windows") def test_calculator_unix(): path = '/tmp/pycapnp-test' try: @@ -81,7 +85,7 @@ def test_calculator_gc(): return old_evaluate_impl(*args, **kwargs) return call - read, write = socket.socketpair(socket.AF_UNIX) + read, write = socket.socketpair() # inject a gc.collect to the beginning of every evaluate_impl call evaluate_impl_orig = calculator_server.evaluate_impl diff --git a/test/test_threads.py b/test/test_threads.py index b53e2c0..bd7ae71 100644 --- a/test/test_threads.py +++ b/test/test_threads.py @@ -65,7 +65,7 @@ def test_using_threads(): capnp.remove_event_loop(True) capnp.create_event_loop(True) - read, write = socket.socketpair(socket.AF_UNIX) + read, write = socket.socketpair() def run_server(): _ = capnp.TwoPartyServer(write, bootstrap=Server())