bokeh.core.validation#

验证模块提供了对整个 Bokeh 模型集合执行完整性检查的功能。

要创建 Bokeh 可视化,核心任务是从bokeh.models中组装模型对象集合,形成一个图,该图表示应在客户端中创建的场景。可以使用模型对象直接“手动”执行此操作。但是,为了简化此过程,Bokeh 为用户提供了更高级别的接口,例如bokeh.plotting

这些接口自动化了常见的“组装”步骤,以确保以一致且可预测的方式创建 Bokeh 对象图。但是,无论使用什么接口,都有可能以不完整或在某种程度上毫无意义的方式将 Bokeh 模型组合在一起。

为了帮助诊断潜在的问题,Bokeh 在输出可视化以进行显示时执行验证步骤。此模块包含错误和警告代码,以及用于定义验证检查的辅助函数。

警告的一种用例是在用户意外执行他们可能不想执行的操作时大声地将其引导到正确的方向——例如,对于 EMPTY_LAYOUT 来说就是这种情况。由于警告不一定表示误用,因此它们是可配置的。要取消警告,请使用提供的 silence 函数。

>>> from bokeh.core.validation import silence
>>> from bokeh.core.validation.warnings import EMPTY_LAYOUT
>>> silence(EMPTY_LAYOUT, True)

错误代码#

这些定义了 Bokeh 验证检查的标准错误代码和消息。

1001 (BAD_COLUMN_NAME)

图形的属性设置为一个字段名称,该名称与GlyphRenderer的数据源中的任何列都不对应。

1002 (MISSING_GLYPH)

GlyphRenderer没有配置任何图形。

1003 (NO_SOURCE_FOR_GLYPH)

GlyphRenderer没有配置任何数据源。

1004 (REQUIRED_RANGE)

Plot缺少一个或多个必需的默认范围(将导致空白绘图)。

1005 (MISSING_GOOGLE_API_KEY)

Google Maps API 现在要求所有使用都提供 API 密钥。有关如何获取您自己的密钥以用于 Google 地图绘图的api_key属性的更多信息,请参阅https://developers.google.com/maps/documentation/javascript/get-api-key

1006 (NON_MATCHING_DATA_SOURCES_ON_LEGEND_ITEM_RENDERERS)

当 LegendItem.label 为字段类型时,LegendItem.renderers上的所有 data_sources 必须匹配。

1007 (MISSING_MERCATOR_DIMENSION)

MercatorTickerMercatorTickFormatter``模型必须将其``dimension 属性设置为 'lat''lon'

1008 (REQUIRED_SCALE)

Scale缺少一个或多个必需的默认比例尺(将导致空白绘图)。

1009 (INCOMPATIBLE_SCALE_AND_RANGE)

Scale类型与同一绘图维度上的一个或多个范围不兼容(将导致空白绘图)。

1011 (MALFORMED_GRAPH_SOURCE)

GraphSource配置不正确。

1012 (INCOMPATIBLE_MAP_RANGE_TYPE)

地图绘图只能支持Range1d类型,不支持数据范围。

1013 (INCOMPATIBLE_POINT_DRAW_RENDERER)

PointDrawTool渲染器只能引用XYGlyph模型。

1014 (INCOMPATIBLE_BOX_EDIT_RENDERER)

BoxEditTool渲染器只能引用Rect图形模型。

1015 (INCOMPATIBLE_POLY_DRAW_RENDERER)

PolyDrawTool渲染器只能引用MultiLinePatches图形模型。

1016 (INCOMPATIBLE_POLY_EDIT_RENDERER)

PolyEditTool渲染器只能引用MultiLinePatches图形模型。

1017 (INCOMPATIBLE_POLY_EDIT_VERTEX_RENDERER)

PolyEditTool vertex_renderer只能引用XYGlyph模型。

1018 (NO_RANGE_TOOL_RANGES)

RangeTool必须至少配置x_rangey_range之一。

1019 (DUPLICATE_FACTORS)

FactorRange必须为轴指定唯一的分类因子列表。

1020 (BAD_EXTRA_RANGE_NAME)

额外的范围名称配置了与任何范围都不对应的名称。

1021 (EQUAL_SLIDER_START_END)

noUiSlider必须具有不相等的起始和结束值。

1022 (MIN_PREFERRED_MAX_WIDTH)

预期 min_width <= width <= max_width

1023 (MIN_PREFERRED_MAX_HEIGHT)

预期 min_height <= height <= max_height

1024 (CDSVIEW_FILTERS_WITH_CONNECTED)

CDSView过滤器与具有连接拓扑的图形(如线或面片)不兼容。

1025 (INCOMPATIBLE_LINE_EDIT_RENDERER)

LineEditTool渲染器只能引用MultiLineLine图形模型。

