#----------------------------------------------------------------------------- # Copyright (c) 2012 - 2021, Anaconda, Inc., and Bokeh Contributors. # All rights reserved. # # The full license is in the file LICENSE.txt, distributed with this software. #----------------------------------------------------------------------------- """ Utilities for specifying, validating, and documenting configuration options. """ #----------------------------------------------------------------------------- # Boilerplate #----------------------------------------------------------------------------- import logging # isort:skip log = logging.getLogger(__name__) #----------------------------------------------------------------------------- # Imports #----------------------------------------------------------------------------- # Standard library imports from typing import Any, Dict # Bokeh imports from ..core.has_props import HasProps #----------------------------------------------------------------------------- # Globals and constants #----------------------------------------------------------------------------- __all__ = ( 'Options', ) #----------------------------------------------------------------------------- # General API #----------------------------------------------------------------------------- [docs]class Options(HasProps): ''' Leverage the Bokeh properties type system for specifying and validating configuration options. Subclasses of ``Options`` specify a set of configuration options using standard Bokeh properties: .. code-block:: python class ConnectOpts(Options): host = String(default="127.0.0.1", help="a host value") port = Int(default=5590, help="a port value") Then a ``ConnectOpts`` can be created by passing a dictionary containing keys and values corresponding to the configuration options, as well as any additional keys and values. The items corresponding to the properties on ``ConnectOpts`` will be ***removed*** from the dictionary. This can be useful for functions that accept their own set of config keyword arguments in addition to some set of Bokeh model properties. ''' def __init__(self, kw: Dict[str, Any]) -> None: # remove any items that match our declared properties props: Dict[str, Any] = {} for k in self.properties(): if k in kw: props[k] = kw.pop(k) super().__init__(**props) #----------------------------------------------------------------------------- # Dev API #----------------------------------------------------------------------------- #----------------------------------------------------------------------------- # Private API #----------------------------------------------------------------------------- #----------------------------------------------------------------------------- # Code #-----------------------------------------------------------------------------