fields¶
- class oslo_versionedobjects.fields.BaseEnumField(**kwargs)¶
所有枚举字段类型的基类
不应直接实例化此类。而是对其进行子类化,并将 AUTO_TYPE 设置为 SomeEnum(),其中 SomeEnum 是 Enum 的子类。
- property valid_values¶
返回字段的有效值列表。
- class oslo_versionedobjects.fields.CoercedDict(*args, **kwargs)¶
强制其值的数据字典
字典实现,它会覆盖所有元素添加方法,并将要添加的元素强制转换为所需的元素类型
- setdefault(key, default=None)¶
如果键不在字典中,则使用默认值插入键。
如果字典中存在键,则返回键的值,否则返回默认值。
- update([E, ]**F) None. 使用 dict/iterable E 和 F 更新 D。¶
如果存在 E 并且具有 .keys() 方法,则执行:for k in E: D[k] = E[k] 如果存在 E 并且缺少 .keys() 方法,则执行:for k, v in E: D[k] = v 在任何一种情况下,之后都会执行:for k in F: D[k] = F[k]
- class oslo_versionedobjects.fields.CoercedList(*args, **kwargs)¶
强制其元素列表
列表实现,它会覆盖所有元素添加方法,并将要添加的元素强制转换为所需的元素类型
- append(x)¶
将对象附加到列表的末尾。
- extend(t)¶
通过附加可迭代对象中的元素来扩展列表。
- insert(i, x)¶
在索引之前插入对象。
- class oslo_versionedobjects.fields.CoercedSet(*args, **kwargs)¶
强制其值的集合
字典实现,它会覆盖所有元素添加方法,并将要添加的元素强制转换为所需的元素类型
- add(value)¶
将元素添加到集合。
如果该元素已存在,则此操作无效。
- symmetric_difference_update(values)¶
使用自身与另一个集合的对称差更新集合。
- update(values)¶
使用自身与其它集合的并集更新集合。
- class oslo_versionedobjects.fields.DictProxyField(dict_field_name, key_type=<class 'int'>)¶
描述符,允许我们将固定数据分配为 key_type 的字典
这允许我们拥有一个对象字段,该字段将是 key_type 键的字典,从而允许将其转换回字符串键的字典。
这将处理转换,而字典字段将确保我们在对象上存储原始的 JSON 可序列化数据。
key_type 应返回一种能够明确响应 str 的类型,以便对其调用 key_type 时产生相同的结果。
- exception oslo_versionedobjects.fields.ElementTypeError(expected, key, value)¶
- class oslo_versionedobjects.fields.EnumField(valid_values, **kwargs)¶
匿名枚举字段类型
此类允许声明匿名枚举类型,只需将其构造函数中传递有效值列表即可。但是,通常最好通过直接子类化 BaseEnumField 类型来创建显式命名的枚举类型。
- exception oslo_versionedobjects.fields.KeyTypeError(expected, value)¶
- class oslo_versionedobjects.fields.SensitiveString¶
一个可能包含敏感(密码)信息的字符串字段类型。
字符串值中的密码在字符串化时会被屏蔽。
- stringify(value)¶
返回值的简短字符串表示形式。
- class oslo_versionedobjects.fields.SensitiveStringField(**kwargs)¶
字段类型,在字段被字符串化时会屏蔽密码。
- class oslo_versionedobjects.fields.StateMachine(valid_values, **kwargs)¶
可以应用于 EnumField 以强制执行状态机的混合类
例如:在字段上设置以下代码将确保对象无法从 ERROR 转换到 ACTIVE
- 示例:
class FakeStateMachineField(fields.EnumField, fields.StateMachine): ACTIVE = 'ACTIVE' PENDING = 'PENDING' ERROR = 'ERROR' DELETED = 'DELETED' ALLOWED_TRANSITIONS = { ACTIVE: { PENDING, ERROR, DELETED, }, PENDING: { ACTIVE, ERROR }, ERROR: { PENDING, }, DELETED: {} # This is a terminal state } _TYPES = (ACTIVE, PENDING, ERROR, DELETED) def __init__(self, **kwargs): super(FakeStateMachineField, self).__init__( self._TYPES, **kwargs)
- coerce(obj, attr, value)¶
将值强制转换为合适的类型。
每次在对象上设置值时都会调用此方法,例如
foo.myint = 1
并且负责确保该值(此处为 1)是正确的类型,或者可以合理地进行转换。
这还会处理字段的潜在可为空性或默认性,并调用 FieldType 上的 coerce() 方法来实际执行强制转换。
- 参数:obj:
正在操作的对象
- 参数:attr:
正在设置的属性/字段的名称
- 参数:value:
正在设置的值
- 返回值:
正确类型的价值
- class oslo_versionedobjects.fields.UUIDField(**kwargs)¶
UUID 字段类型
警告
此类实际上并不验证 UUID。这将在 oslo.versionedobjects 的未来主要版本中发生
要验证您是否具有有效的 UUID,您需要在您自己的对象/fields.py 中执行以下操作
- 示例:
import oslo_versionedobjects.fields as ovo_fields class UUID(ovo_fields.UUID): def coerce(self, obj, attr, value): uuid.UUID(value) return str(value) class UUIDField(ovo_fields.AutoTypedField): AUTO_TYPE = UUID()
然后在您的对象中使用
<your_projects>.object.fields.UUIDField。这将在未来成为默认行为。