From eeb7f9cfec4d96ed379a9d9fc829249405d66fe0 2012-02-08 21:43:06
From: MinRK <benjaminrk@gmail.com>
Date: 2012-02-08 21:43:06
Subject: [PATCH] exclude buffers from default db_query

as described in Client.db_query docstring, buffers should be excluded
by default, but this wasn't actually the case.
---

diff --git a/IPython/parallel/controller/hub.py b/IPython/parallel/controller/hub.py
index 300b496..eea28ed 100644
--- a/IPython/parallel/controller/hub.py
+++ b/IPython/parallel/controller/hub.py
@@ -1271,17 +1271,17 @@ class Hub(SessionFactory):
                 buffer_lens = [] if 'buffers' in keys else None
                 result_buffer_lens = [] if 'result_buffers' in keys else None
             else:
-                buffer_lens = []
-                result_buffer_lens = []
+                buffer_lens = None
+                result_buffer_lens = None
 
             for rec in records:
                 # buffers may be None, so double check
+                b = rec.pop('buffers', empty) or empty
                 if buffer_lens is not None:
-                    b = rec.pop('buffers', empty) or empty
                     buffer_lens.append(len(b))
                     buffers.extend(b)
+                rb = rec.pop('result_buffers', empty) or empty
                 if result_buffer_lens is not None:
-                    rb = rec.pop('result_buffers', empty) or empty
                     result_buffer_lens.append(len(rb))
                     buffers.extend(rb)
             content = dict(status='ok', records=records, buffer_lens=buffer_lens,
diff --git a/IPython/parallel/tests/test_client.py b/IPython/parallel/tests/test_client.py
index 9ad18b8..db58524 100644
--- a/IPython/parallel/tests/test_client.py
+++ b/IPython/parallel/tests/test_client.py
@@ -223,6 +223,14 @@ class TestClient(ClusterTestCase):
         for rec in found:
             self.assertEquals(set(rec.keys()), set(['msg_id', 'submitted', 'completed']))
     
+    def test_db_query_default_keys(self):
+        """default db_query excludes buffers"""
+        found = self.client.db_query({'msg_id': {'$ne' : ''}})
+        for rec in found:
+            keys = set(rec.keys())
+            self.assertFalse('buffers' in keys, "'buffers' should not be in: %s" % keys)
+            self.assertFalse('result_buffers' in keys, "'result_buffers' should not be in: %s" % keys)
+    
     def test_db_query_msg_id(self):
         """ensure msg_id is always in db queries"""
         found = self.client.db_query({'msg_id': {'$ne' : ''}},keys=['submitted', 'completed'])