Skip to content

Commit 5312cf3

Browse files
committed
make tests pass without too much sacrifice
1 parent f621917 commit 5312cf3

File tree

4 files changed

+105
-119
lines changed

4 files changed

+105
-119
lines changed

oscpy/server/__init__.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -363,7 +363,7 @@ def get_sender(self):
363363
"""
364364
frames = inspect.getouterframes(inspect.currentframe())
365365
for frame, filename, _, function, _, _ in frames:
366-
if function == 'handle_message' and __FILE__.startswith(filename):
366+
if function == 'handle_message' and frame.f_locals.get('self') is self and 'sender_socket' in frame.f_locals:
367367
break
368368
else:
369369
raise RuntimeError('get_sender() not called from a callback')
@@ -522,8 +522,9 @@ def _execute_callbacks(self, callbacks_list, address, values):
522522
cb(*values)
523523
except Exception:
524524
if self.intercept_errors:
525-
logger.exception("Unhandled exception caught in oscpy server")
525+
logger.exception("Ignoring unhandled exception caught in oscpy server")
526526
else:
527+
logger.exception("Unhandled exception caught in oscpy server")
527528
raise
528529

529530
def handle_message(self, data, sender, sender_socket):

oscpy/server/asyncio_server.py

+19-4
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import socket
33
from functools import partial
44
from logging import getLogger
5+
from typing import Awaitable
56

67
from oscpy.server import OSCBaseServer
78

@@ -17,12 +18,22 @@ def __init__(self, *args, **kwargs):
1718

1819
def listen(self, address='localhost', port=0, default=False, family='inet', **kwargs):
1920
loop = asyncio.get_event_loop()
21+
if family == 'unix':
22+
family_ = socket.AF_UNIX
23+
elif family == 'inet':
24+
family_ = socket.AF_INET
25+
else:
26+
raise ValueError(
27+
"Unknown socket family, accepted values are 'unix' and 'inet'"
28+
)
29+
2030
if family == 'unix':
2131
addr = address
2232
else:
2333
addr = (address, port)
34+
2435
sock = self.get_socket(
25-
family=socket.AF_UNIX if family == 'unix' else socket.AF_INET,
36+
family=family_,
2637
addr=addr,
2738
)
2839
self.listeners[(address, port or sock.getsockname()[1])] = loop.create_datagram_endpoint(
@@ -46,12 +57,16 @@ async def _execute_callbacks(self, callbacks_list, address, values):
4657
for cb, get_address in callbacks_list:
4758
try:
4859
if get_address:
49-
await cb(address, *values)
60+
result = cb(address, *values)
5061
else:
51-
await cb(*values)
62+
result = cb(*values)
63+
if isinstance(result, Awaitable):
64+
await result
65+
except asyncio.CancelledError:
66+
...
5267
except Exception:
5368
if self.intercept_errors:
54-
logger.exception("Unhandled exception caught in oscpy server")
69+
logger.exception("Ignoring unhandled exception caught in oscpy server")
5570
else:
5671
raise
5772

oscpy/server/curio_server.py

+6-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import logging
2+
from typing import Awaitable
23

34
from curio import TaskGroup, socket
45
from oscpy.server import OSCBaseServer, UDP_MAX_SIZE
@@ -43,12 +44,14 @@ async def _execute_callbacks(self, callbacks_list, address, values):
4344
for cb, get_address in callbacks_list:
4445
try:
4546
if get_address:
46-
await cb(address, *values)
47+
result = cb(address, *values)
4748
else:
48-
await cb(*values)
49+
result = cb(*values)
50+
if isinstance(result, Awaitable):
51+
await result
4952
except Exception:
5053
if self.intercept_errors:
51-
logger.error("Unhandled exception caught in oscpy server", exc_info=True)
54+
logger.exception("Ignoring unhandled exception caught in oscpy server")
5255
else:
5356
raise
5457

0 commit comments

Comments
 (0)