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

这将在未来成为默认行为。