def create_set_iam_policy_request()

in analytics-hub/snippets/create_listing_python/main.py [0:0]


def create_set_iam_policy_request(client: bigquery_analyticshub_v1.AnalyticsHubServiceClient, listing_id: str, role: str, member: str):
    existingPolicy = listing_get_iam_policy(client, listing_id)
    existingPolicyDict = MessageToDict(existingPolicy)
    if existingPolicyDict:
        policy = {
            "etag": base64.b64decode(existingPolicyDict['etag']),
            "bindings": []
        }
        bindingForRoleFound = False
        if 'bindings' in existingPolicyDict:
            policy['bindings'] = existingPolicyDict['bindings'].copy()
            for binding in policy['bindings']:
                if binding['role'] == role:
                    binding['members'].append(member)
                    bindingForRoleFound = True
        if not bindingForRoleFound:
            policy['bindings'].append({
                "role": role,
                "members": [ member ]
            })
        request = iam_policy_pb2.SetIamPolicyRequest(
            resource=listing_id,
            policy=policy
        )
        return request
    return False