Skip to content

Commit 75915b4

Browse files
committed
Simplify asyncio syntax
1 parent a5793df commit 75915b4

File tree

2 files changed

+14
-30
lines changed

2 files changed

+14
-30
lines changed

ipynao/nao_robot.py

Lines changed: 14 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
from ipywidgets import DOMWidget, Output
1212
from traitlets import Unicode, Integer
1313
from ._frontend import module_name, module_version
14-
import asyncio
14+
from asyncio import ensure_future, Future
1515

1616

1717
class NaoRobotService():
@@ -36,33 +36,20 @@ def _create_msg(self, method_name, *args, **kwargs):
3636
self.widget.request_id += 1
3737
return data
3838

39-
def call_service(self, method_name, *args, **kwargs):
40-
data = self._create_msg(method_name, *args, **kwargs)
41-
self.widget.send(data)
4239

43-
async def async_call_service(self, method_name, *args, **kwargs):
40+
async def call_service(self, method_name, *args, **kwargs):
4441
data = self._create_msg(method_name, *args, **kwargs)
4542
self.widget.send(data)
4643
request_id = data['requestID']
4744

48-
try:
49-
self.output.clear_output()
50-
self.output.append_stdout('Calling service... \n')
51-
await self.widget.wait_for_change('counter', self.output, request_id)
52-
except Exception as e:
53-
return e
54-
55-
response = self.widget.response[request_id]['data']
56-
del self.widget.response[request_id]
45+
self.output.append_stdout(f'Calling service {self.name}...\n')
46+
future = await self.widget.wait_for_change('counter', self.output, request_id)
5747

58-
return response
48+
return future
5949

6050

6151
def __getattr__(self, method_name):
62-
if (method_name[:6] == 'async_'):
63-
return lambda *x, **y: self.async_call_service(method_name[6:], *x, **y)
64-
else:
65-
return lambda *x, **y: self.call_service(method_name, *x, **y)
52+
return lambda *x, **y: ensure_future(self.call_service(method_name, *x, **y))
6653

6754

6855
class NaoRobotWidget(DOMWidget):
@@ -95,7 +82,7 @@ def _handle_frontend_msg(self, model, msg, buffer):
9582

9683

9784
def wait_for_change(widget, value_name, output=Output(), request_id=0):
98-
future = asyncio.Future()
85+
future = Future()
9986
widget.response[request_id] = {
10087
'isError': False,
10188
'data': None
@@ -108,17 +95,19 @@ def get_value_change(change):
10895
widget.unobserve(get_value_change, names=value_name)
10996

11097
if (response['isError']):
111-
future.set_exception(Exception(response['data']))
98+
if not future.done():
99+
# TODO: Fix "Task exception was never retrieved"
100+
# future.set_exception(Exception(response['data']))
101+
future.set_result(Exception(response['data']))
112102
output.append_stderr(str(response['data']) + '\n')
113103
else:
114-
future.set_result(response['data'])
104+
if not future.done():
105+
future.set_result(response['data'])
115106
output.append_stdout(str(response['data']) + '\n')
116107

117-
else:
118-
future.set_result(change)
119108

120109
widget.observe(get_value_change, names=value_name)
121-
return future
110+
return future
122111

123112

124113
def connect(self, ip_address='nao.local', port='80'):

src/widget.ts

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -155,11 +155,6 @@ export class NaoRobotModel extends DOMWidgetModel {
155155
// the request ID is the next one which is used to call the service
156156
const naoService = await servicePromise
157157
.then((resolution: any) => {
158-
this.send({
159-
isError: false,
160-
data: true, // TODO: resolution ?? true,
161-
requestID: requestID + 1, // Note above
162-
});
163158
return resolution;
164159
})
165160
.catch((rejection: string) => {

0 commit comments

Comments
 (0)