pyclbr — Suporte a navegador de módulos do Python

Código-fonte: Lib/pyclbr.py


O módulo pyclbr fornece informações limitadas sobre as funções, classes e métodos definidos em um módulo codificado em Python. As informações são suficientes para implementar um navegador de módulos. As informações são extraídas do código-fonte do Python em vez de importar o módulo, portanto, este módulo é seguro para uso com código não confiável. Essa restrição torna impossível o uso deste módulo com módulos não implementados no Python, incluindo todos os módulos de extensão padrão e opcionais.

pyclbr.readmodule(module, path=None)

Retorna um dicionário que mapeia os nomes de classe no nível do módulo aos descritores de classe. Se possível, descritores para classes base importadas estão incluídos. O parâmetro module é uma string com o nome do módulo a ser lido; pode ser o nome de um módulo dentro de um pacote. Se fornecido, path é uma sequência de caminhos de diretório anexada a sys.path, que é usada para localizar o código-fonte do módulo.

Esta função é a interface original e é mantida apenas para compatibilidade reversa. Ela retorna uma versão filtrada da seguinte.

pyclbr.readmodule_ex(module, path=None)

Retorna uma árvore baseada em dicionário que contém uma função ou descritores de classe para cada função e classe definida no módulo com uma instrução def ou class. O dicionário retornado mapeia os nomes das funções e das classes no nível do módulo para seus descritores. Objetos aninhados são inseridos no dicionário filho de seus pais. Como em readmodule, module nomeia o módulo a ser lido e path é anexado ao sys.path. Se o módulo que está sendo lido for um pacote, o dicionário retornado terá uma chave '__path__' cujo valor é uma lista que contém o caminho de pesquisa do pacote.

Novo na versão 3.7: Descritores para definições aninhadas. Eles são acessados através do novo atributo filho. Cada um tem um novo atributo pai.

Os descritores retornados por essas funções são instâncias das classes Function e Class. Não se espera que os usuários criem instâncias dessas classes.

Objetos Function

Instâncias da classe Function descrevem funções definidas por instruções def. Elas têm os seguintes atributos:

Function.file

Nome do arquivo no qual a função está definida.

Function.module

O nome do módulo que define a função descrita.

Function.name

O nome da função.

Function.lineno

O número da linha no arquivo em que a definição é iniciada.

Function.parent

Para funções de nível superior, None. Para funções aninhadas, o pai.

Novo na versão 3.7.

Function.children

Um dicionário que mapeia nomes para descritores para funções e classes aninhadas.

Novo na versão 3.7.

Function.is_async

True para funções que são definidas com o prefixo async. Caso contrário, False.

Novo na versão 3.10.

Objetos classe

Instâncias da classe Class descrevem classes definidas por instruções class. Elas têm os mesmos atributos que Functions e mais dois.

Class.file

Nome do arquivo no qual a classe está definida.

Class.module

O nome do módulo que define a classe descrita.

Class.name

O nome da classe.

Class.lineno

O número da linha no arquivo em que a definição é iniciada.

Class.parent

Para classes de nível superior, None. Para classes aninhadas, o pai.

Novo na versão 3.7.

Class.children

Um dicionário que mapeia nomes para descritores para funções e classes aninhadas.

Novo na versão 3.7.

Class.super

Uma lista de objetos Class que descreve as classes base imediatas da classe que está sendo descrita. Classes nomeadas como superclasses, mas que não podem ser descobertas por readmodule_ex() são listadas como uma string com o nome da classe em vez de como objetos de Class.

Class.methods

Um dicionário que mapeia nomes de métodos para números de linha. Isso pode ser derivado do dicionário filho mais novo, mas permanece para compatibilidade retroativa.