Pergunta

Estou tentando criar um cliente simples de linha de comando para acessar as ações através das ligações do Python do Gio (sim, o principal requisito é usar o GIO).

Eu posso ver que, comparando com o seu antecessor Gnome-VFs, ele fornece alguns meios para fazer material de autenticação (subclassificação MountOperation), e até alguns métodos que são bastante específicos para compartilhamentos de samba, como set_domain().

Mas estou preso a este código:

import gio

fh = gio.File("smb://server_name/")

Se esse servidor precisar de autenticação, suponho que uma chamada para fh.mount_enclosing_volume() é necessário, pois esses métodos exigem um MountOperation como um parâmetro. O problema é que chamar esse método não faz nada, e o lógico fh.enumerate_children() (Para listar as ações disponíveis) que são falhas a seguir.

Alguém poderia fornecer um exemplo funcional de como isso seria feito com o GIO?

Foi útil?

Solução

O seguinte parece ser o código mínimo necessário para montar um volume:

def mount(f):
    op = gio.MountOperation()
    op.connect('ask-password', ask_password_cb)
    f.mount_enclosing_volume(op, mount_done_cb)

def ask_password_cb(op, message, default_user, default_domain, flags):
    op.set_username(USERNAME)
    op.set_domain(DOMAIN)
    op.set_password(PASSWORD)
    op.reply(gio.MOUNT_OPERATION_HANDLED)

def mount_done_cb(obj, res):
    obj.mount_enclosing_volume_finish(res)

(Derivado de GVFS-Mount.)

Além disso, você pode precisar de um Glib.Mainloop em execução porque as funções de montagem do Gio são assíncronas. Consulte o código-fonte GVFS-Mount para obter detalhes.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top