)]}'
{"id":"openstack%2Fpython-swiftclient~32703","triplet_id":"openstack%2Fpython-swiftclient~master~I35f8824537f0484362dd6646c91789fac02fa075","project":"openstack/python-swiftclient","branch":"master","topic":"swift-transid","hashtags":[],"change_id":"I35f8824537f0484362dd6646c91789fac02fa075","subject":"add optional \u0027response_dict\u0027 parameters to many calls into which they\u0027ll return a dictionary of the response status, reason and headers","status":"MERGED","created":"2013-06-12 12:02:24.000000000","updated":"2013-06-21 19:13:58.000000000","submitted":"2013-06-21 19:13:58.000000000","submitter":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"total_comment_count":12,"unresolved_comment_count":0,"has_review_started":true,"meta_rev_id":"89028cb32704c3cf99e381193d2dc434d3a917b2","_number":32703,"virtual_id_number":32703,"owner":{"_account_id":7661,"name":"Mark Seger","email":"Mark.Seger@hp.com","username":"markseger"},"actions":{},"labels":{"Verified":{"approved":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"all":[{"value":0,"_account_id":866,"name":"Chmouel Boudjnah","email":"chmouel@chmouel.com","username":"chmouel"},{"value":2,"date":"2013-06-21 19:13:57.000000000","_account_id":3,"name":"Jenkins","username":"jenkins"},{"value":0,"_account_id":917,"name":"Chuck Thier","email":"cthier@gmail.com","username":"cthier"},{"value":0,"_account_id":2696,"name":"Darrell Bishop","email":"dbishop@nvidia.com","username":"darrellb"},{"value":0,"_account_id":7661,"name":"Mark Seger","email":"Mark.Seger@hp.com","username":"markseger"}],"values":{"-2":"Fails","-1":"Doesn\u0027t seem to work"," 0":"No score","+1":"Works for me","+2":"Verified"},"description":"","default_value":0,"optional":true},"Code-Review":{"approved":{"_account_id":917,"name":"Chuck Thier","email":"cthier@gmail.com","username":"cthier"},"all":[{"value":0,"_account_id":866,"name":"Chmouel Boudjnah","email":"chmouel@chmouel.com","username":"chmouel"},{"value":0,"_account_id":3,"name":"Jenkins","username":"jenkins"},{"value":2,"date":"2013-06-21 19:12:42.000000000","_account_id":917,"name":"Chuck Thier","email":"cthier@gmail.com","username":"cthier"},{"value":2,"date":"2013-06-21 16:49:07.000000000","_account_id":2696,"name":"Darrell Bishop","email":"dbishop@nvidia.com","username":"darrellb"},{"value":0,"date":"2013-06-20 11:56:08.000000000","permitted_voting_range":{"min":0,"max":1},"_account_id":7661,"name":"Mark Seger","email":"Mark.Seger@hp.com","username":"markseger"}],"values":{"-2":"Do not merge","-1":"This patch needs further work before it can be merged"," 0":"No score","+1":"Looks good to me, but someone else must approve","+2":"Looks good to me (core reviewer)"},"description":"","default_value":0,"optional":true},"Workflow":{"approved":{"_account_id":917,"name":"Chuck Thier","email":"cthier@gmail.com","username":"cthier"},"all":[{"value":0,"_account_id":866,"name":"Chmouel Boudjnah","email":"chmouel@chmouel.com","username":"chmouel"},{"value":0,"_account_id":3,"name":"Jenkins","username":"jenkins"},{"value":1,"date":"2013-06-21 19:12:42.000000000","_account_id":917,"name":"Chuck Thier","email":"cthier@gmail.com","username":"cthier"},{"value":0,"date":"2013-06-21 16:49:07.000000000","_account_id":2696,"name":"Darrell Bishop","email":"dbishop@nvidia.com","username":"darrellb"},{"value":0,"_account_id":7661,"name":"Mark Seger","email":"Mark.Seger@hp.com","username":"markseger"}],"values":{"-1":"Work in progress"," 0":"Ready for reviews","+1":"Approved"},"description":"","default_value":0,"optional":true}},"removable_reviewers":[],"reviewers":{"REVIEWER":[{"_account_id":3,"name":"Jenkins","username":"jenkins"},{"_account_id":866,"name":"Chmouel Boudjnah","email":"chmouel@chmouel.com","username":"chmouel"},{"_account_id":917,"name":"Chuck Thier","email":"cthier@gmail.com","username":"cthier"},{"_account_id":2696,"name":"Darrell Bishop","email":"dbishop@nvidia.com","username":"darrellb"},{"_account_id":7661,"name":"Mark Seger","email":"Mark.Seger@hp.com","username":"markseger"}]},"pending_reviewers":{},"reviewer_updates":[{"updated":"2013-06-13 07:57:10.000000000","updated_by":{"_account_id":866,"name":"Chmouel Boudjnah","email":"chmouel@chmouel.com","username":"chmouel"},"reviewer":{"_account_id":866,"name":"Chmouel Boudjnah","email":"chmouel@chmouel.com","username":"chmouel"},"state":"REVIEWER"},{"updated":"2013-06-21 16:49:07.000000000","updated_by":{"_account_id":2696,"name":"Darrell Bishop","email":"dbishop@nvidia.com","username":"darrellb"},"reviewer":{"_account_id":2696,"name":"Darrell Bishop","email":"dbishop@nvidia.com","username":"darrellb"},"state":"REVIEWER"},{"updated":"2013-06-21 19:12:42.000000000","updated_by":{"_account_id":917,"name":"Chuck Thier","email":"cthier@gmail.com","username":"cthier"},"reviewer":{"_account_id":917,"name":"Chuck Thier","email":"cthier@gmail.com","username":"cthier"},"state":"REVIEWER"},{"updated":"2013-06-21 19:13:57.000000000","updated_by":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"reviewer":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"state":"REVIEWER"}],"messages":[{"id":"4aacd9652a827cf3477a0f643557123353e6b2bf","author":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"date":"2013-06-12 12:03:28.000000000","message":"Patch Set 1: Doesn\u0027t seem to work\n\nBuild failed.  For information on how to proceed, see https://wiki.openstack.org/wiki/GerritJenkinsGithub#Test_Failures\n\n- http://logs.openstack.org/32703/1/check/gate-python-swiftclient-pep8/324 : SUCCESS in 36s\n- http://docs-draft.openstack.org/32703/1/check/gate-python-swiftclient-docs/274/doc/build/html/ : SUCCESS in 40s\n- http://logs.openstack.org/32703/1/check/gate-python-swiftclient-python26/322 : FAILURE in 53s\n- http://logs.openstack.org/32703/1/check/gate-python-swiftclient-python27/322 : FAILURE in 44s\n","accounts_in_message":[],"_revision_number":1},{"id":"b4534ad8335502aba709cb228465c7979ec053c9","author":{"_account_id":7661,"name":"Mark Seger","email":"Mark.Seger@hp.com","username":"markseger"},"date":"2013-06-12 12:29:53.000000000","message":"Patch Set 1:\n\nis this a jenkins hiccup?\n\nrecheck no bug","accounts_in_message":[],"_revision_number":1},{"id":"48d939fb4fb65ef32ead2fa056cd911732d0f164","author":{"_account_id":7661,"name":"Mark Seger","email":"Mark.Seger@hp.com","username":"markseger"},"date":"2013-06-12 13:41:38.000000000","message":"Uploaded patch set 2.","accounts_in_message":[],"_revision_number":2},{"id":"c3b29aa38c0a7d9872847537c692be7bc2ebd6d1","author":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"date":"2013-06-12 13:44:33.000000000","message":"Patch Set 2: Works for me\n\nBuild succeeded.\n\n- http://logs.openstack.org/32703/2/check/gate-python-swiftclient-pep8/325 : SUCCESS in 36s\n- http://docs-draft.openstack.org/32703/2/check/gate-python-swiftclient-docs/275/doc/build/html/ : SUCCESS in 39s\n- http://logs.openstack.org/32703/2/check/gate-python-swiftclient-python26/323 : SUCCESS in 1m 00s\n- http://logs.openstack.org/32703/2/check/gate-python-swiftclient-python27/323 : SUCCESS in 38s\n","accounts_in_message":[],"_revision_number":2},{"id":"d9c0bec9f47d76df901d753bbf267f222b1b6362","author":{"_account_id":7661,"name":"Mark Seger","email":"Mark.Seger@hp.com","username":"markseger"},"date":"2013-06-12 14:04:32.000000000","message":"Patch Set 2:\n\none thing I know will come up - why am I returning the transaction ID with put_object() and the response headers with delete_object()?\n\nthe simple answer is because get_object() returns the headers and that would have been my preference everywhere, but put_object() already returns the etag so I just added the transaction ID.  I did think about returning the whole set of headers but it sort of felt redundant, but I can certainly do that if it\u0027s what people prefer.","accounts_in_message":[],"_revision_number":2},{"id":"8bf0a2cd7ba831ec9e8e06bc9fa8ed866392fb14","author":{"_account_id":2696,"name":"Darrell Bishop","email":"dbishop@nvidia.com","username":"darrellb"},"date":"2013-06-12 23:13:43.000000000","message":"Patch Set 2: I would prefer that you didn\u0027t merge this\n\nWhen thinking about how to change the API to return this stuff, I wanted it backwards compatible (i.e. not forcing existing callers of put_object to expect a tuple to be returned).\n\nI was leaning toward a new, optional kwarg to all the functions which don\u0027t already return response headers (post_account, put_container, post_container, delete_container, put_object, post_object, and delete_object).  If specified, that kwarg\u0027s value would be a dict which would be updated with the response headers, with lower-cased keys like get_object does.\n\nSo usage would be something like this:\n\n  resp_headers \u003d {}\n  etag \u003d conn.put_object(..., resp_headers\u003dresp_headers)\n  the_tx_id \u003d resp_headers[\u0027i-irans-id\u0027]\n\nNote that the Connection class\u0027s helper functions would need that optional kwarg plumbed through to the calls to self._retry().\n\nThe inlined client.py that ssbench uses also tracks time-to-first-byte for GETs and overall request latencies (time to last byte) and returns those as additional headers prefixed with \"x-...\".  That\u0027s another reason I\u0027d like all headers to (be able to) come out of these function calls vs. just returning the transaction ID.","accounts_in_message":[],"_revision_number":2},{"id":"a3ea2b31e9c5ee6dc3247d4016ae7cfc1c8cfb22","author":{"_account_id":866,"name":"Chmouel Boudjnah","email":"chmouel@chmouel.com","username":"chmouel"},"date":"2013-06-13 07:57:10.000000000","message":"Patch Set 2: I would prefer that you didn\u0027t merge this\n\nI agree with Darrell even tho it\u0027s a bit bigger change to this review it would be something good to do this properly.","accounts_in_message":[],"_revision_number":2},{"id":"c075dab0e9e9006450b34dba0349f575b488cc94","author":{"_account_id":7661,"name":"Mark Seger","email":"Mark.Seger@hp.com","username":"markseger"},"date":"2013-06-13 14:42:58.000000000","message":"Patch Set 2:\n\nThis does sound reasonable and I can certainly change my direction but a question first:\n\nIt sounds like the suggestion to only add this functionality to those functions not already returning headers.  It would seem to me that for consistency I\u0027d rather add it everywhere.  That would mean that get_object could then have the ability to return headers 2 ways.  However I don\u0027t have any feel for the extra overhead involved in doing so, but if not a lot, why not just do it?\n\nI would then suggest we deprecate the current way header information is returned by both put/get and maybe some years in the futures actually drop it, if at all.","accounts_in_message":[],"_revision_number":2},{"id":"1683020bc0eb938f60caf22c30ba5c6cfd74f23c","author":{"_account_id":917,"name":"Chuck Thier","email":"cthier@gmail.com","username":"cthier"},"date":"2013-06-13 15:02:45.000000000","message":"Patch Set 2:\n\nHah... I had just started on a similar change, but I have a ton on my plate, so I\u0027m more than happy to let you run with it.\n\nThe approach I was taking was:\n\n1.  Add a verbose kwarg to each function call that would default to false.\n2.  If verbose\u003dTrue, then return a tuple with the normal return value, and a dictionary of the verbose data.\n\nThe verbose data would be a dictionary with the following info:\n\n* response # response code\n* reason # reason for response code\n* headers # dictionary of headers\n\nThis is a bit of a compromise in not breaking current clients, but allowing people to add it if needed with minor code changes.  Let me know what you think, and if you would like to keep running with it.","accounts_in_message":[],"_revision_number":2},{"id":"5fb99fa30da940b167b5f3920bf232aca49ad5fb","author":{"_account_id":7661,"name":"Mark Seger","email":"Mark.Seger@hp.com","username":"markseger"},"date":"2013-06-13 15:55:59.000000000","message":"Patch Set 2:\n\nSo just to be clear you and darrell suggested different approaches.  You\u0027re suggested an even broader set of data being returned and I\u0027m fine with that and so think that\u0027s what I\u0027ll do.","accounts_in_message":[],"_revision_number":2},{"id":"af7edc6fdf2fffc3a34b7186da83652fed0b0098","author":{"_account_id":7661,"name":"Mark Seger","email":"Mark.Seger@hp.com","username":"markseger"},"date":"2013-06-13 17:22:22.000000000","message":"Patch Set 2:\n\ndigging deeper, I found get_account, get_container, head_object, head_container and head_account all already return response headers, but I think I\u0027d still like to return than consistently in get as with put, delete, post, etc.\n\nIn any event, once I post my code we can talk it all through.","accounts_in_message":[],"_revision_number":2},{"id":"d49c399284304fd0643242a0ecae073b08634279","author":{"_account_id":7661,"name":"Mark Seger","email":"Mark.Seger@hp.com","username":"markseger"},"date":"2013-06-13 18:12:52.000000000","message":"Uploaded patch set 3.","accounts_in_message":[],"_revision_number":3},{"id":"5652bbe24a53332241d26c5da78e258f385bc0d0","author":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"date":"2013-06-13 18:26:14.000000000","message":"Patch Set 3: Works for me\n\nBuild succeeded.\n\n- http://logs.openstack.org/32703/3/check/gate-python-swiftclient-pep8/329 : SUCCESS in 2m 05s\n- http://docs-draft.openstack.org/32703/3/check/gate-python-swiftclient-docs/279/doc/build/html/ : SUCCESS in 3m 04s\n- http://logs.openstack.org/32703/3/check/gate-python-swiftclient-python26/327 : SUCCESS in 1m 01s\n- http://logs.openstack.org/32703/3/check/gate-python-swiftclient-python27/327 : SUCCESS in 2m 19s\n","accounts_in_message":[],"_revision_number":3},{"id":"207e4574ed35f08c6803a00e218ee1711718b062","author":{"_account_id":7661,"name":"Mark Seger","email":"Mark.Seger@hp.com","username":"markseger"},"date":"2013-06-13 18:43:57.000000000","message":"Patch Set 3:\n\nso I sort of blended Darrell and Chuck\u0027s suggestions with a little sauce of my own.\n\nI added an optional parameter called \u0027response\u0027 that is an dictionary.\n\nI then added that to all the functions Darrell recommended plus get, because it doesn\u0027t feel right to make that one the odd man out of the big 3 (in my opinion) of put, get and delete.  I left the other which already returns headers alone but we might also want to think about doing more with them too.\n\nResponse returns a dictionary of 3 items, the first 2 being the status of the operation and the reason, named \u0027status\u0027 and \u0027reason\u0027.  The 3rd is a dictionary of headers called \u0027headers\u0027.\n\nThe one thing I hadn\u0027t done yet is test all the functions as I don\u0027t have any test scripts at my finger tips and was hoping someone else might already.  I looked at the existing tests and they don\u0027t look like they do anything with optional parameters.\n\nI\u0027m reasonably confident this will work everywhere as I did test it with get, put, delete and put_container.  However all the modified functions really do need to be tested and I can certainly do that if nobody else can.","accounts_in_message":[],"_revision_number":3},{"id":"33342bbdaf238fc19eaa9d059e8906bad186ea65","author":{"_account_id":2696,"name":"Darrell Bishop","email":"dbishop@nvidia.com","username":"darrellb"},"date":"2013-06-14 23:23:37.000000000","message":"Patch Set 3: I would prefer that you didn\u0027t merge this\n\n(9 inline comments)\n\nVarious suggestions and comments inline...","accounts_in_message":[],"_revision_number":3},{"id":"80fe0878b07885adbf5ffed44c8f19db907a5189","author":{"_account_id":7661,"name":"Mark Seger","email":"Mark.Seger@hp.com","username":"markseger"},"date":"2013-06-15 11:26:26.000000000","message":"Uploaded patch set 4.","accounts_in_message":[],"_revision_number":4},{"id":"426ec6055af0235b84e5c25878d60b2cf1512119","author":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"date":"2013-06-15 11:27:44.000000000","message":"Patch Set 4: Works for me\n\nBuild succeeded.\n\n- http://logs.openstack.org/32703/4/check/gate-python-swiftclient-pep8/330 : SUCCESS in 58s\n- http://docs-draft.openstack.org/32703/4/check/gate-python-swiftclient-docs/280/doc/build/html/ : SUCCESS in 1m 04s\n- http://logs.openstack.org/32703/4/check/gate-python-swiftclient-python26/328 : SUCCESS in 1m 13s\n- http://logs.openstack.org/32703/4/check/gate-python-swiftclient-python27/328 : SUCCESS in 1m 01s\n","accounts_in_message":[],"_revision_number":4},{"id":"ea9faded04eb3dcc34b6849c2e3802e6f2feac0a","author":{"_account_id":7661,"name":"Mark Seger","email":"Mark.Seger@hp.com","username":"markseger"},"date":"2013-06-15 11:41:23.000000000","message":"Patch Set 4:\n\ndarrell: good catches suggestions.  I decided to rename my \u0027response\u0027 parameter to response_dict as it is more descriptive and response_holder didn\u0027t really do it for me ;) though I admit I\u0027m also not thrilled with response_dict either but struggled for something more descriptive.\n\nAs for the other recommendations I believe I made them all and even caught a couple more typos.\n\nYou questioned delete_object not returning anything but it never did.  Looks like I incorrectly included a comment for that and perhaps that\u0027s what you meant.  I\u0027ll spin another patch with it removed.","accounts_in_message":[],"_revision_number":4},{"id":"a110db44197920dc269380fe1541b2293530bd2c","author":{"_account_id":7661,"name":"Mark Seger","email":"Mark.Seger@hp.com","username":"markseger"},"date":"2013-06-15 11:42:00.000000000","message":"Uploaded patch set 5.","accounts_in_message":[],"_revision_number":5},{"id":"f7526a5a0b29d9edf6c9e55aa0187a21d96f0098","author":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"date":"2013-06-15 11:43:08.000000000","message":"Patch Set 5: Works for me\n\nBuild succeeded.\n\n- http://logs.openstack.org/32703/5/check/gate-python-swiftclient-pep8/331 : SUCCESS in 36s\n- http://docs-draft.openstack.org/32703/5/check/gate-python-swiftclient-docs/281/doc/build/html/ : SUCCESS in 40s\n- http://logs.openstack.org/32703/5/check/gate-python-swiftclient-python26/329 : SUCCESS in 1m 05s\n- http://logs.openstack.org/32703/5/check/gate-python-swiftclient-python27/329 : SUCCESS in 37s\n","accounts_in_message":[],"_revision_number":5},{"id":"b30e2f12fc39fb038d83eedff70940500394dca5","author":{"_account_id":2696,"name":"Darrell Bishop","email":"dbishop@nvidia.com","username":"darrellb"},"date":"2013-06-17 03:32:40.000000000","message":"Patch Set 5: (3 inline comments)\n\nCouple comments inline.\n\nAlso, it looks like that test file became executable as part of your change?  That seems unnecessary.","accounts_in_message":[],"_revision_number":5},{"id":"8ab27f126433bd38c7ede65bdd70e1f2c0b2358b","author":{"_account_id":7661,"name":"Mark Seger","email":"Mark.Seger@hp.com","username":"markseger"},"date":"2013-06-17 13:28:24.000000000","message":"Uploaded patch set 6.","accounts_in_message":[],"_revision_number":6},{"id":"34871044d8994ce4100990199457fbb3809bc74a","author":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"date":"2013-06-17 13:31:30.000000000","message":"Patch Set 6: Works for me\n\nBuild succeeded.\n\n- http://logs.openstack.org/32703/6/check/gate-python-swiftclient-pep8/332 : SUCCESS in 37s\n- http://docs-draft.openstack.org/32703/6/check/gate-python-swiftclient-docs/282/doc/build/html/ : SUCCESS in 56s\n- http://logs.openstack.org/32703/6/check/gate-python-swiftclient-python26/330 : SUCCESS in 1m 01s\n- http://logs.openstack.org/32703/6/check/gate-python-swiftclient-python27/330 : SUCCESS in 48s\n","accounts_in_message":[],"_revision_number":6},{"id":"a2cfa63ee6a4ed301ae8d207de0f44be681ecc0b","author":{"_account_id":2696,"name":"Darrell Bishop","email":"dbishop@nvidia.com","username":"darrellb"},"date":"2013-06-19 17:30:33.000000000","message":"Patch Set 6: Looks good to me (core reviewer)\n\nlgtm; I look forward to one day getting rid of my inlined client.py in ssbench, and this is a step in that direction.","accounts_in_message":[],"_revision_number":6},{"id":"8b2ab08219cad5951fca79e8ed818b3df7e550fa","author":{"_account_id":917,"name":"Chuck Thier","email":"cthier@gmail.com","username":"cthier"},"date":"2013-06-19 21:28:27.000000000","message":"Patch Set 6:\n\nSo if requests get retried, you don\u0027t get any stats for those retries, which I think are important to keep.  Would there be any easy way to extend what you have done so far to be able to return the results for all of the requests?  If so, could it be added on subsequent patch, or should it get done on this one?","accounts_in_message":[],"_revision_number":6},{"id":"db0b49bd1f40e50b7930abe9f677ac25566f6b41","author":{"_account_id":7661,"name":"Mark Seger","email":"Mark.Seger@hp.com","username":"markseger"},"date":"2013-06-19 21:35:56.000000000","message":"Patch Set 6:\n\nQuite honestly I\u0027m not really up on the subtleties/implications/interactions of my changes with the retry mechanisms and perhaps someone closer to that code could/should comment.  Might it be ok to let these changes move forward as in and that someone deal with the retry logic to make sure it is done correctly?","accounts_in_message":[],"_revision_number":6},{"id":"8da49f56c8399038da1e0cdfb000243535cb0cb3","author":{"_account_id":2696,"name":"Darrell Bishop","email":"dbishop@nvidia.com","username":"darrellb"},"date":"2013-06-19 23:33:44.000000000","message":"Patch Set 6:\n\nThe (untested) code snippet below would result in the caller\u0027s response_dict getting all the normal values of the last retry, as well as a \"response_dicts\" key which is a list of the response dict for every (sub)request.  A count of tries is available to the caller as len(response_dict[\u0027response_dicts\u0027]).  The count of retries would be one less than that.\n\n      def _add_response_dict(self, target_dict, response_dict):\n          if target_dict is not None:\n              if \u0027response_dicts\u0027 in target_dict:\n                  target_dict[\u0027response_dicts\u0027].append(response_dict)\n              else:\n                  target_dict[\u0027response_dicts\u0027] \u003d [response_dict]\n              target_dict.update(response_dict)\n  \n      def _retry(self, reset_func, func, *args, **kwargs):\n          self.attempts \u003d 0\n          backoff \u003d self.starting_backoff\n          caller_response_dict \u003d kwargs.pop(\u0027response_dict\u0027, None)\n          while self.attempts \u003c\u003d self.retries:\n              self.attempts +\u003d 1\n              try:\n                  ...\n                  kwargs[\u0027http_conn\u0027] \u003d self.http_conn\n                  keargs[\u0027response_dict\u0027] \u003d {}\n                  rv \u003d func(self.url, self.token, *args, **kwargs)\n                  self._add_response_dict(caller_response_dict,\n                                          kwargs[\u0027response_dict\u0027])\n                  return rv\n              except (socket.error, HTTPException):\n                  self._add_response_dict(caller_response_dict,\n                                          kwargs[\u0027response_dict\u0027])\n                  ...\n              except ClientException as err:\n                  self._add_response_dict(caller_response_dict,\n                                          kwargs[\u0027response_dict\u0027])\n                  ...","accounts_in_message":[],"_revision_number":6},{"id":"94f314a6346e2c6e487937cbe0b35d3a9b2ed55e","author":{"_account_id":2696,"name":"Darrell Bishop","email":"dbishop@nvidia.com","username":"darrellb"},"date":"2013-06-19 23:47:40.000000000","message":"Patch Set 6:\n\nRats!  I had a typo on a line which needed to be conditional anyway.  The assignment of an empty dict into kwargs[\u0027response_dict\u0027] should not happen if the original call didn\u0027t have it.  Otherwise you\u0027ll get a crash from the API methods which don\u0027t *have* a response_dict in their method signature.\n\n  ...\n  if caller_response_dict:\n      kwargs[\u0027response_dict\u0027] \u003d {}\n  rv \u003d func(self.url, self.token, *args, **kwargs)\n  ...","accounts_in_message":[],"_revision_number":6},{"id":"c1456f8015d035f5ce18c6328e77951ff2c89a70","author":{"_account_id":2696,"name":"Darrell Bishop","email":"dbishop@nvidia.com","username":"darrellb"},"date":"2013-06-19 23:58:59.000000000","message":"Patch Set 6:\n\nLOL, I should have tried to run it.  This seems to actually work:\n\n      def _add_response_dict(self, target_dict, kwargs):\n          if target_dict is not None:\n              response_dict \u003d kwargs[\u0027response_dict\u0027]\n              if \u0027response_dicts\u0027 in target_dict:\n                  target_dict[\u0027response_dicts\u0027].append(response_dict)\n              else:\n                  target_dict[\u0027response_dicts\u0027] \u003d [response_dict]\n              target_dict.update(response_dict)\n  \n      def _retry(self, reset_func, func, *args, **kwargs):\n          self.attempts \u003d 0\n          backoff \u003d self.starting_backoff\n          caller_response_dict \u003d kwargs.pop(\u0027response_dict\u0027, None)\n          while self.attempts \u003c\u003d self.retries:\n              self.attempts +\u003d 1\n              try:\n                  if not self.url or not self.token:\n                      self.url, self.token \u003d self.get_auth()\n                      self.http_conn \u003d None\n                  if not self.http_conn:\n                      self.http_conn \u003d self.http_connection()\n                  kwargs[\u0027http_conn\u0027] \u003d self.http_conn\n                  if caller_response_dict:\n                      kwargs[\u0027response_dict\u0027] \u003d {}\n                  rv \u003d func(self.url, self.token, *args, **kwargs)\n                  self._add_response_dict(caller_response_dict, kwargs)\n                  return rv\n              except (socket.error, HTTPException):\n                  self._add_response_dict(caller_response_dict, kwargs)\n                  if self.attempts \u003e self.retries:\n                      raise\n                  self.http_conn \u003d None\n              except ClientException as err:\n                  self._add_response_dict(caller_response_dict, kwargs)","accounts_in_message":[],"_revision_number":6},{"id":"dc81bea1b74801f6a20acca964ff6464f4f32225","author":{"_account_id":2696,"name":"Darrell Bishop","email":"dbishop@nvidia.com","username":"darrellb"},"date":"2013-06-20 00:25:52.000000000","message":"Patch Set 6:\n\nSorry for the continued spam, but I actually *exercised* it and found another bug.  This does what I intended:\n\n      def _add_response_dict(self, target_dict, kwargs):                                              \n          if target_dict is not None:                                                                 \n              response_dict \u003d kwargs[\u0027response_dict\u0027]                                                 \n              if \u0027response_dicts\u0027 in target_dict:\n                  target_dict[\u0027response_dicts\u0027].append(response_dict)                                 \n              else:\n                  target_dict[\u0027response_dicts\u0027] \u003d [response_dict]                                     \n              target_dict.update(response_dict)                                                       \n                \n      def _retry(self, reset_func, func, *args, **kwargs):                                            \n          self.attempts \u003d 0\n          backoff \u003d self.starting_backoff                                                             \n          caller_response_dict \u003d kwargs.pop(\u0027response_dict\u0027, None)                                    \n          while self.attempts \u003c\u003d self.retries:                                                        \n              self.attempts +\u003d 1                                                                      \n              try: \n                  if not self.url or not self.token:\n                      self.url, self.token \u003d self.get_auth()\n                      self.http_conn \u003d None\n                  if not self.http_conn:                                                              \n                      self.http_conn \u003d self.http_connection()                                         \n                  kwargs[\u0027http_conn\u0027] \u003d self.http_conn\n                  if caller_response_dict is not None: \n                      kwargs[\u0027response_dict\u0027] \u003d {}                                                    \n                  rv \u003d func(self.url, self.token, *args, **kwargs)                                    \n                  self._add_response_dict(caller_response_dict, kwargs)                               \n                  return rv\n              except (socket.error, HTTPException):                                                   \n                  self._add_response_dict(caller_response_dict, kwargs)                               \n                  if self.attempts \u003e self.retries:                                                    \n                      raise \n                  self.http_conn \u003d None                                                               \n              except ClientException as err:                                                          \n                  self._add_response_dict(caller_response_dict, kwargs)\n  ...","accounts_in_message":[],"_revision_number":6},{"id":"3526abdd68f736cb7a98bdf7345d0b6e5d17ace3","author":{"_account_id":7661,"name":"Mark Seger","email":"Mark.Seger@hp.com","username":"markseger"},"date":"2013-06-20 11:51:09.000000000","message":"Uploaded patch set 7.","accounts_in_message":[],"_revision_number":7},{"id":"5faf83c65d93bb643fecfe6c8fabec4a7297ec82","author":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"date":"2013-06-20 11:52:05.000000000","message":"Patch Set 7: Works for me\n\nBuild succeeded.\n\n- http://logs.openstack.org/32703/7/check/gate-python-swiftclient-pep8/336 : SUCCESS in 36s\n- http://docs-draft.openstack.org/32703/7/check/gate-python-swiftclient-docs/286/doc/build/html/ : SUCCESS in 39s\n- http://logs.openstack.org/32703/7/check/gate-python-swiftclient-python26/334 : SUCCESS in 52s\n- http://logs.openstack.org/32703/7/check/gate-python-swiftclient-python27/334 : SUCCESS in 37s\n","accounts_in_message":[],"_revision_number":7},{"id":"e5ba4bf210f7b9a95fbab479b5c7abab75a165b8","author":{"_account_id":7661,"name":"Mark Seger","email":"Mark.Seger@hp.com","username":"markseger"},"date":"2013-06-20 11:56:08.000000000","message":"Patch Set 7:\n\nDarrell - I believe I\u0027ve faithfully incorporated your changes but would appreciate if you could run this through whatever test is was when you were testing them.  I\u0027m sure you would have anyway  ;)","accounts_in_message":[],"_revision_number":7},{"id":"b60404cdbc01e5f12675afc58df6348847612193","author":{"_account_id":2696,"name":"Darrell Bishop","email":"dbishop@nvidia.com","username":"darrellb"},"date":"2013-06-21 16:49:07.000000000","message":"Patch Set 7: Looks good to me (core reviewer)\n\nLooks great!\n\nHere\u0027s a \"normal\" response_dict:\n\n  {\u0027headers\u0027: {\u0027accept-ranges\u0027: \u0027bytes\u0027,\n               \u0027content-length\u0027: \u0027266057\u0027,\n               \u0027content-type\u0027: \u0027application/javascript\u0027,\n               \u0027date\u0027: \u0027Fri, 21 Jun 2013 16:42:26 GMT\u0027,\n               \u0027etag\u0027: \u00272073df88a429ccbe5dca5e2c40e742b4\u0027,\n               \u0027last-modified\u0027: \u0027Wed, 19 Jun 2013 19:16:43 GMT\u0027,\n               \u0027x-object-meta-mtime\u0027: \u00271362808050.000000\u0027,\n               \u0027x-timestamp\u0027: \u00271371669403.50249\u0027,\n               \u0027x-trans-id\u0027: \u0027txab6ed7e1c51049fcaa665-0051c48271\u0027},\n   \u0027reason\u0027: \u0027OK\u0027,\n   \u0027response_dicts\u0027: [{\u0027headers\u0027: {\u0027accept-ranges\u0027: \u0027bytes\u0027,\n                                   \u0027content-length\u0027: \u0027266057\u0027,\n                                   \u0027content-type\u0027: \u0027application/javascript\u0027,\n                                   \u0027date\u0027: \u0027Fri, 21 Jun 2013 16:42:26 GMT\u0027,\n                                   \u0027etag\u0027: \u00272073df88a429ccbe5dca5e2c40e742b4\u0027,\n                                   \u0027last-modified\u0027: \u0027Wed, 19 Jun 2013 19:16:43 GMT\u0027,\n                                   \u0027x-object-meta-mtime\u0027: \u00271362808050.000000\u0027,\n                                   \u0027x-timestamp\u0027: \u00271371669403.50249\u0027,\n                                   \u0027x-trans-id\u0027: \u0027txab6ed7e1c51049fcaa665-0051c48271\u0027},\n                       \u0027reason\u0027: \u0027OK\u0027,\n                       \u0027status\u0027: 200}],\n   \u0027status\u0027: 200}\n\nAnd here\u0027s one from a GET on an object not in the cluster:\n\n  {\u0027headers\u0027: {\u0027content-length\u0027: \u002770\u0027,\n               \u0027content-type\u0027: \u0027text/html; charset\u003dUTF-8\u0027,\n               \u0027date\u0027: \u0027Fri, 21 Jun 2013 16:43:48 GMT\u0027,\n               \u0027x-trans-id\u0027: \u0027tx089418994f624b6f87d1d-0051c482c2\u0027},\n   \u0027reason\u0027: \u0027Not Found\u0027,\n   \u0027response_dicts\u0027: [{\u0027headers\u0027: {\u0027content-length\u0027: \u002770\u0027,\n                                   \u0027content-type\u0027: \u0027text/html; charset\u003dUTF-8\u0027,\n                                   \u0027date\u0027: \u0027Fri, 21 Jun 2013 16:43:48 GMT\u0027,\n                                   \u0027x-trans-id\u0027: \u0027tx089418994f624b6f87d1d-0051c482c2\u0027},\n                       \u0027reason\u0027: \u0027Not Found\u0027,\n                       \u0027status\u0027: 404}],\n   \u0027status\u0027: 404}\n\nAnd finally, a GET when all the object-server processes are stopped (to illustrate the retries business):\n\n  {\u0027headers\u0027: {\u0027content-length\u0027: \u0027118\u0027,                                                                                                                                                                                    \u0027content-type\u0027: \u0027text/html; charset\u003dUTF-8\u0027,\n               \u0027date\u0027: \u0027Fri, 21 Jun 2013 16:45:30 GMT\u0027,\n               \u0027x-trans-id\u0027: \u0027txd3fb265101b44cc6b4875-0051c48327\u0027},\n   \u0027reason\u0027: \u0027Internal Server Error\u0027,\n   \u0027response_dicts\u0027: [{\u0027headers\u0027: {\u0027content-length\u0027: \u0027118\u0027,\n                                   \u0027content-type\u0027: \u0027text/html; charset\u003dUTF-8\u0027,\n                                   \u0027date\u0027: \u0027Fri, 21 Jun 2013 16:44:47 GMT\u0027,\n                                   \u0027x-trans-id\u0027: \u0027tx92cbb6ec5ecc4acca125d-0051c482fd\u0027},\n                       \u0027reason\u0027: \u0027Internal Server Error\u0027,\n                       \u0027status\u0027: 503},\n                      {\u0027headers\u0027: {\u0027content-length\u0027: \u0027118\u0027,\n                                   \u0027content-type\u0027: \u0027text/html; charset\u003dUTF-8\u0027,\n                                   \u0027date\u0027: \u0027Fri, 21 Jun 2013 16:44:51 GMT\u0027,\n                                   \u0027x-trans-id\u0027: \u0027tx5c0f48ed2dd44193bc336-0051c48300\u0027},\n                       \u0027reason\u0027: \u0027Internal Server Error\u0027,\n                       \u0027status\u0027: 503},\n                      {\u0027headers\u0027: {\u0027content-length\u0027: \u0027118\u0027,\n                                   \u0027content-type\u0027: \u0027text/html; charset\u003dUTF-8\u0027,\n                                   \u0027date\u0027: \u0027Fri, 21 Jun 2013 16:44:55 GMT\u0027,\n                                   \u0027x-trans-id\u0027: \u0027tx0de803d090af4904816d6-0051c48305\u0027},\n                       \u0027reason\u0027: \u0027Internal Server Error\u0027,\n                       \u0027status\u0027: 503},\n                      {\u0027headers\u0027: {\u0027content-length\u0027: \u0027118\u0027,\n                                   \u0027content-type\u0027: \u0027text/html; charset\u003dUTF-8\u0027,\n                                   \u0027date\u0027: \u0027Fri, 21 Jun 2013 16:45:01 GMT\u0027,\n                                   \u0027x-trans-id\u0027: \u0027tx6d5a9c8c155942c58646d-0051c4830b\u0027},\n                       \u0027reason\u0027: \u0027Internal Server Error\u0027,\n                       \u0027status\u0027: 503},\n                      {\u0027headers\u0027: {\u0027content-length\u0027: \u0027118\u0027,\n                                   \u0027content-type\u0027: \u0027text/html; charset\u003dUTF-8\u0027,\n                                   \u0027date\u0027: \u0027Fri, 21 Jun 2013 16:45:11 GMT\u0027,\n                                   \u0027x-trans-id\u0027: \u0027tx0e7958fbd2b64861b57a4-0051c48315\u0027},\n                       \u0027reason\u0027: \u0027Internal Server Error\u0027,\n                       \u0027status\u0027: 503},\n                      {\u0027headers\u0027: {\u0027content-length\u0027: \u0027118\u0027,\n                                   \u0027content-type\u0027: \u0027text/html; charset\u003dUTF-8\u0027,\n                                   \u0027date\u0027: \u0027Fri, 21 Jun 2013 16:45:30 GMT\u0027,\n                                   \u0027x-trans-id\u0027: \u0027txd3fb265101b44cc6b4875-0051c48327\u0027},\n                       \u0027reason\u0027: \u0027Internal Server Error\u0027,\n                       \u0027status\u0027: 503}],\n   \u0027status\u0027: 503}","accounts_in_message":[],"_revision_number":7},{"id":"e3407293b6fabee3d4637c354dc4c4462306c516","author":{"_account_id":917,"name":"Chuck Thier","email":"cthier@gmail.com","username":"cthier"},"date":"2013-06-21 19:12:42.000000000","message":"Patch Set 7: Looks good to me (core reviewer); Approved\n\nI would like to also see this exposed as like a --verbose flag to the client, but that can be added in another patch.  Thanks Mark!","accounts_in_message":[],"_revision_number":7},{"id":"9bc1727deba70ee3cba6380eb91761c22d2d99e1","author":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"date":"2013-06-21 19:12:43.000000000","message":"Patch Set 7: No score\n\nStarting gate jobs.\nhttp://status.openstack.org/zuul/","accounts_in_message":[],"_revision_number":7},{"id":"533e320754fa81f70cab48f2ad2477c29fd06d52","author":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"date":"2013-06-21 19:13:57.000000000","message":"Patch Set 7: Verified\n\nBuild succeeded.\n\n- http://docs-draft.openstack.org/32703/7/gate/gate-python-swiftclient-docs/287/doc/build/html/ : SUCCESS in 44s\n- http://logs.openstack.org/32703/7/gate/gate-python-swiftclient-pep8/337 : SUCCESS in 39s\n- http://logs.openstack.org/32703/7/gate/gate-python-swiftclient-python26/335 : SUCCESS in 1m 11s\n- http://logs.openstack.org/32703/7/gate/gate-python-swiftclient-python27/335 : SUCCESS in 41s\n","accounts_in_message":[],"_revision_number":7},{"id":"47d95a050e2e732982e495b39dd8056410d81c4a","author":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"date":"2013-06-21 19:13:58.000000000","message":"Change has been successfully merged into the git repository.","accounts_in_message":[],"_revision_number":7}],"current_revision_number":7,"current_revision":"3f66a8ae6b8d9741809773a9665d4768d2f161a6","revisions":{"961ecaf2c3c141b4eda716aeb0bc274128e754ca":{"kind":"REWORK","_number":1,"created":"2013-06-12 12:02:24.000000000","uploader":{"_account_id":7661,"name":"Mark Seger","email":"Mark.Seger@hp.com","username":"markseger"},"ref":"refs/changes/03/32703/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/python-swiftclient","ref":"refs/changes/03/32703/1","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/python-swiftclient refs/changes/03/32703/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/python-swiftclient refs/changes/03/32703/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/python-swiftclient refs/changes/03/32703/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/python-swiftclient refs/changes/03/32703/1"}}},"commit":{"parents":[{"commit":"473167ff31a529db02ff6f3483e30263b56e20a6","subject":"Merge \"Add -l and --lh switches to swift \u0027list\u0027 command\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/python-swiftclient/commit/473167ff31a529db02ff6f3483e30263b56e20a6"}]}],"author":{"name":"Mark Seger","email":"Mark.Seger@hp.com","date":"2013-06-12 12:02:02.000000000","tz":0},"committer":{"name":"Mark Seger","email":"Mark.Seger@hp.com","date":"2013-06-12 12:02:02.000000000","tz":0},"subject":"return transaction ID with put_object and resp headers with delete_object","message":"return transaction ID with put_object and resp headers with delete_object\n\nChange-Id: I35f8824537f0484362dd6646c91789fac02fa075\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/python-swiftclient/commit/961ecaf2c3c141b4eda716aeb0bc274128e754ca"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/python-swiftclient/commit/961ecaf2c3c141b4eda716aeb0bc274128e754ca"}]},"branch":"refs/heads/master"},"dcc97e116b6e475f7444b2f3354013ecf17da5ec":{"kind":"REWORK","_number":2,"created":"2013-06-12 13:41:38.000000000","uploader":{"_account_id":7661,"name":"Mark Seger","email":"Mark.Seger@hp.com","username":"markseger"},"ref":"refs/changes/03/32703/2","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/python-swiftclient","ref":"refs/changes/03/32703/2","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/python-swiftclient refs/changes/03/32703/2 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/python-swiftclient refs/changes/03/32703/2 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/python-swiftclient refs/changes/03/32703/2 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/python-swiftclient refs/changes/03/32703/2"}}},"commit":{"parents":[{"commit":"473167ff31a529db02ff6f3483e30263b56e20a6","subject":"Merge \"Add -l and --lh switches to swift \u0027list\u0027 command\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/python-swiftclient/commit/473167ff31a529db02ff6f3483e30263b56e20a6"}]}],"author":{"name":"Mark Seger","email":"Mark.Seger@hp.com","date":"2013-06-12 12:02:02.000000000","tz":0},"committer":{"name":"Mark Seger","email":"Mark.Seger@hp.com","date":"2013-06-12 13:40:52.000000000","tz":0},"subject":"return transaction ID with put_object and resp headers with delete_object","message":"return transaction ID with put_object and resp headers with delete_object\n\nupdated put_object tests to check for 2 return values\n\nChange-Id: I35f8824537f0484362dd6646c91789fac02fa075\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/python-swiftclient/commit/dcc97e116b6e475f7444b2f3354013ecf17da5ec"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/python-swiftclient/commit/dcc97e116b6e475f7444b2f3354013ecf17da5ec"}]},"branch":"refs/heads/master"},"54208e96bb866c878edcb0ab9b042b9f66a2ec66":{"kind":"REWORK","_number":3,"created":"2013-06-13 18:12:52.000000000","uploader":{"_account_id":7661,"name":"Mark Seger","email":"Mark.Seger@hp.com","username":"markseger"},"ref":"refs/changes/03/32703/3","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/python-swiftclient","ref":"refs/changes/03/32703/3","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/python-swiftclient refs/changes/03/32703/3 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/python-swiftclient refs/changes/03/32703/3 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/python-swiftclient refs/changes/03/32703/3 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/python-swiftclient refs/changes/03/32703/3"}}},"commit":{"parents":[{"commit":"08e1f09e58eef1f1cb876c6992a9250931988c27","subject":"Merge \"python3: Introduce py33 to tox.ini\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/python-swiftclient/commit/08e1f09e58eef1f1cb876c6992a9250931988c27"}]}],"author":{"name":"Mark Seger","email":"Mark.Seger@hp.com","date":"2013-06-12 12:02:02.000000000","tz":0},"committer":{"name":"Mark Seger","email":"Mark.Seger@hp.com","date":"2013-06-13 18:12:52.000000000","tz":0},"subject":"add options \u0027response\u0027 parameters to many calls into which they\u0027ll return a dictionary of the response status, reason and headers","message":"add options \u0027response\u0027 parameters to many calls into which they\u0027ll return\na dictionary of the response status, reason and headers\n\nChange-Id: I35f8824537f0484362dd6646c91789fac02fa075\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/python-swiftclient/commit/54208e96bb866c878edcb0ab9b042b9f66a2ec66"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/python-swiftclient/commit/54208e96bb866c878edcb0ab9b042b9f66a2ec66"}]},"branch":"refs/heads/master"},"5487245a91f32f7a2a1355e4470c02eafb2f5d9f":{"kind":"REWORK","_number":4,"created":"2013-06-15 11:26:26.000000000","uploader":{"_account_id":7661,"name":"Mark Seger","email":"Mark.Seger@hp.com","username":"markseger"},"ref":"refs/changes/03/32703/4","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/python-swiftclient","ref":"refs/changes/03/32703/4","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/python-swiftclient refs/changes/03/32703/4 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/python-swiftclient refs/changes/03/32703/4 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/python-swiftclient refs/changes/03/32703/4 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/python-swiftclient refs/changes/03/32703/4"}}},"commit":{"parents":[{"commit":"08e1f09e58eef1f1cb876c6992a9250931988c27","subject":"Merge \"python3: Introduce py33 to tox.ini\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/python-swiftclient/commit/08e1f09e58eef1f1cb876c6992a9250931988c27"}]}],"author":{"name":"Mark Seger","email":"Mark.Seger@hp.com","date":"2013-06-12 12:02:02.000000000","tz":0},"committer":{"name":"Mark Seger","email":"Mark.Seger@hp.com","date":"2013-06-15 11:24:25.000000000","tz":0},"subject":"add optional \u0027response_dict\u0027 parameters to many calls into which they\u0027ll return a dictionary of the response status, reason and headers","message":"add optional \u0027response_dict\u0027 parameters to many calls into which they\u0027ll\nreturn a dictionary of the response status, reason and headers\n\nChange-Id: I35f8824537f0484362dd6646c91789fac02fa075\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/python-swiftclient/commit/5487245a91f32f7a2a1355e4470c02eafb2f5d9f"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/python-swiftclient/commit/5487245a91f32f7a2a1355e4470c02eafb2f5d9f"}]},"branch":"refs/heads/master"},"eac8bda05436706f80e4ab7dd837c327e75f4432":{"kind":"REWORK","_number":5,"created":"2013-06-15 11:42:00.000000000","uploader":{"_account_id":7661,"name":"Mark Seger","email":"Mark.Seger@hp.com","username":"markseger"},"ref":"refs/changes/03/32703/5","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/python-swiftclient","ref":"refs/changes/03/32703/5","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/python-swiftclient refs/changes/03/32703/5 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/python-swiftclient refs/changes/03/32703/5 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/python-swiftclient refs/changes/03/32703/5 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/python-swiftclient refs/changes/03/32703/5"}}},"commit":{"parents":[{"commit":"08e1f09e58eef1f1cb876c6992a9250931988c27","subject":"Merge \"python3: Introduce py33 to tox.ini\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/python-swiftclient/commit/08e1f09e58eef1f1cb876c6992a9250931988c27"}]}],"author":{"name":"Mark Seger","email":"Mark.Seger@hp.com","date":"2013-06-12 12:02:02.000000000","tz":0},"committer":{"name":"Mark Seger","email":"Mark.Seger@hp.com","date":"2013-06-15 11:41:49.000000000","tz":0},"subject":"add optional \u0027response_dict\u0027 parameters to many calls into which they\u0027ll return a dictionary of the response status, reason and headers","message":"add optional \u0027response_dict\u0027 parameters to many calls into which they\u0027ll\nreturn a dictionary of the response status, reason and headers\n\nChange-Id: I35f8824537f0484362dd6646c91789fac02fa075\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/python-swiftclient/commit/eac8bda05436706f80e4ab7dd837c327e75f4432"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/python-swiftclient/commit/eac8bda05436706f80e4ab7dd837c327e75f4432"}]},"branch":"refs/heads/master"},"6a9e9c302d71fe63f00bb4736deac39e0d1979b8":{"kind":"REWORK","_number":6,"created":"2013-06-17 13:28:24.000000000","uploader":{"_account_id":7661,"name":"Mark Seger","email":"Mark.Seger@hp.com","username":"markseger"},"ref":"refs/changes/03/32703/6","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/python-swiftclient","ref":"refs/changes/03/32703/6","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/python-swiftclient refs/changes/03/32703/6 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/python-swiftclient refs/changes/03/32703/6 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/python-swiftclient refs/changes/03/32703/6 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/python-swiftclient refs/changes/03/32703/6"}}},"commit":{"parents":[{"commit":"08e1f09e58eef1f1cb876c6992a9250931988c27","subject":"Merge \"python3: Introduce py33 to tox.ini\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/python-swiftclient/commit/08e1f09e58eef1f1cb876c6992a9250931988c27"}]}],"author":{"name":"Mark Seger","email":"Mark.Seger@hp.com","date":"2013-06-12 12:02:02.000000000","tz":0},"committer":{"name":"Mark Seger","email":"Mark.Seger@hp.com","date":"2013-06-17 13:27:31.000000000","tz":0},"subject":"add optional \u0027response_dict\u0027 parameters to many calls into which they\u0027ll return a dictionary of the response status, reason and headers","message":"add optional \u0027response_dict\u0027 parameters to many calls into which they\u0027ll\nreturn a dictionary of the response status, reason and headers\n\nChange-Id: I35f8824537f0484362dd6646c91789fac02fa075\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/python-swiftclient/commit/6a9e9c302d71fe63f00bb4736deac39e0d1979b8"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/python-swiftclient/commit/6a9e9c302d71fe63f00bb4736deac39e0d1979b8"}]},"branch":"refs/heads/master"},"3f66a8ae6b8d9741809773a9665d4768d2f161a6":{"kind":"REWORK","_number":7,"created":"2013-06-20 11:51:09.000000000","uploader":{"_account_id":7661,"name":"Mark Seger","email":"Mark.Seger@hp.com","username":"markseger"},"ref":"refs/changes/03/32703/7","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/python-swiftclient","ref":"refs/changes/03/32703/7","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/python-swiftclient refs/changes/03/32703/7 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/python-swiftclient refs/changes/03/32703/7 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/python-swiftclient refs/changes/03/32703/7 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/python-swiftclient refs/changes/03/32703/7"}}},"commit":{"parents":[{"commit":"5d84ff8d9b74997d4494b7bed986f99cfceda9ad","subject":"Merge \"Fixes re-auth flow with expired tokens.\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/python-swiftclient/commit/5d84ff8d9b74997d4494b7bed986f99cfceda9ad"}]}],"author":{"name":"Mark Seger","email":"Mark.Seger@hp.com","date":"2013-06-12 12:02:02.000000000","tz":0},"committer":{"name":"Mark Seger","email":"Mark.Seger@hp.com","date":"2013-06-20 11:51:08.000000000","tz":0},"subject":"add optional \u0027response_dict\u0027 parameters to many calls into which they\u0027ll return a dictionary of the response status, reason and headers","message":"add optional \u0027response_dict\u0027 parameters to many calls into which they\u0027ll\nreturn a dictionary of the response status, reason and headers\n\nChange-Id: I35f8824537f0484362dd6646c91789fac02fa075\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/python-swiftclient/commit/3f66a8ae6b8d9741809773a9665d4768d2f161a6"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/python-swiftclient/commit/3f66a8ae6b8d9741809773a9665d4768d2f161a6"}]},"branch":"refs/heads/master"}},"requirements":[],"submit_records":[],"submit_requirements":[]}
