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,則會觸發完整名稱的搜尋。
傳回與該名稱相關聯的 Enum 或 Message 類別定義。
如果在所有搜尋路徑中都找不到任何定義,則會發出 DefinitionNotFoundError 錯誤。