66"""
77import os
88import atexit
9+ import builtins
910from collections import deque
1011from .cluster import Cluster , ClusterError
1112from . import installation
@@ -179,7 +180,7 @@ def new_pg_tmp_connection(l = extras, c = c, sbid = 'sandbox' + str(self.sandbox
179180 return l [- 1 ]
180181
181182 # The new builtins.
182- builtins = {
183+ local_builtins = {
183184 'db' : c ,
184185 'prepare' : c .prepare ,
185186 'xact' : c .xact ,
@@ -193,37 +194,37 @@ def new_pg_tmp_connection(l = extras, c = c, sbid = 'sandbox' + str(self.sandbox
193194 if not self .builtins_stack :
194195 # Store any of those set or not set.
195196 current = {
196- k : __builtins__ [k ] for k in self .builtins_keys
197- if k in __builtins__
197+ k : builtins . __dict__ [k ] for k in self .builtins_keys
198+ if k in builtins . __dict__
198199 }
199200 self .builtins_stack .append ((current , []))
200201
201202 # Store and push.
202- self .builtins_stack .append ((builtins , extras ))
203- __builtins__ . update (builtins )
203+ self .builtins_stack .append ((local_builtins , extras ))
204+ builtins . __dict__ . update (local_builtins )
204205 self .sandbox_id += 1
205206
206207 def pop (self , exc , drop_schema = 'DROP SCHEMA sandbox{0} CASCADE' .format ):
207- builtins , extras = self .builtins_stack .pop ()
208+ local_builtins , extras = self .builtins_stack .pop ()
208209 self .sandbox_id -= 1
209210
210211 # restore __builtins__
211212 if len (self .builtins_stack ) > 1 :
212- __builtins__ .update (self .builtins_stack [- 1 ][0 ])
213+ builtins . __dict__ .update (self .builtins_stack [- 1 ][0 ])
213214 else :
214215 previous = self .builtins_stack .popleft ()
215216 for x in self .builtins_keys :
216217 if x in previous :
217- __builtins__ [x ] = previous [x ]
218+ builtins . __dict__ [x ] = previous [x ]
218219 else :
219220 # Wasn't set before.
220- __builtins__ .pop (x , None )
221+ builtins . __dict__ .pop (x , None )
221222
222223 # close popped connection, but only if we're not in an interrupt.
223224 # However, temporal will always terminate all backends atexit.
224225 if exc is None or isinstance (exc , Exception ):
225226 # Interrupt then close. Just in case something is lingering.
226- for xdb in [builtins ['db' ]] + list (extras ):
227+ for xdb in [local_builtins ['db' ]] + list (extras ):
227228 if xdb .closed is False :
228229 # In order for a clean close of the connection,
229230 # interrupt before closing. It is still
0 commit comments