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,将导致完全限定名称搜索。
如果在任何搜索路径中都找不到定义,则引发 DefinitionNotFoundError。