Funktionen des Moduls "Messages"

Das Paket protorpc.messages bietet die folgende positionsbezogene Hilfsfunktion:

find_definition(name, relative_to=None)

Finden von Definitionen nach Name im Modulbereich

Mit dem Find-Algorithmus kann eine Definitionssuche nach relativen Namen zu einer Nachrichtendefinition oder nach voll qualifizierten Namen durchgeführt werden. Wird keine relative Definition zum Parameter relative_to gefunden, wird die Suche im Container von relative_to ausgeführt. Wenn relative_to eine verschachtelte Nachricht ist, wird nach message_definition() gesucht. Wenn diese Nachricht keine message_definition() hat, wird in ihrem Modul gesucht. Ist relative_to ein Modul, sucht der Find-Algorithmus nach dem Modul, in dem es enthalten ist, und führt eine relative Suche dazu aus. Wenn es sich bei dem Modul um ein Modul auf oberster Ebene handelt, sucht der Find-Algorithmus nach einer Nachricht mit einem voll qualifizierten Namen. Wird dann noch immer keine Nachricht gefunden, schlägt die Suche fehl und die Methode löst einen DefinitionNotFoundError aus.

Betrachten wir beispielsweise die Suche nach einer beliebigen Definition foo.bar.ADefinition relativ zu einer tatsächlichen Nachrichtendefinition abc.xyz.SomeMessage:

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

Die Argumente dieser Methode folgen einem Muster, das einer Suche nach voll qualifizierten Namen ähnelt:

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

Beim Auflösen des Namens relativ zu den Nachrichtendefinitionen und Modulen durchsucht der Algorithmus alle Nachrichten bzw. Untermodule in diesem Pfad und ignoriert dabei Werte, die keinen Nachrichten zugeordnet sind.

Namen, die mit '.' beginnen, werden als voll qualifizierte Namen angesehen. Der Find-Algorithmus beginnt mit der Suche im obersten Paket. Gehen wir beispielsweise von zwei Nachrichtentypen aus:

abc.xyz.SomeMessage
xyz.SomeMessage

Die Suche nach .xyz.SomeMessage relativ zu abc wird in xyz.SomeMessage und nicht in abc.xyz.SomeMessage aufgelöst. Für diese Art von Namen wird der Parameter "relative_to" ignoriert und immer auf "None" gesetzt.

Weitere Informationen zur Auflösung von Paketnamen finden Sie unter Paketbezeichner "protocol buffers".

Argumente
name
Name der zu suchenden Definition. Kann voll qualifiziert oder relativ sein.
relative_to
Sucht nach einer Definition relativ zur Nachrichtendefinition oder zum Modul. Bei "None" wird eine Suche nach einem voll qualifizierten Namen ausgeführt.

Gibt eine Klassendefinition Enum oder Message zurück, die dem Namen zugeordnet ist.

Löst einen DefinitionNotFoundError aus, wenn in keinem Suchpfad eine Definition gefunden wird.