{"action":"created","issue":{"url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/issues/850","labels_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/issues/850/labels{/name}","comments_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/issues/850/comments","events_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/issues/850/events","html_url":"https://github.com/GoogleCloudPlatform/gcloud-python/pull/850","id":72005135,"number":850,"title":"Using generated apitools client for storage uploads","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},"labels":[{"url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/labels/cla:%20yes","name":"cla: yes","color":"009800"},{"url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/labels/storage","name":"storage","color":"bfe5bf"}],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":9,"created_at":"2015-04-29T22:18:21Z","updated_at":"2015-05-07T07:03:19Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/pulls/850","html_url":"https://github.com/GoogleCloudPlatform/gcloud-python/pull/850","diff_url":"https://github.com/GoogleCloudPlatform/gcloud-python/pull/850.diff","patch_url":"https://github.com/GoogleCloudPlatform/gcloud-python/pull/850.patch"},"body":"See #848 \r\n\r\n@craigcitro As we discussed this is the \"testing sucks\" \"progress\" I've made so far.\r\n\r\nPositive outlook: The regression test passes"},"comment":{"url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/issues/comments/99750461","html_url":"https://github.com/GoogleCloudPlatform/gcloud-python/pull/850#issuecomment-99750461","issue_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-python/issues/850","id":99750461,"user":{"login":"craigcitro","id":468559,"avatar_url":"https://avatars.githubusercontent.com/u/468559?v=3","gravatar_id":"","url":"https://api.github.com/users/craigcitro","html_url":"https://github.com/craigcitro","followers_url":"https://api.github.com/users/craigcitro/followers","following_url":"https://api.github.com/users/craigcitro/following{/other_user}","gists_url":"https://api.github.com/users/craigcitro/gists{/gist_id}","starred_url":"https://api.github.com/users/craigcitro/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/craigcitro/subscriptions","organizations_url":"https://api.github.com/users/craigcitro/orgs","repos_url":"https://api.github.com/users/craigcitro/repos","events_url":"https://api.github.com/users/craigcitro/events{/privacy}","received_events_url":"https://api.github.com/users/craigcitro/received_events","type":"User","site_admin":false},"created_at":"2015-05-07T07:03:19Z","updated_at":"2015-05-07T07:03:19Z","body":"actually, it turned out i didn't really need any of the mocking code i added: the existing mocks already had sufficient coverage, i just needed to do a little cleanup.\r\n\r\ni've pushed an extra commit to a [branch in my fork](https://github.com/craigcitro/gcloud-python/tree/use-generated-apitools-client); i'm happy to do whatever's most convenient for getting you unblocked.\r\n\r\ntwo thoughts:\r\n\r\n1. i wouldn't put much faith in any mocking-based tests for media transfers. our experience shows there are too many corners, and subtle changes on the server side, to really trust that mocks remain valid. in particular, the tests here seem to mostly test the positive cases (\"does the upload/download work\"), whereas most of the interesting bugs we've run into are around the failure modes (of which there are far too many).\r\n\r\n2. i'd like to come back through and do a little cleanup around the use of apitools (i.e. i think some of the code can now be simplified), but i'm obviously not sitting on a lot of spare time right now. :smirk: i'm still optimistic that i'll get to it, though."}}