Documentação
Confconsole - Sistema de plug-ins (para devs)
Opções de menu ConfConsole podem ser facilmente adicionadas por meio de plugins.
Os plug-ins são arquivos de origem python que são colocados dentro do diretório ConfConsole. O ConfConsole carregará todos os arquivos aplicáveis e os fornecerá ao usuário como opções de menu.
Como são carregados os plugins?
Primeiro, uma árvore é gerada a partir de "plugins.d". Cada pasta é um menu ou sub-menu e cada script executável .py é uma entrada do menu da pasta pai. Nota plugins.d não tem uma descrição, pois não é escolhida de um menu.
Para cada plugin na árvore, o corpo principal (nível superior) do plugin é executado. Por causa disso, você não deve colocar nada além de configurar código relacionado aqui {onde?} e você definitivamente não deve confiar em outros plugins já sendo configurado. Note que variáveis adicionais e funções disponíveis para plugins são disponíveis para NOT neste momento.
O plugin .py docstring fornece a descrição para o menu- entrada em confconsole. Para definir uma descrição de entrada de menu para uma pasta, coloque um arquivo de texto "descrição" dentro da pasta.
Em seguida, o doOnce função (opcional) será executada uma vez após cada plugin ser carregado. Observe que, embora todos os plug- ins sejam carregados, nem todos os plug- ins estarão prontos neste momento. No entanto, você tem a capacidade de trabalhar com eles se você assim escolher. {o quê? como?}
Por último, a Comissão run função será executado sempre que o item de menu do seu plugin é clicado dentro confconsole. Se o run função não está presente em um plugin, então seu item de menu não será criado.
Como interajo com o usuário?
A console variável é uma instância do Console objeto em confconsole.py. É uma interface simples usando pythondialog-wrapper para permitir a funcionalidade básica do console gui. Isto, como acontece com todos os outros globais, será avaliável tão logo o doOnce A função é executada. Note que você deve forçar NEVER qualquer interação até que confconsole esteja completamente iniciado. Isto poderia causar problemas em construções sem cabeça, por exemplo, que esperam ser capazes de alcançar usage (primeira tela de confconsole) antes de qualquer interação.
Os seguintes métodos são válidos a partir de console:
- infobox( texto)
mostra o texto na tela, este é o bloqueio NOT se você quiser que a caixa bloqueie momentaneamente usar
time.sleep(seconds)depois. Caso contrário, isto é normalmente usado para exibir informações durante uma operação de longo prazo.retorna 0.
exemplo:
console.infobox("some text")
- simnão( texto)
mostra o texto na tela com um sim/não prompt. retorna 0 se sim, 1 se não.
exemplo:
console.yesno("Are you sure?")
- msgbox( título, texto, botão_ label="ok")
por padrão, exibe o texto na tela com um prompt ok. o ok pode ser alterado para qualquer coisa através do rótulo do botão. retorna 0
exemplo:
console.msgbox("Warning", "You may need to restart for changes to take effect")
- inputbox( título, texto, init='', ok_ label="OK", cancel_"Cancel")
mostra o texto na tela em caixa de título com uma caixa de entrada (começando com o valor
init) e uma prompt ok/cancelar que pode ser alterada através daok_labelecancel_labelargumentos.retorna uma tupla de (0 se ok ou 1 se cancelar, human_ input)
exemplo:
console.inputbox("Email", "Please enter you're email address", "user@example.com")
- menu( título, texto, opções, no_ cancel=False)
exibe texto na tela na caixa intitulada juntamente com uma lista de opções selecionáveis (escolhas), e opcionalmente um botão de cancelamento.
as escolhas devem ser uma lista ou tupla de comprimento 2, cada item de cada tupla sendo uma lista de strings. A primeira coleção de strings são os nomes dos itens, a segunda são as descrições dos itens.
retorna uma tupla de (0 se ok ou 1 se cancelar, opção)
- exemplo:
- console.menu("Número favorito", "escolha um número",
- [
[ '1', "descrição de qualidade para 1" ], [ '2', "descrição de qualidade para 2" ], [ '3', "descrição de qualidade para 3"]
]
)
- form( título, texto, campos, ok_label="Aplicar", cancel_"Cancel")
mostra o texto na tela na caixa de título, juntamente com uma série de caixas de entrada marcadas e um prompt de aplicação/cancela (os rótulos dos botões podem ser alterados através de argumentos de etiquetas)
- campos deve ser uma coleção de
(label, item, field_length, input_length)
onde
labelé uma string que irá mostrar antes da caixa de entrada eitemé o texto padrão escrito na entrada do campo.field_length e input_length são inteiros que especificam respectivamente o número de caracteres usados para mostrar o campo e o número máximo de caracteres que podem ser estes valores também determinam a escrita dos campos.
se field_length for 0 não pode ser modificado e seu conteúdo determina tamanho.
se o field_length é negativo o campo não pode ser alterado e o oposto do field_length determina seu tamanho. {huh?}
se o comprimento de entrada é 0, ele está definido como field_length
o valor de retorno é uma tupla de (status, campos) onde o status é (0 se ok ou 1 se cancelar). E os campos são o valor digitado para cada campo em ordem.
Consola é essencialmente apenas um invólucro para python dialog. Embora nem todos os métodos sejam expostos e nem todos os argumentos para esses métodos sejam expostos, a documentação para a janela python ainda se aplica de forma ampla.
http://pythondialog.sourceforge.net/doc/
Como eu interajo com outros plugins?
Para a comunicação interplugin existem algumas opções, em primeiro lugar, há o imp* funções, que lidam com a importação de plugins. É importante que você use isto para plug-ins e não para um normal import como a imp*
função irá retornar uma versão com o seu conjunto global adicional.
import irá carregá-lo como um ficheiro python normal.
As funções imp são as seguintes:
- impByName
- faz exatamente como implica, retorna uma lista de todos os plug-ins correspondentes ao nome dado
- impByDir
- retorna uma lista de todos os plug-ins dentro do nome do diretório fornecido (isto é, um sub-diretório de plugins.d)
- impByPath
- retorna um único plugin que corresponde ao caminho relativo exato dos plug- ins. d
Além dessas funções imp há um evento compartilhadoManager entre todos os plugins que também podem ser usados para a comunicação entre plug-ins. Este gestor de eventos é exposto como a variável eventManager
O gerenciador de eventos é bastante simples. Os eventos podem ser qualquer objeto hashable, embora normalmente faça mais sentido usar algo óbvio como uma string. Da mesma forma, um manipulador de eventos é qualquer objeto callável, mas geralmente uma função.
Existem 3 funções expostas do gestor de eventos
- add_ event( nome)
- isso adiciona um evento à lista de eventos de propriedade do gestor de eventos e retorna uma função de conveniência que irá disparar o evento. Note que esta função de conveniência é exatamente isso e não é necessário.
- add_handler( nome, manipulador)
- isto adiciona um manipulador para o evento correspondente. Se o evento não existir, ele é criado silenciosamente. Esta função devolve Nenhuma
- fire_ event( nome)
- isso chama cada manipulador na ordem em que foram registrados para o evento.
Outras Informações
Para um exemplo de um plugin mínimo válido, verifique plugins.d/example.py, para vê-lo em ação apenas chmod +x plugins.d/example.py e executar confconsole.
Para ver exemplos de outras funcionalidades, consulte o código fonte dos outros plugins fornecidos.