@@ -4,6 +4,8 @@ from websocket import create_connection
44import time
55import select
66import json
7+import socket
8+import errno
79
810class ITutorialDKernel(Kernel):
911 implementation = 'ITutorialD'
@@ -24,24 +26,27 @@ class ITutorialDKernel(Kernel):
2426 def runtutd(self, tutd):
2527 #setup server
2628 port = 63000
27− dbname = 'spam'
28− '''
29+ dbname = 'jupyter'
2930 if not self.dbserver:
3031 self.dbserver = subprocess.Popen(['project-m36-websocket-server',
31− '--database', 'itutd',
32+ '--database', dbname,
3233 '--port', str(port)],
3334 )
34− '''
3535 if not self.ws:
3636 attempts = 0
3737 while 1:
38− ws = create_connection('ws://127.0.0.1:{}'.format(port))
39− if ws:
38+ try:
39+ ws = create_connection('ws://127.0.0.1:{}'.format(port))
40+ except socket.error as err:
41+ if err.errno in (errno.ECONNREFUSED, ):
42+ time.sleep(0.3)
43+ attempts += 1
44+ if attempts > 10:
45+ assert False, "websocket timeout"
46+ else:
47+ raise
48+ else:
4049 break
41− time.sleep(0.3)
42− attempt += 1
43− if attempt > 10:
44− assert False, "timeout"
4550 self.ws = ws
4651 self.ws.send('connectdb:{}'.format(dbname))
4752 #receive and discard prompt info
@@ -97,6 +102,7 @@ class ITutorialDKernel(Kernel):
97102 def do_shutdown(self, restart):
98103 if self.dbserver:
99104 self.dbserver.terminate()
105+ self.dbserver.kill()
100106
101107if __name__ == '__main__':
102108 from ipykernel.kernelapp import IPKernelApp