keystone.common.driver_hints 模块

class keystone.common.driver_hints.Hints[source]

基类: object

封装用于列出实体的驱动程序提示。

提示是影响从 list_<entities> 操作返回的实体的修饰符。它们通常传递给驱动程序,以指示正在请求哪些过滤、分页或列表限制操作。

驱动程序可以选择执行某些或全部列表提示,但它满足的任何过滤器都必须通过从列表中删除过滤器来标记。

一个 Hint 对象包含过滤器,这是一个可以公开访问的字典列表。它还包含一个名为 limit 的字典,它将指示我们希望将我们的列表限制在多少数据上。

如果发现过滤器永远无法匹配,则可以设置 cannot_match 以指示将没有匹配项,并且可以短路后端工作。

每个过滤器项由以下内容组成

  • name:正在匹配的属性的名称

  • value:正在与之匹配的值

  • comparator:操作,可以是 equals

    containsstartswithendswith

  • case_sensitive:任何比较是否应考虑

    大小写

add_filter(name, value, comparator: str = 'equals', case_sensitive: bool = False)[source]

将过滤器添加到公开可访问的过滤器列表中。

get_exact_filter_by_name(name)[source]

如果存在名称的精确过滤器,则返回过滤器键和值。

get_limit_or_max() int[source]

获取页面限制或最大页面大小

返回用户(或 API 流程)请求的页面限制(大小),或者如果未提供,则返回最大页面大小。此方法由 SQL 驱动程序调用。

返回 int:

页面大小

get_limit_with_default(default_limit: int | None = None) int[source]

返回查询的页面限制。

  1. limit 已在查询参数中设置

    min(limit, MAX_LIMIT)

  2. limit 未设置且 default_limit 已设置

    min(default_limit, MAX_LIMIT)

  1. limit 为 null,default_limit 为 null,CONF.list_limit 已设置

    min(CONF.list_limit, MAX_LIMIT)

  2. limit 为 null,default_limit 为 null,CONF.list_limit 为 null

    CONF.max_db_limit

set_limit(limit: int, truncated: bool = False)[source]

设置一个限制以指示列表应被截断。

set_marker(marker: str)[source]

设置一个标记,指向页面的最后一个条目。

keystone.common.driver_hints.truncated(f)[source]

确保在驱动程序列出实体方法中检测到列表截断。

这旨在包装驱动程序 list_{entity} 方法,以便计算结果列表是否已被截断。如果提示列表中找到 limit 字典,则我们将 limit 递增 1,以便要求包装函数提供比 limit 多一个实体,然后一旦生成了列表,我们将检查是否超过了原始 limit,在这种情况下,我们将截断回该 limit,并将 limit 字典中的“truncated”布尔值设置为“true”。