訊息模組函式

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

解析相對於 Message 定義和模組的名稱時,演算法會搜尋其路徑中找到的任何 Message 或子模組,並忽略非 Message 的值。

開頭為 '.' 的名稱視為完整合格名稱。尋找演算法會從最頂層的套件開始搜尋。舉例來說,假設有兩種訊息類型:

abc.xyz.SomeMessage
xyz.SomeMessage

搜尋相對於 abc.xyz.SomeMessage 會解析為 xyz.SomeMessage,而非 abc.xyz.SomeMessage。對於這類名稱,實際上會將 relative_to 參數忽略,且 relative_to 參數會一律設為 None。

如要進一步瞭解套件名稱解析,請參閱通訊協定緩衝區套件指定碼

引數
name
要查找的定義名稱。可以是完整名稱或相對名稱。
relative_to
搜尋與訊息定義或模組相關的定義。如果為 None,則會觸發完整名稱的搜尋。

傳回與該名稱相關聯的 EnumMessage 類別定義。

如果在所有搜尋路徑中都找不到任何定義,則會發出 DefinitionNotFoundError 錯誤。