protorpc.messages
パッケージは、次の位置ユーティリティ関数を提供します。
- find_definition(name, relative_to=None)
-
モジュール空間内を定義の名前で検索します。
検索アルゴリズムは、メッセージ定義に関連した名前または完全修飾名で定義を検索します。
relative_to
パラメータに関連した定義が見つからない場合は、relative_to
のコンテナに対して検索を実行します。relative_to
がネストされた Message である場合は、その Message の message_definition() を検索します。そのメッセージに message_definition() がない場合は、そのメッセージのモジュールを検索します。relative_to
がモジュールの場合、検索アルゴリズムは上位のモジュールを検索し、そのモジュールに対して相対的に検索します。モジュールが最上位モジュールである場合、検索アルゴリズムは完全修飾名を使用してメッセージを検索します。それでもメッセージが見つからない場合、検索は失敗し、メソッドは DefinitionNotFoundError を送出します。たとえば、次のように、実際のメッセージ定義
abc.xyz.SomeMessage
に対して相対的な定義foo.bar.ADefinition
を検索するとします。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 以外の値を無視します。
'.'
で始まる名前は完全修飾名とみなされます。検索アルゴリズムは一番上のパッケージから検索を開始します。たとえば、次の 2 つのメッセージ タイプがあるとします。abc.xyz.SomeMessage xyz.SomeMessage
.xyz.SomeMessage
をabc
に対して相対的に検索すると、xyz.SomeMessage
に解決され、abc.xyz.SomeMessage
にはなりません。このような種類の名前の場合、relative_to パラメータは実質的に無視され、常に None に設定されます。パッケージ名の解決の詳細については、プロトコル バッファ パッケージ指定子をご覧ください。
引数- name
- 検索する定義の名前。完全修飾名または相対名を指定できます。
- relative_to
- メッセージ定義またはモジュールに対して相対的に定義を検索します。None にすると、完全修飾名の検索になります。
名前に関連付けられた Enum または Message クラス定義を返します。
どの検索パスにも定義が見つからない場合は、DefinitionNotFoundError を送出します。