Acessando o Samba compartilha com Gio em Python
-
22-09-2019 - |
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?
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.