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 vonrelative_to
ausgeführt. Wennrelative_to
eine verschachtelte Nachricht ist, wird nach message_definition() gesucht. Wenn diese Nachricht keine message_definition() hat, wird in ihrem Modul gesucht. Istrelative_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 Nachrichtendefinitionabc.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 zuabc
wird inxyz.SomeMessage
und nicht inabc.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.