Source code for bigframes_vendored.pandas._config.config

# Contains code from https://github.com/pandas-dev/pandas/blob/main/pandas/_config/config.py
import contextlib
import operator


[docs] class option_context(contextlib.ContextDecorator): """ Context manager to temporarily set thread-local options in the `with` statement context. You need to invoke as ``option_context(pat, val, [(pat, val), ...])``. .. note:: `"bigquery"` options can't be changed on a running session. Setting any of these options creates a new thread-local session that only lives for the lifetime of the context manager. **Examples:** >>> import bigframes >>> with bigframes.option_context('display.max_rows', 10, 'display.max_columns', 5): ... pass """
[docs] def __init__(self, *args) -> None: if len(args) % 2 != 0 or len(args) < 2: raise ValueError( "Need to invoke as option_context(pat, val, [(pat, val), ...])." ) self.ops = list(zip(args[::2], args[1::2]))
def __enter__(self) -> None: # Avoid problems with circular imports. import bigframes._config self.undo = [ (pat, operator.attrgetter(pat)(bigframes._config.options)) for pat, _ in self.ops # Don't try to undo changes to bigquery options. We're starting and # closing a new thread-local session if those are set. if not pat.startswith("bigquery.") ] for pat, val in self.ops: self._set_option(pat, val) def __exit__(self, *args) -> None: # Avoid problems with circular imports. import bigframes._config import bigframes.core.global_session if self.undo: for pat, val in self.undo: self._set_option(pat, val) # TODO(tswast): What to do if someone nests several context managers # with separate "bigquery" options? We might need a "stack" of # sessions if we allow that. if bigframes._config.options.is_bigquery_thread_local: bigframes.core.global_session.close_session() # Reset bigquery_options so that we're no longer thread-local. bigframes._config.options._local.bigquery_options = None def _set_option(self, pat, val): # Avoid problems with circular imports. import bigframes._config root, attr = pat.rsplit(".", 1) # We are now using a thread-specific session. if root == "bigquery": bigframes._config.options._init_bigquery_thread_local() parent = operator.attrgetter(root)(bigframes._config.options) setattr(parent, attr, val)