)]}'
{"swiftclient/client.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"025aab50a7bd3aeb9d12f4bce5f73e441ca54acf","unresolved":false,"context_lines":[{"line_number":473,"context_line":"    :param end_marker: end_marker query"},{"line_number":474,"context_line":"    :param http_conn: HTTP connection object (If None, it will create the"},{"line_number":475,"context_line":"                      conn object)"},{"line_number":476,"context_line":"    :param full_listing: if True, return a full listing, else returns a max"},{"line_number":477,"context_line":"                         of 10000 listings"},{"line_number":478,"context_line":"    :returns: a tuple of (response headers, a list of containers) The response"},{"line_number":479,"context_line":"              headers will be a dict and all header names will be lowercase."}],"source_content_type":"text/x-python","patch_set":4,"id":"5afe65bd_c3902eef","line":476,"updated":"2015-06-02 13:28:42.000000000","message":"add :param service_token: \n\n(here and elsewhere...)","commit_id":"8481a5481b0c1ed104694b95d7a247c1e5d35b3a"},{"author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"change_message_id":"2abc60713bb07d2d2c6a9ce93fc4ef4ef9ae9901","unresolved":false,"context_lines":[{"line_number":473,"context_line":"    :param end_marker: end_marker query"},{"line_number":474,"context_line":"    :param http_conn: HTTP connection object (If None, it will create the"},{"line_number":475,"context_line":"                      conn object)"},{"line_number":476,"context_line":"    :param full_listing: if True, return a full listing, else returns a max"},{"line_number":477,"context_line":"                         of 10000 listings"},{"line_number":478,"context_line":"    :returns: a tuple of (response headers, a list of containers) The response"},{"line_number":479,"context_line":"              headers will be a dict and all header names will be lowercase."}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_2fb7a73a","line":476,"in_reply_to":"5afe65bd_c3902eef","updated":"2015-06-15 13:25:55.000000000","message":"Ok.","commit_id":"8481a5481b0c1ed104694b95d7a247c1e5d35b3a"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"025aab50a7bd3aeb9d12f4bce5f73e441ca54acf","unresolved":false,"context_lines":[{"line_number":1279,"context_line":"        opts \u003d self.os_options"},{"line_number":1280,"context_line":"        service_options \u003d {}"},{"line_number":1281,"context_line":"        service_options[\u0027tenant_id\u0027] \u003d opts.get(\u0027service_tenant_id\u0027, None)"},{"line_number":1282,"context_line":"        service_options[\u0027region_name\u0027] \u003d opts.get(\u0027region_name\u0027, None)"},{"line_number":1283,"context_line":"        service_user \u003d opts.get(\u0027service_username\u0027, None)"},{"line_number":1284,"context_line":"        service_key \u003d opts.get(\u0027service_key\u0027, None)"},{"line_number":1285,"context_line":"        _, service_token \u003d get_auth(self.authurl, service_user,"}],"source_content_type":"text/x-python","patch_set":4,"id":"5afe65bd_7e8d9130","line":1282,"updated":"2015-06-02 13:28:42.000000000","message":"why not rename all options with service_ prefix to construct a service_options dict to pass through to the v2/v3 auth methods - then we don\u0027t restrict to using tenant_id and username? Anything is os_options starting \u0027service_\u0027 gets mapped into service_options.\n\nAlternatively, put all the service credentials into a dict using the usual os_options keys, and add this dict as an entry in os_options:\n\n  os_options[\u0027service\u0027] \u003d {\u0027username\u0027:  xxx, \u0027project_id\u0027: yyy etc etc}","commit_id":"8481a5481b0c1ed104694b95d7a247c1e5d35b3a"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"025aab50a7bd3aeb9d12f4bce5f73e441ca54acf","unresolved":false,"context_lines":[{"line_number":1281,"context_line":"        service_options[\u0027tenant_id\u0027] \u003d opts.get(\u0027service_tenant_id\u0027, None)"},{"line_number":1282,"context_line":"        service_options[\u0027region_name\u0027] \u003d opts.get(\u0027region_name\u0027, None)"},{"line_number":1283,"context_line":"        service_user \u003d opts.get(\u0027service_username\u0027, None)"},{"line_number":1284,"context_line":"        service_key \u003d opts.get(\u0027service_key\u0027, None)"},{"line_number":1285,"context_line":"        _, service_token \u003d get_auth(self.authurl, service_user,"},{"line_number":1286,"context_line":"                                    service_key,"},{"line_number":1287,"context_line":"                                    snet\u003dself.snet,"}],"source_content_type":"text/x-python","patch_set":4,"id":"5afe65bd_9e884d24","line":1284,"updated":"2015-06-02 13:28:42.000000000","message":"ok, setting service_user and service_key here takes care of the v1 auth path that ignores os_options","commit_id":"8481a5481b0c1ed104694b95d7a247c1e5d35b3a"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"025aab50a7bd3aeb9d12f4bce5f73e441ca54acf","unresolved":false,"context_lines":[{"line_number":1316,"context_line":"        while self.attempts \u003c\u003d self.retries:"},{"line_number":1317,"context_line":"            self.attempts +\u003d 1"},{"line_number":1318,"context_line":"            try:"},{"line_number":1319,"context_line":"                if not self.url or not self.token:"},{"line_number":1320,"context_line":"                    self.url, self.token \u003d self.get_auth()"},{"line_number":1321,"context_line":"                    self.http_conn \u003d None"},{"line_number":1322,"context_line":"                if self.service_auth and not self.service_token:"}],"source_content_type":"text/x-python","patch_set":4,"id":"5afe65bd_7ea6b1c2","line":1319,"updated":"2015-06-02 13:28:42.000000000","message":"hmmm, self.url will have the \u0027normal\u0027 account prefix e.g. AUTH_. If we have service id info, how do we get a url for the service prefix SERVICE_ ? Or are we assuming that a preauthurl has ben provided?","commit_id":"8481a5481b0c1ed104694b95d7a247c1e5d35b3a"},{"author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"change_message_id":"2abc60713bb07d2d2c6a9ce93fc4ef4ef9ae9901","unresolved":false,"context_lines":[{"line_number":1316,"context_line":"        while self.attempts \u003c\u003d self.retries:"},{"line_number":1317,"context_line":"            self.attempts +\u003d 1"},{"line_number":1318,"context_line":"            try:"},{"line_number":1319,"context_line":"                if not self.url or not self.token:"},{"line_number":1320,"context_line":"                    self.url, self.token \u003d self.get_auth()"},{"line_number":1321,"context_line":"                    self.http_conn \u003d None"},{"line_number":1322,"context_line":"                if self.service_auth and not self.service_token:"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_0fbae323","line":1319,"in_reply_to":"5afe65bd_7ea6b1c2","updated":"2015-06-15 13:25:55.000000000","message":"Yes, assuming (for now) that a preauthurl has been provided.","commit_id":"8481a5481b0c1ed104694b95d7a247c1e5d35b3a"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a6c4837c63128c7f247595ffba7be92bfd1299e7","unresolved":false,"context_lines":[{"line_number":1225,"context_line":"    return parse_api_response(resp_headers, body)"},{"line_number":1226,"context_line":""},{"line_number":1227,"context_line":""},{"line_number":1228,"context_line":"class Connection(object):"},{"line_number":1229,"context_line":"    \"\"\"Convenience class to make requests that will also retry the request\"\"\""},{"line_number":1230,"context_line":""},{"line_number":1231,"context_line":"    def __init__(self, authurl\u003dNone, user\u003dNone, key\u003dNone, retries\u003d5,"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_204b6e5b","line":1228,"updated":"2015-08-17 12:46:33.000000000","message":"There\u0027s a subtlely around the storage_url that gets used that is mentioned in the commit message but it might be worth adding some discussion here wrt service token e.g.:\n\n\n\"Requests will have an X-Auth-Token header whose value is either the preauthtoken or a token obtained from the auth service using the user credentials provided as args to the constructor. If os_options includes a service_username then requests will also have an X-Service-Token header whose value is a token obtained from the auth service using the service credentials. In this case the request url will be set to the storage_url obtained from the auth service for the service user, unless this is overridden by a preauthurl.\"","commit_id":"9ccfdf32d7c79f0cf6c88ac6eb2b9b9a9d12d0ed"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a6c4837c63128c7f247595ffba7be92bfd1299e7","unresolved":false,"context_lines":[{"line_number":1252,"context_line":"        :param os_options: The OpenStack options which can have tenant_id,"},{"line_number":1253,"context_line":"                           auth_token, service_type, endpoint_type,"},{"line_number":1254,"context_line":"                           tenant_name, object_storage_url, region_name,"},{"line_number":1255,"context_line":"                           service_username, service_tenant_name, service_key"},{"line_number":1256,"context_line":"        :param insecure: Allow to access servers without checking SSL certs."},{"line_number":1257,"context_line":"                         The server\u0027s certificate will not be verified."},{"line_number":1258,"context_line":"        :param ssl_compression: Whether to enable compression at the SSL layer."}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_3a2c01ab","line":1255,"updated":"2015-08-17 12:46:33.000000000","message":"should we not use service_project_name ? (vs tenant)","commit_id":"9ccfdf32d7c79f0cf6c88ac6eb2b9b9a9d12d0ed"},{"author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"change_message_id":"ed4b56d539aba53faed3b5fe6e7394eaef4f1f80","unresolved":false,"context_lines":[{"line_number":1252,"context_line":"        :param os_options: The OpenStack options which can have tenant_id,"},{"line_number":1253,"context_line":"                           auth_token, service_type, endpoint_type,"},{"line_number":1254,"context_line":"                           tenant_name, object_storage_url, region_name,"},{"line_number":1255,"context_line":"                           service_username, service_tenant_name, service_key"},{"line_number":1256,"context_line":"        :param insecure: Allow to access servers without checking SSL certs."},{"line_number":1257,"context_line":"                         The server\u0027s certificate will not be verified."},{"line_number":1258,"context_line":"        :param ssl_compression: Whether to enable compression at the SSL layer."}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_dcbe2864","line":1255,"in_reply_to":"fa1b9901_3a2c01ab","updated":"2015-08-21 14:30:05.000000000","message":"sure","commit_id":"9ccfdf32d7c79f0cf6c88ac6eb2b9b9a9d12d0ed"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a6c4837c63128c7f247595ffba7be92bfd1299e7","unresolved":false,"context_lines":[{"line_number":1318,"context_line":"    def get_service_auth(self):"},{"line_number":1319,"context_line":"        opts \u003d self.os_options"},{"line_number":1320,"context_line":"        service_options \u003d {}"},{"line_number":1321,"context_line":"        service_options[\u0027tenant_name\u0027] \u003d opts.get(\u0027service_tenant_name\u0027, None)"},{"line_number":1322,"context_line":"        service_options[\u0027region_name\u0027] \u003d opts.get(\u0027region_name\u0027, None)"},{"line_number":1323,"context_line":"        service_options[\u0027object_storage_url\u0027] \u003d opts.get(\u0027object_storage_url\u0027,"},{"line_number":1324,"context_line":"                                                         None)"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_9d08a72a","line":1321,"updated":"2015-08-17 12:46:33.000000000","message":"use \u0027project_name\u0027","commit_id":"9ccfdf32d7c79f0cf6c88ac6eb2b9b9a9d12d0ed"}],"tests/unit/test_swiftclient.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a6c4837c63128c7f247595ffba7be92bfd1299e7","unresolved":false,"context_lines":[{"line_number":1815,"context_line":"        self.os_options \u003d {"},{"line_number":1816,"context_line":"            \u0027object_storage_url\u0027: \u0027http://storage_url.com\u0027,"},{"line_number":1817,"context_line":"            \u0027service_username\u0027: \u0027service_username\u0027,"},{"line_number":1818,"context_line":"            \u0027service_tenant_id\u0027: \u0027service_tenant_id\u0027,"},{"line_number":1819,"context_line":"            \u0027service_key\u0027: \u0027service_key\u0027}"},{"line_number":1820,"context_line":""},{"line_number":1821,"context_line":"    def get_auth(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_6395f03e","line":1818,"updated":"2015-08-17 12:46:33.000000000","message":"service_tenant_id used here !\u003d service_tenant_name in client.py\n\nwhich suggests that nothing is testing that service_tenant_name from os_opts is getting passed to get_auth()","commit_id":"9ccfdf32d7c79f0cf6c88ac6eb2b9b9a9d12d0ed"},{"author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"change_message_id":"ed4b56d539aba53faed3b5fe6e7394eaef4f1f80","unresolved":false,"context_lines":[{"line_number":1815,"context_line":"        self.os_options \u003d {"},{"line_number":1816,"context_line":"            \u0027object_storage_url\u0027: \u0027http://storage_url.com\u0027,"},{"line_number":1817,"context_line":"            \u0027service_username\u0027: \u0027service_username\u0027,"},{"line_number":1818,"context_line":"            \u0027service_tenant_id\u0027: \u0027service_tenant_id\u0027,"},{"line_number":1819,"context_line":"            \u0027service_key\u0027: \u0027service_key\u0027}"},{"line_number":1820,"context_line":""},{"line_number":1821,"context_line":"    def get_auth(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_96117254","line":1818,"in_reply_to":"fa1b9901_6395f03e","updated":"2015-08-21 14:30:05.000000000","message":"Thanks, good catch.","commit_id":"9ccfdf32d7c79f0cf6c88ac6eb2b9b9a9d12d0ed"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a6c4837c63128c7f247595ffba7be92bfd1299e7","unresolved":false,"context_lines":[{"line_number":1821,"context_line":"    def get_auth(self):"},{"line_number":1822,"context_line":"        # The real get_auth function will always return the os_option"},{"line_number":1823,"context_line":"        # dict\u0027s object_storage_url which will be overridden by the"},{"line_number":1824,"context_line":"        # preauthurl paramater to Connection if it is provided."},{"line_number":1825,"context_line":"        return self.os_options.get(\u0027object_storage_url\u0027), \u0027token\u0027"},{"line_number":1826,"context_line":""},{"line_number":1827,"context_line":"    def get_service_auth(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_00e2ead5","line":1824,"updated":"2015-08-17 12:46:33.000000000","message":"nit s/paramater/parameter/\n\nditto below","commit_id":"9ccfdf32d7c79f0cf6c88ac6eb2b9b9a9d12d0ed"},{"author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"change_message_id":"ed4b56d539aba53faed3b5fe6e7394eaef4f1f80","unresolved":false,"context_lines":[{"line_number":1821,"context_line":"    def get_auth(self):"},{"line_number":1822,"context_line":"        # The real get_auth function will always return the os_option"},{"line_number":1823,"context_line":"        # dict\u0027s object_storage_url which will be overridden by the"},{"line_number":1824,"context_line":"        # preauthurl paramater to Connection if it is provided."},{"line_number":1825,"context_line":"        return self.os_options.get(\u0027object_storage_url\u0027), \u0027token\u0027"},{"line_number":1826,"context_line":""},{"line_number":1827,"context_line":"    def get_service_auth(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_1605620f","line":1824,"in_reply_to":"fa1b9901_00e2ead5","updated":"2015-08-21 14:30:05.000000000","message":"I fixed the original too :-)","commit_id":"9ccfdf32d7c79f0cf6c88ac6eb2b9b9a9d12d0ed"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a6c4837c63128c7f247595ffba7be92bfd1299e7","unresolved":false,"context_lines":[{"line_number":1831,"context_line":"        return self.os_options.get(\u0027object_storage_url\u0027), \u0027stoken\u0027"},{"line_number":1832,"context_line":""},{"line_number":1833,"context_line":"    def test_service_token_reauth(self):"},{"line_number":1834,"context_line":"        def get_auth(url, user, key, **kwargs):"},{"line_number":1835,"context_line":"            # The real get_auth function will always return the os_option"},{"line_number":1836,"context_line":"            # dict\u0027s object_storage_url which will be overridden by the"},{"line_number":1837,"context_line":"            # preauthurl paramater to Connection if it is provided."}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_63a3b09f","line":1834,"updated":"2015-08-17 12:46:33.000000000","message":"you could store each call signature here in a call list declares in the test_service_token_reauth scope, then later check the call args are as expected","commit_id":"9ccfdf32d7c79f0cf6c88ac6eb2b9b9a9d12d0ed"},{"author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"change_message_id":"ed4b56d539aba53faed3b5fe6e7394eaef4f1f80","unresolved":false,"context_lines":[{"line_number":1831,"context_line":"        return self.os_options.get(\u0027object_storage_url\u0027), \u0027stoken\u0027"},{"line_number":1832,"context_line":""},{"line_number":1833,"context_line":"    def test_service_token_reauth(self):"},{"line_number":1834,"context_line":"        def get_auth(url, user, key, **kwargs):"},{"line_number":1835,"context_line":"            # The real get_auth function will always return the os_option"},{"line_number":1836,"context_line":"            # dict\u0027s object_storage_url which will be overridden by the"},{"line_number":1837,"context_line":"            # preauthurl paramater to Connection if it is provided."}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_f628ee87","line":1834,"in_reply_to":"fa1b9901_63a3b09f","updated":"2015-08-21 14:30:05.000000000","message":"Good thinking","commit_id":"9ccfdf32d7c79f0cf6c88ac6eb2b9b9a9d12d0ed"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a6c4837c63128c7f247595ffba7be92bfd1299e7","unresolved":false,"context_lines":[{"line_number":1863,"context_line":"        # The original \u0027preauth\u0027 storage URL *must* be preserved"},{"line_number":1864,"context_line":"        self.assertEqual(conn.url, \u0027http://www.old.com\u0027)"},{"line_number":1865,"context_line":"        self.assertEqual(conn.token, \u0027new\u0027)"},{"line_number":1866,"context_line":"        self.assertEqual(conn.service_token, \u0027newserv\u0027)"},{"line_number":1867,"context_line":""},{"line_number":1868,"context_line":"    def test_service_token_head_account(self):"},{"line_number":1869,"context_line":"        conn \u003d c.Connection(\u0027http://www.test.com\u0027, \u0027asdf\u0027, \u0027asdf\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_83ce0459","line":1866,"updated":"2015-08-17 12:46:33.000000000","message":"assert that get_auth is called with expected os_options, in particular that service_* options have been mapped to os_options correctly for the call that goes via get_service_auth.","commit_id":"9ccfdf32d7c79f0cf6c88ac6eb2b9b9a9d12d0ed"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a6c4837c63128c7f247595ffba7be92bfd1299e7","unresolved":false,"context_lines":[{"line_number":1876,"context_line":"        self.assertEqual(conn.attempts, 0)"},{"line_number":1877,"context_line":"        self.assertEqual(conn.service_token, None)"},{"line_number":1878,"context_line":""},{"line_number":1879,"context_line":"        self.assertTrue(isinstance(conn, c.Connection))"},{"line_number":1880,"context_line":"        with mock.patch.object(swiftclient.client,"},{"line_number":1881,"context_line":"                               \u0027head_account\u0027) as _head_account:"},{"line_number":1882,"context_line":"            conn.head_account()"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_0e0a1bd3","line":1879,"updated":"2015-08-17 12:46:33.000000000","message":"could you move lines 1869-1879 into the setUp method, creating a self.conn variable? That will remove a lot of duplicated code in the following tests.\n\n(see http://paste.openstack.org/show/419130/)","commit_id":"9ccfdf32d7c79f0cf6c88ac6eb2b9b9a9d12d0ed"},{"author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"change_message_id":"ed4b56d539aba53faed3b5fe6e7394eaef4f1f80","unresolved":false,"context_lines":[{"line_number":1876,"context_line":"        self.assertEqual(conn.attempts, 0)"},{"line_number":1877,"context_line":"        self.assertEqual(conn.service_token, None)"},{"line_number":1878,"context_line":""},{"line_number":1879,"context_line":"        self.assertTrue(isinstance(conn, c.Connection))"},{"line_number":1880,"context_line":"        with mock.patch.object(swiftclient.client,"},{"line_number":1881,"context_line":"                               \u0027head_account\u0027) as _head_account:"},{"line_number":1882,"context_line":"            conn.head_account()"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_b6e596dc","line":1879,"in_reply_to":"fa1b9901_0e0a1bd3","updated":"2015-08-21 14:30:05.000000000","message":"I can create a new function. (I\u0027m not sure about putting asserts in the setup.)","commit_id":"9ccfdf32d7c79f0cf6c88ac6eb2b9b9a9d12d0ed"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a6c4837c63128c7f247595ffba7be92bfd1299e7","unresolved":false,"context_lines":[{"line_number":1883,"context_line":"            _head_account.assert_called_once_with(\u0027http://storage_url.com\u0027,"},{"line_number":1884,"context_line":"                                                  \u0027token\u0027,"},{"line_number":1885,"context_line":"                                                  http_conn\u003dconn.http_conn,"},{"line_number":1886,"context_line":"                                                  service_token\u003d\u0027stoken\u0027)"},{"line_number":1887,"context_line":"        self.assertEqual(conn.attempts, 1)"},{"line_number":1888,"context_line":""},{"line_number":1889,"context_line":"    def test_service_token_post_account(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_2f1d9966","line":1886,"updated":"2015-08-17 12:46:33.000000000","message":"I think a stronger test would be to use a fake_connection and assert that the requests sent to the connection have X-Service-Token in the headers as expected.\n\nSee http://paste.openstack.org/show/419130/ for a suggestion","commit_id":"9ccfdf32d7c79f0cf6c88ac6eb2b9b9a9d12d0ed"},{"author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"change_message_id":"ed4b56d539aba53faed3b5fe6e7394eaef4f1f80","unresolved":false,"context_lines":[{"line_number":1883,"context_line":"            _head_account.assert_called_once_with(\u0027http://storage_url.com\u0027,"},{"line_number":1884,"context_line":"                                                  \u0027token\u0027,"},{"line_number":1885,"context_line":"                                                  http_conn\u003dconn.http_conn,"},{"line_number":1886,"context_line":"                                                  service_token\u003d\u0027stoken\u0027)"},{"line_number":1887,"context_line":"        self.assertEqual(conn.attempts, 1)"},{"line_number":1888,"context_line":""},{"line_number":1889,"context_line":"    def test_service_token_post_account(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_19e6f243","line":1886,"in_reply_to":"fa1b9901_2f1d9966","updated":"2015-08-21 14:30:05.000000000","message":"Thanks. This flushed out an issue with delete object.\n\n(Example code \u003d super helpful).","commit_id":"9ccfdf32d7c79f0cf6c88ac6eb2b9b9a9d12d0ed"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a6c4837c63128c7f247595ffba7be92bfd1299e7","unresolved":false,"context_lines":[{"line_number":1993,"context_line":"                                                      service_token\u003d\u0027stoken\u0027)"},{"line_number":1994,"context_line":"        self.assertEqual(conn.attempts, 1)"},{"line_number":1995,"context_line":""},{"line_number":1996,"context_line":"    def test_service_token_get_object(self):"},{"line_number":1997,"context_line":"        conn \u003d c.Connection(\u0027http://www.test.com\u0027, \u0027asdf\u0027, \u0027asdf\u0027,"},{"line_number":1998,"context_line":"                            os_options\u003dself.os_options)"},{"line_number":1999,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_6edb97ee","line":1996,"updated":"2015-08-17 12:46:33.000000000","message":"these tests are pretty comprehensive but get_account and get_container aren\u0027t covered?","commit_id":"9ccfdf32d7c79f0cf6c88ac6eb2b9b9a9d12d0ed"},{"author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"change_message_id":"ed4b56d539aba53faed3b5fe6e7394eaef4f1f80","unresolved":false,"context_lines":[{"line_number":1993,"context_line":"                                                      service_token\u003d\u0027stoken\u0027)"},{"line_number":1994,"context_line":"        self.assertEqual(conn.attempts, 1)"},{"line_number":1995,"context_line":""},{"line_number":1996,"context_line":"    def test_service_token_get_object(self):"},{"line_number":1997,"context_line":"        conn \u003d c.Connection(\u0027http://www.test.com\u0027, \u0027asdf\u0027, \u0027asdf\u0027,"},{"line_number":1998,"context_line":"                            os_options\u003dself.os_options)"},{"line_number":1999,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_7c935c5b","line":1996,"in_reply_to":"fa1b9901_6edb97ee","updated":"2015-08-21 14:30:05.000000000","message":"Ok","commit_id":"9ccfdf32d7c79f0cf6c88ac6eb2b9b9a9d12d0ed"}]}
