keystone.common.utils module

class keystone.common.utils.SmarterEncoder(*, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, sort_keys=False, indent=None, separators=None, default=None)[source]

基类: JSONEncoder

帮助 JSON 编码类似字典的对象。

default(obj)[source]

在子类中实现此方法,以便为 o 返回可序列化的对象,或调用基本实现(以引发 TypeError)。

例如,要支持任意迭代器,您可以这样实现 default

def default(self, o):
    try:
        iterable = iter(o)
    except TypeError:
        pass
    else:
        return list(iterable)
    # Let the base class default method raise the TypeError
    return super().default(o)
class keystone.common.utils.WhiteListedItemFilter(whitelist, data)[source]

基类: object

keystone.common.utils.attr_as_boolean(val_attr)[source]

从字符串中解码布尔值。

我们显式地测试一个表示 False 的值,它可以是 oslo strutils.FALSE_STRINGS 中指定的几种格式之一。所有其他字符串值(包括空字符串)都被视为表示 True。

keystone.common.utils.auth_str_equal(provided, known)[source]

常量时间字符串比较。

参数 provided:

第一个字符串

参数 known:

第二个字符串

返回值:

如果字符串相等则返回 True。

此函数接受两个字符串并对其进行比较。它旨在用于进行身份验证目的的比较,以帮助防止时序攻击。当将此函数用于此目的时,请始终将用户提供的密码作为第一个参数提供。此函数所花费的时间始终是此字符串长度的因素。

keystone.common.utils.check_endpoint_url(url)[source]

检查 URL 的替换。

无效的 URL 如下:不在白名单中的替换的 URL

检查 URL 中的替换,以确保它们有效且在白名单中。

参数:

url (str) – 要验证的 URL

返回类型:

引发:

keystone.exception.URLValidationError – 如果 URL 无效

keystone.common.utils.create_directory(directory, keystone_user_id=None, keystone_group_id=None)[source]

如果目录不存在,则尝试创建目录。

参数:
  • directory – 包含要创建的目录路径的字符串。

  • keystone_user_id – 运行 keystone 的进程的系统 ID。

  • keystone_group_id – 运行 keystone 的组的系统 ID。

keystone.common.utils.flatten_dict(d, parent_key='')[source]

展平嵌套字典。

将具有嵌套值的字典转换为单层扁平字典,每个键都带有点符号。

keystone.common.utils.format_url(url, substitutions, silent_keyerror_failures=None)[source]

使用给定的替换格式化用户定义的 URL。

参数:
  • url (string) – 要格式化的 URL

  • substitutions (dict) – 用于替换的字典

  • silent_keyerror_failures (list) – 如果在替换尝试中发生 KeyError 异常,我们应该保持静默的键

返回值:

格式化的 URL

keystone.common.utils.get_certificate_issuer_dn(cert_pem)[source]

从 PEM 证书内容中获取颁发者 DN。

参数:

cert_pem (str) – PEM 证书内容

返回类型:

颁发者 DN 的 JSON 数据

引发:

keystone.exception.ValidationError – 如果 PEM 证书内容无效

keystone.common.utils.get_certificate_subject_dn(cert_pem)[source]

从 PEM 证书内容中获取主题 DN。

参数:

cert_pem (str) – PEM 证书内容

返回类型:

主题 DN 的 JSON 数据

引发:

keystone.exception.ValidationError – 如果 PEM 证书内容无效

keystone.common.utils.get_certificate_thumbprint(cert_pem)[source]

从 PEM 证书内容中获取证书指纹。

参数:

cert_pem (str) – PEM 证书内容

返回类型:

证书指纹

keystone.common.utils.get_unix_group(group=None)[source]

获取 gid 和组名。

这是一个方便的实用程序,它接受各种可能表示 unix 组的输入。如果成功,它将返回 gid 和名称。有效的输入是

字符串

首先,字符串被认为是组名,并在该名称下尝试查找。如果未找到名称,则尝试将字符串转换为整数并将其作为 gid 进行查找。

int

整数被解释为 gid。

None 被解释为使用当前进程的有效组。

如果输入是有效类型但未找到组,则会引发 KeyError。如果输入不是有效类型,则会引发 TypeError。

参数:

group (object) – 指定要查找的组的字符串、整数或 None。

返回值:

gid 和名称的元组

keystone.common.utils.get_unix_user(user=None)[source]

获取 uid 和用户名。

这是一个方便的实用程序,它接受各种可能表示 unix 用户的输入。如果成功,它将返回 uid 和名称。有效的输入是

字符串

首先,字符串被认为是用户名,并在该名称下尝试查找。如果未找到名称,则尝试将字符串转换为整数并将其作为 uid 进行查找。

int

整数被解释为 uid。

None 被解释为使用当前进程的有效用户。

如果输入是有效类型但未找到用户,则会引发 KeyError。如果输入不是有效类型,则会引发 TypeError。

参数:

user (object) – 指定要查找的用户字符串、整数或 None。

返回值:

uid 和名称的元组

keystone.common.utils.hash_access_key(access)[source]
keystone.common.utils.is_not_url_safe(name)[source]

检查字符串是否包含任何 URL 保留字符。

keystone.common.utils.isotime(at=None, subsecond=False)[source]

以 ISO 8601 格式字符串化时间。

Python 为 datetime.datetime 对象提供了一个类似实例方法,称为 isoformat()。由 isoformat() 生成的字符串的格式存在一些问题

1) 由 isotime() 生成的字符串用于令牌和其他公共 API,我们无法在不进行弃用期间的情况下对其进行更改。isoformat() 生成的字符串格式不相同,因此我们无法简单地更改它。

2) 由 isoformat() 生成的字符串在微秒为 0 时不包含微秒。这可能会显示为随机故障,因为解析器可能被编写为始终期望微秒,并且在大多数情况下会正确解析。

参数:
  • at (datetime.datetime) – 可选的 datetime 对象,用于返回字符串。

  • subsecond (bool) – 如果为 true,则返回的字符串将表示微秒精度,但仅精确到秒。例如,datetime.datetime(2016, 9, 14, 14, 1, 13, 970223) 将返回 2016-09-14T14:01:13.000000Z

返回值:

以 ISO 8601 格式表示的时间字符串。

返回类型:

str

keystone.common.utils.list_url_unsafe_chars(name)[source]

返回保留字符列表。

keystone.common.utils.lower_case_hostname(url)[source]

将 URL 的主机名更改为小写。

keystone.common.utils.nested_contexts(*contexts)[source]
keystone.common.utils.parse_expiration_date(expiration_date)[source]
keystone.common.utils.remove_standard_port(url)[source]
keystone.common.utils.resource_uuid(value)[source]

将输入转换为有效的 UUID 十六进制数字。

keystone.common.utils.setup_remote_pydev_debug()[source]