Neater文件夹与gData Python API共享

时间:2013-12-12 17:00:36

标签: python google-drive-api gdata

我目前正在开发一个自动共享Google云端硬盘文件夹的项目 根据我们的注册数据库与学生和老师联系。

该系统将用作学生和教师共享文件的简便方法。

这个项目的一个重要部分是保持一切结构,这样每个人都可以轻松使用。

我目前有代码在特定的Google云端硬盘帐户中创建结构,然后与相应的学生和老师分享:

-- Class Folders (Stores all the assignment and class folders)
-- Student (Stores all the shared Root student folders)
---- Student (id #) (Root student folder to be shared with student)
------ Courses (Holds all classes student is enrolled in)
-------- Algebra 1 (Example Class Folder)
---------- Class Files (Copy of Class Files the teacher shares with all students in class)
---------- Student Name - Assignments (Shared with teacher and student)
-- Teacher (Stores all the shared Root teacher folders)
---- Teacher (id #) (Root teacher folder to be shared with teacher)
------ Courses (Holds all the courses teacher is teaching)
-------- Algebra 1 (Example Class Folder)
---------- Class Files (Shared with students in class)
---------- Student 1 - Assignments
---------- Student 2 - Assignments

以上是当前的文件夹结构。

与所有人共享文件夹时,需要修改某些权限,修改文件夹权限或添加用户后,它会显示在Google云端硬盘“与我共享”的根目录中。

因此,在循环结构并且所有内容共享后,学生和教师“与我共享”区域看起来像一团糟。他们没有看到根“教师”或“学生”文件夹,而是看到了与他们共享的所有其他文件夹。

我想找到一种方法来包含根“Teacher”和“Student”文件夹中的所有共享文件夹,以便他们更容易找到该文件夹​​并将其移动到其驱动器。

以下是一些图片,以便更清楚地说明我正在努力实现的目标:

This is currently what is happening

如上所示,学生分配文件夹位于“Teacher”文件夹之外, 一旦完整批次运行,这将变得混乱,因为教师将在他们的根文件夹之外看到他们的所有学生。

This is what I'm looking for

这张图片显示了我正在寻找的内容,一个根文件夹可供教师移动到“我的驱动器”

目前该项目是使用gData Python API用Python编写的, 这是我写的共享文件夹的代码。

def share(client, folder_id, share_with, role):
    update_acl = False
    updated = False
    folder = client.GetResourceById(folder_id)
    acl_feed = client.GetResourceAcl(folder)
    try:
        for acl in acl_feed.entry:
            if acl.scope.value == share_with:
                print "DEBUG: ACL for %s exists, verifying role." % share_with
                update_acl = acl
        if update_acl:
            if update_acl.role.value == role:
                print "DEBUG: Current ACL entry Okay. %s = %s" % (update_acl.role.value, role)
            else:
                print "DEBUG: ACL Scope: %s ACL Role: %s" % (update_acl.scope.value, update_acl.role.value)
                update_acl.role.value = role
                update_acl.etag = None
                print "DEBUG: ACL Scope: %s ACL Role: %s" % (update_acl.scope.value, update_acl.role.value)
                client.UpdateAclEntry(update_acl, send_notification=False)
            updated = True
        #add new ACL entry with proper role for share_with
        elif not updated:
            print "DEBUG: Sharing with %s" % share_with
            acl_entry = gdata.docs.data.AclEntry(
                scope=gdata.acl.data.AclScope(value=share_with, type='user'),
                role=gdata.acl.data.AclRole(value=role))
            client.AddAclEntry(folder, acl_entry, send_notification=False)
    except (gdata.client.RequestError):
        pass

0 个答案:

没有答案