#-----------------------------------------------------------------------------
# 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
#-----------------------------------------------------------------------------
from __future__ import annotations
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
#-----------------------------------------------------------------------------