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 编码类似字典的对象。
- 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.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.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