def list_pending_volumes(email, **q_opts): caller_user = _check_authenticated(q_opts) # user must exist user = read_user(email) if user == None: raise Exception("No such user '%s'" % email) # privilege check--only admin can list other users' pending volumes if user.owner_id != caller_user.owner_id and not caller_user.is_admin: raise Exception("User '%s' is not sufficiently privileged" % caller_user.email) def __volume_from_access_request(var): return Volume.Read(var.volume_id, async=True) q_opts["map_func"] = __volume_from_access_request vols = VolumeAccessRequest.ListAll( { "VolumeAccessRequest.requester_owner_id ==": user.owner_id, "VolumeAccessRequest.status ==": VolumeAccessRequest.STATUS_PENDING }, **q_opts) ret = filter(lambda x: x != None, vols) return ret
def list_volume_user_ids(volume_name_or_id, **q_opts): caller_user = _check_authenticated(q_opts) volume_id = _get_volume_id(volume_name_or_id) def __user_from_access_request(req): return SyndicateUser.Read_ByOwnerID(req.requester_owner_id, async=True) q_opts["map_func"] = __user_from_access_request user_futs = VolumeAccessRequest.ListAll( {"VolumeAccessRequest.volume_id ==": volume_id}, **q_opts) storagetypes.wait_futures(user_futs) ret = [ u.email for u in filter(lambda x: x != None, [uf.get_result() for uf in user_futs]) ] return ret