El paquete protorpc.messages
proporciona la siguiente función de utilidad posicional:
- find_definition(name, relative_to=None)
-
Buscar definición por nombre en módulo-espacio.
El algoritmo de búsqueda busca definiciones por nombre en relación con una definición de mensaje o por nombre completo. Si no se encuentra una definición relacionada con el parámetro
relative_to
, se busca en el contenedor derelative_to
. Sirelative_to
es un mensaje anidado, busca su message_definition(). Si ese mensaje no tiene message_definition(), busca en su módulo. Sirelative_to
es un módulo, el algoritmo de búsqueda busca el módulo que lo contiene y lo hace en relación con él. Si el módulo es un módulo de nivel superior, el algoritmo de búsqueda busca un mensaje con un nombre completo. Si sigue sin encontrar un mensaje, la búsqueda falla y el método genera un DefinitionNotFoundError.Por ejemplo, cuando buscas una definición
foo.bar.ADefinition
relacionada con una definición de mensaje realabc.xyz.SomeMessage
:find_definition('foo.bar.ADefinition', SomeMessage)
Los argumentos de este método siguen un patrón similar a la búsqueda de nombres completos:
abc.xyz.SomeMessage. foo.bar.ADefinition abc.xyz. foo.bar.ADefinition abc. foo.bar.ADefinition foo.bar.ADefinition
Cuando se resuelve el nombre relativo a las definiciones y los módulos de mensajes, el algoritmo busca cualquier mensaje o submódulo encontrado en su ruta, ignorando los valores que no son mensajes.
Un nombre que comienza con
'.'
se considera un nombre completo. El algoritmo de búsqueda comienza a buscar desde el paquete superior. Por ejemplo, supongamos dos tipos de mensaje:abc.xyz.SomeMessage xyz.SomeMessage
La búsqueda de
.xyz.SomeMessage
en relación conabc
se resuelve comoxyz.SomeMessage
y no comoabc.xyz.SomeMessage
. Para este tipo de nombre, el parámetro relative_to se omitió eficazmente y se estableció siempre en None.Para obtener más información sobre la resolución de nombres de paquetes, consulta el especificador de Paquetes de búferes de protocolo.
Argumentos- name
- Nombre de una definición para buscar. Puede ser totalmente calificado o relativo.
- relative_to
- Busca una definición relacionada con la definición del mensaje o módulo. Si se establece en None, genera una búsqueda de nombre completa.
Muestra una definición de clase Enum o Message asociada con el nombre.
genera un DefinitionNotFoundError si no se encuentra ninguna definición en ninguna ruta de búsqueda.