Доступ к общим ресурсам Samba с помощью gio в python

Я пытаюсь сделать простой клиент командной строки для доступа к общим ресурсам через привязки Python к gio (да, главное требование — использовать gio).

Я вижу, что по сравнению с его предшественником gnome-vfs он предоставляет некоторые средства для аутентификации (подклассы MountOperation) и даже некоторые методы, которые весьма специфичны для общих ресурсов samba, например set_domain().

Но я застрял с этим кодом:

import gio

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

Если этому серверу требуется аутентификация, я полагаю, что необходим вызов fh.mount_enclosing_volume(), так как этот метод принимает MountOperation в качестве параметра. Проблема в том, что вызов этих методов ничего не делает, а логический fh.enumerate_children() (для перечисления доступных общих ресурсов), который следует за ним, терпит неудачу.

Кто-нибудь может привести рабочий пример того, как это можно сделать с помощью gio?


person azkotoki    schedule 02.01.2010    source источник


Ответы (1)


Ниже приведен минимальный код, необходимый для монтирования тома:

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)

(На основе gvfs-mount.)

Кроме того, вам может понадобиться запуск glib.MainLoop, поскольку функции монтирования GIO являются асинхронными. Подробности смотрите в исходном коде gvfs-mount.

person Johannes Sasongko    schedule 12.01.2010