OLD | NEW |
---|---|
1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 | 4 |
5 import sys | 5 import sys |
6 | 6 |
7 _no_value = object() | 7 _no_value = (None,) |
8 | 8 |
9 class Future(object): | 9 class Future(object): |
10 '''Stores a value, error, or delegate to be used later. | 10 '''Stores a value, error, or delegate to be used later. |
11 ''' | 11 ''' |
12 def __init__(self, value=_no_value, delegate=None): | 12 def __init__(self, value=_no_value, delegate=None): |
13 self._value = value | 13 self._value = value |
14 self._delegate = delegate | 14 self._delegate = delegate |
15 self._exc_info = None | 15 self._exc_info = None |
16 if (self._value is _no_value and self._delegate is None): | 16 if (self._value is _no_value and self._delegate is None): |
17 raise ValueError('Must have either a value or delegate.') | 17 raise ValueError('Must have either a value or delegate.') |
18 | 18 |
19 def Get(self): | 19 def Get(self): |
20 '''Gets the stored value, error, or delegate contents. | 20 '''Gets the stored value, error, or delegate contents. |
21 ''' | 21 ''' |
22 if self._value is not _no_value: | 22 if self._value is not _no_value: |
方觉(Fang Jue)
2013/05/03 06:03:31
If you're going to use _no_value = (None,), be sur
not at google - send to devlin
2013/05/03 16:04:25
"is not" is correct because the refer to the same
cduvall
2013/05/07 23:47:03
'is not' is correct.
| |
23 return self._value | 23 return self._value |
24 if self._exc_info is not None: | 24 if self._exc_info is not None: |
25 self._Raise() | 25 self._Raise() |
26 try: | 26 try: |
27 self._value = self._delegate.Get() | 27 self._value = self._delegate.Get() |
28 return self._value | 28 return self._value |
29 except: | 29 except: |
30 self._exc_info = sys.exc_info() | 30 self._exc_info = sys.exc_info() |
31 self._Raise() | 31 self._Raise() |
32 | 32 |
33 def _Raise(self): | 33 def _Raise(self): |
34 exc_info = self._exc_info | 34 exc_info = self._exc_info |
35 raise exc_info[0], exc_info[1], exc_info[2] | 35 raise exc_info[0], exc_info[1], exc_info[2] |
OLD | NEW |