22import contextlib
33import operator
44
5- import bigframes
6-
75
86class option_context (contextlib .ContextDecorator ):
97 """
@@ -35,8 +33,11 @@ def __init__(self, *args) -> None:
3533 self .ops = list (zip (args [::2 ], args [1 ::2 ]))
3634
3735 def __enter__ (self ) -> None :
36+ # Avoid problems with circular imports.
37+ import bigframes ._config
38+
3839 self .undo = [
39- (pat , operator .attrgetter (pat )(bigframes .options ))
40+ (pat , operator .attrgetter (pat )(bigframes ._config . options ))
4041 for pat , _ in self .ops
4142 # Don't try to undo changes to bigquery options. We're starting and
4243 # closing a new thread-local session if those are set.
@@ -47,25 +48,32 @@ def __enter__(self) -> None:
4748 self ._set_option (pat , val )
4849
4950 def __exit__ (self , * args ) -> None :
51+ # Avoid problems with circular imports.
52+ import bigframes ._config
53+ import bigframes .core .global_session
54+
5055 if self .undo :
5156 for pat , val in self .undo :
5257 self ._set_option (pat , val )
5358
5459 # TODO(tswast): What to do if someone nests several context managers
5560 # with separate "bigquery" options? We might need a "stack" of
5661 # sessions if we allow that.
57- if bigframes .options .is_bigquery_thread_local :
58- bigframes .close_session ()
62+ if bigframes ._config . options .is_bigquery_thread_local :
63+ bigframes .core . global_session . close_session ()
5964
6065 # Reset bigquery_options so that we're no longer thread-local.
61- bigframes .options ._local .bigquery_options = None
66+ bigframes ._config . options ._local .bigquery_options = None
6267
6368 def _set_option (self , pat , val ):
69+ # Avoid problems with circular imports.
70+ import bigframes ._config
71+
6472 root , attr = pat .rsplit ("." , 1 )
6573
6674 # We are now using a thread-specific session.
6775 if root == "bigquery" :
68- bigframes .options ._init_bigquery_thread_local ()
76+ bigframes ._config . options ._init_bigquery_thread_local ()
6977
70- parent = operator .attrgetter (root )(bigframes .options )
78+ parent = operator .attrgetter (root )(bigframes ._config . options )
7179 setattr (parent , attr , val )
0 commit comments