@@ -14,30 +14,42 @@ class ThreadMappingContext(BaseContext):
1414
1515 def __init__ (self ):
1616 self .__local = threading .local ()
17- self .__local .data = {}
17+ self .ensure_data ()
18+
19+ def ensure_data (self ):
20+ if not hasattr (self .__local , 'data' ):
21+ self .__local .data = {}
1822
1923 def __str__ (self ):
24+ self .ensure_data ()
2025 return str (self .__local .data )
2126
2227 def __getitem__ (self , __key ):
28+ self .ensure_data ()
2329 return self .__local .data [__key ]
2430
2531 def __setitem__ (self , __key , __value ):
32+ self .ensure_data ()
2633 self .__local .data [__key ] = __value
2734
2835 def __delitem__ (self , __key ):
36+ self .ensure_data ()
2937 del self .__local .data [__key ]
3038
3139 def __len__ (self ):
40+ self .ensure_data ()
3241 return len (self .__local .data )
3342
3443 def __iter__ (self ):
44+ self .ensure_data ()
3545 return self .__local .data .__iter__ ()
3646
3747 def __contains__ (self , __o ):
48+ self .ensure_data ()
3849 return self .__local .data .__contains__ (__o )
3950
4051 def init (self , data = None ):
52+ self .ensure_data ()
4153 if data is None :
4254 self .__local .data = {}
4355 else :
@@ -46,18 +58,23 @@ def init(self, data=None):
4658 self .__local .data = data
4759
4860 def get (self , key , default = None ):
61+ self .ensure_data ()
4962 return self .__local .data .get (key , default )
5063
5164 def pop (self , key , default = __marker ):
65+ self .ensure_data ()
5266 if default == self .__marker :
5367 return self .__local .data .pop (key )
5468 return self .__local .data .pop (key , default )
5569
5670 def set (self , key , value ):
71+ self .ensure_data ()
5772 self .__local .data [key ] = value
5873
5974 def delete (self , key ):
75+ self .ensure_data ()
6076 del self .__local .data [key ]
6177
6278 def clear (self ):
79+ self .ensure_data ()
6380 self .__local .data = {}
0 commit comments