消息模块函数

protorpc.messages 软件包提供了以下定位实用函数:

find_definition(name, relative_to=None)

根据模块空间中的名称查找定义。

查找算法根据相对于消息定义的名称或完全限定名称查找定义。如果没有找到相对于 relative_to 参数的定义,它将搜索 relative_to 的容器。如果 relative_to 是嵌套式消息,则会搜索其 message_definition()。如果该消息没有 message_definition(),则搜索其模块。如果 relative_to 是模块,则查找算法会搜索与之相对的包含模块和搜索。如果该模块是一个顶级模块,则查找算法会使用完全限定名称搜索消息。如果仍然没有找到消息,则搜索失败,并且该方法引发 DefinitionNotFoundError

例如,在查找任何 foo.bar.ADefinition 定义(相对于实际消息定义 abc.xyz.SomeMessage)时,请使用:

find_definition('foo.bar.ADefinition', SomeMessage)

该方法的参数所遵循的模式与完全限定名称搜索类似。

abc.xyz.SomeMessage. foo.bar.ADefinition
abc.xyz. foo.bar.ADefinition
abc. foo.bar.ADefinition
foo.bar.ADefinition

在解析相对于消息定义和模块的名称时,该算法会搜索路径中找到的所有消息或子模块,并忽略非消息值。

'.' 开头的名称将被视为完全限定名称。查找算法将从最顶层的包开始搜索。例如,假设有以下两种消息类型:

abc.xyz.SomeMessage
xyz.SomeMessage

搜索 .xyz.SomeMessage(相对于 abc)将解析为 xyz.SomeMessage,而不是 abc.xyz.SomeMessage。对于这种类型的名称,会有效忽略 relative_to 参数,并始终将其设置为 None。

如需详细了解程序包名称解析,请参阅 Protocol Buffer Package 说明符

参数
name
要查找的定义的名称。可以是完全限定名称,也可以是相对名称。
relative_to
搜索相对于消息定义或模块的定义。如果为 None,将导致完全限定名称搜索。

返回与名称关联的 EnumMessage 类定义。

如果在任何搜索路径中都找不到定义,则引发 DefinitionNotFoundError