base

通用的内部对象模型

class oslo_versionedobjects.base.ComparableVersionedObject

提供比较方法的混合类

当需要比较对象时(例如在测试中),可以使用此混合类。

class oslo_versionedobjects.base.ObjectListBase(*args, **kwargs)

对象列表的混合类。

可以将此混合类添加为实现对象列表的对象的基础类。它添加了一个名为“objects”的字段,该字段是列表存储,并且本身的行为就像一个列表。它可以自动序列化对象列表。

class oslo_versionedobjects.base.TimestampedObject

带有时间戳字段的数据库支持对象的混合类。

从 oslo_db TimestampMixin 继承的 Sqlalchemy 模型将包含这些字段,并且相应的对象将受益于此混合类。

class oslo_versionedobjects.base.VersionedObject(context=None, **kwargs)

基础类和对象工厂。

这构成了可以通过 RPC 远程传输或实例化的所有对象的基础。只需定义从这个基础类继承的类,就可以使其可远程实例化。对象应实现必要的“get”类方法和适当的“save”对象方法。

obj_attr_is_set(attrname)

测试对象以查看是否存在 attrname。

如果命名的属性已设置值,则返回 True,否则返回 False。如果 attrname 不是此对象的有效属性,则引发 AttributeError。

classmethod obj_class_from_name(objname, objver)

根据名称和版本从注册表中返回一个类。

obj_clone()

创建一个副本。

classmethod obj_from_primitive(primitive, context=None)

对象逐字段的填充。

obj_get_changes()

返回已更改字段及其新值的字典。

obj_load_attr(attrname)

从真实对象加载额外的属性。

这应该加载 self.$attrname 并缓存任何可能对未来加载操作有用的数据。

obj_make_compatible(primitive, target_version)

使对象表示与目标版本兼容。

此方法负责获取对象的原始表示形式,并使其适合给定的 target_version。这可能意味着转换对象属性的格式,删除自目标版本以来添加的属性等。通常

  • 如果新版本的对象添加了字段,此例程应将其从旧版本中删除。

  • 如果新版本更改或限制了字段的格式,则应将其转换回仅了解旧版本的客户端可以容忍的内容。

  • 如果此对象依赖的对象被更新,则此对象也应进行版本更新。然后,此例程应将依赖对象回退到较低版本(通过调用其 obj_make_compatible()),如果此对象的请求版本早于添加新依赖对象时的版本。

参数:
  • primitiveobj_to_primitive() 的结果

  • target_version – 接收对象的请求版本

引发:

oslo_versionedobjects.exception.UnsupportedObjectError 如果由于某种原因无法进行转换

classmethod obj_name()

返回对象名称

返回用于远程水合的此对象的规范名称。

obj_reset_changes(fields=None, recursive=False)

重置已更改字段的列表。

参数:
  • fields – 要重置的字段列表,如果为 None,则为“all”。

  • recursive – 在正在重置的字段列表中任何子对象上调用 obj_reset_changes(recursive=True)。

这不是“恢复到以前的值”。

在递归重置中指定字段仅在顶层有效。所有内容都将重置为全部。

obj_to_primitive(target_version=None, version_manifest=None)

简单的基本情况反序列化。

这为 fields 中的每个项目调用 to_primitive()。

obj_what_changed()

返回已修改字段的集合。

save(context)

将更改的字段保存回存储。

这对于子类是可选的,但在此基础类中呈现以保持那些子类的一致性。

class oslo_versionedobjects.base.VersionedObjectDictCompat

提供字典键访问兼容性的混合类

如果对象需要支持使用字典项而不是对象属性访问属性,请从该类继承。这仅应作为临时措施,直到所有调用者都转换为使用现代属性访问为止。

class oslo_versionedobjects.base.VersionedObjectSerializer

一个 VersionedObject 感知的序列化器。

此方法实现了 Oslo 序列化器接口,并提供了序列化和反序列化 VersionedObject 实体。任何需要接受或返回 VersionedObjects 作为参数或结果值的服务都应将其传递给其 RPCClient 和 RPCServer 对象。

OBJ_BASE_CLASS

别名 VersionedObject

deserialize_entity(context, entity)

从原始形式反序列化某些内容。

参数:
  • ctxt – 反序列化形式的请求上下文

  • entity – 要反序列化的原始数据

返回值:

实体的反序列化形式

serialize_entity(context, entity)

将某些内容序列化为原始形式。

参数:
  • ctxt – 反序列化形式的请求上下文

  • entity – 要序列化的实体

返回值:

实体的序列化形式

oslo_versionedobjects.base.obj_make_list(context, list_obj, item_cls, db_list, **extra_args)

从原始列表构造一个对象列表。

此方法在 db_list 的每个项目上调用 item_cls._from_db_object(),并将结果对象添加到 list_obj。

参数:context:

请求上下文

参数:list_obj:

一个 ObjectListBase 对象

参数:item_cls:

列表中对象的 VersionedObject 类

参数:db_list:

要转换为对象的原始列表

参数:extra_args:

传递给 _from_db_object() 的额外参数

返回值:

list_obj

oslo_versionedobjects.base.obj_tree_get_versions(objname, tree=None)

构造依赖对象版本的映射。

此方法构建一个依赖对象版本的列表,给定一个具有其他对象作为字段的顶级对象。它递归地遍历树以确定顶级对象中可能包含的所有对象(按符号名称)以及每个对象的最大版本。结果是一个字典,例如

{'MyObject': '1.23', ... }
参数:
  • objname – 开始的顶级对象

  • tree – 内部使用,在此处传递 None。

返回值:

对象名称和版本的字典

oslo_versionedobjects.base.remotable(fn)

用于远程对象方法的装饰器。

oslo_versionedobjects.base.remotable_classmethod(fn)

用于远程类方法的装饰器。