stdout/stderr rendering in side panel broken
Currently, base64 is shown momentarily before the rendered information comes in (same for date fields like 'created').  Fix: perhaps don't render any of the fields which are going to get updated anyway.

diff --git a/codalab/apps/web/bundles.py b/codalab/apps/web/bundles.py
index ac1b7d4aa..a4b2d0c8e 100644
--- a/codalab/apps/web/bundles.py
+++ b/codalab/apps/web/bundles.py
@@ -172,19 +172,23 @@ if len(settings.BUNDLE_SERVICE_URL) > 0:
                             for k, v in row_map.iteritems():
                                 if v is None:
                                      row_map[k] = 'MISSING'
-                    elif 'bundle_info' in item:
-                        for bundle_info in item['bundle_info']:
-                            try:
-                                ## sometimes bundle_info is a string. when item['mode'] is image
-                                if isinstance(bundle_info, dict) and bundle_info.get('bundle_type', None) == 'run':
-                                    if 'stdout' in bundle_info.keys():
-                                        bundle_info['stdout'] = base64.b64decode(bundle_info['stdout'])
-                                    if 'stderr' in bundle_info.keys():
-                                        bundle_info['stderr'] = base64.b64decode(bundle_info['stderr'])
-                            except Exception, e:
-                                print e
-                                import ipdb; ipdb.set_trace()
-
+                    if 'bundle_info' in item:
+                        if isinstance(item['bundle_info'], list):
+                            for bundle_info in item['bundle_info']:
+                                try:
+                                    ## sometimes bundle_info is a string. when item['mode'] is image
+                                    if isinstance(bundle_info, dict):
+                                        worksheet_util.format_metadata(bundle_info.get('metadata'))
+                                        if bundle_info.get('bundle_type', None) == 'run':
+                                            if 'stdout' in bundle_info.keys():
+                                                bundle_info['stdout'] = base64.b64decode(bundle_info['stdout'])
+                                            if 'stderr' in bundle_info.keys():
+                                                bundle_info['stderr'] = base64.b64decode(bundle_info['stderr'])
+                                except Exception, e:
+                                    print e
+                                    import ipdb; ipdb.set_trace()
+                        elif isinstance(item['bundle_info'], dict):
+                            worksheet_util.format_metadata(item['bundle_info'].get('metadata'))
 
                 return worksheet_info
             else:
diff --git a/codalab/apps/web/static/js/worksheet/worksheet_side_panel.js b/codalab/apps/web/static/js/worksheet/worksheet_side_panel.js
index cc5313ff7..062b3cbe6 100644
--- a/codalab/apps/web/static/js/worksheet/worksheet_side_panel.js
+++ b/codalab/apps/web/static/js/worksheet/worksheet_side_panel.js
@@ -40,7 +40,7 @@ var WorksheetSidePanel = React.createClass({
         var self = this;
         if(this.debouncedFetchExtra === undefined){
             // debounce it to wait for user to stop for X time.
-            this.debouncedFetchExtra = _.debounce(self._fetch_extra, 1500).bind(this);
+            this.debouncedFetchExtra = _.debounce(self._fetch_extra, 500).bind(this);
         }
         //set up the wait for fetching extra
         this.debouncedFetchExtra();
['codalab/apps/web/bundles.py', 'codalab/apps/web/static/js/worksheet/worksheet_side_panel.js']