{"action":"created","issue":{"url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/issues/1659","repository_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python","labels_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/issues/1659/labels{/name}","comments_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/issues/1659/comments","events_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/issues/1659/events","html_url":"https://github.com/GoogleCloudPlatform/gcloud-python/issues/1659","id":143396964,"number":1659,"title":"blob.acl.save_predefined() only works for private","user":{"login":"pdknsk","id":1097609,"avatar_url":"https://avatars.githubusercontent.com/u/1097609?v=3","gravatar_id":"","url":"https://api.github.com/users/pdknsk","html_url":"https://github.com/pdknsk","followers_url":"https://api.github.com/users/pdknsk/followers","following_url":"https://api.github.com/users/pdknsk/following{/other_user}","gists_url":"https://api.github.com/users/pdknsk/gists{/gist_id}","starred_url":"https://api.github.com/users/pdknsk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pdknsk/subscriptions","organizations_url":"https://api.github.com/users/pdknsk/orgs","repos_url":"https://api.github.com/users/pdknsk/repos","events_url":"https://api.github.com/users/pdknsk/events{/privacy}","received_events_url":"https://api.github.com/users/pdknsk/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":1,"created_at":"2016-03-25T00:53:21Z","updated_at":"2016-03-26T22:24:15Z","closed_at":null,"body":"[From the documentation.](https://googlecloudplatform.github.io/gcloud-python/stable/storage-acl.html#gcloud.storage.acl.ACL.save_predefined)\r\n\r\n> Must be one of the keys in [_PREDEFINED_ACLS](https://github.com/tseaver/gcloud-python/blob/1a210341811aff3b4185f830b07e87b22c1ef73d/gcloud/storage/acl.py#L171)\r\n\r\n```Python\r\n    _PREDEFINED_ACLS = frozenset([\r\n        \"private\",\r\n        \"project-private\",\r\n        \"public-read\",\r\n        \"public-read-write\",\r\n        \"authenticated-read\",\r\n        \"bucket-owner-read\",\r\n        \"bucket-owner-full-control\",\r\n    ])\r\n```\r\n\r\nLet's try.\r\n```Python\r\n>>> blob.acl.save_predefined('public-read')\r\n...\r\ngcloud.exceptions.BadRequest: 400 Invalid string value: 'public-read'. Allowed values: [authenticatedread, bucketownerfullcontrol, bucketownerread, private, projectprivate, publicread]\r\n>>> blob.acl.save_predefined('publicread')\r\n...\r\nValueError: Invalid predefined ACL: publicread\r\n```\r\nCoincidentally, the [tests](https://github.com/tseaver/gcloud-python/blob/1a210341811aff3b4185f830b07e87b22c1ef73d/gcloud/storage/test_acl.py#L633) only try *private*."},"comment":{"url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/issues/comments/201942355","html_url":"https://github.com/GoogleCloudPlatform/gcloud-python/issues/1659#issuecomment-201942355","issue_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/issues/1659","id":201942355,"user":{"login":"pdknsk","id":1097609,"avatar_url":"https://avatars.githubusercontent.com/u/1097609?v=3","gravatar_id":"","url":"https://api.github.com/users/pdknsk","html_url":"https://github.com/pdknsk","followers_url":"https://api.github.com/users/pdknsk/followers","following_url":"https://api.github.com/users/pdknsk/following{/other_user}","gists_url":"https://api.github.com/users/pdknsk/gists{/gist_id}","starred_url":"https://api.github.com/users/pdknsk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pdknsk/subscriptions","organizations_url":"https://api.github.com/users/pdknsk/orgs","repos_url":"https://api.github.com/users/pdknsk/repos","events_url":"https://api.github.com/users/pdknsk/events{/privacy}","received_events_url":"https://api.github.com/users/pdknsk/received_events","type":"User","site_admin":false},"created_at":"2016-03-26T22:24:15Z","updated_at":"2016-03-26T22:24:15Z","body":"I have confirmed that editing ```_PREDEFINED_ACLS``` to use the suggested values makes it work. The bug is that it uses the XML API names rather than the JSON API names. I think both should be valid in ```gcloud-python```, as ```gsutil``` uses the former.\r\n\r\nPS. ```public-read-write``` only applies to buckets, so isn't listed in the allowed values."}}