Show More
@@ -1,3 +1,14 b'' | |||||
|
1 | class _Missing(object): | |||
|
2 | ||||
|
3 | def __repr__(self): | |||
|
4 | return 'no value' | |||
|
5 | ||||
|
6 | def __reduce__(self): | |||
|
7 | return '_missing' | |||
|
8 | ||||
|
9 | _missing = _Missing() | |||
|
10 | ||||
|
11 | ||||
1 | class LazyProperty(object): |
|
12 | class LazyProperty(object): | |
2 | """ |
|
13 | """ | |
3 | Decorator for easier creation of ``property`` from potentially expensive to |
|
14 | Decorator for easier creation of ``property`` from potentially expensive to | |
@@ -24,8 +35,11 b' class LazyProperty(object):' | |||||
24 | def __get__(self, obj, klass=None): |
|
35 | def __get__(self, obj, klass=None): | |
25 | if obj is None: |
|
36 | if obj is None: | |
26 | return self |
|
37 | return self | |
27 |
|
|
38 | value = obj.__dict__.get(self.__name__, _missing) | |
28 | return result |
|
39 | if value is _missing: | |
|
40 | value = self._func(obj) | |||
|
41 | obj.__dict__[self.__name__] = value | |||
|
42 | return value | |||
29 |
|
43 | |||
30 | import threading |
|
44 | import threading | |
31 |
|
45 | |||
@@ -41,5 +55,8 b' class ThreadLocalLazyProperty(LazyProper' | |||||
41 | if not hasattr(obj, '__tl_dict__'): |
|
55 | if not hasattr(obj, '__tl_dict__'): | |
42 | obj.__tl_dict__ = threading.local().__dict__ |
|
56 | obj.__tl_dict__ = threading.local().__dict__ | |
43 |
|
57 | |||
44 |
|
|
58 | value = obj.__tl_dict__.get(self.__name__, _missing) | |
45 | return result |
|
59 | if value is _missing: | |
|
60 | value = self._func(obj) | |||
|
61 | obj.__tl_dict__[self.__name__] = value | |||
|
62 | return value |
General Comments 0
You need to be logged in to leave comments.
Login now