1026 (INCOMPATIBLE_LINE_EDIT_INTERSECTION_RENDERER)

LineEditTool intersection_enderer只能引用LineGlyph模型。

1027 (REPEATED_LAYOUT_CHILD)

同一模型不能在布局中多次使用。

9999 (EXT)

表示自定义错误检查失败。

警告代码#

这些定义了 Bokeh 验证检查的标准警告代码和消息。

1000 (MISSING_RENDERERS)

Plot对象没有配置任何渲染器(将导致空白绘图)。

1002 (EMPTY_LAYOUT)

布局模型没有子元素(将导致空白布局)。

1004 (BOTH_CHILD_AND_ROOT)

每个组件只能在一个位置渲染,不能同时作为根元素和布局中的子元素。

9999 (EXT)

表示自定义警告检查失败。

辅助函数#

这些辅助函数可用于对 Bokeh 模型集合执行完整性检查,或将模型上的方法标记为警告或错误检查。

check_integrity(models: Iterable[Model]) ValidationIssues[source]#

收集与 Bokeh 模型集合相关的所有警告。

参数:

models (seq[Model]) – 要测试的模型集合

返回值:

所有警告和错误消息的集合

返回类型:

ValidationIssues

此函数将返回一个包含所有检测到的错误和/或警告条件的对象。例如,没有任何子元素的布局将向集合添加警告。

>>> empty_row = Row()

>>> check_integrity([empty_row])
ValidationIssues(
    warning=[
        ValidationIssue(
            code=1002,
            name="EMPTY_LAYOUT",
            text="Layout has no children",
            extra="Row(id='1001', ...)",
        ),
    ],
)
silence(warning: Warning, silence: bool = True) set[Warning][source]#

静默所有 Bokeh 模型上的特定警告。

参数:
  • warning (Warning) – 要静默的 Bokeh 警告

  • silence (bool) – 是否静默警告

返回值:

包含所有静默警告的集合

此函数向静默器集合添加或删除警告,在运行 check_integrity 时会引用该集合。如果将警告添加到静默器中,则永远不会引发该警告。

>>> from bokeh.core.validation.warnings import EMPTY_LAYOUT
>>> bokeh.core.validation.silence(EMPTY_LAYOUT, True)
{1002}

要重新启用警告,请使用相同的方法,但将 silence 参数设置为 false。

>>> bokeh.core.validation.silence(EMPTY_LAYOUT, False)
set()
error(code_or_name: int | str | Issue) Callable[[Callable[[...], str | None]], Validator][source]#

装饰器,用于标记 Bokeh 错误条件的验证器方法。

参数:

code_or_name (int, strIssue) – 来自 bokeh.validation.errors 的代码或自定义检查的字符串标签。

返回值:

Bokeh 模型方法的装饰器。

返回类型:

可调用对象。

被装饰的函数的名称必须以 _check 开头,并在检测到错误条件时返回字符串消息,如果未检测到错误条件则返回 None

示例

第一个示例使用 bokeh.validation.errors 中提供的标准错误的数字代码。此用法主要对 Bokeh 核心开发人员感兴趣。

from bokeh.validation.errors import REQUIRED_RANGES

@error(REQUIRED_RANGES)
def _check_no_glyph_renderers(self):
    if bad_condition: return "message"

第二个示例显示了如何通过向装饰器传递任意字符串标签来实现自定义警告检查。此用法主要对使用自己的自定义模型扩展 Bokeh 的任何人感兴趣。

@error("MY_CUSTOM_WARNING")
def _check_my_custom_warning(self):
    if bad_condition: return "message"
warning(code_or_name: int | str | Issue) Callable[[Callable[[...], str | None]], Validator][source]#

装饰器,用于标记 Bokeh 错误条件的验证器方法。

参数:

code_or_name (int, strIssue) – 来自 bokeh.validation.errors 的代码或自定义检查的字符串标签。

返回值:

Bokeh 模型方法的装饰器。

返回类型:

可调用对象。

被装饰的函数的名称应以 _check 开头,并在检测到错误条件时返回字符串消息,如果未检测到错误条件则返回 None

示例

第一个示例使用 bokeh.validation.warnings 中提供的标准警告的数字代码。此用法主要对 Bokeh 核心开发人员感兴趣。

from bokeh.validation.warnings import MISSING_RENDERERS

@warning(MISSING_RENDERERS)
def _check_no_glyph_renderers(self):
    if bad_condition: return "message"

第二个示例显示了如何通过向装饰器传递任意字符串标签来实现自定义警告检查。此用法主要对使用自己的自定义模型扩展 Bokeh 的任何人感兴趣。

@warning("MY_CUSTOM_WARNING")
def _check_my_custom_warning(self):
    if bad_condition: return "message"