Source code for bigframes._config.global_options

# Copyright 2025 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

"""
Configuration for BigQuery DataFrames. Do not depend on other parts of BigQuery
DataFrames from this package.
"""

from __future__ import annotations

import copy
from dataclasses import dataclass, field
import threading
from typing import Optional

import bigframes_vendored.pandas._config.config as pandas_config

import bigframes._config.bigquery_options as bigquery_options
import bigframes._config.compute_options as compute_options
import bigframes._config.display_options as display_options
import bigframes._config.experiment_options as experiment_options
import bigframes._config.sampling_options as sampling_options


@dataclass
class ThreadLocalConfig(threading.local):
    # If unset, global settings will be used
    bigquery_options: Optional[bigquery_options.BigQueryOptions] = None
    # Note: use default factory instead of default instance so each thread initializes to default values
    display_options: display_options.DisplayOptions = field(
        default_factory=display_options.DisplayOptions
    )
    sampling_options: sampling_options.SamplingOptions = field(
        default_factory=sampling_options.SamplingOptions
    )
    compute_options: compute_options.ComputeOptions = field(
        default_factory=compute_options.ComputeOptions
    )
    experiment_options: experiment_options.ExperimentOptions = field(
        default_factory=experiment_options.ExperimentOptions
    )


[docs] class Options: """Global options affecting BigQuery DataFrames behavior. Do not construct directly. Instead, refer to :attr:`bigframes.pandas.options`. """
[docs] def __init__(self): self.reset()
[docs] def reset(self) -> Options: """Reset the option settings to defaults. Returns: bigframes._config.Options: Options object with default values. """ self._local = ThreadLocalConfig() # BigQuery options are special because they can only be set once per # session, so we need an indicator as to whether we are using the # thread-local session or the global session. self._bigquery_options = bigquery_options.BigQueryOptions() return self
def _init_bigquery_thread_local(self): """Initialize thread-local options, based on current global options.""" # Already thread-local, so don't reset any options that have been set # already. No locks needed since this only modifies thread-local # variables. if self._local.bigquery_options is not None: return self._local.bigquery_options = copy.deepcopy(self._bigquery_options) self._local.bigquery_options._session_started = False @property def bigquery(self) -> bigquery_options.BigQueryOptions: """Options to use with the BigQuery engine. Returns: bigframes._config.bigquery_options.BigQueryOptions: Options for BigQuery engine. """ if self._local.bigquery_options is not None: # The only way we can get here is if someone called # _init_bigquery_thread_local. return self._local.bigquery_options return self._bigquery_options @property def display(self) -> display_options.DisplayOptions: """Options controlling object representation. Returns: bigframes._config.display_options.DisplayOptions: Options for controlling object representation. """ return self._local.display_options @property def sampling(self) -> sampling_options.SamplingOptions: """Options controlling downsampling when downloading data to memory. The data can be downloaded into memory explicitly (e.g., to_pandas, to_numpy, values) or implicitly (e.g., matplotlib plotting). This option can be overridden by parameters in specific functions. Returns: bigframes._config.sampling_options.SamplingOptions: Options for controlling downsampling. """ return self._local.sampling_options @property def compute(self) -> compute_options.ComputeOptions: """Thread-local options controlling object computation. Returns: bigframes._config.compute_options.ComputeOptions: Thread-local options for controlling object computation """ return self._local.compute_options @property def experiments(self) -> experiment_options.ExperimentOptions: """Options controlling experiments Returns: bigframes._config.experiment_options.ExperimentOptions: Thread-local options for controlling experiments """ return self._local.experiment_options @property def is_bigquery_thread_local(self) -> bool: """Indicator that we're using a thread-local session. A thread-local session can be started by using `with bigframes.option_context("bigquery.some_option", "some-value"):`. Returns: bool: A boolean value, where a value is True if a thread-local session is in use; otherwise False. """ return self._local.bigquery_options is not None @property def _allow_large_results(self) -> bool: """The effective 'allow_large_results' setting. This value is `self.compute.allow_large_results` if set (not `None`), otherwise it defaults to `self.bigquery.allow_large_results`. Returns: bool: Whether large query results are permitted. - `True`: The BigQuery result size limit (e.g., 10 GB) is removed. - `False`: Results are restricted to this limit (potentially faster). BigQuery will raise an error if this limit is exceeded. """ if self.compute.allow_large_results is None: return self.bigquery.allow_large_results return self.compute.allow_large_results
options = Options() option_context = pandas_config.option_context