code: def pull(self, id):
          
          conn = session['connections'].get(id, None)
          conn.last_update = time.time()
          if conn:
              ev_list = []
              while 1:
                  # ok, so this might look a bit ugly but the concept is very simple
                  #  you yield a special object from the environ that does some magic
                  #  and the wsgi server will resume the app when it has the result
                  yield request.environ['cogen.call'](conn.events.get)(timeout=0.1)
                  event = request.environ['cogen.wsgi'].result
                  # also, we can't have better exception handling in this wsgi
                  # contraption and we need to check the result for exceptions
                  if not event:
                      break
                  elif isinstance(event, (queue.Empty, events.OperationTimeout)):
                      break
                  elif isinstance(event, Exception):
                      ev_list.append(('', 'ERROR', str(event)))
                      break
                  else:
                      ev_list.append(event)
              if ev_list:
                  print 'PULL:', ev_list
                  yield simplejson.dumps(ev_list)
              else:
                  # if we don't have any updates atm, we'll wait 30 secs for one
                  yield request.environ['cogen.call'](conn.events.get)(timeout=30)
                  event = request.environ['cogen.wsgi'].result
                  if isinstance(event, events.OperationTimeout):
                      yield simplejson.dumps([])
                  elif isinstance(event, Exception):
                      yield simplejson.dumps([('', 'ERROR', str(event))])
                  else:
                      print 'PULL1:', event
                      yield simplejson.dumps([event])
          else:
              yield simplejson.dumps(('', 'ERROR', 'Invalid connection id.'))
docs: Take the messages from the queue and if there are none wait 30
          seconds till returning an empty message.
  
          Also, cogen's wsgi async extensions are in the environ and prefixed with
          'cogen.'