Home | History | Annotate | Download | only in server2
      1 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 # Use of this source code is governed by a BSD-style license that can be
      3 # found in the LICENSE file.
      4 
      5 import sys
      6 
      7 _no_value = object()
      8 
      9 class Future(object):
     10   '''Stores a value, error, or delegate to be used later.
     11   '''
     12   def __init__(self, value=_no_value, delegate=None):
     13     self._value = value
     14     self._delegate = delegate
     15     self._exc_info = None
     16     if (self._value is _no_value and self._delegate is None):
     17       raise ValueError('Must have either a value or delegate.')
     18 
     19   def Get(self):
     20     '''Gets the stored value, error, or delegate contents.
     21     '''
     22     if self._value is not _no_value:
     23       return self._value
     24     if self._exc_info is not None:
     25       self._Raise()
     26     try:
     27       self._value = self._delegate.Get()
     28       return self._value
     29     except:
     30       self._exc_info = sys.exc_info()
     31       self._Raise()
     32 
     33   def _Raise(self):
     34     exc_info = self._exc_info
     35     raise exc_info[0], exc_info[1], exc_info[2]
     36