示例#1
0
    def getDocuments(cls, database, buddy=None, *path):
        helper = DocumentHelper(cls, database)

        if len(path) > 0:
            login = get_user_infos(uid=int(buddy))["login"]
            for doc in helper.by_dir(key="/" + "/".join([login] + list(path))):
                yield doc

        elif buddy:
            uid = utils.get_user_infos(login=database.name)["uid"]
            provider = int(buddy)
            shared_dirs = {}
            startkey = [provider, uid]
            endkey = [provider + 1, uid]
            for key, doc in helper.by_provider_and_participant(startkey=startkey, endkey=endkey):
                if doc.type == "application/x-directory":
                    shared_dirs[doc.path] = doc
                else:
                    if doc.dirpath in shared_dirs:
                        continue
                yield doc

        else:
            uid = utils.get_user_infos(login=database.name)["uid"]
            for key, doc in helper.by_provider_and_participant(group_level=1, reduce=True):
                if key[0] != uid:
                    # Retrieve provider infos from gss api
                    infos = utils.get_user_infos(uid=key[0])
                    yield cls(
                        filename=infos["login"],
                        dirpath=os.sep,
                        mode=0555 | stat.S_IFDIR,
                        uid=infos["uid"],
                        gid=infos["gid"],
                        type="application/x-directory",
                    )