2896: add arv-ws cli tool to arv.
authorradhika <radhika@curoverse.com>
Mon, 16 Jun 2014 19:17:20 +0000 (15:17 -0400)
committerradhika <radhika@curoverse.com>
Mon, 16 Jun 2014 19:17:20 +0000 (15:17 -0400)
sdk/cli/bin/arv
sdk/cli/bin/arv-ws [new symlink]
sdk/python/arvados/events.py
sdk/python/bin/arv-ws [new file with mode: 0755]
sdk/python/setup.py

index b485b7b10f7286fd0fd242d466a3002e5c1319ce..d4aef2c0887ca22149df10e92ae54bf8ae39ef68 100755 (executable)
@@ -68,6 +68,9 @@ when 'pipeline'
 when 'tag'
   ARGV.shift
   exec `which arv-tag`.strip, *ARGV
+when 'ws'
+  ARGV.shift
+  exec `which arv-ws`.strip, *ARGV
 end
 
 ENV['ARVADOS_API_VERSION'] ||= 'v1'
diff --git a/sdk/cli/bin/arv-ws b/sdk/cli/bin/arv-ws
new file mode 120000 (symlink)
index 0000000..622916b
--- /dev/null
@@ -0,0 +1 @@
+../../python/bin/arv-ws
\ No newline at end of file
index e61b20c70851f8079137c540680842592a3dcb9b..3df934a981e758da8973bf83ad3e8ecf79273b42 100644 (file)
@@ -26,8 +26,18 @@ class EventClient(WebSocketClient):
     def received_message(self, m):
         self.on_event(json.loads(str(m)))
 
+    def close_connection(self):
+        try:
+            self.sock.shutdown(socket.SHUT_RDWR)
+            self.sock.close()
+        except:
+            pass
+
 def subscribe(api, filters, on_event):
-    url = "{}?api_token={}".format(api._rootDesc['websocketUrl'], config.get('ARVADOS_API_TOKEN'))
-    ws = EventClient(url, filters, on_event)
-    ws.connect()
-    return ws
+    try:
+        url = "{}?api_token={}".format(api._rootDesc['websocketUrl'], config.get('ARVADOS_API_TOKEN'))
+        ws = EventClient(url, filters, on_event)
+        ws.connect()
+        return ws
+    except:
+        ws.close_connection()
diff --git a/sdk/python/bin/arv-ws b/sdk/python/bin/arv-ws
new file mode 100755 (executable)
index 0000000..0721687
--- /dev/null
@@ -0,0 +1,34 @@
+#!/usr/bin/env python
+
+import argparse
+import sys
+
+parser = argparse.ArgumentParser()
+parser.add_argument('-u', '--uuid', type=str, default="")
+args = parser.parse_args()
+
+def on_message(ev):
+  print "\n", ev
+
+filters = []
+if len(args.uuid)>0:
+  filter1 = []
+  filter1.append ('object_uuid')
+  filter1.append ('=')
+  filter1.append (args.uuid)
+  filters.append (filter1)
+
+import arvados
+from arvados.events import subscribe
+
+api = arvados.api('v1', cache=False)
+
+ws = None
+try:
+  ws = subscribe(api, filters, lambda ev: on_message(ev))
+  ws.run_forever()
+except:
+  if (ws):
+    ws.close_connection()
+  else:
+    sys.exc_info()
index a2098630f9521532bf4610e26acd5bb50ed8e5f8..9f9c96284e3ae4a56ac587f917bfca6f72b811e1 100644 (file)
@@ -15,6 +15,7 @@ setup(name='arvados-python-client',
         'bin/arv-ls',
         'bin/arv-normalize',
         'bin/arv-put',
+        'bin/arv-ws',
         ],
       install_requires=[
         'python-gflags',