{"action":"created","comment":{"url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/pulls/comments/27519899","id":27519899,"diff_hunk":"@@ -0,0 +1,916 @@\n+``gcloud.storage`` API\n+======================\n+\n+Connection / Authorization\n+--------------------------\n+\n+- Inferred defaults used to create connection if none configured explicitly\n+\n+  - credentials (derived from GAE / GCE environ if present).\n+\n+  - ``project`` (derived from GAE / GCE environ if present).\n+\n+  - ``bucket`` (derived from GAE / GCE environ if present).\n+\n+- By calling methods which require authentication\n+\n+  .. code-block:: python\n+\n+   >>> from gcloud import storage\n+   >>> bucket = storage.get_bucket('my-bucket')\n+\n+  the default connection \"just works\" out of the box and will be lazily\n+  loaded and stored after the first use.\n+\n+- Set defaults in a declarative fashion\n+\n+  .. code-block:: python\n+\n+   >>> storage.set_defaults()\n+\n+  or instead of using implicit behavior, pass in defaults\n+\n+  .. code-block:: python\n+\n+   >>> storage.set_defaults(connection=connection, project='some-project')\n+   ...                      bucket=some_bucket)\n+\n+  though not all are needed\n+\n+  .. code-block:: python\n+\n+   >>> storage.set_defaults(project='some-project', bucket=some_bucket)\n+\n+- Declaratively set defaults one-by-one\n+\n+  .. code-block:: python\n+\n+   >>> storage.set_default_bucket(some_bucket)\n+   >>> storage.set_default_connection(connection)\n+   >>> storage.set_default_project(project)\n+\n+\n+Manage buckets\n+--------------\n+\n+Create a new bucket\n+\n+.. code-block:: python\n+\n+   >>> from gcloud import storage\n+   >>> new_bucket = storage.create_bucket(bucket_name)\n+\n+.. warning::\n+  If the bucket already exists, this method will throw an exception\n+  corresponding to the `409 conflict`_ status code in the response.\n+\n+If you desire to be declarative, you may pass in a connection and a project\n+to override the defaults\n+\n+.. code-block:: python\n+\n+   >>> new_bucket = storage.create_bucket(bucket_name, connection=connection,\n+   ...                                    project=project)\n+\n+.. note::\n+  All methods in the ``storage`` package accept ``connection`` as an optional\n+  parameter. (Only ``create_bucket`` and ``list_buckets`` accept ``project``\n+  to override the default.)\n+\n+Retrieve an existing bucket\n+\n+.. code-block:: python\n+\n+   >>> existing_bucket = storage.get_bucket(bucket_name)\n+\n+but if the bucket does not exist an exception will occur\n+\n+.. code-block:: python\n+\n+   >>> existing_bucket = storage.get_bucket(bucket_name)\n+   Traceback (most recent call last):\n+     File \"<stdin>\", line 1, in <module>\n+   gcloud.exceptions.NotFound: 404 Some Message\n+\n+To get a null response instead of an exception, use\n+:func:`lookup_bucket <gcloud.storage.api.lookup_bucket>`\n+\n+.. code-block:: python\n+\n+   >>> non_existent = storage.lookup_bucket(bucket_name)\n+   >>> print non_existent\n+   None\n+\n+To retrieve multiple buckets in a single request\n+\n+.. code-block:: python\n+\n+   >>> bucket1, bucket2, bucket3 = storage.get_buckets('bucket-name1',\n+   ...                                                 'bucket-name2',\n+   ...                                                 'bucket-name3')\n+\n+This is equivalent to\n+\n+.. code-block:: python\n+\n+   >>> with storage.Batch():\n+   ...     bucket_future1 = storage.get_bucket('bucket-name1')\n+   ...     bucket_future2 = storage.get_bucket('bucket-name2')\n+   ...     bucket_future3 = storage.get_bucket('bucket-name3')\n+   ...\n+   >>> bucket1 = bucket_future1.get()\n+   >>> bucket2 = bucket_future2.get()\n+   >>> bucket3 = bucket_future3.get()\n+\n+To list all buckets associated to the default project\n+\n+.. code-block:: python\n+\n+   >>> for bucket in storage.list_buckets():\n+   ...     print bucket\n+   <Bucket: foo>\n+   <Bucket: bar>\n+   <Bucket: baz>\n+\n+or to use a project other than the default\n+\n+.. code-block:: python\n+\n+   >>> for bucket in storage.list_buckets('some-project'):\n+   ...     print bucket\n+\n+To limit the list of buckets returned,\n+:func:`list_buckets() <gcloud.storage.list_buckets>` accepts optional\n+arguments\n+\n+.. code-block:: python\n+\n+   >>> bucket_iterator = storage.list_buckets(max_results=2,\n+   ...                                        page_token='next-bucket-name',\n+   ...                                        prefix='foo',\n+   ...                                        projection='noAcl',\n+   ...                                        fields=None)\n+   >>> for bucket in bucket_iterator:\n+   ...     print bucket\n+\n+See the `buckets list`_ documentation for details.\n+\n+.. _buckets list: https://cloud.google.com/storage/docs/json_api/v1/buckets/list\n+\n+To delete a bucket\n+\n+.. code-block:: python\n+\n+   >>> storage.delete_bucket(bucket_name)\n+\n+.. warning::\n+  Deleting a bucket should happen very infrequently. Be careful that you\n+  actually mean to delete the bucket.\n+\n+.. note::\n+  We use the term blob interchangeably with \"object\" when referring to the\n+  API. The Google Cloud Storage documentation use object, but we use ``blob``\n+  instead to avoid confusion with the Python builtin ``object``.\n+\n+In the case that the bucket has existing blobs, the backend\n+will return a `409 conflict`_ and raise\n+\n+.. code-block:: python\n+\n+   >>> storage.delete_bucket(bucket_name)\n+   Traceback (most recent call last):\n+     File \"<stdin>\", line 1, in <module>\n+   gcloud.exceptions.Conflict: 409 Some Message\n+\n+this can be addressed by using the ``force`` keyword\n+\n+   >>> storage.delete_bucket(bucket_name, force=True)\n+\n+Even using ``force=True`` will fail if the bucket contains more than 256\n+blobs. In this case, delete the blobs manually before deleting the bucket.\n+\n+.. _409 conflict: http://en.wikipedia.org/wiki/List_of_HTTP_status_codes#4xx_Client_Error\n+\n+Working with Buckets\n+--------------------\n+\n+To create a bucket object directly\n+\n+.. code-block:: python\n+\n+   >>> bucket = storage.Bucket('bucket-name')\n+   >>> bucket.exists()\n+   False\n+   >>> bucket.create()\n+   >>> bucket.exists()\n+   True\n+\n+You can also use an explicit connection when calling\n+:class:`Bucket <gcloud.storage.bucket.Bucket>` methods which make HTTP\n+requests\n+\n+.. code-block:: python\n+\n+   >>> bucket = storage.Bucket('bucket-name')\n+   >>> bucket.exists(connection=connection)\n+   False\n+   >>> bucket.create(connection=connection)\n+\n+By default, just constructing a :class:`Bucket <gcloud.storage.bucket.Bucket>`\n+does not load any of the associated bucket metadata. To load all bucket\n+properties\n+\n+.. code-block:: python\n+\n+   >>> bucket = storage.Bucket('bucket-name')\n+   >>> print bucket.last_sync\n+   None\n+   >>> print bucket.self_link\n+   None\n+   >>> bucket.reload()\n+   >>> # May be necessary to include projection and fields for last sync\n+   >>> bucket.last_sync\n+   datetime.datetime(2015, 1, 1, 12, 0)\n+   >>> bucket.self_link\n+   u'https://www.googleapis.com/storage/v1/b/bucket-name'\n+\n+Instead of calling\n+:meth:`Bucket.reload() <gcloud.storage.bucket.Bucket.reload>`, you\n+can load the properties when the object is instantiated by using the\n+``eager`` keyword\n+\n+.. code-block:: python\n+\n+   >>> bucket = storage.Bucket('bucket-name', eager=True)\n+   >>> bucket.last_sync\n+   datetime.datetime(2015, 1, 1, 12, 0)\n+\n+As with using :class:`Bucket <gcloud.storage.bucket.Bucket>` methods,\n+you can also pass an explicit ``connection`` in when using ``eager=True``.\n+\n+To delete a bucket\n+\n+.. code-block:: python\n+\n+   >>> bucket.delete()\n+\n+or\n+\n+.. code-block:: python\n+\n+   >>> bucket.delete(force=True)\n+\n+as above.\n+\n+To make updates to the bucket use\n+:meth:`Bucket.patch() <gcloud.storage.bucket.Bucket.patch>`\n+\n+.. code-block:: python\n+\n+   >>> bucket.versioning_enabled = True\n+   >>> bucket.patch()\n+\n+If there are no updates to send, an exception will occur\n+\n+.. code-block:: python\n+\n+   >>> bucket.patch()\n+   Traceback (most recent call last):\n+     File \"<stdin>\", line 1, in <module>\n+   ValueError: No updates to send.\n+\n+In total, the properties that can be updated are\n+\n+.. code-block:: python\n+\n+   >>> bucket.acl = [\n+   ...     ACLEntity('project-editors-111111', 'OWNER'),\n+   ...     ACLEntity('project-owners-111111', 'OWNER'),\n+   ...     ACLEntity('project-viewers-111111, 'READER'),\n+   ...     ACLEntity('user-01234, 'OWNER'),\n+   ... ]\n+   >>> bucket.cors = [\n+   ...     {\n+   ...       'origin': ['http://example.appspot.com'],\n+   ...       'responseHeader': ['Content-Type'],\n+   ...       'method': ['GET', 'HEAD', 'DELETE'],\n+   ...       'maxAgeSeconds': 3600,\n+   ...     }\n+   ... ]\n+   >>> bucket.default_object_acl = [\n+   ...     ACLEntity('project-owners-111111', 'OWNER'),\n+   ...     ACLEntity('user-01234, 'OWNER'),\n+   ... ]\n+   >>> bucket.lifecycle = [\n+   ...     {\n+   ...         'action': {'type': 'Delete'},\n+   ...         'condition': {'age': 365},\n+   ...     },\n+   ... ]\n+   >>> bucket.location = 'ASIA'\n+   >>> bucket.logging = {\n+   ...     'logBucket': 'bucket-name',\n+   ...     'logObjectPrefix': 'foo/',\n+   ... }\n+   >>> bucket.storage_class = 'DURABLE_REDUCED_AVAILABILITY'\n+   >>> bucket.versioning_enabled = True\n+   >>> bucket.website = {\n+   ...     'mainPageSuffix': 'index.html',\n+   ...     'notFoundPage': '404.html',\n+   ... }\n+\n+In general, many of these properties are optional and will not need to be\n+used (or changed from the defaults).\n+\n+In addition, a bucket has several read-only properties\n+\n+.. code-block:: python\n+\n+   >>> bucket.etag\n+   u'CAI='\n+   >>> bucket.id\n+   u'bucket-name'\n+   >>> bucket.metageneration\n+   2L\n+   >>> bucket.name\n+   u'bucket-name'\n+   >>> bucket.owner\n+   <ACL Entity: project-owners-111111 (OWNER)>\n+   >>> bucket.project_number\n+   111111L\n+   >>> bucket.self_link\n+   u'https://www.googleapis.com/storage/v1/b/bucket-name'\n+   >>> bucket.time_created\n+   datetime.datetime(2015, 1, 1, 12, 0)\n+\n+See `buckets`_ specification for more details. `Access control`_ data is\n+complex enough to be a topic of its own. We provide the\n+:class:`ACLEntity <gcloud.storage.acl.ACLEntity>` class to represent these\n+objects and will discuss more further on.\n+\n+.. _buckets: https://cloud.google.com/storage/docs/json_api/v1/buckets\n+.. _Access control: https://cloud.google.com/storage/docs/access-control\n+\n+.. note::\n+  **BREAKING THE FOURTH WALL**: Note that ``storage.buckets.update`` is","path":"docs/storage-surface.rst","position":355,"original_position":355,"commit_id":"d84dc388bff63d5a938de59613ba4bb367cdc698","original_commit_id":"d84dc388bff63d5a938de59613ba4bb367cdc698","user":{"login":"thobrla","id":3239120,"avatar_url":"https://avatars.githubusercontent.com/u/3239120?v=3","gravatar_id":"","url":"https://api.github.com/users/thobrla","html_url":"https://github.com/thobrla","followers_url":"https://api.github.com/users/thobrla/followers","following_url":"https://api.github.com/users/thobrla/following{/other_user}","gists_url":"https://api.github.com/users/thobrla/gists{/gist_id}","starred_url":"https://api.github.com/users/thobrla/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/thobrla/subscriptions","organizations_url":"https://api.github.com/users/thobrla/orgs","repos_url":"https://api.github.com/users/thobrla/repos","events_url":"https://api.github.com/users/thobrla/events{/privacy}","received_events_url":"https://api.github.com/users/thobrla/received_events","type":"User","site_admin":false},"body":"If you ever offer update down the road, this will be quite confusing.  At the service level, it's really updating a specific set of metadata fields while leaving others the same.  While \"update\" might be semantically correct for those fields, if the operation is being applied to a bucket (or object) resource, patch is more appropriate.","created_at":"2015-03-31T20:30:57Z","updated_at":"2015-03-31T20:30:57Z","html_url":"https://github.com/GoogleCloudPlatform/gcloud-python/pull/761#discussion_r27519899","pull_request_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/pulls/761","_links":{"self":{"href":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/pulls/comments/27519899"},"html":{"href":"https://github.com/GoogleCloudPlatform/gcloud-python/pull/761#discussion_r27519899"},"pull_request":{"href":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/pulls/761"}}},"pull_request":{"url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/pulls/761","id":31974027,"html_url":"https://github.com/GoogleCloudPlatform/gcloud-python/pull/761","diff_url":"https://github.com/GoogleCloudPlatform/gcloud-python/pull/761.diff","patch_url":"https://github.com/GoogleCloudPlatform/gcloud-python/pull/761.patch","issue_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/issues/761","number":761,"state":"open","locked":false,"title":"Storage \"Interface Driven Design\" Document","user":{"login":"dhermes","id":520669,"avatar_url":"https://avatars.githubusercontent.com/u/520669?v=3","gravatar_id":"","url":"https://api.github.com/users/dhermes","html_url":"https://github.com/dhermes","followers_url":"https://api.github.com/users/dhermes/followers","following_url":"https://api.github.com/users/dhermes/following{/other_user}","gists_url":"https://api.github.com/users/dhermes/gists{/gist_id}","starred_url":"https://api.github.com/users/dhermes/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dhermes/subscriptions","organizations_url":"https://api.github.com/users/dhermes/orgs","repos_url":"https://api.github.com/users/dhermes/repos","events_url":"https://api.github.com/users/dhermes/events{/privacy}","received_events_url":"https://api.github.com/users/dhermes/received_events","type":"User","site_admin":false},"body":"Still in flux (as of filing).\r\n\r\nFollow along changes in:\r\nwww.googledrive.com/host/0B8el7dRo8mVOMk1HbFk4TVhDaEE\r\n\r\n/cc @jgeewax @tseaver I'll ping Travis when it is complete.\r\n\r\n**UPDATE (March 30)**: @thobrla PTAL. @jgeewax asked me to design the final state of the desired surface area (all inspired by your bug #545). Our current code uses `projection=noAcl` to avoid loading ACL info with other metadata, while this hypothetical design ditches that concept.","created_at":"2015-03-25T22:48:23Z","updated_at":"2015-03-31T20:30:57Z","closed_at":null,"merged_at":null,"merge_commit_sha":"ee64a7d268905f7f44fd8cb8e3a4de91e321d285","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/pulls/761/commits","review_comments_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/pulls/761/comments","review_comment_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/pulls/comments{/number}","comments_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/issues/761/comments","statuses_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/statuses/d84dc388bff63d5a938de59613ba4bb367cdc698","head":{"label":"dhermes:storage-surface-doc","ref":"storage-surface-doc","sha":"d84dc388bff63d5a938de59613ba4bb367cdc698","user":{"login":"dhermes","id":520669,"avatar_url":"https://avatars.githubusercontent.com/u/520669?v=3","gravatar_id":"","url":"https://api.github.com/users/dhermes","html_url":"https://github.com/dhermes","followers_url":"https://api.github.com/users/dhermes/followers","following_url":"https://api.github.com/users/dhermes/following{/other_user}","gists_url":"https://api.github.com/users/dhermes/gists{/gist_id}","starred_url":"https://api.github.com/users/dhermes/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dhermes/subscriptions","organizations_url":"https://api.github.com/users/dhermes/orgs","repos_url":"https://api.github.com/users/dhermes/repos","events_url":"https://api.github.com/users/dhermes/events{/privacy}","received_events_url":"https://api.github.com/users/dhermes/received_events","type":"User","site_admin":false},"repo":{"id":23001795,"name":"gcloud-python","full_name":"dhermes/gcloud-python","owner":{"login":"dhermes","id":520669,"avatar_url":"https://avatars.githubusercontent.com/u/520669?v=3","gravatar_id":"","url":"https://api.github.com/users/dhermes","html_url":"https://github.com/dhermes","followers_url":"https://api.github.com/users/dhermes/followers","following_url":"https://api.github.com/users/dhermes/following{/other_user}","gists_url":"https://api.github.com/users/dhermes/gists{/gist_id}","starred_url":"https://api.github.com/users/dhermes/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dhermes/subscriptions","organizations_url":"https://api.github.com/users/dhermes/orgs","repos_url":"https://api.github.com/users/dhermes/repos","events_url":"https://api.github.com/users/dhermes/events{/privacy}","received_events_url":"https://api.github.com/users/dhermes/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/dhermes/gcloud-python","description":"Google Cloud Python Client Library","fork":true,"url":"https://api.github.com/repos/dhermes/gcloud-python","forks_url":"https://api.github.com/repos/dhermes/gcloud-python/forks","keys_url":"https://api.github.com/repos/dhermes/gcloud-python/keys{/key_id}","collaborators_url":"https://api.github.com/repos/dhermes/gcloud-python/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/dhermes/gcloud-python/teams","hooks_url":"https://api.github.com/repos/dhermes/gcloud-python/hooks","issue_events_url":"https://api.github.com/repos/dhermes/gcloud-python/issues/events{/number}","events_url":"https://api.github.com/repos/dhermes/gcloud-python/events","assignees_url":"https://api.github.com/repos/dhermes/gcloud-python/assignees{/user}","branches_url":"https://api.github.com/repos/dhermes/gcloud-python/branches{/branch}","tags_url":"https://api.github.com/repos/dhermes/gcloud-python/tags","blobs_url":"https://api.github.com/repos/dhermes/gcloud-python/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/dhermes/gcloud-python/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/dhermes/gcloud-python/git/refs{/sha}","trees_url":"https://api.github.com/repos/dhermes/gcloud-python/git/trees{/sha}","statuses_url":"https://api.github.com/repos/dhermes/gcloud-python/statuses/{sha}","languages_url":"https://api.github.com/repos/dhermes/gcloud-python/languages","stargazers_url":"https://api.github.com/repos/dhermes/gcloud-python/stargazers","contributors_url":"https://api.github.com/repos/dhermes/gcloud-python/contributors","subscribers_url":"https://api.github.com/repos/dhermes/gcloud-python/subscribers","subscription_url":"https://api.github.com/repos/dhermes/gcloud-python/subscription","commits_url":"https://api.github.com/repos/dhermes/gcloud-python/commits{/sha}","git_commits_url":"https://api.github.com/repos/dhermes/gcloud-python/git/commits{/sha}","comments_url":"https://api.github.com/repos/dhermes/gcloud-python/comments{/number}","issue_comment_url":"https://api.github.com/repos/dhermes/gcloud-python/issues/comments{/number}","contents_url":"https://api.github.com/repos/dhermes/gcloud-python/contents/{+path}","compare_url":"https://api.github.com/repos/dhermes/gcloud-python/compare/{base}...{head}","merges_url":"https://api.github.com/repos/dhermes/gcloud-python/merges","archive_url":"https://api.github.com/repos/dhermes/gcloud-python/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/dhermes/gcloud-python/downloads","issues_url":"https://api.github.com/repos/dhermes/gcloud-python/issues{/number}","pulls_url":"https://api.github.com/repos/dhermes/gcloud-python/pulls{/number}","milestones_url":"https://api.github.com/repos/dhermes/gcloud-python/milestones{/number}","notifications_url":"https://api.github.com/repos/dhermes/gcloud-python/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/dhermes/gcloud-python/labels{/name}","releases_url":"https://api.github.com/repos/dhermes/gcloud-python/releases{/id}","created_at":"2014-08-15T20:18:30Z","updated_at":"2015-03-31T19:54:01Z","pushed_at":"2015-03-31T19:54:00Z","git_url":"git://github.com/dhermes/gcloud-python.git","ssh_url":"git@github.com:dhermes/gcloud-python.git","clone_url":"https://github.com/dhermes/gcloud-python.git","svn_url":"https://github.com/dhermes/gcloud-python","homepage":"http://googlecloudplatform.github.io/gcloud-python/","size":11121,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"GoogleCloudPlatform:master","ref":"master","sha":"4785201d9b4368f705376e1ccd0547c991abf33b","user":{"login":"GoogleCloudPlatform","id":2810941,"avatar_url":"https://avatars.githubusercontent.com/u/2810941?v=3","gravatar_id":"","url":"https://api.github.com/users/GoogleCloudPlatform","html_url":"https://github.com/GoogleCloudPlatform","followers_url":"https://api.github.com/users/GoogleCloudPlatform/followers","following_url":"https://api.github.com/users/GoogleCloudPlatform/following{/other_user}","gists_url":"https://api.github.com/users/GoogleCloudPlatform/gists{/gist_id}","starred_url":"https://api.github.com/users/GoogleCloudPlatform/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GoogleCloudPlatform/subscriptions","organizations_url":"https://api.github.com/users/GoogleCloudPlatform/orgs","repos_url":"https://api.github.com/users/GoogleCloudPlatform/repos","events_url":"https://api.github.com/users/GoogleCloudPlatform/events{/privacy}","received_events_url":"https://api.github.com/users/GoogleCloudPlatform/received_events","type":"Organization","site_admin":false},"repo":{"id":16316451,"name":"gcloud-python","full_name":"GoogleCloudPlatform/gcloud-python","owner":{"login":"GoogleCloudPlatform","id":2810941,"avatar_url":"https://avatars.githubusercontent.com/u/2810941?v=3","gravatar_id":"","url":"https://api.github.com/users/GoogleCloudPlatform","html_url":"https://github.com/GoogleCloudPlatform","followers_url":"https://api.github.com/users/GoogleCloudPlatform/followers","following_url":"https://api.github.com/users/GoogleCloudPlatform/following{/other_user}","gists_url":"https://api.github.com/users/GoogleCloudPlatform/gists{/gist_id}","starred_url":"https://api.github.com/users/GoogleCloudPlatform/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GoogleCloudPlatform/subscriptions","organizations_url":"https://api.github.com/users/GoogleCloudPlatform/orgs","repos_url":"https://api.github.com/users/GoogleCloudPlatform/repos","events_url":"https://api.github.com/users/GoogleCloudPlatform/events{/privacy}","received_events_url":"https://api.github.com/users/GoogleCloudPlatform/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/GoogleCloudPlatform/gcloud-python","description":"Google Cloud Client Library for Python","fork":false,"url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python","forks_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/forks","keys_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/keys{/key_id}","collaborators_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/teams","hooks_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/hooks","issue_events_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/issues/events{/number}","events_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/events","assignees_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/assignees{/user}","branches_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/branches{/branch}","tags_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/tags","blobs_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/git/refs{/sha}","trees_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/git/trees{/sha}","statuses_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/statuses/{sha}","languages_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/languages","stargazers_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/stargazers","contributors_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/contributors","subscribers_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/subscribers","subscription_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/subscription","commits_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/commits{/sha}","git_commits_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/git/commits{/sha}","comments_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/comments{/number}","issue_comment_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/issues/comments{/number}","contents_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/contents/{+path}","compare_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/compare/{base}...{head}","merges_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/merges","archive_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/downloads","issues_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/issues{/number}","pulls_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/pulls{/number}","milestones_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/milestones{/number}","notifications_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/labels{/name}","releases_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/releases{/id}","created_at":"2014-01-28T15:51:47Z","updated_at":"2015-03-31T19:53:23Z","pushed_at":"2015-03-31T20:04:34Z","git_url":"git://github.com/GoogleCloudPlatform/gcloud-python.git","ssh_url":"git@github.com:GoogleCloudPlatform/gcloud-python.git","clone_url":"https://github.com/GoogleCloudPlatform/gcloud-python.git","svn_url":"https://github.com/GoogleCloudPlatform/gcloud-python","homepage":"http://googlecloudplatform.github.io/gcloud-python/","size":30755,"stargazers_count":161,"watchers_count":161,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":85,"mirror_url":null,"open_issues_count":66,"forks":85,"open_issues":66,"watchers":161,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/pulls/761"},"html":{"href":"https://github.com/GoogleCloudPlatform/gcloud-python/pull/761"},"issue":{"href":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/issues/761"},"comments":{"href":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/issues/761/comments"},"review_comments":{"href":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/pulls/761/comments"},"review_comment":{"href":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/pulls/761/commits"},"statuses":{"href":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/statuses/d84dc388bff63d5a938de59613ba4bb367cdc698"}}}}