)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"e08ed8a479d602e3c744bb983e51d7aa70d7b61c","unresolved":false,"context_lines":[{"line_number":22,"context_line":"Currently we do not differentiate between user created"},{"line_number":23,"context_line":"locations and system created locations that have the account"},{"line_number":24,"context_line":"reference. This patch introduces new scheme:"},{"line_number":25,"context_line":"\u0027swift+config\u0027 for this purpose."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Image create in V1 should validate the uri"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":67,"id":"1ae5cdf2_194ca8c7","line":25,"updated":"2014-06-04 21:48:03.000000000","message":"Not sure what the intent is by saying user created location?","commit_id":"cd863e61b7fc3e2676ae11ebad7db10ebbd47459"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"080bdcec211702f8aa45fc987cc611e02adbdcf9","unresolved":false,"context_lines":[{"line_number":22,"context_line":"Currently we do not differentiate between user created"},{"line_number":23,"context_line":"locations and system created locations that have the account"},{"line_number":24,"context_line":"reference. This patch introduces new scheme:"},{"line_number":25,"context_line":"\u0027swift+config\u0027 for this purpose."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Image create in V1 should validate the uri"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":67,"id":"1ae5cdf2_a652b032","line":25,"in_reply_to":"1ae5cdf2_194ca8c7","updated":"2014-06-04 22:52:30.000000000","message":"Looks to me like you answer to this on your next comment. If user provides direct location isn\u0027t that user created location rather than system created?","commit_id":"cd863e61b7fc3e2676ae11ebad7db10ebbd47459"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"be9230815e7f90d6e59b5a331c6df082900446a3","unresolved":false,"context_lines":[{"line_number":22,"context_line":"Currently we do not differentiate between user created"},{"line_number":23,"context_line":"locations and system created locations that have the account"},{"line_number":24,"context_line":"reference. This patch introduces new scheme:"},{"line_number":25,"context_line":"\u0027swift+config\u0027 for this purpose."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Image create in V1 should validate the uri"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":67,"id":"1ae5cdf2_e1bc8bbd","line":25,"in_reply_to":"1ae5cdf2_a652b032","updated":"2014-06-05 15:13:29.000000000","message":"I see what you\u0027r saying. From reading that it seemed a bit odd.\n\nLocation term seems to be a opaque from the user. We might be getting confused by the term location actually. What user supplies is the uri and what Glance \"stores\" in DB is location.\n\nThe distinction is necessary to point as we need to/are doing validation of the user supplied uri.","commit_id":"cd863e61b7fc3e2676ae11ebad7db10ebbd47459"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"e08ed8a479d602e3c744bb983e51d7aa70d7b61c","unresolved":false,"context_lines":[{"line_number":24,"context_line":"reference. This patch introduces new scheme:"},{"line_number":25,"context_line":"\u0027swift+config\u0027 for this purpose."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Image create in V1 should validate the uri"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"This patch ensures that a store is not set while"},{"line_number":30,"context_line":"creating an image or updating it."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":67,"id":"1ae5cdf2_63cfba56","line":27,"updated":"2014-06-04 21:48:03.000000000","message":"May be add some more info about when exactly does the validation happen. We have 3 ways to create images right now in v1, pass in data or copy-from location or the direct location where the data is residing.","commit_id":"cd863e61b7fc3e2676ae11ebad7db10ebbd47459"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"fef1a6be88f6a73afb9cdec5dc44d0d98a1c3562","unresolved":false,"context_lines":[{"line_number":33,"context_line":"Implements blueprint: support-multiple-swift-backends"},{"line_number":34,"context_line":"Implements bp: v1-image-create-should-validate-the-location-uri"},{"line_number":35,"context_line":"DocImpact"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"Change-Id: If56335a719e6b72876375f797cc47fbd271091be"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":67,"id":"1ae5cdf2_4370fe0a","line":36,"updated":"2014-06-04 21:50:48.000000000","message":"Please paste in the names of co-authors here whoever needs/wants credit. \n\nTrying to avoid this last minute \"oh forgot! let me add this real quick\" situation.","commit_id":"cd863e61b7fc3e2676ae11ebad7db10ebbd47459"}],"doc/source/configuring.rst":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"2e551d42943301438df126db853191cbf42819c6","unresolved":false,"context_lines":[{"line_number":410,"context_line":""},{"line_number":411,"context_line":"`This option is specific to the Swift storage backend.`"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"It is a key:value pair, with key as the scrubbed(hidden) credentials and"},{"line_number":414,"context_line":"value as the actual credentials. To configure multiple swift store credentials,"},{"line_number":415,"context_line":"they have to be separated by comma(\u0027,\u0027). In order to not expose the actual"},{"line_number":416,"context_line":"credentials, the scrubbed credentials are stored in the database and the"}],"source_content_type":"text/x-rst","patch_set":34,"id":"AAAATH%2F%2Fq6E%3D","line":413,"updated":"2013-10-11 13:17:33.000000000","message":"From looking at the config file, the value of this option is actually a JSON representation of a python dict, isn\u0027t it?  (I\u0027m saying json because it\u0027s enclosed in quotes.)  The dict maps the scrubbed credentials in the format \u003cuserinfo\u003e:\u003cuserkey\u003e to the actual credentials in the same format.","commit_id":"51976fd9590104291599bc466a0802603f4296fb"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"5b4d3c0e111231d360607bcfca7b05a4f1f0c922","unresolved":false,"context_lines":[{"line_number":410,"context_line":""},{"line_number":411,"context_line":"`This option is specific to the Swift storage backend.`"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"It is a key:value pair, with key as the scrubbed(hidden) credentials and"},{"line_number":414,"context_line":"value as the actual credentials. To configure multiple swift store credentials,"},{"line_number":415,"context_line":"they have to be separated by comma(\u0027,\u0027). In order to not expose the actual"},{"line_number":416,"context_line":"credentials, the scrubbed credentials are stored in the database and the"}],"source_content_type":"text/x-rst","patch_set":34,"id":"AAAATH%2F%2FNt8%3D","line":413,"in_reply_to":"AAAATH%2F%2Fq6E%3D","updated":"2013-10-21 10:36:30.000000000","message":"Yes Brian, that is right.\nIt\u0027s a JSON representation of python dict.","commit_id":"51976fd9590104291599bc466a0802603f4296fb"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"2e551d42943301438df126db853191cbf42819c6","unresolved":false,"context_lines":[{"line_number":414,"context_line":"value as the actual credentials. To configure multiple swift store credentials,"},{"line_number":415,"context_line":"they have to be separated by comma(\u0027,\u0027). In order to not expose the actual"},{"line_number":416,"context_line":"credentials, the scrubbed credentials are stored in the database and the"},{"line_number":417,"context_line":"corrensponding swift credentials is retrieved from the configuration to authenticate"},{"line_number":418,"context_line":"against the ``swift_store_auth_address``."},{"line_number":419,"context_line":""},{"line_number":420,"context_line":"* ``current_swift_store_scrub_credentials\u003dCURRENT_SCRUB``"}],"source_content_type":"text/x-rst","patch_set":34,"id":"AAAATH%2F%2Fq58%3D","line":417,"updated":"2013-10-11 13:17:33.000000000","message":"\u0027corresponding swift credentials are\"","commit_id":"51976fd9590104291599bc466a0802603f4296fb"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"5b4d3c0e111231d360607bcfca7b05a4f1f0c922","unresolved":false,"context_lines":[{"line_number":414,"context_line":"value as the actual credentials. To configure multiple swift store credentials,"},{"line_number":415,"context_line":"they have to be separated by comma(\u0027,\u0027). In order to not expose the actual"},{"line_number":416,"context_line":"credentials, the scrubbed credentials are stored in the database and the"},{"line_number":417,"context_line":"corrensponding swift credentials is retrieved from the configuration to authenticate"},{"line_number":418,"context_line":"against the ``swift_store_auth_address``."},{"line_number":419,"context_line":""},{"line_number":420,"context_line":"* ``current_swift_store_scrub_credentials\u003dCURRENT_SCRUB``"}],"source_content_type":"text/x-rst","patch_set":34,"id":"AAAATH%2F%2FNuQ%3D","line":417,"in_reply_to":"AAAATH%2F%2Fq58%3D","updated":"2013-10-21 10:36:30.000000000","message":"Done","commit_id":"51976fd9590104291599bc466a0802603f4296fb"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"bda509d952d2b321832ed1404605f01409a42e9f","unresolved":false,"context_lines":[{"line_number":411,"context_line":"`This option is specific to the Swift storage backend.`"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"It is a key:value pair, with key as the scrubbed(hidden) credentials and"},{"line_number":414,"context_line":"value as the actual credentials. It is stored as a JSON representation of "},{"line_number":415,"context_line":"python dict, e.g. \"\u0027\u003chidden_user\u003e:\u003chidden_key\u003e\u0027: \u0027\u003cactual_user\u003e:\u003cactual_value\u003e\u0027, ...\""},{"line_number":416,"context_line":"To configure multiple swift store credentials,"},{"line_number":417,"context_line":"they have to be separated by comma(\u0027,\u0027). In order to not expose the actual"}],"source_content_type":"text/x-rst","patch_set":36,"id":"AAAATX%2F%2F80E%3D","line":414,"updated":"2013-10-24 14:45:56.000000000","message":"white space","commit_id":"02d99dbb6ac4eb567973b80dec4014187d4c897d"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"24bd76248d3daaf87f944adbdb07d5b91018a06b","unresolved":false,"context_lines":[{"line_number":411,"context_line":"`This option is specific to the Swift storage backend.`"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"It is a key:value pair, with key as the scrubbed(hidden) credentials and"},{"line_number":414,"context_line":"value as the actual credentials. It is stored as a JSON representation of "},{"line_number":415,"context_line":"python dict, e.g. \"\u0027\u003chidden_user\u003e:\u003chidden_key\u003e\u0027: \u0027\u003cactual_user\u003e:\u003cactual_value\u003e\u0027, ...\""},{"line_number":416,"context_line":"To configure multiple swift store credentials,"},{"line_number":417,"context_line":"they have to be separated by comma(\u0027,\u0027). In order to not expose the actual"}],"source_content_type":"text/x-rst","patch_set":36,"id":"AAAATn%2F%2F7IE%3D","line":414,"in_reply_to":"AAAATX%2F%2F80E%3D","updated":"2013-10-25 09:27:46.000000000","message":"Done","commit_id":"02d99dbb6ac4eb567973b80dec4014187d4c897d"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"be7190a5f2f33d229136c72cca90d4549694ee21","unresolved":false,"context_lines":[{"line_number":469,"context_line":"swift_store_credentials \u003d {\u0027store1\u0027:"},{"line_number":470,"context_line":"                  {\u0027credentials\u0027: \u0027\u003ccreds1\u003e\u0027, \u0027auth_url\u0027: \u0027https://example1.com/auth/v1.0\u0027},"},{"line_number":471,"context_line":"                           \u0027store2\u0027:"},{"line_number":472,"context_line":"                  {\u0027credentials\u0027: \u0027\u003ccreds2\u003e\u0027, \u0027auth_url\u0027: \u0027http://example2.com/auth/v1.0\u0027}"},{"line_number":473,"context_line":"              }"},{"line_number":474,"context_line":"In order to not expose the actual credentials, the store name is stored in the database"},{"line_number":475,"context_line":"and the corrensponding swift credentials are retrieved from the configuration to"}],"source_content_type":"text/x-rst","patch_set":50,"id":"AAAAUH%2F%2F7u8%3D","line":472,"updated":"2014-01-06 19:14:31.000000000","message":"do we want to mention that credentials is basically swift_store_user:swift_store_key ?","commit_id":"8dd4c90837578693fa1f976620154ef5beb576da"},{"author":{"_account_id":616,"name":"Mark Washenberger","email":"mark.washenberger@markwash.net","username":"markwash"},"change_message_id":"22acb75ca09472fcbbcec7c85aa7d629c7baaccc","unresolved":false,"context_lines":[{"line_number":455,"context_line":"Sets the authentication key to authenticate against the"},{"line_number":456,"context_line":"``swift_store_auth_address`` with for the user ``swift_store_user``."},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"* ``swift_store_credentials\u003dCREDENTIALS``"},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"Required when using the Swift storage backend."},{"line_number":461,"context_line":""}],"source_content_type":"text/x-rst","patch_set":55,"id":"AAAAUH%2F%2Fc74%3D","line":458,"updated":"2014-01-13 19:01:00.000000000","message":"This feature seems to need a little bit of a terminology reset, but no big deal, it should be easy once we pick the right words.\n\nLet\u0027s consider the term \"store\" to be at a higher level here. glance.store.swift is a \"store\". So this configuration is for the (singular) swift store, and the things it points to cannot be \"stores\".\n\nLet\u0027s call the dictionary combining the auth parameters necessary to use a swift account \"account_params\". And the strings that we use to reference those auth parameters we can call an \"account_ref\".\n\n(I\u0027m open to different terms, this is just the best I could come up with so far)","commit_id":"46941b4dc3cb6f56e38cc6b954c3682abfda4e67"},{"author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"change_message_id":"692bf66fa29fe541a160c3f71d7dfc921fee15a7","unresolved":false,"context_lines":[{"line_number":455,"context_line":"Sets the authentication key to authenticate against the"},{"line_number":456,"context_line":"``swift_store_auth_address`` with for the user ``swift_store_user``."},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"* ``swift_store_credentials\u003dCREDENTIALS``"},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"Required when using the Swift storage backend."},{"line_number":461,"context_line":""}],"source_content_type":"text/x-rst","patch_set":55,"id":"AAAAUH%2F%2B2wQ%3D","line":458,"in_reply_to":"AAAAUH%2F%2FZb0%3D","updated":"2014-01-22 17:39:24.000000000","message":"In the future we may have the following:\n\n store1: single-tenant\n store2: multi-tenant\n\nIn the case of multi-tenant \u0027store2\u0027 there would be no account specific information in the store dictionary, oo I\u0027m wondering if having \u0027account\u0027 in the name is appropriate?\n\nAs Mark says, we may in the future wish to fully populate all of the swift client parameters here. Perhaps swift_store_params/swift_store_connection_params/swift_store_client_parms?","commit_id":"46941b4dc3cb6f56e38cc6b954c3682abfda4e67"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"cd911052e1c1cdc8d4b08c9616ff4b5674c68c00","unresolved":false,"context_lines":[{"line_number":455,"context_line":"Sets the authentication key to authenticate against the"},{"line_number":456,"context_line":"``swift_store_auth_address`` with for the user ``swift_store_user``."},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"* ``swift_store_credentials\u003dCREDENTIALS``"},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"Required when using the Swift storage backend."},{"line_number":461,"context_line":""}],"source_content_type":"text/x-rst","patch_set":55,"id":"AAAAUH%2F%2FZb0%3D","line":458,"in_reply_to":"AAAAUH%2F%2Fc74%3D","updated":"2014-01-16 12:42:18.000000000","message":"I would suggest calling it swift_store_account_params, since it pertains to swift store.","commit_id":"46941b4dc3cb6f56e38cc6b954c3682abfda4e67"},{"author":{"_account_id":616,"name":"Mark Washenberger","email":"mark.washenberger@markwash.net","username":"markwash"},"change_message_id":"22acb75ca09472fcbbcec7c85aa7d629c7baaccc","unresolved":false,"context_lines":[{"line_number":470,"context_line":"              {\u0027store1\u0027:"},{"line_number":471,"context_line":"                  {\u0027credentials\u0027: \u0027tenant1:user1:key1\u0027, \u0027auth_url\u0027: \u0027https://example1.com/auth/v1.0\u0027},"},{"line_number":472,"context_line":"               \u0027store2\u0027:"},{"line_number":473,"context_line":"                  {\u0027credentials\u0027: \u0027tenant1:user2:key2\u0027, \u0027auth_url\u0027: \u0027http://example2.com/auth/v1.0\u0027}"},{"line_number":474,"context_line":"              }"},{"line_number":475,"context_line":"In order to not expose the actual credentials, the store name is stored in the database"},{"line_number":476,"context_line":"and the corrensponding swift credentials are retrieved from the configuration to"}],"source_content_type":"text/x-rst","patch_set":55,"id":"AAAAUH%2F%2Fc7s%3D","line":473,"updated":"2014-01-13 19:01:00.000000000","message":"I see no reason as we move forward to lump all the credentials together in one string like this--it makes it harder to parse things out. Let\u0027s instead make these items part of the dictionary:\n\n  { \n      \u0027account_ref1\u0027: {\n          \u0027project\u0027: \u0027project1\u0027,\n          \u0027user\u0027: \u0027userA\u0027,\n          \u0027key\u0027: \u0027somepass\u0027,\n          \u0027auth_url\u0027: \u0027https://...\u0027,\n      }\n   }\n\nI\u0027m also curious if we want to go ahead and include container, os_endpoint, os_region, etc in this config as well. It seems like those will be necessary eventually.","commit_id":"46941b4dc3cb6f56e38cc6b954c3682abfda4e67"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"cd911052e1c1cdc8d4b08c9616ff4b5674c68c00","unresolved":false,"context_lines":[{"line_number":470,"context_line":"              {\u0027store1\u0027:"},{"line_number":471,"context_line":"                  {\u0027credentials\u0027: \u0027tenant1:user1:key1\u0027, \u0027auth_url\u0027: \u0027https://example1.com/auth/v1.0\u0027},"},{"line_number":472,"context_line":"               \u0027store2\u0027:"},{"line_number":473,"context_line":"                  {\u0027credentials\u0027: \u0027tenant1:user2:key2\u0027, \u0027auth_url\u0027: \u0027http://example2.com/auth/v1.0\u0027}"},{"line_number":474,"context_line":"              }"},{"line_number":475,"context_line":"In order to not expose the actual credentials, the store name is stored in the database"},{"line_number":476,"context_line":"and the corrensponding swift credentials are retrieved from the configuration to"}],"source_content_type":"text/x-rst","patch_set":55,"id":"AAAAUH%2F%2FZc4%3D","line":473,"in_reply_to":"AAAAUH%2F%2Fc7s%3D","updated":"2014-01-16 12:42:18.000000000","message":"Mark, I am working on the change to have user, key separated out. I would prefer having it as a separate patch. Just to avoid pushing lot of changes in one patch. Thoughts?","commit_id":"46941b4dc3cb6f56e38cc6b954c3682abfda4e67"},{"author":{"_account_id":616,"name":"Mark Washenberger","email":"mark.washenberger@markwash.net","username":"markwash"},"change_message_id":"22acb75ca09472fcbbcec7c85aa7d629c7baaccc","unresolved":false,"context_lines":[{"line_number":476,"context_line":"and the corrensponding swift credentials are retrieved from the configuration to"},{"line_number":477,"context_line":"authenticate against the corresponding store\u0027s auth_url."},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"* ``current_swift_store\u003dCURRENT_STORE``"},{"line_number":480,"context_line":""},{"line_number":481,"context_line":"Required when using the Swift storage backend."},{"line_number":482,"context_line":""}],"source_content_type":"text/x-rst","patch_set":55,"id":"AAAAUH%2F%2Fc7o%3D","line":479,"updated":"2014-01-13 19:01:00.000000000","message":"Let\u0027s call this option\n\n  default_swift_account_reference\n\nAnd it would be nice to indicate how this interacts with the deprecated options here and in the sample config.","commit_id":"46941b4dc3cb6f56e38cc6b954c3682abfda4e67"},{"author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"change_message_id":"692bf66fa29fe541a160c3f71d7dfc921fee15a7","unresolved":false,"context_lines":[{"line_number":476,"context_line":"and the corrensponding swift credentials are retrieved from the configuration to"},{"line_number":477,"context_line":"authenticate against the corresponding store\u0027s auth_url."},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"* ``current_swift_store\u003dCURRENT_STORE``"},{"line_number":480,"context_line":""},{"line_number":481,"context_line":"Required when using the Swift storage backend."},{"line_number":482,"context_line":""}],"source_content_type":"text/x-rst","patch_set":55,"id":"AAAAUH%2F%2B2wU%3D","line":479,"in_reply_to":"AAAAUH%2F%2Fc7o%3D","updated":"2014-01-22 17:39:24.000000000","message":"Again (nit-picking), considering the possibility of multi-tenant stores which would require no account information is it appropriate to have \u0027account\u0027 in the name?","commit_id":"46941b4dc3cb6f56e38cc6b954c3682abfda4e67"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"cd911052e1c1cdc8d4b08c9616ff4b5674c68c00","unresolved":false,"context_lines":[{"line_number":476,"context_line":"and the corrensponding swift credentials are retrieved from the configuration to"},{"line_number":477,"context_line":"authenticate against the corresponding store\u0027s auth_url."},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"* ``current_swift_store\u003dCURRENT_STORE``"},{"line_number":480,"context_line":""},{"line_number":481,"context_line":"Required when using the Swift storage backend."},{"line_number":482,"context_line":""}],"source_content_type":"text/x-rst","patch_set":55,"id":"AAAAUH%2F%2FZbY%3D","line":479,"in_reply_to":"AAAAUH%2F%2Fc7o%3D","updated":"2014-01-16 12:42:18.000000000","message":"Done","commit_id":"46941b4dc3cb6f56e38cc6b954c3682abfda4e67"}],"etc/glance-api.conf":[{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"d522e853e9800df7fd99d3516b2dd2f878913608","unresolved":false,"context_lines":[{"line_number":253,"context_line":""},{"line_number":254,"context_line":"# The mapping between the scrubbed user:key and the"},{"line_number":255,"context_line":"# actual swift store credentials"},{"line_number":256,"context_line":"swift_store_credentials \u003d \u0027hiddenuser1-hiddenkey1\u0027: \u0027jdoe-jdoe\u0027"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"# The scrub user:key corresponding to the default"},{"line_number":259,"context_line":"# current swift store. This is used for any new image add"}],"source_content_type":"text/plain","patch_set":21,"id":"AAAARn%2F%2Fz%2Fo%3D","line":256,"updated":"2013-08-21 16:10:47.000000000","message":"What if there were multiple previous swift stores? how would that be respresented?","commit_id":"39e06cfa2fdf8f7031dabc5e4c995c167ed68076"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"ea4898a7606492e20bb9dce5e7b3d007f1c9c357","unresolved":false,"context_lines":[{"line_number":253,"context_line":""},{"line_number":254,"context_line":"# The mapping between the scrubbed user:key and the"},{"line_number":255,"context_line":"# actual swift store credentials"},{"line_number":256,"context_line":"swift_store_credentials \u003d \u0027hiddenuser1-hiddenkey1\u0027: \u0027jdoe-jdoe\u0027"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"# The scrub user:key corresponding to the default"},{"line_number":259,"context_line":"# current swift store. This is used for any new image add"}],"source_content_type":"text/plain","patch_set":21,"id":"AAAARn%2F%2Fz6I%3D","line":256,"in_reply_to":"AAAARn%2F%2Fz%2Fo%3D","updated":"2013-08-21 16:32:54.000000000","message":"The credentials can be comma separated.\nEg. \u0027hiddenuser1-hiddenkey1\u0027: \u0027acct1-key1-key1\u0027, \u0027hiddenuser2-hiddenkey2\u0027: \u0027acct2-usr2-key2\u0027\n\nBecause of the way DictOpt parses the value, they can\u0027t be colon separated. The standard I\u0027m using is \u0027-\u0027. \nThoughts?","commit_id":"39e06cfa2fdf8f7031dabc5e4c995c167ed68076"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"352f352b6b9fc4ec788ba6767a9a2566dcbd504b","unresolved":false,"context_lines":[{"line_number":254,"context_line":"# The mapping between the scrubbed user:key and the"},{"line_number":255,"context_line":"# actual swift store credentials"},{"line_number":256,"context_line":"# They have to be separated by a hyphen"},{"line_number":257,"context_line":"swift_store_credentials \u003d hiddenuser1-hiddenkey1: jdoe-jdoe-a86850deb2742ec3cb41518e26aa2d89"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"# The scrub user:key corresponding to the default"},{"line_number":260,"context_line":"# current swift store. This is used for any new image add"}],"source_content_type":"text/plain","patch_set":23,"id":"AAAASX%2F%2F3zE%3D","line":257,"updated":"2013-08-25 18:04:44.000000000","message":"- can be really tricky. Can anything else be used? For example in jdoe-jdoe-a86850deb2742ec3cb41518e26aa2d89 I am not able to distinguish between the user and key. Are there any other alternative options?\nAlso this mapping is for several swift stores right? Can you please represent that in the sample config? So people will get a sense of how to use it.","commit_id":"23294b418d4adc4845fb67731537f9be11762abc"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"e6965a078e8972b3921b44211dc4724e1e7c9595","unresolved":false,"context_lines":[{"line_number":254,"context_line":"# The mapping between the scrubbed user:key and the"},{"line_number":255,"context_line":"# actual swift store credentials"},{"line_number":256,"context_line":"# They have to be separated by a hyphen"},{"line_number":257,"context_line":"swift_store_credentials \u003d hiddenuser1-hiddenkey1: jdoe-jdoe-a86850deb2742ec3cb41518e26aa2d89"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"# The scrub user:key corresponding to the default"},{"line_number":260,"context_line":"# current swift store. This is used for any new image add"}],"source_content_type":"text/plain","patch_set":23,"id":"AAAASX%2F%2F3Dk%3D","line":257,"in_reply_to":"AAAASX%2F%2F3zE%3D","updated":"2013-08-26 05:49:14.000000000","message":"Can you think of any other separator? The other option is to store it as a string Opt and eval the string to dict in the code.\nNot very elegant.\n\nSure, will do.","commit_id":"23294b418d4adc4845fb67731537f9be11762abc"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"872e1657a0fd5eb922990e5082584a03393fd4b6","unresolved":false,"context_lines":[{"line_number":283,"context_line":""},{"line_number":284,"context_line":"# The mapping between the scrubbed user:key and the"},{"line_number":285,"context_line":"# actual swift store credentials"},{"line_number":286,"context_line":"swift_store_credentials \u003d \"{\u0027hiddenuser1:hiddenkey1\u0027: \u0027jdoe:jdoe:a86850deb2742ec3cb41518e26aa2d89\u0027, \u0027hiddenuser2:hiddenkey2\u0027: \u0027acct2:user2:586850deb2442ec3cb41518e26aa2d89\u0027}\""},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"# The scrub user:key corresponding to the default"},{"line_number":289,"context_line":"# current swift store. This is used for any new image add"}],"source_content_type":"text/plain","patch_set":27,"id":"AAAASn%2F%2FXFU%3D","line":286,"updated":"2013-09-05 20:16:41.000000000","message":"maybe this should be commented as well?","commit_id":"68b65e9cdf88c719f579cde39c2b0a319dd49381"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"5753591610df1b443bc72e82bd41e81e5bde6b59","unresolved":false,"context_lines":[{"line_number":283,"context_line":""},{"line_number":284,"context_line":"# The mapping between the scrubbed user:key and the"},{"line_number":285,"context_line":"# actual swift store credentials"},{"line_number":286,"context_line":"swift_store_credentials \u003d \"{\u0027hiddenuser1:hiddenkey1\u0027: \u0027jdoe:jdoe:a86850deb2742ec3cb41518e26aa2d89\u0027, \u0027hiddenuser2:hiddenkey2\u0027: \u0027acct2:user2:586850deb2442ec3cb41518e26aa2d89\u0027}\""},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"# The scrub user:key corresponding to the default"},{"line_number":289,"context_line":"# current swift store. This is used for any new image add"}],"source_content_type":"text/plain","patch_set":27,"id":"AAAASn%2F%2FVeY%3D","line":286,"in_reply_to":"AAAASn%2F%2FXFU%3D","updated":"2013-09-06 05:49:06.000000000","message":"Done","commit_id":"68b65e9cdf88c719f579cde39c2b0a319dd49381"},{"author":{"_account_id":616,"name":"Mark Washenberger","email":"mark.washenberger@markwash.net","username":"markwash"},"change_message_id":"22acb75ca09472fcbbcec7c85aa7d629c7baaccc","unresolved":false,"context_lines":[{"line_number":316,"context_line":"# the maximum object size in Swift, which is 5GB"},{"line_number":317,"context_line":"swift_store_large_object_size \u003d 5120"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"# The mapping between the scrubbed user:key and the"},{"line_number":320,"context_line":"# actual swift store credentials"},{"line_number":321,"context_line":"# swift_store_credentials \u003d {\u0027store_1\u0027: {\u0027credentials\u0027: \u0027jdoe:jdoe:a86850deb2742ec3cb41518e26aa2d89\u0027, \u0027auth_url\u0027: \u0027127.0.0.1:5000/v2.0/\u0027}, \u0027store_2\u0027: {\u0027credentials\u0027: \u0027acct:user2:key2\u0027, \u0027auth_url\u0027: \u0027127.0.0.1:5000/v2.0/\u0027}}"},{"line_number":322,"context_line":""}],"source_content_type":"text/plain","patch_set":55,"id":"AAAAUH%2F%2Fc68%3D","line":319,"updated":"2014-01-13 19:01:00.000000000","message":"Similar to my other comments, we could change this to\n\n  # The mapping from swift account references to swift account parameters.\n\nThen instead of calling them \u0027store_1\u0027 and \u0027store_2\u0027 in the sample let\u0027s call them \u0027ref1\u0027 and \u0027ref2\u0027.","commit_id":"46941b4dc3cb6f56e38cc6b954c3682abfda4e67"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"cd911052e1c1cdc8d4b08c9616ff4b5674c68c00","unresolved":false,"context_lines":[{"line_number":316,"context_line":"# the maximum object size in Swift, which is 5GB"},{"line_number":317,"context_line":"swift_store_large_object_size \u003d 5120"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"# The mapping between the scrubbed user:key and the"},{"line_number":320,"context_line":"# actual swift store credentials"},{"line_number":321,"context_line":"# swift_store_credentials \u003d {\u0027store_1\u0027: {\u0027credentials\u0027: \u0027jdoe:jdoe:a86850deb2742ec3cb41518e26aa2d89\u0027, \u0027auth_url\u0027: \u0027127.0.0.1:5000/v2.0/\u0027}, \u0027store_2\u0027: {\u0027credentials\u0027: \u0027acct:user2:key2\u0027, \u0027auth_url\u0027: \u0027127.0.0.1:5000/v2.0/\u0027}}"},{"line_number":322,"context_line":""}],"source_content_type":"text/plain","patch_set":55,"id":"AAAAUH%2F%2FNHw%3D","line":319,"in_reply_to":"AAAAUH%2F%2Fc68%3D","updated":"2014-01-16 12:42:18.000000000","message":"Done","commit_id":"46941b4dc3cb6f56e38cc6b954c3682abfda4e67"},{"author":{"_account_id":616,"name":"Mark Washenberger","email":"mark.washenberger@markwash.net","username":"markwash"},"change_message_id":"22acb75ca09472fcbbcec7c85aa7d629c7baaccc","unresolved":false,"context_lines":[{"line_number":320,"context_line":"# actual swift store credentials"},{"line_number":321,"context_line":"# swift_store_credentials \u003d {\u0027store_1\u0027: {\u0027credentials\u0027: \u0027jdoe:jdoe:a86850deb2742ec3cb41518e26aa2d89\u0027, \u0027auth_url\u0027: \u0027127.0.0.1:5000/v2.0/\u0027}, \u0027store_2\u0027: {\u0027credentials\u0027: \u0027acct:user2:key2\u0027, \u0027auth_url\u0027: \u0027127.0.0.1:5000/v2.0/\u0027}}"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"# The scrub user:key corresponding to the default"},{"line_number":324,"context_line":"# current swift store. This is used for any new image add"},{"line_number":325,"context_line":"# current_swift_store \u003d \u0027store_1\u0027"},{"line_number":326,"context_line":""}],"source_content_type":"text/plain","patch_set":55,"id":"AAAAUH%2F%2Fc5Q%3D","line":323,"updated":"2014-01-13 19:01:00.000000000","message":"And this text could change to \n\n  # The reference to the default swift account parameters to use for adding new images.","commit_id":"46941b4dc3cb6f56e38cc6b954c3682abfda4e67"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"cd911052e1c1cdc8d4b08c9616ff4b5674c68c00","unresolved":false,"context_lines":[{"line_number":320,"context_line":"# actual swift store credentials"},{"line_number":321,"context_line":"# swift_store_credentials \u003d {\u0027store_1\u0027: {\u0027credentials\u0027: \u0027jdoe:jdoe:a86850deb2742ec3cb41518e26aa2d89\u0027, \u0027auth_url\u0027: \u0027127.0.0.1:5000/v2.0/\u0027}, \u0027store_2\u0027: {\u0027credentials\u0027: \u0027acct:user2:key2\u0027, \u0027auth_url\u0027: \u0027127.0.0.1:5000/v2.0/\u0027}}"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"# The scrub user:key corresponding to the default"},{"line_number":324,"context_line":"# current swift store. This is used for any new image add"},{"line_number":325,"context_line":"# current_swift_store \u003d \u0027store_1\u0027"},{"line_number":326,"context_line":""}],"source_content_type":"text/plain","patch_set":55,"id":"AAAAUH%2F%2FNHk%3D","line":323,"in_reply_to":"AAAAUH%2F%2Fc5Q%3D","updated":"2014-01-16 12:42:18.000000000","message":"Done","commit_id":"46941b4dc3cb6f56e38cc6b954c3682abfda4e67"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"e08ed8a479d602e3c744bb983e51d7aa70d7b61c","unresolved":false,"context_lines":[{"line_number":333,"context_line":"# swift_store_config_file \u003d glance-swift.conf"},{"line_number":334,"context_line":"# This file contains references for each of the configured"},{"line_number":335,"context_line":"# Swift accounts/backing stores. If used, this option can prevent"},{"line_number":336,"context_line":"# credentials being stored in the database. Using Swift references"},{"line_number":337,"context_line":"# is disabled if this config is left blank."},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"# The reference to the default Swift parameters to use for adding new images."}],"source_content_type":"text/plain","patch_set":67,"id":"1ae5cdf2_f9ae1c2d","line":336,"updated":"2014-06-04 21:48:03.000000000","message":"Shouldn\u0027t this be more like:-\n\nUsing Swift account references? What is used here seems a bit confusing if you are an operator, no?","commit_id":"cd863e61b7fc3e2676ae11ebad7db10ebbd47459"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"080bdcec211702f8aa45fc987cc611e02adbdcf9","unresolved":false,"context_lines":[{"line_number":333,"context_line":"# swift_store_config_file \u003d glance-swift.conf"},{"line_number":334,"context_line":"# This file contains references for each of the configured"},{"line_number":335,"context_line":"# Swift accounts/backing stores. If used, this option can prevent"},{"line_number":336,"context_line":"# credentials being stored in the database. Using Swift references"},{"line_number":337,"context_line":"# is disabled if this config is left blank."},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"# The reference to the default Swift parameters to use for adding new images."}],"source_content_type":"text/plain","patch_set":67,"id":"1ae5cdf2_893305f5","line":336,"in_reply_to":"1ae5cdf2_f9ae1c2d","updated":"2014-06-04 22:52:30.000000000","message":"Not really. Looks pretty self explanatory if you look into that example glance-swift config.","commit_id":"cd863e61b7fc3e2676ae11ebad7db10ebbd47459"}],"etc/glance-swift.conf.sample":[{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"d336e0ed271ee098b9d780d7be1c64147670c8e1","unresolved":false,"context_lines":[{"line_number":14,"context_line":"user \u003d tenant:user1"},{"line_number":15,"context_line":"key \u003d key1"},{"line_number":16,"context_line":"auth_url \u003d auth123@example.com"},{"line_number":17,"context_line":"[ref2] "},{"line_number":18,"context_line":"user \u003d user2"},{"line_number":19,"context_line":"key \u003d key2"},{"line_number":20,"context_line":"auth_url \u003d http://auth345@example.com"}],"source_content_type":"application/octet-stream","patch_set":58,"id":"AAAAUH%2F9t04%3D","line":17,"updated":"2014-02-04 19:45:11.000000000","message":"nit, can u have new line for ref2 and then the white space afet that is to be removed\n\nAlso, I think each store here should have complete separate config list needed to talk to the store like swift_store_auth_version, swift_enable_snet  etc","commit_id":"d4451251d3f19a52105915092fb8bc93bff51218"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"f1620cf75cb08f2cc492824391cff390c1c12d38","unresolved":false,"context_lines":[{"line_number":14,"context_line":"user \u003d tenant:user1"},{"line_number":15,"context_line":"key \u003d key1"},{"line_number":16,"context_line":"auth_url \u003d auth123@example.com"},{"line_number":17,"context_line":"[ref2] "},{"line_number":18,"context_line":"user \u003d user2"},{"line_number":19,"context_line":"key \u003d key2"},{"line_number":20,"context_line":"auth_url \u003d http://auth345@example.com"}],"source_content_type":"application/octet-stream","patch_set":58,"id":"AAAAUH%2F9o8o%3D","line":17,"in_reply_to":"AAAAUH%2F9t04%3D","updated":"2014-02-05 13:14:51.000000000","message":"Iccha, I would suggest moving swift_store_auth_version, etc to config file in a separate patch. Just to make reviewing this easier.","commit_id":"d4451251d3f19a52105915092fb8bc93bff51218"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"09c2b5a68dcb8a3776ab94a9fd6a10354c51bb74","unresolved":false,"context_lines":[{"line_number":14,"context_line":"user \u003d tenant:user1"},{"line_number":15,"context_line":"key \u003d key1"},{"line_number":16,"context_line":"auth_url \u003d auth123@example.com"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"[ref2]"},{"line_number":19,"context_line":"user \u003d user2"},{"line_number":20,"context_line":"key \u003d key2"}],"source_content_type":"application/octet-stream","patch_set":60,"id":"AAAAUX%2F%2FqtI%3D","line":17,"updated":"2014-02-11 20:08:58.000000000","message":"should we use store_auth_address or auth_address to match the naming concention","commit_id":"c1eb8efe14602583bee18436c5f83a506e320c38"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"28cb2b23620252d66c67015bc0d95dd16a109d27","unresolved":false,"context_lines":[{"line_number":14,"context_line":"user \u003d tenant:user1"},{"line_number":15,"context_line":"key \u003d key1"},{"line_number":16,"context_line":"auth_url \u003d auth123@example.com"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"[ref2]"},{"line_number":19,"context_line":"user \u003d user2"},{"line_number":20,"context_line":"key \u003d key2"}],"source_content_type":"application/octet-stream","patch_set":60,"id":"AAAAUX%2F%2Fk6E%3D","line":17,"in_reply_to":"AAAAUX%2F%2FqtI%3D","updated":"2014-02-12 17:51:28.000000000","message":"Done","commit_id":"c1eb8efe14602583bee18436c5f83a506e320c38"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"ce5d2aaf6cd60eb1e634f343ac682ea2bf70ba4f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# glance-swift.conf.sample"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# This file is an example config file when"},{"line_number":4,"context_line":"# multiple swift accounts/backing stores are enabled."}],"source_content_type":"application/octet-stream","patch_set":65,"id":"7adec928_051cf169","line":1,"updated":"2014-05-20 21:14:02.000000000","message":"(Out of context): wondering why we do not have copyrights on conf/sample files? It is an IP after all, no?","commit_id":"7ef56dda5d1af196b674a80a3507bc1ab46df647"},{"author":{"_account_id":7701,"name":"Amala Basha","email":"amala.alungal@RACKSPACE.COM","username":"amalabasha"},"change_message_id":"47d3c9c6e33437c02a3cd2ff0c0eb1bf68c19e3f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# glance-swift.conf.sample"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# This file is an example config file when"},{"line_number":4,"context_line":"# multiple swift accounts/backing stores are enabled."}],"source_content_type":"application/octet-stream","patch_set":65,"id":"7adec928_fc092cde","line":1,"in_reply_to":"7adec928_051cf169","updated":"2014-05-22 12:19:30.000000000","message":"I\u0027ve wondered the same. But I guess thats the accepted practice though I have no clue why.","commit_id":"7ef56dda5d1af196b674a80a3507bc1ab46df647"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"ce5d2aaf6cd60eb1e634f343ac682ea2bf70ba4f","unresolved":false,"context_lines":[{"line_number":18,"context_line":"[ref2]"},{"line_number":19,"context_line":"user \u003d user2"},{"line_number":20,"context_line":"key \u003d key2"},{"line_number":21,"context_line":"auth_address \u003d http://auth345@example.com"}],"source_content_type":"application/octet-stream","patch_set":65,"id":"7adec928_bb70c074","line":21,"updated":"2014-05-20 21:14:02.000000000","message":"Can we add an example for MultiTenantStore as well?","commit_id":"7ef56dda5d1af196b674a80a3507bc1ab46df647"},{"author":{"_account_id":7701,"name":"Amala Basha","email":"amala.alungal@RACKSPACE.COM","username":"amalabasha"},"change_message_id":"47d3c9c6e33437c02a3cd2ff0c0eb1bf68c19e3f","unresolved":false,"context_lines":[{"line_number":18,"context_line":"[ref2]"},{"line_number":19,"context_line":"user \u003d user2"},{"line_number":20,"context_line":"key \u003d key2"},{"line_number":21,"context_line":"auth_address \u003d http://auth345@example.com"}],"source_content_type":"application/octet-stream","patch_set":65,"id":"7adec928_fcd76c21","line":21,"in_reply_to":"7adec928_bb70c074","updated":"2014-05-22 12:19:30.000000000","message":"MultiTenantStore would not be needing this at all. This patch is rather multiple swift stores and not multi tenant store","commit_id":"7ef56dda5d1af196b674a80a3507bc1ab46df647"}],"glance/common/swift_store_utils.py":[{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"d336e0ed271ee098b9d780d7be1c64147670c8e1","unresolved":false,"context_lines":[{"line_number":1,"context_line":""},{"line_number":2,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"#    Copyright 2014 Rackspace"},{"line_number":5,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":58,"id":"AAAAUH%2F9t0U%3D","line":2,"updated":"2014-02-04 19:45:11.000000000","message":"I think there was a patch to remove the vim comment line","commit_id":"d4451251d3f19a52105915092fb8bc93bff51218"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"f1620cf75cb08f2cc492824391cff390c1c12d38","unresolved":false,"context_lines":[{"line_number":1,"context_line":""},{"line_number":2,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"#    Copyright 2014 Rackspace"},{"line_number":5,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":58,"id":"AAAAUH%2F9o00%3D","line":2,"in_reply_to":"AAAAUH%2F9t0U%3D","updated":"2014-02-05 13:14:51.000000000","message":"Done","commit_id":"d4451251d3f19a52105915092fb8bc93bff51218"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"d336e0ed271ee098b9d780d7be1c64147670c8e1","unresolved":false,"context_lines":[{"line_number":33,"context_line":"                      \u0027to use for adding new images.\u0027)),"},{"line_number":34,"context_line":"    cfg.StrOpt(\u0027swift_store_auth_address\u0027,"},{"line_number":35,"context_line":"               help\u003d_(\u0027The address where the Swift authentication service \u0027"},{"line_number":36,"context_line":"                      \u0027is listening.(deprecated)\u0027)),"},{"line_number":37,"context_line":"    cfg.StrOpt(\u0027swift_store_user\u0027, secret\u003dTrue,"},{"line_number":38,"context_line":"               help\u003d_(\u0027The user to authenticate against the Swift \u0027"},{"line_number":39,"context_line":"                      \u0027authentication service (deprecated)\u0027)),"}],"source_content_type":"text/x-python","patch_set":58,"id":"AAAAUH%2F9tys%3D","line":36,"updated":"2014-02-04 19:45:11.000000000","message":"Is it still considered deprecated if we are making it optional to turn it on or off?","commit_id":"d4451251d3f19a52105915092fb8bc93bff51218"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"f1620cf75cb08f2cc492824391cff390c1c12d38","unresolved":false,"context_lines":[{"line_number":33,"context_line":"                      \u0027to use for adding new images.\u0027)),"},{"line_number":34,"context_line":"    cfg.StrOpt(\u0027swift_store_auth_address\u0027,"},{"line_number":35,"context_line":"               help\u003d_(\u0027The address where the Swift authentication service \u0027"},{"line_number":36,"context_line":"                      \u0027is listening.(deprecated)\u0027)),"},{"line_number":37,"context_line":"    cfg.StrOpt(\u0027swift_store_user\u0027, secret\u003dTrue,"},{"line_number":38,"context_line":"               help\u003d_(\u0027The user to authenticate against the Swift \u0027"},{"line_number":39,"context_line":"                      \u0027authentication service (deprecated)\u0027)),"}],"source_content_type":"text/x-python","patch_set":58,"id":"AAAAUH%2F9o4U%3D","line":36,"in_reply_to":"AAAAUH%2F9tys%3D","updated":"2014-02-05 13:14:51.000000000","message":"It\u0027s still deprecated because, we would eventually like to move to  the config file in place of having it as a separate config being registered..","commit_id":"d4451251d3f19a52105915092fb8bc93bff51218"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"99645fbf73e5f73a9946935112d5cc60f6ef6893","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    cfg.StrOpt(\u0027swift_store_key\u0027, secret\u003dTrue,"},{"line_number":38,"context_line":"               help\u003d_(\u0027Auth key for the user authenticating against the \u0027"},{"line_number":39,"context_line":"                      \u0027Swift authentication service. (deprecated)\u0027)),"},{"line_number":40,"context_line":"    cfg.StrOpt(\u0027swift_store_config_file\u0027, secret\u003dTrue,"},{"line_number":41,"context_line":"               help\u003d_(\u0027Auth key for the user authenticating against the \u0027"},{"line_number":42,"context_line":"                      \u0027Swift authentication service. (deprecated)\u0027)),"},{"line_number":43,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":59,"id":"AAAAUH%2F9mco%3D","line":40,"updated":"2014-02-05 18:41:42.000000000","message":"Should this be deprecated?","commit_id":"cb88f352a0d205f16f17d17846699c7934f0113d"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"2bc7dad90cee4873db0f20944a7cd3ca4b9b7501","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    cfg.StrOpt(\u0027swift_store_key\u0027, secret\u003dTrue,"},{"line_number":38,"context_line":"               help\u003d_(\u0027Auth key for the user authenticating against the \u0027"},{"line_number":39,"context_line":"                      \u0027Swift authentication service. (deprecated)\u0027)),"},{"line_number":40,"context_line":"    cfg.StrOpt(\u0027swift_store_config_file\u0027, secret\u003dTrue,"},{"line_number":41,"context_line":"               help\u003d_(\u0027Auth key for the user authenticating against the \u0027"},{"line_number":42,"context_line":"                      \u0027Swift authentication service. (deprecated)\u0027)),"},{"line_number":43,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":59,"id":"AAAAUH%2F9hSw%3D","line":40,"in_reply_to":"AAAAUH%2F9mco%3D","updated":"2014-02-06 10:56:14.000000000","message":"Done","commit_id":"cb88f352a0d205f16f17d17846699c7934f0113d"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"ce5d2aaf6cd60eb1e634f343ac682ea2bf70ba4f","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"# NOTE(bourke): The default dict_type is collections.OrderedDict in py27, but"},{"line_number":46,"context_line":"# we must set manually for compatibility with py26"},{"line_number":47,"context_line":"CONFIG \u003d ConfigParser.SafeConfigParser(dict_type\u003dOrderedDict)"},{"line_number":48,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""}],"source_content_type":"text/x-python","patch_set":65,"id":"7adec928_25548d20","line":47,"updated":"2014-05-20 21:14:02.000000000","message":"Question: is there nothing in oslo.config to do the parsing? If not, do we need to contribute back and change this logic in subsequent Merge Props?","commit_id":"7ef56dda5d1af196b674a80a3507bc1ab46df647"},{"author":{"_account_id":7701,"name":"Amala Basha","email":"amala.alungal@RACKSPACE.COM","username":"amalabasha"},"change_message_id":"47d3c9c6e33437c02a3cd2ff0c0eb1bf68c19e3f","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"# NOTE(bourke): The default dict_type is collections.OrderedDict in py27, but"},{"line_number":46,"context_line":"# we must set manually for compatibility with py26"},{"line_number":47,"context_line":"CONFIG \u003d ConfigParser.SafeConfigParser(dict_type\u003dOrderedDict)"},{"line_number":48,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""}],"source_content_type":"text/x-python","patch_set":65,"id":"7adec928_5c94e043","line":47,"in_reply_to":"7adec928_25548d20","updated":"2014-05-22 12:19:30.000000000","message":"I\u0027m afraid not. We\u0027d tried multiple options with oslo, but with this implementation, none of that would work. Few of the previous patches actually have that.","commit_id":"7ef56dda5d1af196b674a80a3507bc1ab46df647"}],"glance/db/sqlalchemy/migrate_repo/versions/026_hide_user_key_swift_location.py":[{"author":{"_account_id":616,"name":"Mark Washenberger","email":"mark.washenberger@markwash.net","username":"markwash"},"change_message_id":"d791fccf41b84f5e333a2937e19d9712dfc2ebf7","unresolved":false,"context_lines":[{"line_number":158,"context_line":"            path_parts.insert(0, netloc)"},{"line_number":159,"context_line":"            auth_or_store_url \u003d \u0027/\u0027.join(path_parts)"},{"line_number":160,"context_line":"    except IndexError:"},{"line_number":161,"context_line":"        reason \u003d _(\"Badly formed S3 URI: %s\") % uri"},{"line_number":162,"context_line":"        LOG.error(message\u003dreason)"},{"line_number":163,"context_line":"        raise exception.BadStoreUri()"},{"line_number":164,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPn%2F%2FcM4%3D","line":161,"updated":"2013-07-01 21:56:49.000000000","message":"S3 ?","commit_id":"c91485fccc3b50b84c12d5c36b7fc2c0bfbeef76"}],"glance/db/sqlalchemy/migrate_repo/versions/028_hide_user_key_swift_location.py":[{"author":{"_account_id":1390,"name":"Paul Bourke","email":"pauldbourke@proton.me","username":"pauldbourke"},"change_message_id":"c3d5adf09943b315647ad25f5066fa09cfd9983f","unresolved":false,"context_lines":[{"line_number":147,"context_line":"                             CONF.swift_store_credentials.keys())"},{"line_number":148,"context_line":"            store_values \u003d map(lambda v: urllib.unquote(v),"},{"line_number":149,"context_line":"                               CONF.swift_store_credentials.values())"},{"line_number":150,"context_line":"            scrub_credentials \u003d scrub_keys[store_values.index(creds)]"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"            split_credentials \u003d scrub_credentials.split(\u0027:\u0027)"},{"line_number":153,"context_line":"            key \u003d split_credentials.pop()"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAARH%2F%2F5KQ%3D","line":150,"updated":"2013-08-15 17:15:41.000000000","message":"What happens here when there is no entry in the swift_store_credentials CONF map for the location being migrated?","commit_id":"eea253f5575e6c93e8bef5a47ccc39ee27be4f27"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"636ffb34715feca138ef603ac4cd0d5dc75d129e","unresolved":false,"context_lines":[{"line_number":147,"context_line":"                             CONF.swift_store_credentials.keys())"},{"line_number":148,"context_line":"            store_values \u003d map(lambda v: urllib.unquote(v),"},{"line_number":149,"context_line":"                               CONF.swift_store_credentials.values())"},{"line_number":150,"context_line":"            scrub_credentials \u003d scrub_keys[store_values.index(creds)]"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"            split_credentials \u003d scrub_credentials.split(\u0027:\u0027)"},{"line_number":153,"context_line":"            key \u003d split_credentials.pop()"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAARH%2F%2F2Ik%3D","line":150,"in_reply_to":"AAAARH%2F%2F5KQ%3D","updated":"2013-08-19 11:42:54.000000000","message":"By default the swift_store_credentials CONF reads from the glance-api.conf\u0027s swift_store_user and key. Hence, all the current locations should have an entry.","commit_id":"eea253f5575e6c93e8bef5a47ccc39ee27be4f27"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"872e1657a0fd5eb922990e5082584a03393fd4b6","unresolved":false,"context_lines":[{"line_number":104,"context_line":"            .values(value\u003dfixed_uri).execute()"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"def legacy_parse_uri(uri, show_credentials):"},{"line_number":108,"context_line":"    \"\"\""},{"line_number":109,"context_line":"    Parse URLs. This method fixes an issue where credentials specified"},{"line_number":110,"context_line":"    in the URL are interpreted differently in Python 2.6.1+ than prior"}],"source_content_type":"text/x-python","patch_set":27,"id":"AAAASn%2F%2FXJc%3D","line":107,"updated":"2013-09-05 20:16:41.000000000","message":"should this be in some sort of common store utils? so both the store and migration can use it? just want to make sure if a bug is fixed in one place the other place is not forgotten. Let me know your thoughts.","commit_id":"68b65e9cdf88c719f579cde39c2b0a319dd49381"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"5753591610df1b443bc72e82bd41e81e5bde6b59","unresolved":false,"context_lines":[{"line_number":104,"context_line":"            .values(value\u003dfixed_uri).execute()"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"def legacy_parse_uri(uri, show_credentials):"},{"line_number":108,"context_line":"    \"\"\""},{"line_number":109,"context_line":"    Parse URLs. This method fixes an issue where credentials specified"},{"line_number":110,"context_line":"    in the URL are interpreted differently in Python 2.6.1+ than prior"}],"source_content_type":"text/x-python","patch_set":27,"id":"AAAASn%2F%2FVbA%3D","line":107,"in_reply_to":"AAAASn%2F%2FXJc%3D","updated":"2013-09-06 05:49:06.000000000","message":"Given that the two methods are different in two ways.\n1. The one in swift.py does not have use show_credentials.\n2. In swift.py it\u0027s a instance method and in the migration it\u0027s a module method\n\nIt\u0027s be considerable effort to move it to a common place.\nI would prefer having and maintaining two copies of it.","commit_id":"68b65e9cdf88c719f579cde39c2b0a319dd49381"},{"author":{"_account_id":6522,"name":"Sean McCully","email":"sean_mccully@yahoo.com","username":"sean-mccully"},"change_message_id":"039ec4938ae4d6117a80a5ab106284170c980451","unresolved":false,"context_lines":[{"line_number":165,"context_line":"        if show_credentials:"},{"line_number":166,"context_line":"            #Note (Sridevi): Fix to map the scrubbed value to the"},{"line_number":167,"context_line":"            # corresponding CONF value"},{"line_number":168,"context_line":"            swift_creds \u003d _get_corresponding_swift_store_credentials(creds)"},{"line_number":169,"context_line":"            cred_parts \u003d swift_creds.split(\u0027:\u0027)"},{"line_number":170,"context_line":"            key \u003d cred_parts.pop()"},{"line_number":171,"context_line":"            user \u003d \u0027:\u0027.join(cred_parts)"}],"source_content_type":"text/x-python","patch_set":28,"id":"AAAASn%2F%2FLUM%3D","line":168,"updated":"2013-09-10 15:47:58.000000000","message":"lines after this 169:173 are techinically the same as 179:183 .. ? Would be good to condense","commit_id":"c76797d36d364c7ff74be36bd34cfc868cd5ebb5"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"159219f252e0ebfb4a8dc587bdf8f5d5e70479f7","unresolved":false,"context_lines":[{"line_number":165,"context_line":"        if show_credentials:"},{"line_number":166,"context_line":"            #Note (Sridevi): Fix to map the scrubbed value to the"},{"line_number":167,"context_line":"            # corresponding CONF value"},{"line_number":168,"context_line":"            swift_creds \u003d _get_corresponding_swift_store_credentials(creds)"},{"line_number":169,"context_line":"            cred_parts \u003d swift_creds.split(\u0027:\u0027)"},{"line_number":170,"context_line":"            key \u003d cred_parts.pop()"},{"line_number":171,"context_line":"            user \u003d \u0027:\u0027.join(cred_parts)"}],"source_content_type":"text/x-python","patch_set":28,"id":"AAAASn%2F%2FJfw%3D","line":168,"in_reply_to":"AAAASn%2F%2FLUM%3D","updated":"2013-09-11 05:01:48.000000000","message":"Thanks for the feedback.\nDone","commit_id":"c76797d36d364c7ff74be36bd34cfc868cd5ebb5"},{"author":{"_account_id":6522,"name":"Sean McCully","email":"sean_mccully@yahoo.com","username":"sean-mccully"},"change_message_id":"039ec4938ae4d6117a80a5ab106284170c980451","unresolved":false,"context_lines":[{"line_number":209,"context_line":"    container \u003d container.strip(\u0027/\u0027)"},{"line_number":210,"context_line":"    obj \u003d obj.strip(\u0027/\u0027)"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"    return \u0027%s://%s%s/%s/%s\u0027 % (scheme, credstring, auth_or_store_url,"},{"line_number":213,"context_line":"                                container, obj)"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"AAAASn%2F%2FLSs%3D","line":212,"updated":"2013-09-10 15:47:58.000000000","message":"does this generate a string like so \"http://user:key@/store-url/container/object\u0027, should not be \u0027http://user:key@store-url/container/object\u0027 .. ?","commit_id":"c76797d36d364c7ff74be36bd34cfc868cd5ebb5"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"159219f252e0ebfb4a8dc587bdf8f5d5e70479f7","unresolved":false,"context_lines":[{"line_number":209,"context_line":"    container \u003d container.strip(\u0027/\u0027)"},{"line_number":210,"context_line":"    obj \u003d obj.strip(\u0027/\u0027)"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"    return \u0027%s://%s%s/%s/%s\u0027 % (scheme, credstring, auth_or_store_url,"},{"line_number":213,"context_line":"                                container, obj)"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"AAAASn%2F%2FJfs%3D","line":212,"in_reply_to":"AAAASn%2F%2FLSs%3D","updated":"2013-09-11 05:01:48.000000000","message":"I don\u0027t think so.\nthe auth_or_store_url would be \u0027localhost:8080\u0027 for a location \n\nswift+https://jdoe:jdoe:a86850deb2742ec3cb41518e26aa2d89@localhost:8080/glance/66828896-c226-46a2-9fae-33c47a105d53","commit_id":"c76797d36d364c7ff74be36bd34cfc868cd5ebb5"}],"glance/db/sqlalchemy/migrate_repo/versions/029_hide_user_key_swift_location.py":[{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"5d404d019f2a46c40713e02ebc61d2809f2de705","unresolved":false,"context_lines":[{"line_number":33,"context_line":"CONF \u003d cfg.CONF"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"default_cfg_files \u003d cfg.find_config_files(project\u003d\u0027glance\u0027,"},{"line_number":36,"context_line":"                                                  prog\u003d\u0027glance-api\u0027)"},{"line_number":37,"context_line":"config.parse_args(default_config_files\u003ddefault_cfg_files)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"CONF.import_opt(\u0027swift_store_credentials\u0027, \u0027glance.store.swift\u0027)"}],"source_content_type":"text/x-python","patch_set":30,"id":"AAAASn%2F%2FACE%3D","line":36,"updated":"2013-09-13 19:55:29.000000000","message":"minor nit about the alignment of prog under project","commit_id":"1d4d2cce805da27a77653af8ca92993f0aea9797"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"6fbd2d7fb0a264fb6a0fcd9a2182af0b9a68113b","unresolved":false,"context_lines":[{"line_number":33,"context_line":"CONF \u003d cfg.CONF"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"default_cfg_files \u003d cfg.find_config_files(project\u003d\u0027glance\u0027,"},{"line_number":36,"context_line":"                                                  prog\u003d\u0027glance-api\u0027)"},{"line_number":37,"context_line":"config.parse_args(default_config_files\u003ddefault_cfg_files)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"CONF.import_opt(\u0027swift_store_credentials\u0027, \u0027glance.store.swift\u0027)"}],"source_content_type":"text/x-python","patch_set":30,"id":"AAAAS3%2F%2F%2B38%3D","line":36,"in_reply_to":"AAAASn%2F%2FACE%3D","updated":"2013-09-16 09:08:44.000000000","message":"Done","commit_id":"1d4d2cce805da27a77653af8ca92993f0aea9797"},{"author":{"_account_id":6493,"name":"John Bresnahan","email":"john@bresnahan.me","username":"jbresnah"},"change_message_id":"a8b14e28d8e8a91393e62201464813f7082fc297","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"default_cfg_files \u003d cfg.find_config_files(project\u003d\u0027glance\u0027,"},{"line_number":36,"context_line":"                                                  prog\u003d\u0027glance-api\u0027)"},{"line_number":37,"context_line":"config.parse_args(default_config_files\u003ddefault_cfg_files)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"CONF.import_opt(\u0027swift_store_credentials\u0027, \u0027glance.store.swift\u0027)"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"AAAASn%2F%2B%2F4E%3D","line":37,"updated":"2013-09-13 19:51:46.000000000","message":"The above line causes problems when you run the tests with options, for example:\n\ntox -epy27 -- --tests glance.tests.unit.test_migrations:TestMigrations.test_version_control_existing_db\n\nThe reason is that when this is loaded sys.argv is set to a value that is not understood by this (it is set to the nosetests value).  You may be able to fix it by setting it in the setup() of test_migrations (or any test that uses this) and cleaning it up in teardown.","commit_id":"1d4d2cce805da27a77653af8ca92993f0aea9797"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"6fbd2d7fb0a264fb6a0fcd9a2182af0b9a68113b","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"default_cfg_files \u003d cfg.find_config_files(project\u003d\u0027glance\u0027,"},{"line_number":36,"context_line":"                                                  prog\u003d\u0027glance-api\u0027)"},{"line_number":37,"context_line":"config.parse_args(default_config_files\u003ddefault_cfg_files)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"CONF.import_opt(\u0027swift_store_credentials\u0027, \u0027glance.store.swift\u0027)"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"AAAAS3%2F%2F%2B1U%3D","line":37,"in_reply_to":"AAAASn%2F%2B%2F4E%3D","updated":"2013-09-16 09:08:44.000000000","message":"Thanks for your feedback John.\nI need glance-manage to parse the glance-api.conf files.\nCurrently, it doesn\u0027t do it when glance-registry.conf is present.\nAnd so, I had added this. \n\nHave made changes to glance-manage file.\nPlease take a look.","commit_id":"1d4d2cce805da27a77653af8ca92993f0aea9797"},{"author":{"_account_id":6493,"name":"John Bresnahan","email":"john@bresnahan.me","username":"jbresnah"},"change_message_id":"be2a6405e91e5d60d7a9e7ef6f16ec21da892d17","unresolved":false,"context_lines":[{"line_number":117,"context_line":"    # Make sure that URIs that contain multiple schemes, such as:"},{"line_number":118,"context_line":"    # swift://user:pass@http://authurl.com/v1/container/obj"},{"line_number":119,"context_line":"    # are immediately rejected."},{"line_number":120,"context_line":"    if uri.count(\u0027://\u0027) !\u003d 1:"},{"line_number":121,"context_line":"        reason \u003d _(\"URI cannot contain more than one occurrence of a scheme.\""},{"line_number":122,"context_line":"                   \"If you have specified a URI like \""},{"line_number":123,"context_line":"                   \"swift://user:pass@http://authurl.com/v1/container/obj\""}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAAS3%2F%2Fyyw%3D","line":120,"updated":"2013-09-19 06:22:23.000000000","message":"The tests do no seem to cover this case.  I think this is worth testing.","commit_id":"fcf3116a8a2a04ffe342747a6b1a33b2f04d51dc"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"40ef9c4a577ed81aaffce7f1ca9bd52884c81169","unresolved":false,"context_lines":[{"line_number":117,"context_line":"    # Make sure that URIs that contain multiple schemes, such as:"},{"line_number":118,"context_line":"    # swift://user:pass@http://authurl.com/v1/container/obj"},{"line_number":119,"context_line":"    # are immediately rejected."},{"line_number":120,"context_line":"    if uri.count(\u0027://\u0027) !\u003d 1:"},{"line_number":121,"context_line":"        reason \u003d _(\"URI cannot contain more than one occurrence of a scheme.\""},{"line_number":122,"context_line":"                   \"If you have specified a URI like \""},{"line_number":123,"context_line":"                   \"swift://user:pass@http://authurl.com/v1/container/obj\""}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAAS3%2F%2FmP0%3D","line":120,"in_reply_to":"AAAAS3%2F%2FtJg%3D","updated":"2013-09-24 06:40:35.000000000","message":"Since we have check in parse_uri, there should ideally not be any such instances. This is just a safety check.\nAlso, I can\u0027t think of a way to handle it in the code. The bad uri could be formed in any way, which makes it tough to handle.","commit_id":"fcf3116a8a2a04ffe342747a6b1a33b2f04d51dc"},{"author":{"_account_id":6493,"name":"John Bresnahan","email":"john@bresnahan.me","username":"jbresnah"},"change_message_id":"1ba4274cedc58a2ed81a7c65c71b6db7bd6834ec","unresolved":false,"context_lines":[{"line_number":117,"context_line":"    # Make sure that URIs that contain multiple schemes, such as:"},{"line_number":118,"context_line":"    # swift://user:pass@http://authurl.com/v1/container/obj"},{"line_number":119,"context_line":"    # are immediately rejected."},{"line_number":120,"context_line":"    if uri.count(\u0027://\u0027) !\u003d 1:"},{"line_number":121,"context_line":"        reason \u003d _(\"URI cannot contain more than one occurrence of a scheme.\""},{"line_number":122,"context_line":"                   \"If you have specified a URI like \""},{"line_number":123,"context_line":"                   \"swift://user:pass@http://authurl.com/v1/container/obj\""}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAAS3%2F%2FtJg%3D","line":120,"in_reply_to":"AAAAS3%2F%2Fybo%3D","updated":"2013-09-20 21:28:02.000000000","message":"Do we expect to find such URLs in the db?  If so it seems the user will have to manually remove them.  Should we have some sort of behavior that changes the URL in this case?","commit_id":"fcf3116a8a2a04ffe342747a6b1a33b2f04d51dc"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"6a0b2b09505b154780c1fea0cdb34588661a70c1","unresolved":false,"context_lines":[{"line_number":117,"context_line":"    # Make sure that URIs that contain multiple schemes, such as:"},{"line_number":118,"context_line":"    # swift://user:pass@http://authurl.com/v1/container/obj"},{"line_number":119,"context_line":"    # are immediately rejected."},{"line_number":120,"context_line":"    if uri.count(\u0027://\u0027) !\u003d 1:"},{"line_number":121,"context_line":"        reason \u003d _(\"URI cannot contain more than one occurrence of a scheme.\""},{"line_number":122,"context_line":"                   \"If you have specified a URI like \""},{"line_number":123,"context_line":"                   \"swift://user:pass@http://authurl.com/v1/container/obj\""}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAAS3%2F%2Fybo%3D","line":120,"in_reply_to":"AAAAS3%2F%2Fyyw%3D","updated":"2013-09-19 09:20:14.000000000","message":"Thanks Jbresnahan for your review comments.\nI have added a test to validate the uri  (count of \"://\") in the test_swift_store.py.\nI do not see any unit tests being written for migrations.\nSince the parse_uri and egacy_parse_uri are very similar, I think we\u0027re good as long as it\u0027s being tested out in the swift.py.\nLet me know if you think otherwise.","commit_id":"fcf3116a8a2a04ffe342747a6b1a33b2f04d51dc"},{"author":{"_account_id":6493,"name":"John Bresnahan","email":"john@bresnahan.me","username":"jbresnah"},"change_message_id":"be2a6405e91e5d60d7a9e7ef6f16ec21da892d17","unresolved":false,"context_lines":[{"line_number":203,"context_line":"                                container, obj)"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"def _option_get(param):"},{"line_number":207,"context_line":"    result \u003d getattr(CONF, param)"},{"line_number":208,"context_line":"    if not result:"},{"line_number":209,"context_line":"        reason \u003d (_(\"Could not find %(param)s in configuration \""}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAAS3%2F%2Fyyg%3D","line":206,"updated":"2013-09-19 06:22:23.000000000","message":"This does not seem to be used at all.","commit_id":"fcf3116a8a2a04ffe342747a6b1a33b2f04d51dc"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"6a0b2b09505b154780c1fea0cdb34588661a70c1","unresolved":false,"context_lines":[{"line_number":203,"context_line":"                                container, obj)"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"def _option_get(param):"},{"line_number":207,"context_line":"    result \u003d getattr(CONF, param)"},{"line_number":208,"context_line":"    if not result:"},{"line_number":209,"context_line":"        reason \u003d (_(\"Could not find %(param)s in configuration \""}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAAS3%2F%2FywI%3D","line":206,"in_reply_to":"AAAAS3%2F%2Fyyg%3D","updated":"2013-09-19 09:20:14.000000000","message":"Done","commit_id":"fcf3116a8a2a04ffe342747a6b1a33b2f04d51dc"},{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"3784f2d3bec8c5f893f1d99d5ab22b751c6e775e","unresolved":false,"context_lines":[{"line_number":126,"context_line":"                   \"swift+http://user:pass@authurl.com/v1/container/obj\")"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"        LOG.error(_(\"Invalid store uri %(uri)s: %(reason)s\") % locals())"},{"line_number":129,"context_line":"        raise exception.BadStoreUri(message\u003dreason)"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    pieces \u003d urlparse.urlparse(uri)"},{"line_number":132,"context_line":"    assert pieces.scheme in (\u0027swift\u0027, \u0027swift+http\u0027, \u0027swift+https\u0027)"}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAATH%2F%2F4AE%3D","line":129,"updated":"2013-10-08 18:41:21.000000000","message":"My concern here is if we are running this migration and come across this error, it will cause the migration to error and leave the DB in a bad state.","commit_id":"83cfcd828c11511f9f93856e1521eb9e4f104cb5"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"ecc30712b27db204fc192e8eac3ace481f49ced6","unresolved":false,"context_lines":[{"line_number":126,"context_line":"                   \"swift+http://user:pass@authurl.com/v1/container/obj\")"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"        LOG.error(_(\"Invalid store uri %(uri)s: %(reason)s\") % locals())"},{"line_number":129,"context_line":"        raise exception.BadStoreUri(message\u003dreason)"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    pieces \u003d urlparse.urlparse(uri)"},{"line_number":132,"context_line":"    assert pieces.scheme in (\u0027swift\u0027, \u0027swift+http\u0027, \u0027swift+https\u0027)"}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAATH%2F%2Fz3I%3D","line":129,"in_reply_to":"AAAATH%2F%2F4AE%3D","updated":"2013-10-09 14:36:10.000000000","message":"Done.","commit_id":"83cfcd828c11511f9f93856e1521eb9e4f104cb5"}],"glance/db/sqlalchemy/migrate_repo/versions/030_hide_user_key_swift_location.py":[{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"9aa563aa6c613fc97d9b7cdbc0065a0f2d347122","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"def migrate_location_credentials(migrate_engine, show_credentials):"},{"line_number":71,"context_line":"    \"\"\""},{"line_number":72,"context_line":"    Migrate location credentials for swift uri\u0027s ."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    :param migrate_engine: The configured db engine"},{"line_number":75,"context_line":"    :param show_credentials: If True, migrate location credentials to replace"}],"source_content_type":"text/x-python","patch_set":34,"id":"AAAATH%2F%2Fijo%3D","line":72,"updated":"2013-10-14 20:18:09.000000000","message":"\"uri\u0027s .\" should be \"URIs.\"","commit_id":"51976fd9590104291599bc466a0802603f4296fb"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"5b4d3c0e111231d360607bcfca7b05a4f1f0c922","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"def migrate_location_credentials(migrate_engine, show_credentials):"},{"line_number":71,"context_line":"    \"\"\""},{"line_number":72,"context_line":"    Migrate location credentials for swift uri\u0027s ."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    :param migrate_engine: The configured db engine"},{"line_number":75,"context_line":"    :param show_credentials: If True, migrate location credentials to replace"}],"source_content_type":"text/x-python","patch_set":34,"id":"AAAATH%2F%2FNtU%3D","line":72,"in_reply_to":"AAAATH%2F%2Fijo%3D","updated":"2013-10-21 10:36:30.000000000","message":"Done","commit_id":"51976fd9590104291599bc466a0802603f4296fb"}],"glance/db/sqlalchemy/migrate_repo/versions/031_hide_user_key_swift_location.py":[{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"bda509d952d2b321832ed1404605f01409a42e9f","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        default_value \u003d \"%s:%s\" % (CONF.swift_store_user, CONF.swift_store_key)"},{"line_number":40,"context_line":"        credentials[CONF.current_swift_store_scrub_credentials] \u003d default_value"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    credentials_from_conf \u003d ast.literal_eval(CONF.swift_store_credentials)"},{"line_number":43,"context_line":"    credentials.update(credentials_from_conf)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    return credentials"}],"source_content_type":"text/x-python","patch_set":36,"id":"AAAATX%2F%2F8yE%3D","line":42,"updated":"2013-10-24 14:45:56.000000000","message":"What happens if it is not a valid python expression? does this need some sort of error handling?","commit_id":"02d99dbb6ac4eb567973b80dec4014187d4c897d"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"24bd76248d3daaf87f944adbdb07d5b91018a06b","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        default_value \u003d \"%s:%s\" % (CONF.swift_store_user, CONF.swift_store_key)"},{"line_number":40,"context_line":"        credentials[CONF.current_swift_store_scrub_credentials] \u003d default_value"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    credentials_from_conf \u003d ast.literal_eval(CONF.swift_store_credentials)"},{"line_number":43,"context_line":"    credentials.update(credentials_from_conf)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    return credentials"}],"source_content_type":"text/x-python","patch_set":36,"id":"AAAATn%2F%2F6u4%3D","line":42,"in_reply_to":"AAAATX%2F%2F8yE%3D","updated":"2013-10-25 09:27:46.000000000","message":"Done","commit_id":"02d99dbb6ac4eb567973b80dec4014187d4c897d"},{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"d864abc9e03690891f0444fe1f041f5d3a0dc322","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2013 OpenStack Foundation."},{"line_number":4,"context_line":"# All Rights Reserved."}],"source_content_type":"text/x-python","patch_set":40,"id":"AAAATn%2F9%2FLU%3D","line":1,"updated":"2013-12-03 20:00:07.000000000","message":"This migration will need to be changed to 032","commit_id":"9bd66c6eeeded42ed1cdff4c29768b0b900d5954"},{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"d864abc9e03690891f0444fe1f041f5d3a0dc322","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    try:"},{"line_number":43,"context_line":"        credentials_from_conf \u003d ast.literal_eval(CONF.swift_store_credentials)"},{"line_number":44,"context_line":"    except (ValueError, SyntaxError) as e:"},{"line_number":45,"context_line":"        LOG.exception(_(\"Invalid format of swift_store_credentials config: %s\""},{"line_number":46,"context_line":"                        ) % str(e))"},{"line_number":47,"context_line":"        return credentials"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"AAAATn%2F9%2Bz4%3D","line":45,"updated":"2013-12-03 20:00:07.000000000","message":"Same comment as before. LOG.exception will handle logging of exception info.","commit_id":"9bd66c6eeeded42ed1cdff4c29768b0b900d5954"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"6307cd1d870952712304922a7e773c6a526cdbf7","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    try:"},{"line_number":43,"context_line":"        credentials_from_conf \u003d ast.literal_eval(CONF.swift_store_credentials)"},{"line_number":44,"context_line":"    except (ValueError, SyntaxError) as e:"},{"line_number":45,"context_line":"        LOG.exception(_(\"Invalid format of swift_store_credentials config: %s\""},{"line_number":46,"context_line":"                        ) % str(e))"},{"line_number":47,"context_line":"        return credentials"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"AAAATn%2F9140%3D","line":45,"in_reply_to":"AAAATn%2F9%2Bz4%3D","updated":"2013-12-06 11:33:26.000000000","message":"Done","commit_id":"9bd66c6eeeded42ed1cdff4c29768b0b900d5954"},{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"d864abc9e03690891f0444fe1f041f5d3a0dc322","unresolved":false,"context_lines":[{"line_number":162,"context_line":"            raise exception.BadStoreUri()"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        if show_credentials:"},{"line_number":165,"context_line":"            #Note (Sridevi): Fix to map the scrubbed value to the"},{"line_number":166,"context_line":"            # corresponding CONF value"},{"line_number":167,"context_line":"            swift_creds \u003d _get_corresponding_swift_store_credentials(creds)"},{"line_number":168,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":40,"id":"AAAATn%2F9%2Bzg%3D","line":165,"updated":"2013-12-03 20:00:07.000000000","message":"minor nit: this shoudl be \"# NOTE(sridevi): \"","commit_id":"9bd66c6eeeded42ed1cdff4c29768b0b900d5954"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"6307cd1d870952712304922a7e773c6a526cdbf7","unresolved":false,"context_lines":[{"line_number":162,"context_line":"            raise exception.BadStoreUri()"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        if show_credentials:"},{"line_number":165,"context_line":"            #Note (Sridevi): Fix to map the scrubbed value to the"},{"line_number":166,"context_line":"            # corresponding CONF value"},{"line_number":167,"context_line":"            swift_creds \u003d _get_corresponding_swift_store_credentials(creds)"},{"line_number":168,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":40,"id":"AAAATn%2F91%2Bs%3D","line":165,"in_reply_to":"AAAATn%2F9%2Bzg%3D","updated":"2013-12-06 11:33:26.000000000","message":"Done","commit_id":"9bd66c6eeeded42ed1cdff4c29768b0b900d5954"}],"glance/db/sqlalchemy/migrate_repo/versions/033_hide_user_key_swift_location.py":[{"author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"change_message_id":"80e52532c146dea1609aea97e4940d7bbd5f73a3","unresolved":false,"context_lines":[{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    :param migrate_engine: The configured db engine"},{"line_number":81,"context_line":"    :param show_credentials: If True, migrate location credentials to replace"},{"line_number":82,"context_line":"                             user:key with the corresponding scrub user:key"},{"line_number":83,"context_line":"                             in the swift location, else if False replace"},{"line_number":84,"context_line":"                             scrub user:key in the url with the user and"},{"line_number":85,"context_line":"                             key values from the config"}],"source_content_type":"text/x-python","patch_set":44,"id":"AAAATn%2F8vM8%3D","line":82,"updated":"2013-12-20 21:54:56.000000000","message":"Does the concept of a corresponding scrub user:key still exist?","commit_id":"bb0318d5ca55de33ec40fb2096222fba141967ef"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"be7190a5f2f33d229136c72cca90d4549694ee21","unresolved":false,"context_lines":[{"line_number":90,"context_line":"                                       autoload\u003dTrue)"},{"line_number":91,"context_line":"    locations \u003d list(locations_table.select("},{"line_number":92,"context_line":"        locations_table.c.value.startswith(\u0027swift\u0027)).execute())"},{"line_number":93,"context_line":"    print swift.SWIFT_STORE_CREDENTIALS"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    for location in locations:"},{"line_number":96,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2F7Cw%3D","line":93,"updated":"2014-01-06 19:14:31.000000000","message":"print :)","commit_id":"8dd4c90837578693fa1f976620154ef5beb576da"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"713e9b511029c99be91b983a9af721c937780382","unresolved":false,"context_lines":[{"line_number":90,"context_line":"                                       autoload\u003dTrue)"},{"line_number":91,"context_line":"    locations \u003d list(locations_table.select("},{"line_number":92,"context_line":"        locations_table.c.value.startswith(\u0027swift\u0027)).execute())"},{"line_number":93,"context_line":"    print swift.SWIFT_STORE_CREDENTIALS"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    for location in locations:"},{"line_number":96,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2F4pA%3D","line":93,"in_reply_to":"AAAAUH%2F%2F7Cw%3D","updated":"2014-01-07 12:16:32.000000000","message":"Done","commit_id":"8dd4c90837578693fa1f976620154ef5beb576da"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"be7190a5f2f33d229136c72cca90d4549694ee21","unresolved":false,"context_lines":[{"line_number":187,"context_line":"    except IndexError:"},{"line_number":188,"context_line":"        reason \u003d _(\"Badly formed Swift URI.\")"},{"line_number":189,"context_line":"        LOG.debug(reason)"},{"line_number":190,"context_line":"        raise exception.BadStoreUri()"},{"line_number":191,"context_line":"    if show_credentials:"},{"line_number":192,"context_line":"        return \u0027%s://%s@%s/%s/%s\u0027 % (scheme, credstring, auth_or_store_url,"},{"line_number":193,"context_line":"                                     container, obj)"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2F7AE%3D","line":190,"updated":"2014-01-06 19:14:31.000000000","message":"did venkat\u0027s patch to DRY up this function from store to common get in?","commit_id":"8dd4c90837578693fa1f976620154ef5beb576da"},{"author":{"_account_id":616,"name":"Mark Washenberger","email":"mark.washenberger@markwash.net","username":"markwash"},"change_message_id":"22acb75ca09472fcbbcec7c85aa7d629c7baaccc","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from glance.common import exception"},{"line_number":23,"context_line":"import glance.openstack.common.log as logging"},{"line_number":24,"context_line":"from glance.store.swift import SWIFT_STORE_CREDENTIALS"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":55,"id":"AAAAUH%2F%2Fc00%3D","line":24,"updated":"2014-01-13 19:01:00.000000000","message":"I think we need to fully duplicate the parsing of this option. It creates a problem for us to reuse library code in the migrations, in case we change how that library code works in the future and thus break the migration.\n\nWe might need to consider putting the swift store credentials in a separate file just to make sure this can work independently.","commit_id":"46941b4dc3cb6f56e38cc6b954c3682abfda4e67"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"cd911052e1c1cdc8d4b08c9616ff4b5674c68c00","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from glance.common import exception"},{"line_number":23,"context_line":"import glance.openstack.common.log as logging"},{"line_number":24,"context_line":"from glance.store.swift import SWIFT_STORE_CREDENTIALS"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":55,"id":"AAAAUH%2F%2FNHU%3D","line":24,"in_reply_to":"AAAAUH%2F%2Fc00%3D","updated":"2014-01-16 12:42:18.000000000","message":"Done","commit_id":"46941b4dc3cb6f56e38cc6b954c3682abfda4e67"},{"author":{"_account_id":616,"name":"Mark Washenberger","email":"mark.washenberger@markwash.net","username":"markwash"},"change_message_id":"22acb75ca09472fcbbcec7c85aa7d629c7baaccc","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    for location in locations:"},{"line_number":69,"context_line":"        try:"},{"line_number":70,"context_line":"            fixed_uri \u003d legacy_parse_uri(location[\u0027value\u0027], show_credentials)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"            locations_table.update() \\"},{"line_number":73,"context_line":"                .where(locations_table.c.id \u003d\u003d location[\u0027id\u0027]) \\"}],"source_content_type":"text/x-python","patch_set":55,"id":"AAAAUH%2F%2Fczc%3D","line":70,"updated":"2014-01-13 19:01:00.000000000","message":"This is a bit too cute for my taste. I think it would be better to do\n\n  uri_details \u003d legacy_parse_uri(location[\u0027value\u0027])\n  if show_credentials:\n      fixed_uri \u003d format_with_credentials(uri_details)\n  else:\n      fixed_uri \u003d format_with_account_ref(uri_details)","commit_id":"46941b4dc3cb6f56e38cc6b954c3682abfda4e67"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"119cf6142db699d65b8b5262d20e74d62f411732","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    for location in locations:"},{"line_number":69,"context_line":"        try:"},{"line_number":70,"context_line":"            fixed_uri \u003d legacy_parse_uri(location[\u0027value\u0027], show_credentials)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"            locations_table.update() \\"},{"line_number":73,"context_line":"                .where(locations_table.c.id \u003d\u003d location[\u0027id\u0027]) \\"}],"source_content_type":"text/x-python","patch_set":55,"id":"AAAAUH%2F%2B2vk%3D","line":70,"in_reply_to":"AAAAUH%2F%2Fczc%3D","updated":"2014-01-21 11:52:15.000000000","message":"Mark,\n\nI thought about this. legacy_parse_uri would have to return 5 values and they have to be passed around to format_with_* methods to fix it. I sort of think with the changed legacy parse uri, it makes sense to have it return the transformed uri.\nLet me know if you think it doesn\u0027t look good.","commit_id":"46941b4dc3cb6f56e38cc6b954c3682abfda4e67"}],"glance/store/swift.py":[{"author":{"_account_id":6493,"name":"John Bresnahan","email":"john@bresnahan.me","username":"jbresnah"},"change_message_id":"878f2b3edc7b348af1fa332e7503637c935d2823","unresolved":false,"context_lines":[{"line_number":138,"context_line":"            return \u0027%s:%s@\u0027 % (urllib.quote(self.user), urllib.quote(self.key))"},{"line_number":139,"context_line":"        return \u0027\u0027"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def get_uri(self, credentials_included\u003dTrue):"},{"line_number":142,"context_line":"        auth_or_store_url \u003d self.auth_or_store_url"},{"line_number":143,"context_line":"        if auth_or_store_url.startswith(\u0027http://\u0027):"},{"line_number":144,"context_line":"            auth_or_store_url \u003d auth_or_store_url[len(\u0027http://\u0027):]"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPn%2F%2Fgr0%3D","line":141,"updated":"2013-06-28 20:04:47.000000000","message":"nano-nit:I think the credentials_included bool would be better as \u0027scrub_credentials\u0027?  It took me a minute to understand what this meant. (of course i will not hold up this patch based on that!)","commit_id":"c91485fccc3b50b84c12d5c36b7fc2c0bfbeef76"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"a64760a0e4b283f54911f8e7f9968f68f6f6da44","unresolved":false,"context_lines":[{"line_number":150,"context_line":"        container \u003d self.container.strip(\u0027/\u0027)"},{"line_number":151,"context_line":"        obj \u003d self.obj.strip(\u0027/\u0027)"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        if not credentials_included:"},{"line_number":154,"context_line":"            credstring \u003d \u0027hidden_user:hidden_key@\u0027"},{"line_number":155,"context_line":"        return \u0027%s://%s%s/%s/%s\u0027 % (self.scheme, credstring, auth_or_store_url,"},{"line_number":156,"context_line":"                                    container, obj)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPn%2F%2Fgx0%3D","line":153,"updated":"2013-06-28 19:27:34.000000000","message":"going to move this to _get_credentials based on john\u0027s suggestion","commit_id":"c91485fccc3b50b84c12d5c36b7fc2c0bfbeef76"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"abf4c147be18750f262890dc7755ca45a9b14f3b","unresolved":false,"context_lines":[{"line_number":96,"context_line":"                       \u0027multi-tenant mode.\u0027)),"},{"line_number":97,"context_line":"    cfg.StrOpt(\u0027swift_store_credentials\u0027, default\u003d\"{}\","},{"line_number":98,"context_line":"                help\u003d_(\u0027The mapping between the scrubbed user:key and the \u0027"},{"line_number":99,"context_line":"                       \u0027actual swift store credentials\u0027)),"},{"line_number":100,"context_line":"    cfg.StrOpt(\u0027current_swift_store_scrub_credentials\u0027,"},{"line_number":101,"context_line":"               help\u003d_(\u0027The scrub user:key corresponding to the default/\u0027"},{"line_number":102,"context_line":"                      \u0027current swift store. This is used for any new image\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAQn%2F%2FXlw%3D","line":99,"updated":"2013-08-01 09:32:36.000000000","message":"Ick ... have you seen cfg.DictOpt ? http://docs.openstack.org/developer/oslo.config/opts.html#oslo.config.cfg.DictOpt","commit_id":"1d2d4ee75df0da45edfe2f4318135f0540487513"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"abf4c147be18750f262890dc7755ca45a9b14f3b","unresolved":false,"context_lines":[{"line_number":106,"context_line":"CONF \u003d cfg.CONF"},{"line_number":107,"context_line":"CONF.register_opts(swift_opts)"},{"line_number":108,"context_line":"CONF.set_override(\u0027swift_store_credentials\u0027,"},{"line_number":109,"context_line":"                  ast.literal_eval(CONF.swift_store_credentials))"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"class StoreLocation(glance.store.location.StoreLocation):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAQn%2F%2FXmI%3D","line":109,"updated":"2013-08-01 09:32:36.000000000","message":"CONF.set_override() really should only be used in unit test","commit_id":"1d2d4ee75df0da45edfe2f4318135f0540487513"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"abf4c147be18750f262890dc7755ca45a9b14f3b","unresolved":false,"context_lines":[{"line_number":173,"context_line":"        if not result:"},{"line_number":174,"context_line":"            reason \u003d (_(\"Could not find %(param)s in configuration \""},{"line_number":175,"context_line":"                        \"options.\") % locals())"},{"line_number":176,"context_line":"            LOG.error(reason)"},{"line_number":177,"context_line":"            raise exception.BadStoreConfiguration(store_name\u003d\"swift\","},{"line_number":178,"context_line":"                                                  reason\u003dreason)"},{"line_number":179,"context_line":"        return result"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAQn%2F%2FXlY%3D","line":176,"updated":"2013-08-01 09:32:36.000000000","message":"This error message is misleading - I\u0027d say something like \"A value for configuration option %(param)s is required\"","commit_id":"1d2d4ee75df0da45edfe2f4318135f0540487513"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"3436e2ceb4864c065fe722aacd5c708374d483df","unresolved":false,"context_lines":[{"line_number":99,"context_line":"                help\u003d_(\u0027A list of tenants that will be granted read/write \u0027"},{"line_number":100,"context_line":"                       \u0027access on all Swift containers created by Glance in \u0027"},{"line_number":101,"context_line":"                       \u0027multi-tenant mode.\u0027)),"},{"line_number":102,"context_line":"    cfg.DictOpt(\u0027swift_store_credentials\u0027, default\u003d{\u0027hiddenuser1:hiddenkey1\u0027:"},{"line_number":103,"context_line":"                                                    \u0027jdoe:jdoe\u0027},"},{"line_number":104,"context_line":"                help\u003d_(\u0027The mapping between the scrubbed user:key and the\u0027"},{"line_number":105,"context_line":"                       \u0027actual swift store credentials\u0027)),"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAQn%2F%2FKQc%3D","line":102,"updated":"2013-08-06 07:38:30.000000000","message":"We have to update configuration template files.","commit_id":"59db7fbb81bd06cbcdaacec351e6872641c5c8f5"},{"author":{"_account_id":1390,"name":"Paul Bourke","email":"pauldbourke@proton.me","username":"pauldbourke"},"change_message_id":"c3d5adf09943b315647ad25f5066fa09cfd9983f","unresolved":false,"context_lines":[{"line_number":103,"context_line":"                help\u003d_(\u0027The mapping between the scrubbed user:key and the\u0027"},{"line_number":104,"context_line":"                       \u0027actual swift store credentials\u0027)),"},{"line_number":105,"context_line":"    cfg.StrOpt(\u0027current_swift_store_scrub_credentials\u0027,"},{"line_number":106,"context_line":"               default\u003d\"hidden_user_1:hidden_key_1\","},{"line_number":107,"context_line":"               help\u003d_(\u0027The scrub user:key corresponding to the default/\u0027"},{"line_number":108,"context_line":"                      \u0027current swift store. This is used for any new image\u0027"},{"line_number":109,"context_line":"                      \u0027add\u0027))"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAARH%2F%2F5C0%3D","line":106,"updated":"2013-08-15 17:15:41.000000000","message":"Based on what happens in set_default_swift_store_credentials() below, I think the default needs to be \u0027hidden_user_2:hidden_key_2\u0027 in order to let existing setups continue working.","commit_id":"eea253f5575e6c93e8bef5a47ccc39ee27be4f27"},{"author":{"_account_id":6493,"name":"John Bresnahan","email":"john@bresnahan.me","username":"jbresnah"},"change_message_id":"aced0c4694f254613d1107ceaf3a98b189d3e26b","unresolved":false,"context_lines":[{"line_number":195,"context_line":"    def _get_corresponding_swift_store_credentials(self, creds):"},{"line_number":196,"context_line":"        return SWIFT_STORE_CREDENTIALS[creds.replace(\u0027-\u0027, \u0027:\u0027)]"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    def _option_get(self, param):"},{"line_number":199,"context_line":"        result \u003d getattr(CONF, param)"},{"line_number":200,"context_line":"        if not result:"},{"line_number":201,"context_line":"            reason \u003d (_(\"A value for configuration option %(param)s is\""}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAASn%2F%2F1JA%3D","line":198,"updated":"2013-08-29 02:46:16.000000000","message":"Is this needed?  It seems to override the one in the base class but the only different is a very slight change to the message that is logged.","commit_id":"df293e7e58d5364a09097ea20be96f0088f97623"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"22bfb7de773422d67c9551967386799ef5180dfd","unresolved":false,"context_lines":[{"line_number":195,"context_line":"    def _get_corresponding_swift_store_credentials(self, creds):"},{"line_number":196,"context_line":"        return SWIFT_STORE_CREDENTIALS[creds.replace(\u0027-\u0027, \u0027:\u0027)]"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    def _option_get(self, param):"},{"line_number":199,"context_line":"        result \u003d getattr(CONF, param)"},{"line_number":200,"context_line":"        if not result:"},{"line_number":201,"context_line":"            reason \u003d (_(\"A value for configuration option %(param)s is\""}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAASn%2F%2Foag%3D","line":198,"in_reply_to":"AAAASn%2F%2F1JA%3D","updated":"2013-09-02 07:00:31.000000000","message":"Done","commit_id":"df293e7e58d5364a09097ea20be96f0088f97623"},{"author":{"_account_id":6493,"name":"John Bresnahan","email":"john@bresnahan.me","username":"jbresnah"},"change_message_id":"1cc52d894fc10372a155bdbcac8b22e70d75fb0c","unresolved":false,"context_lines":[{"line_number":604,"context_line":"        current_swift_scrub_credentials \u003d \\"},{"line_number":605,"context_line":"            self._option_get(\u0027current_swift_store_scrub_credentials\u0027)"},{"line_number":606,"context_line":"        credentials \u003d SWIFT_STORE_CREDENTIALS[current_swift_scrub_credentials]"},{"line_number":607,"context_line":"        if not credentials:"},{"line_number":608,"context_line":"            reason \u003d \"A value for swift_store_credentials is required.\""},{"line_number":609,"context_line":"            LOG.error(reason)"},{"line_number":610,"context_line":"            raise exception.BadStoreConfiguration(store_name\u003d\"swift\","}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAASn%2F%2F1LA%3D","line":607,"updated":"2013-08-29 02:28:03.000000000","message":"Do you want:\n\nif current_swift_scrub_credentials not in SWIFT_STORE_CREDENTIALS:\n\ninstead?  Also this branch is never tripped by the tests (probably not a big deal)","commit_id":"df293e7e58d5364a09097ea20be96f0088f97623"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"22bfb7de773422d67c9551967386799ef5180dfd","unresolved":false,"context_lines":[{"line_number":604,"context_line":"        current_swift_scrub_credentials \u003d \\"},{"line_number":605,"context_line":"            self._option_get(\u0027current_swift_store_scrub_credentials\u0027)"},{"line_number":606,"context_line":"        credentials \u003d SWIFT_STORE_CREDENTIALS[current_swift_scrub_credentials]"},{"line_number":607,"context_line":"        if not credentials:"},{"line_number":608,"context_line":"            reason \u003d \"A value for swift_store_credentials is required.\""},{"line_number":609,"context_line":"            LOG.error(reason)"},{"line_number":610,"context_line":"            raise exception.BadStoreConfiguration(store_name\u003d\"swift\","}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAASn%2F%2FoaA%3D","line":607,"in_reply_to":"AAAASn%2F%2F1LA%3D","updated":"2013-09-02 07:00:31.000000000","message":"I need a handle to credentials, since it\u0027s returned at the end.","commit_id":"df293e7e58d5364a09097ea20be96f0088f97623"},{"author":{"_account_id":6493,"name":"John Bresnahan","email":"john@bresnahan.me","username":"jbresnah"},"change_message_id":"ca61f030ca0dc9c8e6c5149effd128e363abf38b","unresolved":false,"context_lines":[{"line_number":597,"context_line":"    def _get_current_swift_credentials(self):"},{"line_number":598,"context_line":"        current_swift_scrub_credentials \u003d \\"},{"line_number":599,"context_line":"            self._option_get(\u0027current_swift_store_scrub_credentials\u0027)"},{"line_number":600,"context_line":"        credentials \u003d SWIFT_STORE_CREDENTIALS[current_swift_scrub_credentials]"},{"line_number":601,"context_line":"        if not credentials:"},{"line_number":602,"context_line":"            reason \u003d \"A value for swift_store_credentials is required.\""},{"line_number":603,"context_line":"            LOG.error(reason)"}],"source_content_type":"text/x-python","patch_set":25,"id":"AAAASn%2F%2Fmcw%3D","line":600,"updated":"2013-09-02 17:44:26.000000000","message":"What I am wondering here is, is a KeyError possible?  And if so, do you want to return None if current_swift_scrub_credentials is not in SWIFT_STORE_CREDENTIALS or do you want to raise a KeyError?","commit_id":"1cbd3b6325564fc32daee24222df24a65d001a27"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"3b99015eda671556b6b8c57451b65249dd064a06","unresolved":false,"context_lines":[{"line_number":597,"context_line":"    def _get_current_swift_credentials(self):"},{"line_number":598,"context_line":"        current_swift_scrub_credentials \u003d \\"},{"line_number":599,"context_line":"            self._option_get(\u0027current_swift_store_scrub_credentials\u0027)"},{"line_number":600,"context_line":"        credentials \u003d SWIFT_STORE_CREDENTIALS[current_swift_scrub_credentials]"},{"line_number":601,"context_line":"        if not credentials:"},{"line_number":602,"context_line":"            reason \u003d \"A value for swift_store_credentials is required.\""},{"line_number":603,"context_line":"            LOG.error(reason)"}],"source_content_type":"text/x-python","patch_set":25,"id":"AAAASn%2F%2FlqI%3D","line":600,"in_reply_to":"AAAASn%2F%2Fmcw%3D","updated":"2013-09-03 05:02:15.000000000","message":"Thanks for pointing that out.\n\nI want to raise BadStoreConfiguration error if the current_swift_scrub_credentials is not in SWIFT_STORE_CREDENTIALS. That way, it will ensure that the store is disabled.","commit_id":"1cbd3b6325564fc32daee24222df24a65d001a27"},{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"3784f2d3bec8c5f893f1d99d5ab22b751c6e775e","unresolved":false,"context_lines":[{"line_number":121,"context_line":"    credentials \u003d {}"},{"line_number":122,"context_line":"    if CONF.swift_store_user and CONF.swift_store_key:"},{"line_number":123,"context_line":"        default_value \u003d \"%s:%s\" % (CONF.swift_store_user, CONF.swift_store_key)"},{"line_number":124,"context_line":"        credentials[\u0027hidden_user_1:hidden_key_1\u0027] \u003d default_value"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    credentials_from_conf \u003d ast.literal_eval(CONF.swift_store_credentials)"},{"line_number":127,"context_line":"    credentials.update(credentials_from_conf)"}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAATH%2F%2F3v4%3D","line":124,"updated":"2013-10-08 18:41:21.000000000","message":"Should this be using CONF.current_swift_store_scrub_credentials?","commit_id":"83cfcd828c11511f9f93856e1521eb9e4f104cb5"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"ecc30712b27db204fc192e8eac3ace481f49ced6","unresolved":false,"context_lines":[{"line_number":121,"context_line":"    credentials \u003d {}"},{"line_number":122,"context_line":"    if CONF.swift_store_user and CONF.swift_store_key:"},{"line_number":123,"context_line":"        default_value \u003d \"%s:%s\" % (CONF.swift_store_user, CONF.swift_store_key)"},{"line_number":124,"context_line":"        credentials[\u0027hidden_user_1:hidden_key_1\u0027] \u003d default_value"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    credentials_from_conf \u003d ast.literal_eval(CONF.swift_store_credentials)"},{"line_number":127,"context_line":"    credentials.update(credentials_from_conf)"}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAATH%2F%2Fz2k%3D","line":124,"in_reply_to":"AAAATH%2F%2F3v4%3D","updated":"2013-10-09 14:36:10.000000000","message":"Done.","commit_id":"83cfcd828c11511f9f93856e1521eb9e4f104cb5"},{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"3784f2d3bec8c5f893f1d99d5ab22b751c6e775e","unresolved":false,"context_lines":[{"line_number":186,"context_line":"        return \u0027%s://%s%s/%s/%s\u0027 % (self.scheme, credstring, auth_or_store_url,"},{"line_number":187,"context_line":"                                    container, obj)"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    def _get_scrubbed_credentials(self, credstring):"},{"line_number":190,"context_line":"            scrub_keys \u003d map(lambda k: urllib.unquote(k),"},{"line_number":191,"context_line":"                             SWIFT_STORE_CREDENTIALS.keys())"},{"line_number":192,"context_line":"            store_values \u003d map(lambda v: urllib.unquote(v),"}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAATH%2F%2F3v0%3D","line":189,"updated":"2013-10-08 18:41:21.000000000","message":"I think it may be more readable doing something like this:\n\ndef _get_scrubbed_credentials(self, credstring):\nfor k, v in SWIFT_STORE_CREDENTIALS:\nif credstring \u003d\u003d urllib.unquote(v):\nreturn urllib.unquote(k)\n\nAlso, what should it do if it cannot find a match?","commit_id":"83cfcd828c11511f9f93856e1521eb9e4f104cb5"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"ecc30712b27db204fc192e8eac3ace481f49ced6","unresolved":false,"context_lines":[{"line_number":186,"context_line":"        return \u0027%s://%s%s/%s/%s\u0027 % (self.scheme, credstring, auth_or_store_url,"},{"line_number":187,"context_line":"                                    container, obj)"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    def _get_scrubbed_credentials(self, credstring):"},{"line_number":190,"context_line":"            scrub_keys \u003d map(lambda k: urllib.unquote(k),"},{"line_number":191,"context_line":"                             SWIFT_STORE_CREDENTIALS.keys())"},{"line_number":192,"context_line":"            store_values \u003d map(lambda v: urllib.unquote(v),"}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAATH%2F%2Fz2s%3D","line":189,"in_reply_to":"AAAATH%2F%2F3v0%3D","updated":"2013-10-09 14:36:10.000000000","message":"Done.\nReturning a blank string when there is no match.\nHandling the blank string in the get_uri method.","commit_id":"83cfcd828c11511f9f93856e1521eb9e4f104cb5"},{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"3784f2d3bec8c5f893f1d99d5ab22b751c6e775e","unresolved":false,"context_lines":[{"line_number":247,"context_line":"                raise exception.BadStoreUri()"},{"line_number":248,"context_line":"            key \u003d cred_parts.pop()"},{"line_number":249,"context_line":"            user \u003d \u0027:\u0027.join(cred_parts)"},{"line_number":250,"context_line":"            #Note (Sridevi): Fix to map the scrubbed value to the"},{"line_number":251,"context_line":"            # corresponding CONF value"},{"line_number":252,"context_line":"            creds \u003d urllib.unquote(creds)"},{"line_number":253,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAATH%2F%2F3vw%3D","line":250,"updated":"2013-10-08 18:41:21.000000000","message":"small nitpick, can you tweak this to be\n\n# NOTE(Sridevi): Fix to map the scrubbed value to the","commit_id":"83cfcd828c11511f9f93856e1521eb9e4f104cb5"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"ecc30712b27db204fc192e8eac3ace481f49ced6","unresolved":false,"context_lines":[{"line_number":247,"context_line":"                raise exception.BadStoreUri()"},{"line_number":248,"context_line":"            key \u003d cred_parts.pop()"},{"line_number":249,"context_line":"            user \u003d \u0027:\u0027.join(cred_parts)"},{"line_number":250,"context_line":"            #Note (Sridevi): Fix to map the scrubbed value to the"},{"line_number":251,"context_line":"            # corresponding CONF value"},{"line_number":252,"context_line":"            creds \u003d urllib.unquote(creds)"},{"line_number":253,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAATH%2F%2Fz2w%3D","line":250,"in_reply_to":"AAAATH%2F%2F3vw%3D","updated":"2013-10-09 14:36:10.000000000","message":"Done.","commit_id":"83cfcd828c11511f9f93856e1521eb9e4f104cb5"},{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"3784f2d3bec8c5f893f1d99d5ab22b751c6e775e","unresolved":false,"context_lines":[{"line_number":250,"context_line":"            #Note (Sridevi): Fix to map the scrubbed value to the"},{"line_number":251,"context_line":"            # corresponding CONF value"},{"line_number":252,"context_line":"            creds \u003d urllib.unquote(creds)"},{"line_number":253,"context_line":"            try:"},{"line_number":254,"context_line":"                self.credentials \u003d\\"},{"line_number":255,"context_line":"                    self._get_corresponding_swift_store_credentials(creds)"},{"line_number":256,"context_line":"                split_creds \u003d self.credentials.split(\u0027:\u0027)"}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAATH%2F%2F3vo%3D","line":253,"updated":"2013-10-08 18:41:21.000000000","message":"This block could be a little more explicit. For example, doing something like:\n\nif creds in SWIFT_STORE_CREDENTIALS:\n\nwould make it more obvious this block is only intended to execute if they are using scrubed creds","commit_id":"83cfcd828c11511f9f93856e1521eb9e4f104cb5"},{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"3784f2d3bec8c5f893f1d99d5ab22b751c6e775e","unresolved":false,"context_lines":[{"line_number":253,"context_line":"            try:"},{"line_number":254,"context_line":"                self.credentials \u003d\\"},{"line_number":255,"context_line":"                    self._get_corresponding_swift_store_credentials(creds)"},{"line_number":256,"context_line":"                split_creds \u003d self.credentials.split(\u0027:\u0027)"},{"line_number":257,"context_line":"                self.key \u003d split_creds.pop()"},{"line_number":258,"context_line":"                self.user \u003d \u0027:\u0027.join(split_creds)"},{"line_number":259,"context_line":"            except KeyError:"}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAATH%2F%2F3vg%3D","line":256,"updated":"2013-10-08 18:41:21.000000000","message":"here you can do\n\nself.key, self.user \u003d self.credentials.split(\u0027:\u0027, 1)","commit_id":"83cfcd828c11511f9f93856e1521eb9e4f104cb5"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"ecc30712b27db204fc192e8eac3ace481f49ced6","unresolved":false,"context_lines":[{"line_number":253,"context_line":"            try:"},{"line_number":254,"context_line":"                self.credentials \u003d\\"},{"line_number":255,"context_line":"                    self._get_corresponding_swift_store_credentials(creds)"},{"line_number":256,"context_line":"                split_creds \u003d self.credentials.split(\u0027:\u0027)"},{"line_number":257,"context_line":"                self.key \u003d split_creds.pop()"},{"line_number":258,"context_line":"                self.user \u003d \u0027:\u0027.join(split_creds)"},{"line_number":259,"context_line":"            except KeyError:"}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAATH%2F%2Fz24%3D","line":256,"in_reply_to":"AAAATH%2F%2F3vg%3D","updated":"2013-10-09 14:36:10.000000000","message":"Thanks for the suggestion. Using rsplit.","commit_id":"83cfcd828c11511f9f93856e1521eb9e4f104cb5"},{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"3784f2d3bec8c5f893f1d99d5ab22b751c6e775e","unresolved":false,"context_lines":[{"line_number":587,"context_line":"        else:"},{"line_number":588,"context_line":"            self.scheme \u003d \u0027swift+https\u0027"},{"line_number":589,"context_line":"        self.container \u003d CONF.swift_store_container"},{"line_number":590,"context_line":"        credentials \u003d self._get_current_swift_credentials()"},{"line_number":591,"context_line":"        split_credentials \u003d credentials.split(\u0027:\u0027)"},{"line_number":592,"context_line":""},{"line_number":593,"context_line":"        self.key \u003d split_credentials.pop()"}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAATH%2F%2F3u4%3D","line":590,"updated":"2013-10-08 18:41:21.000000000","message":"will this code block work if someone is still using swift_store_user and swift_store_key","commit_id":"83cfcd828c11511f9f93856e1521eb9e4f104cb5"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"ecc30712b27db204fc192e8eac3ace481f49ced6","unresolved":false,"context_lines":[{"line_number":587,"context_line":"        else:"},{"line_number":588,"context_line":"            self.scheme \u003d \u0027swift+https\u0027"},{"line_number":589,"context_line":"        self.container \u003d CONF.swift_store_container"},{"line_number":590,"context_line":"        credentials \u003d self._get_current_swift_credentials()"},{"line_number":591,"context_line":"        split_credentials \u003d credentials.split(\u0027:\u0027)"},{"line_number":592,"context_line":""},{"line_number":593,"context_line":"        self.key \u003d split_credentials.pop()"}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAATH%2F%2Fz28%3D","line":590,"in_reply_to":"AAAATH%2F%2F3u4%3D","updated":"2013-10-09 14:36:10.000000000","message":"Yes, since swift_store_credentials is defaulted to \"swift_store_user:swift_store_key\".","commit_id":"83cfcd828c11511f9f93856e1521eb9e4f104cb5"},{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"3784f2d3bec8c5f893f1d99d5ab22b751c6e775e","unresolved":false,"context_lines":[{"line_number":588,"context_line":"            self.scheme \u003d \u0027swift+https\u0027"},{"line_number":589,"context_line":"        self.container \u003d CONF.swift_store_container"},{"line_number":590,"context_line":"        credentials \u003d self._get_current_swift_credentials()"},{"line_number":591,"context_line":"        split_credentials \u003d credentials.split(\u0027:\u0027)"},{"line_number":592,"context_line":""},{"line_number":593,"context_line":"        self.key \u003d split_credentials.pop()"},{"line_number":594,"context_line":"        self.user \u003d \u0027:\u0027.join(split_credentials)"}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAATH%2F%2F3vQ%3D","line":591,"updated":"2013-10-08 18:41:21.000000000","message":"here you can do\n\nself.key, self.user \u003d credentials.split(\u0027:\u0027, 1)","commit_id":"83cfcd828c11511f9f93856e1521eb9e4f104cb5"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"ecc30712b27db204fc192e8eac3ace481f49ced6","unresolved":false,"context_lines":[{"line_number":588,"context_line":"            self.scheme \u003d \u0027swift+https\u0027"},{"line_number":589,"context_line":"        self.container \u003d CONF.swift_store_container"},{"line_number":590,"context_line":"        credentials \u003d self._get_current_swift_credentials()"},{"line_number":591,"context_line":"        split_credentials \u003d credentials.split(\u0027:\u0027)"},{"line_number":592,"context_line":""},{"line_number":593,"context_line":"        self.key \u003d split_credentials.pop()"},{"line_number":594,"context_line":"        self.user \u003d \u0027:\u0027.join(split_credentials)"}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAATH%2F%2Fz3A%3D","line":591,"in_reply_to":"AAAATH%2F%2F3vQ%3D","updated":"2013-10-09 14:36:10.000000000","message":"Done.\nUsing rsplit.","commit_id":"83cfcd828c11511f9f93856e1521eb9e4f104cb5"},{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"9aa563aa6c613fc97d9b7cdbc0065a0f2d347122","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        default_value \u003d \"%s:%s\" % (CONF.swift_store_user, CONF.swift_store_key)"},{"line_number":130,"context_line":"        credentials[CONF.current_swift_store_scrub_credentials] \u003d default_value"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    credentials_from_conf \u003d ast.literal_eval(CONF.swift_store_credentials)"},{"line_number":133,"context_line":"    credentials.update(credentials_from_conf)"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    return credentials"}],"source_content_type":"text/x-python","patch_set":34,"id":"AAAATH%2F%2Fibw%3D","line":132,"updated":"2013-10-14 20:18:09.000000000","message":"I think I rather this use json to deserialize the config value here. Just seems a little odd to have it as a string representation of a json dict (even though they are basically the same thing). Then in the docs we can say it is a json mapping.\n\nThere is a DictOpt in oslo.config that would fit this case well except that it delimits based on \u0027:\u0027 but that is a part of the string in this case.","commit_id":"51976fd9590104291599bc466a0802603f4296fb"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"5b4d3c0e111231d360607bcfca7b05a4f1f0c922","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        default_value \u003d \"%s:%s\" % (CONF.swift_store_user, CONF.swift_store_key)"},{"line_number":130,"context_line":"        credentials[CONF.current_swift_store_scrub_credentials] \u003d default_value"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    credentials_from_conf \u003d ast.literal_eval(CONF.swift_store_credentials)"},{"line_number":133,"context_line":"    credentials.update(credentials_from_conf)"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    return credentials"}],"source_content_type":"text/x-python","patch_set":34,"id":"AAAATH%2F%2FNsI%3D","line":132,"in_reply_to":"AAAATH%2F%2Fibw%3D","updated":"2013-10-21 10:36:30.000000000","message":"I tried it, but the way parser stores the parsed value -\n\u0027swift_store_credentials\u0027: [\"hiddenuser1:hiddenkey1\u0027: \u0027jdoe:jdoe:a86850deb2742ec3cb41518e26aa2d89\u0027, \u0027hiddenuser2:hiddenkey2\u0027: \u0027acct2:user2:586850deb2442ec3cb41518e26aa2d89\"]","commit_id":"51976fd9590104291599bc466a0802603f4296fb"},{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"d864abc9e03690891f0444fe1f041f5d3a0dc322","unresolved":false,"context_lines":[{"line_number":132,"context_line":"    try:"},{"line_number":133,"context_line":"        credentials_from_conf \u003d ast.literal_eval(CONF.swift_store_credentials)"},{"line_number":134,"context_line":"    except (ValueError, SyntaxError) as e:"},{"line_number":135,"context_line":"        LOG.exception(_(\"Invalid format of swift_store_credentials config: %s\""},{"line_number":136,"context_line":"                        ) % str(e))"},{"line_number":137,"context_line":"        return credentials"},{"line_number":138,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"AAAATn%2F9%2F9Y%3D","line":135,"updated":"2013-12-03 20:00:07.000000000","message":"LOG.exception should print the current exception for you along with its traceback. So this can be left as LOG.exception(_(\"Invalid format of swift_store_credentials config.\"))","commit_id":"9bd66c6eeeded42ed1cdff4c29768b0b900d5954"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"6307cd1d870952712304922a7e773c6a526cdbf7","unresolved":false,"context_lines":[{"line_number":132,"context_line":"    try:"},{"line_number":133,"context_line":"        credentials_from_conf \u003d ast.literal_eval(CONF.swift_store_credentials)"},{"line_number":134,"context_line":"    except (ValueError, SyntaxError) as e:"},{"line_number":135,"context_line":"        LOG.exception(_(\"Invalid format of swift_store_credentials config: %s\""},{"line_number":136,"context_line":"                        ) % str(e))"},{"line_number":137,"context_line":"        return credentials"},{"line_number":138,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"AAAATn%2F914A%3D","line":135,"in_reply_to":"AAAATn%2F9%2F9Y%3D","updated":"2013-12-06 11:33:26.000000000","message":"Done","commit_id":"9bd66c6eeeded42ed1cdff4c29768b0b900d5954"},{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"d864abc9e03690891f0444fe1f041f5d3a0dc322","unresolved":false,"context_lines":[{"line_number":259,"context_line":"                raise exception.BadStoreUri()"},{"line_number":260,"context_line":"            key \u003d cred_parts.pop()"},{"line_number":261,"context_line":"            user \u003d \u0027:\u0027.join(cred_parts)"},{"line_number":262,"context_line":"            #NOTE (Sridevi): Fix to map the scrubbed value to the"},{"line_number":263,"context_line":"            # corresponding CONF value"},{"line_number":264,"context_line":"            creds \u003d urllib.unquote(creds)"},{"line_number":265,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":40,"id":"AAAATn%2F9%2BzQ%3D","line":262,"updated":"2013-12-03 20:00:07.000000000","message":"minor nit: this shoudl be \"# NOTE(sridevi): \"","commit_id":"9bd66c6eeeded42ed1cdff4c29768b0b900d5954"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"6307cd1d870952712304922a7e773c6a526cdbf7","unresolved":false,"context_lines":[{"line_number":259,"context_line":"                raise exception.BadStoreUri()"},{"line_number":260,"context_line":"            key \u003d cred_parts.pop()"},{"line_number":261,"context_line":"            user \u003d \u0027:\u0027.join(cred_parts)"},{"line_number":262,"context_line":"            #NOTE (Sridevi): Fix to map the scrubbed value to the"},{"line_number":263,"context_line":"            # corresponding CONF value"},{"line_number":264,"context_line":"            creds \u003d urllib.unquote(creds)"},{"line_number":265,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":40,"id":"AAAATn%2F913o%3D","line":262,"in_reply_to":"AAAATn%2F9%2BzQ%3D","updated":"2013-12-06 11:33:26.000000000","message":"Done","commit_id":"9bd66c6eeeded42ed1cdff4c29768b0b900d5954"},{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"d864abc9e03690891f0444fe1f041f5d3a0dc322","unresolved":false,"context_lines":[{"line_number":607,"context_line":"        credentials \u003d \\"},{"line_number":608,"context_line":"            SWIFT_STORE_CREDENTIALS.get(current_swift_scrub_credentials)"},{"line_number":609,"context_line":"        if not credentials:"},{"line_number":610,"context_line":"            reason \u003d \"A value for swift_store_credentials is required.\""},{"line_number":611,"context_line":"            LOG.error(reason)"},{"line_number":612,"context_line":"            raise exception.BadStoreConfiguration(store_name\u003d\"swift\","},{"line_number":613,"context_line":"                                                  reason\u003dreason)"}],"source_content_type":"text/x-python","patch_set":40,"id":"AAAATn%2F9%2BzI%3D","line":610,"updated":"2013-12-03 20:00:07.000000000","message":"this should be wrapped in _()","commit_id":"9bd66c6eeeded42ed1cdff4c29768b0b900d5954"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"6307cd1d870952712304922a7e773c6a526cdbf7","unresolved":false,"context_lines":[{"line_number":607,"context_line":"        credentials \u003d \\"},{"line_number":608,"context_line":"            SWIFT_STORE_CREDENTIALS.get(current_swift_scrub_credentials)"},{"line_number":609,"context_line":"        if not credentials:"},{"line_number":610,"context_line":"            reason \u003d \"A value for swift_store_credentials is required.\""},{"line_number":611,"context_line":"            LOG.error(reason)"},{"line_number":612,"context_line":"            raise exception.BadStoreConfiguration(store_name\u003d\"swift\","},{"line_number":613,"context_line":"                                                  reason\u003dreason)"}],"source_content_type":"text/x-python","patch_set":40,"id":"AAAATn%2F913U%3D","line":610,"in_reply_to":"AAAATn%2F9%2BzI%3D","updated":"2013-12-06 11:33:26.000000000","message":"Done","commit_id":"9bd66c6eeeded42ed1cdff4c29768b0b900d5954"},{"author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"change_message_id":"80e52532c146dea1609aea97e4940d7bbd5f73a3","unresolved":false,"context_lines":[{"line_number":192,"context_line":"        container \u003d self.container.strip(\u0027/\u0027)"},{"line_number":193,"context_line":"        obj \u003d self.obj.strip(\u0027/\u0027)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"        if not credentials_included:"},{"line_number":196,"context_line":"            credstring \u003d \u0027%s:%s\u0027 % (urllib.unquote(self.user),"},{"line_number":197,"context_line":"                                    urllib.unquote(self.key))"},{"line_number":198,"context_line":"            #Get the corresponding scrub store the swift store"}],"source_content_type":"text/x-python","patch_set":44,"id":"AAAATn%2F8vFk%3D","line":195,"updated":"2013-12-20 21:54:56.000000000","message":"We seem to be mapping backwards from credentials to the associated store. I\u0027m not sure why this is needed, and it may not work if two stores happen to have the same credentials.\nIf we are adding a new image can\u0027t we just put the \u0027current_swift_store\u0027 in the location.","commit_id":"bb0318d5ca55de33ec40fb2096222fba141967ef"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"be7190a5f2f33d229136c72cca90d4549694ee21","unresolved":false,"context_lines":[{"line_number":113,"context_line":"               help\u003d_(\u0027The mapping between store backend and store credentials\u0027"},{"line_number":114,"context_line":"                      \u0027and auth_address\u0027)),"},{"line_number":115,"context_line":"    cfg.StrOpt(\u0027current_swift_store\u0027,"},{"line_number":116,"context_line":"               default\u003d\"store_1\","},{"line_number":117,"context_line":"               help\u003d_(\u0027The scrub user:key corresponding to the default/\u0027"},{"line_number":118,"context_line":"                      \u0027current swift store. This is used for any new image\u0027"},{"line_number":119,"context_line":"                      \u0027add\u0027))"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2F6%2F4%3D","line":116,"updated":"2014-01-06 19:14:31.000000000","message":"should this an empty string too?","commit_id":"8dd4c90837578693fa1f976620154ef5beb576da"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"713e9b511029c99be91b983a9af721c937780382","unresolved":false,"context_lines":[{"line_number":113,"context_line":"               help\u003d_(\u0027The mapping between store backend and store credentials\u0027"},{"line_number":114,"context_line":"                      \u0027and auth_address\u0027)),"},{"line_number":115,"context_line":"    cfg.StrOpt(\u0027current_swift_store\u0027,"},{"line_number":116,"context_line":"               default\u003d\"store_1\","},{"line_number":117,"context_line":"               help\u003d_(\u0027The scrub user:key corresponding to the default/\u0027"},{"line_number":118,"context_line":"                      \u0027current swift store. This is used for any new image\u0027"},{"line_number":119,"context_line":"                      \u0027add\u0027))"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2F4xc%3D","line":116,"in_reply_to":"AAAAUH%2F%2F6%2F4%3D","updated":"2014-01-07 12:16:32.000000000","message":"We would need a default store, to form the SWIFT_STORE_CREDENTIALS. And hence can\u0027t keep it empty.","commit_id":"8dd4c90837578693fa1f976620154ef5beb576da"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"be7190a5f2f33d229136c72cca90d4549694ee21","unresolved":false,"context_lines":[{"line_number":115,"context_line":"    cfg.StrOpt(\u0027current_swift_store\u0027,"},{"line_number":116,"context_line":"               default\u003d\"store_1\","},{"line_number":117,"context_line":"               help\u003d_(\u0027The scrub user:key corresponding to the default/\u0027"},{"line_number":118,"context_line":"                      \u0027current swift store. This is used for any new image\u0027"},{"line_number":119,"context_line":"                      \u0027add\u0027))"},{"line_number":120,"context_line":"]"},{"line_number":121,"context_line":""}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2F6%2Fo%3D","line":118,"updated":"2014-01-06 19:14:31.000000000","message":"This is used to upload/access an image?","commit_id":"8dd4c90837578693fa1f976620154ef5beb576da"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"713e9b511029c99be91b983a9af721c937780382","unresolved":false,"context_lines":[{"line_number":115,"context_line":"    cfg.StrOpt(\u0027current_swift_store\u0027,"},{"line_number":116,"context_line":"               default\u003d\"store_1\","},{"line_number":117,"context_line":"               help\u003d_(\u0027The scrub user:key corresponding to the default/\u0027"},{"line_number":118,"context_line":"                      \u0027current swift store. This is used for any new image\u0027"},{"line_number":119,"context_line":"                      \u0027add\u0027))"},{"line_number":120,"context_line":"]"},{"line_number":121,"context_line":""}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2F4ow%3D","line":118,"in_reply_to":"AAAAUH%2F%2F6%2Fo%3D","updated":"2014-01-07 12:16:32.000000000","message":"Only during upload.","commit_id":"8dd4c90837578693fa1f976620154ef5beb576da"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"be7190a5f2f33d229136c72cca90d4549694ee21","unresolved":false,"context_lines":[{"line_number":144,"context_line":"    return stores"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"SWIFT_STORE_CREDENTIALS \u003d _get_swift_store_credentials()"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"class StoreLocation(glance.store.location.StoreLocation):"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2F6%2Fk%3D","line":147,"updated":"2014-01-06 19:14:31.000000000","message":"if we could DRY up this fn and the one in the migratio would be great","commit_id":"8dd4c90837578693fa1f976620154ef5beb576da"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"713e9b511029c99be91b983a9af721c937780382","unresolved":false,"context_lines":[{"line_number":144,"context_line":"    return stores"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"SWIFT_STORE_CREDENTIALS \u003d _get_swift_store_credentials()"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"class StoreLocation(glance.store.location.StoreLocation):"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2F4HI%3D","line":147,"in_reply_to":"AAAAUH%2F%2F6%2Fk%3D","updated":"2014-01-07 12:16:32.000000000","message":"Done","commit_id":"8dd4c90837578693fa1f976620154ef5beb576da"},{"author":{"_account_id":616,"name":"Mark Washenberger","email":"mark.washenberger@markwash.net","username":"markwash"},"change_message_id":"22acb75ca09472fcbbcec7c85aa7d629c7baaccc","unresolved":false,"context_lines":[{"line_number":109,"context_line":"                       \u0027https swift requests. Setting to False may improve \u0027"},{"line_number":110,"context_line":"                       \u0027performance for images which are already in a \u0027"},{"line_number":111,"context_line":"                       \u0027compressed format, eg qcow2.\u0027)),"},{"line_number":112,"context_line":"    cfg.StrOpt(\u0027swift_store_credentials\u0027, default\u003d\u0027{}\u0027,"},{"line_number":113,"context_line":"               help\u003d_(\u0027The mapping between store backend and store credentials\u0027"},{"line_number":114,"context_line":"                      \u0027and auth_address\u0027)),"},{"line_number":115,"context_line":"    cfg.StrOpt(\u0027current_swift_store\u0027,"}],"source_content_type":"text/x-python","patch_set":55,"id":"AAAAUH%2F%2Fc5I%3D","line":112,"updated":"2014-01-13 19:01:00.000000000","message":"Since there is a lot of validation that needs to go into this config, let\u0027s make a custom config Option class. That way we can move the validation as close to the parsing as possible.","commit_id":"46941b4dc3cb6f56e38cc6b954c3682abfda4e67"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"519875d69c10e521f7b9614f36004014ffa12a44","unresolved":false,"context_lines":[{"line_number":109,"context_line":"                       \u0027https swift requests. Setting to False may improve \u0027"},{"line_number":110,"context_line":"                       \u0027performance for images which are already in a \u0027"},{"line_number":111,"context_line":"                       \u0027compressed format, eg qcow2.\u0027)),"},{"line_number":112,"context_line":"    cfg.StrOpt(\u0027swift_store_credentials\u0027, default\u003d\u0027{}\u0027,"},{"line_number":113,"context_line":"               help\u003d_(\u0027The mapping between store backend and store credentials\u0027"},{"line_number":114,"context_line":"                      \u0027and auth_address\u0027)),"},{"line_number":115,"context_line":"    cfg.StrOpt(\u0027current_swift_store\u0027,"}],"source_content_type":"text/x-python","patch_set":55,"id":"AAAAUH%2F%2B2H8%3D","line":112,"in_reply_to":"AAAAUH%2F%2Fc5I%3D","updated":"2014-01-21 14:05:24.000000000","message":"Mark,\nAre you suggesting having a separate config class for this option? Or have another class called SwiftStoreParam, that inherits from this cfg.StrOpt.\nI guess oslo config does not have CustomOpt.","commit_id":"46941b4dc3cb6f56e38cc6b954c3682abfda4e67"},{"author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"change_message_id":"692bf66fa29fe541a160c3f71d7dfc921fee15a7","unresolved":false,"context_lines":[{"line_number":109,"context_line":"                       \u0027https swift requests. Setting to False may improve \u0027"},{"line_number":110,"context_line":"                       \u0027performance for images which are already in a \u0027"},{"line_number":111,"context_line":"                       \u0027compressed format, eg qcow2.\u0027)),"},{"line_number":112,"context_line":"    cfg.StrOpt(\u0027swift_store_credentials\u0027, default\u003d\u0027{}\u0027,"},{"line_number":113,"context_line":"               help\u003d_(\u0027The mapping between store backend and store credentials\u0027"},{"line_number":114,"context_line":"                      \u0027and auth_address\u0027)),"},{"line_number":115,"context_line":"    cfg.StrOpt(\u0027current_swift_store\u0027,"}],"source_content_type":"text/x-python","patch_set":55,"id":"AAAAUH%2F%2Bw2A%3D","line":112,"in_reply_to":"AAAAUH%2F%2Fc5I%3D","updated":"2014-01-22 17:39:24.000000000","message":"We could consider something along the lines of protected properties\nfor specifying the different store details. ie have a new conf file to specify the swift stores:\n\nin glance-api.conf\n\n swift_stores_config_file \u003d /etc/glance/glance-swift.conf\n\nthe \u0027swift_stores_config_file\u0027 file would look like:\n\n [store1]\n foo1 \u003d bar1\n foo2 \u003d bar2\n\n [store2] \n fooA \u003d barA\n fooB \u003d barB\n\nwhere \u0027foo\u0027 is any parameter relating to that store, such as credentials, \u0027swift_store_endpoint_type\u0027, region, etc.","commit_id":"46941b4dc3cb6f56e38cc6b954c3682abfda4e67"},{"author":{"_account_id":616,"name":"Mark Washenberger","email":"mark.washenberger@markwash.net","username":"markwash"},"change_message_id":"22acb75ca09472fcbbcec7c85aa7d629c7baaccc","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        default_store[\u0027auth_url\u0027] \u003d CONF.swift_store_auth_address"},{"line_number":134,"context_line":"        stores[CONF.current_swift_store] \u003d default_store"},{"line_number":135,"context_line":"    try:"},{"line_number":136,"context_line":"        credentials_from_conf \u003d ast.literal_eval("},{"line_number":137,"context_line":"            CONF.swift_store_credentials)"},{"line_number":138,"context_line":"    except (ValueError, SyntaxError) as e:"},{"line_number":139,"context_line":"        LOG.exception(_(\"Invalid format of swift_store_credentials cfg\"))"}],"source_content_type":"text/x-python","patch_set":55,"id":"AAAAUH%2F%2Fc4Y%3D","line":136,"updated":"2014-01-13 19:01:00.000000000","message":"As I mentioned above, this validation should move closer to the config parsing, However, in addition, this validation should be strengthened. In particular, we need to make sure that the credentials_from_conf is a dictionary, that its keys are strings, and that its values are dictionaries containing keys \u0027auth_url\u0027, \u0027project\u0027, \u0027user\u0027, etc., whose values are the appropriate types.","commit_id":"46941b4dc3cb6f56e38cc6b954c3682abfda4e67"},{"author":{"_account_id":616,"name":"Mark Washenberger","email":"mark.washenberger@markwash.net","username":"markwash"},"change_message_id":"22acb75ca09472fcbbcec7c85aa7d629c7baaccc","unresolved":false,"context_lines":[{"line_number":201,"context_line":"        return \u0027%s://%s%s/%s/%s\u0027 % (self.scheme, credstring, auth_or_store_url,"},{"line_number":202,"context_line":"                                    container, obj)"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    def parse_uri(self, uri):"},{"line_number":205,"context_line":"        \"\"\""},{"line_number":206,"context_line":"        Parse URLs. This method fixes an issue where credentials specified"},{"line_number":207,"context_line":"        in the URL are interpreted differently in Python 2.6.1+ than prior"}],"source_content_type":"text/x-python","patch_set":55,"id":"AAAAUH%2F%2Fc3k%3D","line":204,"updated":"2014-01-13 19:01:00.000000000","message":"This method is pretty long and only getting longer. Care to break it up a bit? It seems like some of the big chunks here could be moved out just to make things smaller and hopefully easier to understand.","commit_id":"46941b4dc3cb6f56e38cc6b954c3682abfda4e67"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"119cf6142db699d65b8b5262d20e74d62f411732","unresolved":false,"context_lines":[{"line_number":201,"context_line":"        return \u0027%s://%s%s/%s/%s\u0027 % (self.scheme, credstring, auth_or_store_url,"},{"line_number":202,"context_line":"                                    container, obj)"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    def parse_uri(self, uri):"},{"line_number":205,"context_line":"        \"\"\""},{"line_number":206,"context_line":"        Parse URLs. This method fixes an issue where credentials specified"},{"line_number":207,"context_line":"        in the URL are interpreted differently in Python 2.6.1+ than prior"}],"source_content_type":"text/x-python","patch_set":55,"id":"AAAAUH%2F%2B2xQ%3D","line":204,"in_reply_to":"AAAAUH%2F%2Fc3k%3D","updated":"2014-01-21 11:52:15.000000000","message":"Done","commit_id":"46941b4dc3cb6f56e38cc6b954c3682abfda4e67"},{"author":{"_account_id":616,"name":"Mark Washenberger","email":"mark.washenberger@markwash.net","username":"markwash"},"change_message_id":"22acb75ca09472fcbbcec7c85aa7d629c7baaccc","unresolved":false,"context_lines":[{"line_number":386,"context_line":"        result \u003d getattr(CONF, param)"},{"line_number":387,"context_line":"        if not result:"},{"line_number":388,"context_line":"            reason \u003d (_(\"Could not find %(param)s in configuration options.\")"},{"line_number":389,"context_line":"                      % locals())"},{"line_number":390,"context_line":"            LOG.error(reason)"},{"line_number":391,"context_line":"            raise exception.BadStoreConfiguration(store_name\u003d\"swift\","},{"line_number":392,"context_line":"                                                  reason\u003dreason)"}],"source_content_type":"text/x-python","patch_set":55,"id":"AAAAUH%2F%2Fc3Q%3D","line":389,"updated":"2014-01-13 19:01:00.000000000","message":"Don\u0027t use locals(). We are in the process of enabling a hacking check to prevent its use.","commit_id":"46941b4dc3cb6f56e38cc6b954c3682abfda4e67"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"119cf6142db699d65b8b5262d20e74d62f411732","unresolved":false,"context_lines":[{"line_number":386,"context_line":"        result \u003d getattr(CONF, param)"},{"line_number":387,"context_line":"        if not result:"},{"line_number":388,"context_line":"            reason \u003d (_(\"Could not find %(param)s in configuration options.\")"},{"line_number":389,"context_line":"                      % locals())"},{"line_number":390,"context_line":"            LOG.error(reason)"},{"line_number":391,"context_line":"            raise exception.BadStoreConfiguration(store_name\u003d\"swift\","},{"line_number":392,"context_line":"                                                  reason\u003dreason)"}],"source_content_type":"text/x-python","patch_set":55,"id":"AAAAUH%2F%2B2xg%3D","line":389,"in_reply_to":"AAAAUH%2F%2Fc3Q%3D","updated":"2014-01-21 11:52:15.000000000","message":"Done","commit_id":"46941b4dc3cb6f56e38cc6b954c3682abfda4e67"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"d336e0ed271ee098b9d780d7be1c64147670c8e1","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    cfg.StrOpt(\u0027swift_store_auth_version\u0027, default\u003d\u00272\u0027,"},{"line_number":54,"context_line":"               help\u003d_(\u0027Version of the authentication service to use. \u0027"},{"line_number":55,"context_line":"                      \u0027Valid versions are 2 for keystone and 1 for swauth \u0027"},{"line_number":56,"context_line":"                      \u0027and rackspace. (deprecated)\u0027)),"},{"line_number":57,"context_line":"    cfg.BoolOpt(\u0027swift_store_auth_insecure\u0027, default\u003dFalse,"},{"line_number":58,"context_line":"                help\u003d_(\u0027If True, swiftclient won\\\u0027t check for a valid SSL \u0027"},{"line_number":59,"context_line":"                       \u0027certificate when authenticating.\u0027)),"}],"source_content_type":"text/x-python","patch_set":58,"id":"AAAAUH%2F9tyk%3D","line":56,"updated":"2014-02-04 19:45:11.000000000","message":"Is it still considered deprecated if we are making it optional to turn it on or off?","commit_id":"d4451251d3f19a52105915092fb8bc93bff51218"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"f1620cf75cb08f2cc492824391cff390c1c12d38","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    cfg.StrOpt(\u0027swift_store_auth_version\u0027, default\u003d\u00272\u0027,"},{"line_number":54,"context_line":"               help\u003d_(\u0027Version of the authentication service to use. \u0027"},{"line_number":55,"context_line":"                      \u0027Valid versions are 2 for keystone and 1 for swauth \u0027"},{"line_number":56,"context_line":"                      \u0027and rackspace. (deprecated)\u0027)),"},{"line_number":57,"context_line":"    cfg.BoolOpt(\u0027swift_store_auth_insecure\u0027, default\u003dFalse,"},{"line_number":58,"context_line":"                help\u003d_(\u0027If True, swiftclient won\\\u0027t check for a valid SSL \u0027"},{"line_number":59,"context_line":"                       \u0027certificate when authenticating.\u0027)),"}],"source_content_type":"text/x-python","patch_set":58,"id":"AAAAUH%2F9o0Y%3D","line":56,"in_reply_to":"AAAAUH%2F9tyk%3D","updated":"2014-02-05 13:14:51.000000000","message":"The reason we\u0027ve kept it optional is that it should be compatible both ways. But eventually move the configs to the separate config file. Thoughts?","commit_id":"d4451251d3f19a52105915092fb8bc93bff51218"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"d336e0ed271ee098b9d780d7be1c64147670c8e1","unresolved":false,"context_lines":[{"line_number":300,"context_line":"        # corresponding CONF value"},{"line_number":301,"context_line":"        if netloc in SWIFT_STORE_ACCOUNT_PARAMS.keys():"},{"line_number":302,"context_line":"            netloc \u003d self._get_conf_value_from_account_ref(netloc)"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"        else:"},{"line_number":305,"context_line":"            netloc, path \u003d self._form_uri_parts(netloc, path)"},{"line_number":306,"context_line":""}],"source_content_type":"text/x-python","patch_set":58,"id":"AAAAUH%2F9tY8%3D","line":303,"updated":"2014-02-04 19:45:11.000000000","message":"extra line","commit_id":"d4451251d3f19a52105915092fb8bc93bff51218"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"f1620cf75cb08f2cc492824391cff390c1c12d38","unresolved":false,"context_lines":[{"line_number":300,"context_line":"        # corresponding CONF value"},{"line_number":301,"context_line":"        if netloc in SWIFT_STORE_ACCOUNT_PARAMS.keys():"},{"line_number":302,"context_line":"            netloc \u003d self._get_conf_value_from_account_ref(netloc)"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"        else:"},{"line_number":305,"context_line":"            netloc, path \u003d self._form_uri_parts(netloc, path)"},{"line_number":306,"context_line":""}],"source_content_type":"text/x-python","patch_set":58,"id":"AAAAUH%2F9oz8%3D","line":303,"in_reply_to":"AAAAUH%2F9tY8%3D","updated":"2014-02-05 13:14:51.000000000","message":"Done","commit_id":"d4451251d3f19a52105915092fb8bc93bff51218"},{"author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"change_message_id":"395d7b01ea456446c4c56bd30a26ddfba5b32e89","unresolved":false,"context_lines":[{"line_number":282,"context_line":""},{"line_number":283,"context_line":"            swift://account:user:pass@authurl.com/container/obj"},{"line_number":284,"context_line":"            and for system created locations with account reference"},{"line_number":285,"context_line":"            swift://account_reference/container/obj"},{"line_number":286,"context_line":"        \"\"\""},{"line_number":287,"context_line":"        # Make sure that URIs that contain multiple schemes, such as:"},{"line_number":288,"context_line":"        # swift://user:pass@http://authurl.com/v1/container/obj"}],"source_content_type":"text/x-python","patch_set":63,"id":"AAAAVn%2F%2F6Fo%3D","line":285,"updated":"2014-03-03 14:12:05.000000000","message":"should the last comment line above be: swift+config://account_reference/container/obj \nor even swift+config://swift_reference/container/obj","commit_id":"474adcbeced2e5feded25ec937502f438f7f8d8c"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"ce5d2aaf6cd60eb1e634f343ac682ea2bf70ba4f","unresolved":false,"context_lines":[{"line_number":218,"context_line":"                elif netloc.startswith(\u0027https://\u0027):"},{"line_number":219,"context_line":"                    netloc \u003d netloc[len(\u0027https://\u0027):]"},{"line_number":220,"context_line":"        except KeyError:"},{"line_number":221,"context_line":"            reason \u003d _(\"Badly formed Swift URI. Credentials not found for\""},{"line_number":222,"context_line":"                       \"account reference\")"},{"line_number":223,"context_line":"            LOG.debug(reason)"},{"line_number":224,"context_line":"            raise exception.BadStoreUri()"}],"source_content_type":"text/x-python","patch_set":65,"id":"7adec928_9b0dc43a","line":221,"updated":"2014-05-20 21:14:02.000000000","message":"This message is completely accurate as a KeyError on auth_address can raise the same exception.","commit_id":"7ef56dda5d1af196b674a80a3507bc1ab46df647"},{"author":{"_account_id":7701,"name":"Amala Basha","email":"amala.alungal@RACKSPACE.COM","username":"amalabasha"},"change_message_id":"47d3c9c6e33437c02a3cd2ff0c0eb1bf68c19e3f","unresolved":false,"context_lines":[{"line_number":218,"context_line":"                elif netloc.startswith(\u0027https://\u0027):"},{"line_number":219,"context_line":"                    netloc \u003d netloc[len(\u0027https://\u0027):]"},{"line_number":220,"context_line":"        except KeyError:"},{"line_number":221,"context_line":"            reason \u003d _(\"Badly formed Swift URI. Credentials not found for\""},{"line_number":222,"context_line":"                       \"account reference\")"},{"line_number":223,"context_line":"            LOG.debug(reason)"},{"line_number":224,"context_line":"            raise exception.BadStoreUri()"}],"source_content_type":"text/x-python","patch_set":65,"id":"7adec928_1c825800","line":221,"in_reply_to":"7adec928_9b0dc43a","updated":"2014-05-22 12:19:30.000000000","message":"Im not sure I get your question","commit_id":"7ef56dda5d1af196b674a80a3507bc1ab46df647"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"ce5d2aaf6cd60eb1e634f343ac682ea2bf70ba4f","unresolved":false,"context_lines":[{"line_number":250,"context_line":"            user \u003d \u0027:\u0027.join(cred_parts)"},{"line_number":251,"context_line":"            creds \u003d urllib.unquote(creds)"},{"line_number":252,"context_line":"            try:"},{"line_number":253,"context_line":"                self.user, self.key \u003d creds.rsplit(\u0027:\u0027, 1)"},{"line_number":254,"context_line":"            except exception.BadStoreConfiguration:"},{"line_number":255,"context_line":"                self.user \u003d urllib.unquote(user)"},{"line_number":256,"context_line":"                self.key \u003d urllib.unquote(key)"}],"source_content_type":"text/x-python","patch_set":65,"id":"7adec928_5b9fbcb4","line":253,"updated":"2014-05-20 21:14:02.000000000","message":"Shouldn\u0027t we be parsing for tenant as well? If this is used by the MultiTenantStore, then tenant name would be essential for making it work, no?","commit_id":"7ef56dda5d1af196b674a80a3507bc1ab46df647"},{"author":{"_account_id":7701,"name":"Amala Basha","email":"amala.alungal@RACKSPACE.COM","username":"amalabasha"},"change_message_id":"47d3c9c6e33437c02a3cd2ff0c0eb1bf68c19e3f","unresolved":false,"context_lines":[{"line_number":250,"context_line":"            user \u003d \u0027:\u0027.join(cred_parts)"},{"line_number":251,"context_line":"            creds \u003d urllib.unquote(creds)"},{"line_number":252,"context_line":"            try:"},{"line_number":253,"context_line":"                self.user, self.key \u003d creds.rsplit(\u0027:\u0027, 1)"},{"line_number":254,"context_line":"            except exception.BadStoreConfiguration:"},{"line_number":255,"context_line":"                self.user \u003d urllib.unquote(user)"},{"line_number":256,"context_line":"                self.key \u003d urllib.unquote(key)"}],"source_content_type":"text/x-python","patch_set":65,"id":"7adec928_bceec4b2","line":253,"in_reply_to":"7adec928_5b9fbcb4","updated":"2014-05-22 12:19:30.000000000","message":"The user here is user:tenant. This is done this way for compatibility between the 2 versions. One has user+tenant and the other simply user.","commit_id":"7ef56dda5d1af196b674a80a3507bc1ab46df647"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"ce5d2aaf6cd60eb1e634f343ac682ea2bf70ba4f","unresolved":false,"context_lines":[{"line_number":679,"context_line":"                 \u0027key\u0027: self.key}"},{"line_number":680,"context_line":"        return StoreLocation(specs)"},{"line_number":681,"context_line":""},{"line_number":682,"context_line":"    def validate_location(self, uri):"},{"line_number":683,"context_line":"        pieces \u003d urlparse.urlparse(uri)"},{"line_number":684,"context_line":"        if pieces.scheme in [\u0027swift+config\u0027]:"},{"line_number":685,"context_line":"            reason \u003d (_(\"Location credentials are invalid\"))"}],"source_content_type":"text/x-python","patch_set":65,"id":"7adec928_c82300bd","line":682,"updated":"2014-05-20 21:14:02.000000000","message":"This method name seems a bit confusing by itself.\n\nCan we add a docstring mentioning that it is used while setting location and not while reading it?","commit_id":"7ef56dda5d1af196b674a80a3507bc1ab46df647"},{"author":{"_account_id":7701,"name":"Amala Basha","email":"amala.alungal@RACKSPACE.COM","username":"amalabasha"},"change_message_id":"47d3c9c6e33437c02a3cd2ff0c0eb1bf68c19e3f","unresolved":false,"context_lines":[{"line_number":679,"context_line":"                 \u0027key\u0027: self.key}"},{"line_number":680,"context_line":"        return StoreLocation(specs)"},{"line_number":681,"context_line":""},{"line_number":682,"context_line":"    def validate_location(self, uri):"},{"line_number":683,"context_line":"        pieces \u003d urlparse.urlparse(uri)"},{"line_number":684,"context_line":"        if pieces.scheme in [\u0027swift+config\u0027]:"},{"line_number":685,"context_line":"            reason \u003d (_(\"Location credentials are invalid\"))"}],"source_content_type":"text/x-python","patch_set":65,"id":"7adec928_3c3ab436","line":682,"in_reply_to":"7adec928_c82300bd","updated":"2014-05-22 12:19:30.000000000","message":"Done","commit_id":"7ef56dda5d1af196b674a80a3507bc1ab46df647"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"58c1295bd79142db07b42281e5e2983bc84cd85f","unresolved":false,"context_lines":[{"line_number":294,"context_line":"                       \", you need to change it to use the \""},{"line_number":295,"context_line":"                       \"swift+http:// scheme, like so: \""},{"line_number":296,"context_line":"                       \"swift+http://user:pass@authurl.com/v1/container/obj\")"},{"line_number":297,"context_line":"            LOG.debug(_(\"Invalid store URI: %(reason)s\"), {\u0027reason\u0027: reason})"},{"line_number":298,"context_line":"            raise exception.BadStoreUri(message\u003dreason)"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"        pieces \u003d urlparse.urlparse(uri)"}],"source_content_type":"text/x-python","patch_set":66,"id":"5adbc538_bab0aff5","line":297,"updated":"2014-05-26 11:03:15.000000000","message":"\"N319  Don\u0027t translate debug level logs\" PEP8 failure here","commit_id":"ba591d67e5e7d1e1a5a37334a245ef1baafea089"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"e08ed8a479d602e3c744bb983e51d7aa70d7b61c","unresolved":false,"context_lines":[{"line_number":660,"context_line":"            self.scheme \u003d \u0027swift+http\u0027"},{"line_number":661,"context_line":"        else:"},{"line_number":662,"context_line":"            self.scheme \u003d \u0027swift+https\u0027"},{"line_number":663,"context_line":"        self.container \u003d CONF.swift_store_container"},{"line_number":664,"context_line":"        self.user \u003d default_swift_reference.get(\u0027user\u0027)"},{"line_number":665,"context_line":"        self.key \u003d default_swift_reference.get(\u0027key\u0027)"},{"line_number":666,"context_line":""}],"source_content_type":"text/x-python","patch_set":67,"id":"1ae5cdf2_6f96be40","line":663,"updated":"2014-06-04 21:48:03.000000000","message":"Should we be thinking about making the container name optional too and have a default in the master? It seems odd that there is an option of multiple swift backends now however, the container name should be constant.\n\nI\u0027m totally okay if this is out of scope of this MP. Just wanted to know if anyone has thoughts on this. If we need to do this a BP should be opened up.","commit_id":"cd863e61b7fc3e2676ae11ebad7db10ebbd47459"},{"author":{"_account_id":7701,"name":"Amala Basha","email":"amala.alungal@RACKSPACE.COM","username":"amalabasha"},"change_message_id":"177cdcc9e630f917392decab2abe2e2b2d88afa3","unresolved":false,"context_lines":[{"line_number":660,"context_line":"            self.scheme \u003d \u0027swift+http\u0027"},{"line_number":661,"context_line":"        else:"},{"line_number":662,"context_line":"            self.scheme \u003d \u0027swift+https\u0027"},{"line_number":663,"context_line":"        self.container \u003d CONF.swift_store_container"},{"line_number":664,"context_line":"        self.user \u003d default_swift_reference.get(\u0027user\u0027)"},{"line_number":665,"context_line":"        self.key \u003d default_swift_reference.get(\u0027key\u0027)"},{"line_number":666,"context_line":""}],"source_content_type":"text/x-python","patch_set":67,"id":"1ae5cdf2_0a619104","line":663,"in_reply_to":"1ae5cdf2_667a6825","updated":"2014-06-05 14:18:42.000000000","message":"Im not sure why we could really need a constant container name either.","commit_id":"cd863e61b7fc3e2676ae11ebad7db10ebbd47459"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"080bdcec211702f8aa45fc987cc611e02adbdcf9","unresolved":false,"context_lines":[{"line_number":660,"context_line":"            self.scheme \u003d \u0027swift+http\u0027"},{"line_number":661,"context_line":"        else:"},{"line_number":662,"context_line":"            self.scheme \u003d \u0027swift+https\u0027"},{"line_number":663,"context_line":"        self.container \u003d CONF.swift_store_container"},{"line_number":664,"context_line":"        self.user \u003d default_swift_reference.get(\u0027user\u0027)"},{"line_number":665,"context_line":"        self.key \u003d default_swift_reference.get(\u0027key\u0027)"},{"line_number":666,"context_line":""}],"source_content_type":"text/x-python","patch_set":67,"id":"1ae5cdf2_667a6825","line":663,"in_reply_to":"1ae5cdf2_6f96be40","updated":"2014-06-04 22:52:30.000000000","message":"Could you open up your thoughts on this?\nWhy the container name should be constant?","commit_id":"cd863e61b7fc3e2676ae11ebad7db10ebbd47459"}],"glance/tests/etc/glance-swift.conf":[{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"d336e0ed271ee098b9d780d7be1c64147670c8e1","unresolved":false,"context_lines":[{"line_number":2,"context_line":"user \u003d tenant:user1"},{"line_number":3,"context_line":"key \u003d key1"},{"line_number":4,"context_line":"auth_url \u003d auth123@example.com"},{"line_number":5,"context_line":"[ref2] "},{"line_number":6,"context_line":"user \u003d user2"},{"line_number":7,"context_line":"key \u003d key2"},{"line_number":8,"context_line":"auth_url \u003d http://auth345@example.com"}],"source_content_type":"text/plain","patch_set":58,"id":"AAAAUH%2F9tXc%3D","line":5,"updated":"2014-02-04 19:45:11.000000000","message":"remove white space\nadd new line between references for readability please","commit_id":"d4451251d3f19a52105915092fb8bc93bff51218"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"f1620cf75cb08f2cc492824391cff390c1c12d38","unresolved":false,"context_lines":[{"line_number":2,"context_line":"user \u003d tenant:user1"},{"line_number":3,"context_line":"key \u003d key1"},{"line_number":4,"context_line":"auth_url \u003d auth123@example.com"},{"line_number":5,"context_line":"[ref2] "},{"line_number":6,"context_line":"user \u003d user2"},{"line_number":7,"context_line":"key \u003d key2"},{"line_number":8,"context_line":"auth_url \u003d http://auth345@example.com"}],"source_content_type":"text/plain","patch_set":58,"id":"AAAAUH%2F9ozo%3D","line":5,"in_reply_to":"AAAAUH%2F9tXc%3D","updated":"2014-02-05 13:14:51.000000000","message":"Done","commit_id":"d4451251d3f19a52105915092fb8bc93bff51218"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"ce5d2aaf6cd60eb1e634f343ac682ea2bf70ba4f","unresolved":false,"context_lines":[{"line_number":31,"context_line":"[store_6]"},{"line_number":32,"context_line":"user \u003d tenant:user1"},{"line_number":33,"context_line":"key \u003d key1"},{"line_number":34,"context_line":"auth_address \u003d https://localhost/v1"}],"source_content_type":"text/plain","patch_set":65,"id":"7adec928_db466c21","line":34,"updated":"2014-05-20 21:14:02.000000000","message":"We prolly should test the MultiTenantStore as well. What do you think?","commit_id":"7ef56dda5d1af196b674a80a3507bc1ab46df647"},{"author":{"_account_id":7701,"name":"Amala Basha","email":"amala.alungal@RACKSPACE.COM","username":"amalabasha"},"change_message_id":"47d3c9c6e33437c02a3cd2ff0c0eb1bf68c19e3f","unresolved":false,"context_lines":[{"line_number":31,"context_line":"[store_6]"},{"line_number":32,"context_line":"user \u003d tenant:user1"},{"line_number":33,"context_line":"key \u003d key1"},{"line_number":34,"context_line":"auth_address \u003d https://localhost/v1"}],"source_content_type":"text/plain","patch_set":65,"id":"7adec928_5c7b0029","line":34,"in_reply_to":"7adec928_db466c21","updated":"2014-05-22 12:19:30.000000000","message":"Same.","commit_id":"7ef56dda5d1af196b674a80a3507bc1ab46df647"}],"glance/tests/unit/common/test_swift_store_utils.py":[{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"d336e0ed271ee098b9d780d7be1c64147670c8e1","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2014 OpenStack Foundation."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":58,"id":"AAAAUH%2F9tVI%3D","line":1,"updated":"2014-02-04 19:45:11.000000000","message":"nit: Different files seem to have different copyright headers :)","commit_id":"d4451251d3f19a52105915092fb8bc93bff51218"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"f1620cf75cb08f2cc492824391cff390c1c12d38","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2014 OpenStack Foundation."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":58,"id":"AAAAUH%2F9ozc%3D","line":1,"in_reply_to":"AAAAUH%2F9tVI%3D","updated":"2014-02-05 13:14:51.000000000","message":"Done","commit_id":"d4451251d3f19a52105915092fb8bc93bff51218"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"d336e0ed271ee098b9d780d7be1c64147670c8e1","unresolved":false,"context_lines":[{"line_number":56,"context_line":"                 \u0027swift_store_user\u0027: default_user,"},{"line_number":57,"context_line":"                 \u0027swift_store_key\u0027: default_key,"},{"line_number":58,"context_line":"                 \u0027swift_store_auth_address\u0027: default_auth_address,"},{"line_number":59,"context_line":"                 \u0027default_swift_account_reference\u0027: default_account_reference}"},{"line_number":60,"context_line":"        self.config(**confs)"},{"line_number":61,"context_line":"        swift_params \u003d swift_store_utils.SwiftParams().params"},{"line_number":62,"context_line":"        self.assertEqual(1, len(swift_params.keys()))"}],"source_content_type":"text/x-python","patch_set":58,"id":"AAAAUH%2F9tQY%3D","line":59,"updated":"2014-02-04 19:45:11.000000000","message":"do we need a test for reference to store which doesnt exist? maybe its there in other test files :) just noting down my thoughts.","commit_id":"d4451251d3f19a52105915092fb8bc93bff51218"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"6865245b6a21e413a25d558e0ceb47838408f122","unresolved":false,"context_lines":[{"line_number":56,"context_line":"                 \u0027swift_store_user\u0027: default_user,"},{"line_number":57,"context_line":"                 \u0027swift_store_key\u0027: default_key,"},{"line_number":58,"context_line":"                 \u0027swift_store_auth_address\u0027: default_auth_address,"},{"line_number":59,"context_line":"                 \u0027default_swift_account_reference\u0027: default_account_reference}"},{"line_number":60,"context_line":"        self.config(**confs)"},{"line_number":61,"context_line":"        swift_params \u003d swift_store_utils.SwiftParams().params"},{"line_number":62,"context_line":"        self.assertEqual(1, len(swift_params.keys()))"}],"source_content_type":"text/x-python","patch_set":58,"id":"AAAAUH%2F9owk%3D","line":59,"in_reply_to":"AAAAUH%2F9oys%3D","updated":"2014-02-05 13:19:39.000000000","message":"iccha, I think, in such a case the swift store\u0027s configure_add would be disabled. This is tested out in test_swift_store\u0027s test_no_store_credentials.\nAre you referring to this. Let me know.","commit_id":"d4451251d3f19a52105915092fb8bc93bff51218"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"f1620cf75cb08f2cc492824391cff390c1c12d38","unresolved":false,"context_lines":[{"line_number":56,"context_line":"                 \u0027swift_store_user\u0027: default_user,"},{"line_number":57,"context_line":"                 \u0027swift_store_key\u0027: default_key,"},{"line_number":58,"context_line":"                 \u0027swift_store_auth_address\u0027: default_auth_address,"},{"line_number":59,"context_line":"                 \u0027default_swift_account_reference\u0027: default_account_reference}"},{"line_number":60,"context_line":"        self.config(**confs)"},{"line_number":61,"context_line":"        swift_params \u003d swift_store_utils.SwiftParams().params"},{"line_number":62,"context_line":"        self.assertEqual(1, len(swift_params.keys()))"}],"source_content_type":"text/x-python","patch_set":58,"id":"AAAAUH%2F9oys%3D","line":59,"in_reply_to":"AAAAUH%2F9tQY%3D","updated":"2014-02-05 13:14:51.000000000","message":"Makes sense, will add it.","commit_id":"d4451251d3f19a52105915092fb8bc93bff51218"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"bc3ef0fdfb700f265e73285009c6e50e2f5ea18e","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from testtools.tests.test_run import fixtures"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from glance.common import exception"},{"line_number":18,"context_line":"from glance.common import swift_store_utils"}],"source_content_type":"text/x-python","patch_set":67,"id":"1ae5cdf2_9a805c48","line":15,"updated":"2014-06-06 18:26:19.000000000","message":"Think it\u0027s best if we \"import fixtures\" rather than doing this round about way.","commit_id":"cd863e61b7fc3e2676ae11ebad7db10ebbd47459"}],"glance/tests/unit/test_migrations.py":[{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"5d404d019f2a46c40713e02ebc61d2809f2de705","unresolved":false,"context_lines":[{"line_number":349,"context_line":""},{"line_number":350,"context_line":"    def _migrate_down(self, engine, version, with_data\u003dFalse):"},{"line_number":351,"context_line":"        \"\"\"migrate down to a previous version of the db."},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"        We allow for data insertion and post checks at every"},{"line_number":354,"context_line":"        migration version with special _prerun_### and"},{"line_number":355,"context_line":"        _check_### functions in the main test."}],"source_content_type":"text/x-python","patch_set":30,"id":"AAAASn%2F%2B%2F5U%3D","line":352,"updated":"2013-09-13 19:55:29.000000000","message":"https://review.openstack.org/#/c/42734/1/glance/tests/unit/test_migrations.py has changed for this function. Guess we should use this change?","commit_id":"1d4d2cce805da27a77653af8ca92993f0aea9797"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"6fbd2d7fb0a264fb6a0fcd9a2182af0b9a68113b","unresolved":false,"context_lines":[{"line_number":349,"context_line":""},{"line_number":350,"context_line":"    def _migrate_down(self, engine, version, with_data\u003dFalse):"},{"line_number":351,"context_line":"        \"\"\"migrate down to a previous version of the db."},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"        We allow for data insertion and post checks at every"},{"line_number":354,"context_line":"        migration version with special _prerun_### and"},{"line_number":355,"context_line":"        _check_### functions in the main test."}],"source_content_type":"text/x-python","patch_set":30,"id":"AAAAS3%2F%2F%2Bds%3D","line":352,"in_reply_to":"AAAASn%2F%2B%2F5U%3D","updated":"2013-09-16 09:08:44.000000000","message":"Done","commit_id":"1d4d2cce805da27a77653af8ca92993f0aea9797"},{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"3784f2d3bec8c5f893f1d99d5ab22b751c6e775e","unresolved":false,"context_lines":[{"line_number":126,"context_line":"    def setUp(self):"},{"line_number":127,"context_line":"        super(TestMigrations, self).setUp()"},{"line_number":128,"context_line":"        CONF.set_override(\u0027swift_store_credentials\u0027,"},{"line_number":129,"context_line":"                          \"{\u0027hiddenuser1:hiddenkey1\u0027: \u0027acct:usr:pass\u0027,\\"},{"line_number":130,"context_line":"                          \u0027hiddenuser2:key2\u0027:\\"},{"line_number":131,"context_line":"                          \u0027acct3A%foobar:pass\u0027,\\"},{"line_number":132,"context_line":"                          \u0027hidden3:pass3\u0027: \u0027user:pass\u0027,\\"}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAATH%2F%2F3ms%3D","line":129,"updated":"2013-10-08 18:41:21.000000000","message":"You can do a multi-line string here if you want, may be a little easier to read.\n\n\"{\u0027hiddenuser1:hiddenkey1\u0027: \u0027acct:usr:pass\u0027,\"\n\"\u0027hiddenuser2:key2\u0027:\"\n..","commit_id":"83cfcd828c11511f9f93856e1521eb9e4f104cb5"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"ecc30712b27db204fc192e8eac3ace481f49ced6","unresolved":false,"context_lines":[{"line_number":126,"context_line":"    def setUp(self):"},{"line_number":127,"context_line":"        super(TestMigrations, self).setUp()"},{"line_number":128,"context_line":"        CONF.set_override(\u0027swift_store_credentials\u0027,"},{"line_number":129,"context_line":"                          \"{\u0027hiddenuser1:hiddenkey1\u0027: \u0027acct:usr:pass\u0027,\\"},{"line_number":130,"context_line":"                          \u0027hiddenuser2:key2\u0027:\\"},{"line_number":131,"context_line":"                          \u0027acct3A%foobar:pass\u0027,\\"},{"line_number":132,"context_line":"                          \u0027hidden3:pass3\u0027: \u0027user:pass\u0027,\\"}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAATH%2F%2Fz2U%3D","line":129,"in_reply_to":"AAAATH%2F%2F3ms%3D","updated":"2013-10-09 14:36:10.000000000","message":"Done.","commit_id":"83cfcd828c11511f9f93856e1521eb9e4f104cb5"},{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"3784f2d3bec8c5f893f1d99d5ab22b751c6e775e","unresolved":false,"context_lines":[{"line_number":884,"context_line":"        image_locations \u003d get_table(engine, \u0027image_locations\u0027)"},{"line_number":885,"context_line":""},{"line_number":886,"context_line":"        now \u003d datetime.datetime.now()"},{"line_number":887,"context_line":"        image_id \u003d \u0027false_id\u0027"},{"line_number":888,"context_line":"        url \u003d \u0027file:///some/place/onthe/fs\u0027"},{"line_number":889,"context_line":""},{"line_number":890,"context_line":"        images \u003d get_table(engine, \u0027images\u0027)"}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAATH%2F%2F3lM%3D","line":887,"updated":"2013-10-08 18:41:21.000000000","message":"Should this be changed?","commit_id":"83cfcd828c11511f9f93856e1521eb9e4f104cb5"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"ecc30712b27db204fc192e8eac3ace481f49ced6","unresolved":false,"context_lines":[{"line_number":884,"context_line":"        image_locations \u003d get_table(engine, \u0027image_locations\u0027)"},{"line_number":885,"context_line":""},{"line_number":886,"context_line":"        now \u003d datetime.datetime.now()"},{"line_number":887,"context_line":"        image_id \u003d \u0027false_id\u0027"},{"line_number":888,"context_line":"        url \u003d \u0027file:///some/place/onthe/fs\u0027"},{"line_number":889,"context_line":""},{"line_number":890,"context_line":"        images \u003d get_table(engine, \u0027images\u0027)"}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAATH%2F%2Fz2Q%3D","line":887,"in_reply_to":"AAAATH%2F%2F3lM%3D","updated":"2013-10-09 14:36:10.000000000","message":"Done","commit_id":"83cfcd828c11511f9f93856e1521eb9e4f104cb5"},{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"3784f2d3bec8c5f893f1d99d5ab22b751c6e775e","unresolved":false,"context_lines":[{"line_number":974,"context_line":"        locations_table \u003d get_table(engine, \u0027image_locations\u0027)"},{"line_number":975,"context_line":"        data \u003d image_id"},{"line_number":976,"context_line":"        locations \u003d ["},{"line_number":977,"context_line":"            \u0027file://ab\u0027,"},{"line_number":978,"context_line":"            \u0027file://abc\u0027,"},{"line_number":979,"context_line":"            \u0027swift://user:pass@example.com/container/obj-id2\u0027"},{"line_number":980,"context_line":"        ]"}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAATH%2F%2F3kk%3D","line":977,"updated":"2013-10-08 18:41:21.000000000","message":"It may be good to add some bad data in here to make sure the migration won\u0027t break. For example, a location with multiple schemes","commit_id":"83cfcd828c11511f9f93856e1521eb9e4f104cb5"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"ecc30712b27db204fc192e8eac3ace481f49ced6","unresolved":false,"context_lines":[{"line_number":974,"context_line":"        locations_table \u003d get_table(engine, \u0027image_locations\u0027)"},{"line_number":975,"context_line":"        data \u003d image_id"},{"line_number":976,"context_line":"        locations \u003d ["},{"line_number":977,"context_line":"            \u0027file://ab\u0027,"},{"line_number":978,"context_line":"            \u0027file://abc\u0027,"},{"line_number":979,"context_line":"            \u0027swift://user:pass@example.com/container/obj-id2\u0027"},{"line_number":980,"context_line":"        ]"}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAATH%2F%2Fz2M%3D","line":977,"in_reply_to":"AAAATH%2F%2F3kk%3D","updated":"2013-10-09 14:36:10.000000000","message":"Done.","commit_id":"83cfcd828c11511f9f93856e1521eb9e4f104cb5"},{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"d864abc9e03690891f0444fe1f041f5d3a0dc322","unresolved":false,"context_lines":[{"line_number":886,"context_line":"        image_locations \u003d get_table(engine, \u0027image_locations\u0027)"},{"line_number":887,"context_line":""},{"line_number":888,"context_line":"        now \u003d datetime.datetime.now()"},{"line_number":889,"context_line":"        image_id \u003d \u0027false_id\u0027"},{"line_number":890,"context_line":"        url \u003d \u0027file:///some/place/onthe/fs\u0027"},{"line_number":891,"context_line":""},{"line_number":892,"context_line":"        images \u003d get_table(engine, \u0027images\u0027)"}],"source_content_type":"text/x-python","patch_set":40,"id":"AAAATn%2F9%2Byc%3D","line":889,"updated":"2013-12-03 20:00:07.000000000","message":"was this change intended?","commit_id":"9bd66c6eeeded42ed1cdff4c29768b0b900d5954"},{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"d864abc9e03690891f0444fe1f041f5d3a0dc322","unresolved":false,"context_lines":[{"line_number":1064,"context_line":"    def _pre_upgrade_031(self, engine):"},{"line_number":1065,"context_line":"        images \u003d get_table(engine, \u0027images\u0027)"},{"line_number":1066,"context_line":"        now \u003d datetime.datetime.now()"},{"line_number":1067,"context_line":"        image_id \u003d \u0027fake_030_id\u0027"},{"line_number":1068,"context_line":"        temp \u003d dict(deleted\u003dFalse,"},{"line_number":1069,"context_line":"                    created_at\u003dnow,"},{"line_number":1070,"context_line":"                    updated_at\u003dnow,"}],"source_content_type":"text/x-python","patch_set":40,"id":"AAAATn%2F9%2Bys%3D","line":1067,"updated":"2013-12-03 20:00:07.000000000","message":"the number here should be updated (or not there if it provides little value)","commit_id":"9bd66c6eeeded42ed1cdff4c29768b0b900d5954"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"6307cd1d870952712304922a7e773c6a526cdbf7","unresolved":false,"context_lines":[{"line_number":1064,"context_line":"    def _pre_upgrade_031(self, engine):"},{"line_number":1065,"context_line":"        images \u003d get_table(engine, \u0027images\u0027)"},{"line_number":1066,"context_line":"        now \u003d datetime.datetime.now()"},{"line_number":1067,"context_line":"        image_id \u003d \u0027fake_030_id\u0027"},{"line_number":1068,"context_line":"        temp \u003d dict(deleted\u003dFalse,"},{"line_number":1069,"context_line":"                    created_at\u003dnow,"},{"line_number":1070,"context_line":"                    updated_at\u003dnow,"}],"source_content_type":"text/x-python","patch_set":40,"id":"AAAATn%2F91yg%3D","line":1067,"in_reply_to":"AAAATn%2F9%2Bys%3D","updated":"2013-12-06 11:33:26.000000000","message":"Done","commit_id":"9bd66c6eeeded42ed1cdff4c29768b0b900d5954"},{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"d864abc9e03690891f0444fe1f041f5d3a0dc322","unresolved":false,"context_lines":[{"line_number":1113,"context_line":"        self.assertEqual(actual_locations, locations)"},{"line_number":1114,"context_line":""},{"line_number":1115,"context_line":"    def _post_downgrade_031(self, engine):"},{"line_number":1116,"context_line":"        image_id \u003d \u0027fake_030_id\u0027"},{"line_number":1117,"context_line":""},{"line_number":1118,"context_line":"        image_locations \u003d get_table(engine, \u0027image_locations\u0027)"},{"line_number":1119,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"AAAATn%2F9%2ByU%3D","line":1116,"updated":"2013-12-03 20:00:07.000000000","message":"same as above","commit_id":"9bd66c6eeeded42ed1cdff4c29768b0b900d5954"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"6307cd1d870952712304922a7e773c6a526cdbf7","unresolved":false,"context_lines":[{"line_number":1113,"context_line":"        self.assertEqual(actual_locations, locations)"},{"line_number":1114,"context_line":""},{"line_number":1115,"context_line":"    def _post_downgrade_031(self, engine):"},{"line_number":1116,"context_line":"        image_id \u003d \u0027fake_030_id\u0027"},{"line_number":1117,"context_line":""},{"line_number":1118,"context_line":"        image_locations \u003d get_table(engine, \u0027image_locations\u0027)"},{"line_number":1119,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"AAAATn%2F91yc%3D","line":1116,"in_reply_to":"AAAATn%2F9%2ByU%3D","updated":"2013-12-06 11:33:26.000000000","message":"Done","commit_id":"9bd66c6eeeded42ed1cdff4c29768b0b900d5954"}],"glance/tests/unit/test_store_location.py":[{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"e08ed8a479d602e3c744bb983e51d7aa70d7b61c","unresolved":false,"context_lines":[{"line_number":27,"context_line":"from testtools.tests.test_run import fixtures"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"SWIFT_CONF \u003d {\u0027default_store\u0027: \u0027file\u0027,"},{"line_number":31,"context_line":"              \u0027swift_store_auth_address\u0027: \u0027localhost:8080\u0027,"},{"line_number":32,"context_line":"              \u0027swift_store_container\u0027: \u0027glance\u0027,"},{"line_number":33,"context_line":"              \u0027swift_store_user\u0027: \u0027user\u0027,"}],"source_content_type":"text/x-python","patch_set":67,"id":"1ae5cdf2_4f7bc2f4","line":30,"updated":"2014-06-04 21:48:03.000000000","message":"Any reason the default store is kept as file in the swift conf! ? Are there any tests which check the invalid scenario? If so, a custom config should be used there, no?","commit_id":"cd863e61b7fc3e2676ae11ebad7db10ebbd47459"},{"author":{"_account_id":7701,"name":"Amala Basha","email":"amala.alungal@RACKSPACE.COM","username":"amalabasha"},"change_message_id":"177cdcc9e630f917392decab2abe2e2b2d88afa3","unresolved":false,"context_lines":[{"line_number":27,"context_line":"from testtools.tests.test_run import fixtures"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"SWIFT_CONF \u003d {\u0027default_store\u0027: \u0027file\u0027,"},{"line_number":31,"context_line":"              \u0027swift_store_auth_address\u0027: \u0027localhost:8080\u0027,"},{"line_number":32,"context_line":"              \u0027swift_store_container\u0027: \u0027glance\u0027,"},{"line_number":33,"context_line":"              \u0027swift_store_user\u0027: \u0027user\u0027,"}],"source_content_type":"text/x-python","patch_set":67,"id":"1ae5cdf2_be029e07","line":30,"in_reply_to":"1ae5cdf2_4f7bc2f4","updated":"2014-06-05 14:18:42.000000000","message":"The default store has been file. The test_swift_store.py tests the other scenarios.","commit_id":"cd863e61b7fc3e2676ae11ebad7db10ebbd47459"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"be9230815e7f90d6e59b5a331c6df082900446a3","unresolved":false,"context_lines":[{"line_number":27,"context_line":"from testtools.tests.test_run import fixtures"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"SWIFT_CONF \u003d {\u0027default_store\u0027: \u0027file\u0027,"},{"line_number":31,"context_line":"              \u0027swift_store_auth_address\u0027: \u0027localhost:8080\u0027,"},{"line_number":32,"context_line":"              \u0027swift_store_container\u0027: \u0027glance\u0027,"},{"line_number":33,"context_line":"              \u0027swift_store_user\u0027: \u0027user\u0027,"}],"source_content_type":"text/x-python","patch_set":67,"id":"1ae5cdf2_b4bd5fda","line":30,"in_reply_to":"1ae5cdf2_be029e07","updated":"2014-06-05 15:13:29.000000000","message":"hmm, then may be that variable needs a bit of name changing. Why not use it as just CONF?","commit_id":"cd863e61b7fc3e2676ae11ebad7db10ebbd47459"}],"glance/tests/unit/test_swift_store.py":[{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"872e1657a0fd5eb922990e5082584a03393fd4b6","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import hashlib"},{"line_number":21,"context_line":"import httplib"},{"line_number":22,"context_line":"import mox"},{"line_number":23,"context_line":"import StringIO"},{"line_number":24,"context_line":"import tempfile"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"AAAASn%2F%2FXF8%3D","line":22,"updated":"2013-09-05 20:16:41.000000000","message":"We re switching to using mock for testing instead of mox","commit_id":"68b65e9cdf88c719f579cde39c2b0a319dd49381"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"5753591610df1b443bc72e82bd41e81e5bde6b59","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import hashlib"},{"line_number":21,"context_line":"import httplib"},{"line_number":22,"context_line":"import mox"},{"line_number":23,"context_line":"import StringIO"},{"line_number":24,"context_line":"import tempfile"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"AAAASn%2F%2FVec%3D","line":22,"in_reply_to":"AAAASn%2F%2FXF8%3D","updated":"2013-09-06 05:49:06.000000000","message":"Done","commit_id":"68b65e9cdf88c719f579cde39c2b0a319dd49381"},{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"3784f2d3bec8c5f893f1d99d5ab22b751c6e775e","unresolved":false,"context_lines":[{"line_number":50,"context_line":"              \u0027swift_store_container\u0027: \u0027glance\u0027,"},{"line_number":51,"context_line":"              \u0027swift_store_user\u0027: \u0027user\u0027,"},{"line_number":52,"context_line":"              \u0027swift_store_key\u0027: \u0027key\u0027,"},{"line_number":53,"context_line":"              \u0027swift_store_credentials\u0027: \"{\u0027hiddenuser1:hiddenkey1\u0027:\\"},{"line_number":54,"context_line":"                                         \u0027tenant:user1:key1\u0027,\\"},{"line_number":55,"context_line":"                                         \u0027hiddenuser2:hiddenkey2\u0027:\\"},{"line_number":56,"context_line":"                                         \u0027tenant:user2:key2\u0027}\","}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAATH%2F%2F3kU%3D","line":53,"updated":"2013-10-08 18:41:21.000000000","message":"This could also be represented as a multi-line string here","commit_id":"83cfcd828c11511f9f93856e1521eb9e4f104cb5"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"ecc30712b27db204fc192e8eac3ace481f49ced6","unresolved":false,"context_lines":[{"line_number":50,"context_line":"              \u0027swift_store_container\u0027: \u0027glance\u0027,"},{"line_number":51,"context_line":"              \u0027swift_store_user\u0027: \u0027user\u0027,"},{"line_number":52,"context_line":"              \u0027swift_store_key\u0027: \u0027key\u0027,"},{"line_number":53,"context_line":"              \u0027swift_store_credentials\u0027: \"{\u0027hiddenuser1:hiddenkey1\u0027:\\"},{"line_number":54,"context_line":"                                         \u0027tenant:user1:key1\u0027,\\"},{"line_number":55,"context_line":"                                         \u0027hiddenuser2:hiddenkey2\u0027:\\"},{"line_number":56,"context_line":"                                         \u0027tenant:user2:key2\u0027}\","}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAATH%2F%2Fz10%3D","line":53,"in_reply_to":"AAAATH%2F%2F3kU%3D","updated":"2013-10-09 14:36:10.000000000","message":"Done.","commit_id":"83cfcd828c11511f9f93856e1521eb9e4f104cb5"},{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"3784f2d3bec8c5f893f1d99d5ab22b751c6e775e","unresolved":false,"context_lines":[{"line_number":589,"context_line":"        Tests that options without user disables the add method"},{"line_number":590,"context_line":"        \"\"\""},{"line_number":591,"context_line":"        self.assertTrue(self._option_required("},{"line_number":592,"context_line":"            \u0027current_swift_store_scrub_credentials\u0027))"},{"line_number":593,"context_line":""},{"line_number":594,"context_line":"    def test_no_auth_address(self):"},{"line_number":595,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAATH%2F%2F3jw%3D","line":592,"updated":"2013-10-08 18:41:21.000000000","message":"Is this option really required? I should be able to deploy with just swift_store_user and swift_store_key right? I guess a more general question is, are deployers now forced to run the migration to scrub the locations and change configurations accordingly?","commit_id":"83cfcd828c11511f9f93856e1521eb9e4f104cb5"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"ecc30712b27db204fc192e8eac3ace481f49ced6","unresolved":false,"context_lines":[{"line_number":589,"context_line":"        Tests that options without user disables the add method"},{"line_number":590,"context_line":"        \"\"\""},{"line_number":591,"context_line":"        self.assertTrue(self._option_required("},{"line_number":592,"context_line":"            \u0027current_swift_store_scrub_credentials\u0027))"},{"line_number":593,"context_line":""},{"line_number":594,"context_line":"    def test_no_auth_address(self):"},{"line_number":595,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAATH%2F%2Fz2I%3D","line":592,"in_reply_to":"AAAATH%2F%2F3jw%3D","updated":"2013-10-09 14:36:10.000000000","message":"This option is required because, it\u0027s the one that specifies which swift credentials to be used.\nIt has a default, that points to the swift_store_user and swift_store_key configs.\nI am keen on removing test_no_user, and test_no_key as they are deprecated from this commit.","commit_id":"83cfcd828c11511f9f93856e1521eb9e4f104cb5"},{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"9aa563aa6c613fc97d9b7cdbc0065a0f2d347122","unresolved":false,"context_lines":[{"line_number":584,"context_line":"            return False"},{"line_number":585,"context_line":"        return False"},{"line_number":586,"context_line":""},{"line_number":587,"context_line":"    def test_no_user(self):"},{"line_number":588,"context_line":"        \"\"\""},{"line_number":589,"context_line":"        Tests that options without user disables the add method"},{"line_number":590,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":34,"id":"AAAATH%2F%2FjKQ%3D","side":"PARENT","line":587,"updated":"2013-10-14 20:18:09.000000000","message":"This test should just be changed to assertFalse since the option is no longer required.","commit_id":"b01f1212a572f97def840631e7b8c9d7edbc8d14"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"be7190a5f2f33d229136c72cca90d4549694ee21","unresolved":false,"context_lines":[{"line_number":646,"context_line":"        Test we can delete an existing image in the swift store"},{"line_number":647,"context_line":"        \"\"\""},{"line_number":648,"context_line":"        uri \u003d \"swift://%s:key@authurl/glance/%s\" % ("},{"line_number":649,"context_line":"            self.swift_store_user, FAKE_UUID)"},{"line_number":650,"context_line":"        loc \u003d get_location_from_uri(uri)"},{"line_number":651,"context_line":"        self.store.delete(loc)"},{"line_number":652,"context_line":""}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2F67Y%3D","line":649,"updated":"2014-01-06 19:14:31.000000000","message":"is there any case where it passed the uri with store_i in it instead of actual credentials?\nif yes do we need to test that?","commit_id":"8dd4c90837578693fa1f976620154ef5beb576da"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"713e9b511029c99be91b983a9af721c937780382","unresolved":false,"context_lines":[{"line_number":646,"context_line":"        Test we can delete an existing image in the swift store"},{"line_number":647,"context_line":"        \"\"\""},{"line_number":648,"context_line":"        uri \u003d \"swift://%s:key@authurl/glance/%s\" % ("},{"line_number":649,"context_line":"            self.swift_store_user, FAKE_UUID)"},{"line_number":650,"context_line":"        loc \u003d get_location_from_uri(uri)"},{"line_number":651,"context_line":"        self.store.delete(loc)"},{"line_number":652,"context_line":""}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2F3vI%3D","line":649,"in_reply_to":"AAAAUH%2F%2F67Y%3D","updated":"2014-01-07 12:16:32.000000000","message":"Done","commit_id":"8dd4c90837578693fa1f976620154ef5beb576da"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"be7190a5f2f33d229136c72cca90d4549694ee21","unresolved":false,"context_lines":[{"line_number":866,"context_line":"        self.assertRaises(exception.BadStoreUri,"},{"line_number":867,"context_line":"                          self.location.parse_uri,"},{"line_number":868,"context_line":"                          self.location.uri)"},{"line_number":869,"context_line":""},{"line_number":870,"context_line":""},{"line_number":871,"context_line":"class TestMultiTenantStoreConnections(base.IsolatedUnitTest):"},{"line_number":872,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2F6%2B4%3D","line":869,"updated":"2014-01-06 19:14:31.000000000","message":"Maybe some more negative test cases? like current store does not exist?","commit_id":"8dd4c90837578693fa1f976620154ef5beb576da"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"713e9b511029c99be91b983a9af721c937780382","unresolved":false,"context_lines":[{"line_number":866,"context_line":"        self.assertRaises(exception.BadStoreUri,"},{"line_number":867,"context_line":"                          self.location.parse_uri,"},{"line_number":868,"context_line":"                          self.location.uri)"},{"line_number":869,"context_line":""},{"line_number":870,"context_line":""},{"line_number":871,"context_line":"class TestMultiTenantStoreConnections(base.IsolatedUnitTest):"},{"line_number":872,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":50,"id":"AAAAUH%2F%2F4DY%3D","line":869,"in_reply_to":"AAAAUH%2F%2F6%2B4%3D","updated":"2014-01-07 12:16:32.000000000","message":"Done","commit_id":"8dd4c90837578693fa1f976620154ef5beb576da"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"d336e0ed271ee098b9d780d7be1c64147670c8e1","unresolved":false,"context_lines":[{"line_number":385,"context_line":"        self.test_dir \u003d self.useFixture(fixtures.TempDir()).path"},{"line_number":386,"context_line":"        self.swift_config_file \u003d self._copy_data_file(conf_file, self.test_dir)"},{"line_number":387,"context_line":"        conf.update({\u0027swift_store_config_file\u0027: conf_file})"},{"line_number":388,"context_line":"        #self.config(swift_store_config_file\u003dself.swift_config_file)"},{"line_number":389,"context_line":"        self.config(**conf)"},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"        variations \u003d {"}],"source_content_type":"text/x-python","patch_set":58,"id":"AAAAUH%2F9tQE%3D","line":388,"updated":"2014-02-04 19:45:11.000000000","message":"comment line","commit_id":"d4451251d3f19a52105915092fb8bc93bff51218"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"f1620cf75cb08f2cc492824391cff390c1c12d38","unresolved":false,"context_lines":[{"line_number":385,"context_line":"        self.test_dir \u003d self.useFixture(fixtures.TempDir()).path"},{"line_number":386,"context_line":"        self.swift_config_file \u003d self._copy_data_file(conf_file, self.test_dir)"},{"line_number":387,"context_line":"        conf.update({\u0027swift_store_config_file\u0027: conf_file})"},{"line_number":388,"context_line":"        #self.config(swift_store_config_file\u003dself.swift_config_file)"},{"line_number":389,"context_line":"        self.config(**conf)"},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"        variations \u003d {"}],"source_content_type":"text/x-python","patch_set":58,"id":"AAAAUH%2F9oyY%3D","line":388,"in_reply_to":"AAAAUH%2F9tQE%3D","updated":"2014-02-05 13:14:51.000000000","message":"Done","commit_id":"d4451251d3f19a52105915092fb8bc93bff51218"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"53c500d083ae1258d84090c558834f63ddf0960c","unresolved":false,"context_lines":[{"line_number":257,"context_line":"        contain any account reference"},{"line_number":258,"context_line":"        \"\"\""},{"line_number":259,"context_line":"        uri \u003d \"swift://user:key@auth_address/glance/%s\""},{"line_number":260,"context_line":"        self.store.validate_location(uri)"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"    def test_get_size_with_multi_tenant_on(self):"},{"line_number":263,"context_line":"        \"\"\"Test that single tenant uris work with multi tenant on.\"\"\""}],"source_content_type":"text/x-python","patch_set":62,"id":"AAAAUX%2F%2Brv4%3D","line":260,"updated":"2014-02-19 21:17:06.000000000","message":"Any assertion for this test?","commit_id":"ef017082916b0dfc243a6591024be5a05655b51e"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"2ce80626db4f5696e51c1f18aa7f8215a59dbfd5","unresolved":false,"context_lines":[{"line_number":257,"context_line":"        contain any account reference"},{"line_number":258,"context_line":"        \"\"\""},{"line_number":259,"context_line":"        uri \u003d \"swift://user:key@auth_address/glance/%s\""},{"line_number":260,"context_line":"        self.store.validate_location(uri)"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"    def test_get_size_with_multi_tenant_on(self):"},{"line_number":263,"context_line":"        \"\"\"Test that single tenant uris work with multi tenant on.\"\"\""}],"source_content_type":"text/x-python","patch_set":62,"id":"AAAAUX%2F%2Bh6o%3D","line":260,"in_reply_to":"AAAAUX%2F%2Bocs%3D","updated":"2014-02-20 17:22:12.000000000","message":"How about assertIsNone","commit_id":"ef017082916b0dfc243a6591024be5a05655b51e"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"c54742dae87ec2d81b15af99a701400bf216d3da","unresolved":false,"context_lines":[{"line_number":257,"context_line":"        contain any account reference"},{"line_number":258,"context_line":"        \"\"\""},{"line_number":259,"context_line":"        uri \u003d \"swift://user:key@auth_address/glance/%s\""},{"line_number":260,"context_line":"        self.store.validate_location(uri)"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"    def test_get_size_with_multi_tenant_on(self):"},{"line_number":263,"context_line":"        \"\"\"Test that single tenant uris work with multi tenant on.\"\"\""}],"source_content_type":"text/x-python","patch_set":62,"id":"AAAAUX%2F%2Bocs%3D","line":260,"in_reply_to":"AAAAUX%2F%2Brv4%3D","updated":"2014-02-20 15:05:26.000000000","message":"Iccha,\n\nIt\u0027s an indirect way of asserting nothing raised.","commit_id":"ef017082916b0dfc243a6591024be5a05655b51e"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"53c500d083ae1258d84090c558834f63ddf0960c","unresolved":false,"context_lines":[{"line_number":347,"context_line":"        expected_swift_contents \u003d \"*\" * expected_swift_size"},{"line_number":348,"context_line":"        expected_checksum \u003d hashlib.md5(expected_swift_contents).hexdigest()"},{"line_number":349,"context_line":"        expected_image_id \u003d str(uuid.uuid4())"},{"line_number":350,"context_line":"        loc \u003d \"swift+https://tenant%%3Auser1:key@localhost:8080/glance/%s\""},{"line_number":351,"context_line":"        expected_location \u003d loc % (expected_image_id)"},{"line_number":352,"context_line":"        image_swift \u003d StringIO.StringIO(expected_swift_contents)"},{"line_number":353,"context_line":""}],"source_content_type":"text/x-python","patch_set":62,"id":"AAAAUX%2F%2Brrc%3D","line":350,"updated":"2014-02-19 21:17:06.000000000","message":"there are two %% is that intended?","commit_id":"ef017082916b0dfc243a6591024be5a05655b51e"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"c54742dae87ec2d81b15af99a701400bf216d3da","unresolved":false,"context_lines":[{"line_number":347,"context_line":"        expected_swift_contents \u003d \"*\" * expected_swift_size"},{"line_number":348,"context_line":"        expected_checksum \u003d hashlib.md5(expected_swift_contents).hexdigest()"},{"line_number":349,"context_line":"        expected_image_id \u003d str(uuid.uuid4())"},{"line_number":350,"context_line":"        loc \u003d \"swift+https://tenant%%3Auser1:key@localhost:8080/glance/%s\""},{"line_number":351,"context_line":"        expected_location \u003d loc % (expected_image_id)"},{"line_number":352,"context_line":"        image_swift \u003d StringIO.StringIO(expected_swift_contents)"},{"line_number":353,"context_line":""}],"source_content_type":"text/x-python","patch_set":62,"id":"AAAAUX%2F%2Bntw%3D","line":350,"in_reply_to":"AAAAUX%2F%2Brrc%3D","updated":"2014-02-20 15:05:26.000000000","message":"This is to circumvent error \"unsupported format character \u0027A\u0027 (0x41) at index 22\". Basically escaping the second %.","commit_id":"ef017082916b0dfc243a6591024be5a05655b51e"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"58c1295bd79142db07b42281e5e2983bc84cd85f","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"import glance.common.auth"},{"line_number":31,"context_line":"from glance.common import exception"},{"line_number":32,"context_line":"from glance.common import utils"},{"line_number":33,"context_line":"from glance.common import swift_store_utils"},{"line_number":34,"context_line":"from glance.openstack.common import units"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":66,"id":"5adbc538_5a888b22","line":32,"updated":"2014-05-26 11:03:15.000000000","message":"\"H306  imports not in alphabetical order (glance.common.utils, glance.common.swift_store_utils)\" that other pep8 failure here.","commit_id":"ba591d67e5e7d1e1a5a37334a245ef1baafea089"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"58c1295bd79142db07b42281e5e2983bc84cd85f","unresolved":false,"context_lines":[{"line_number":230,"context_line":""},{"line_number":231,"context_line":"    @property"},{"line_number":232,"context_line":"    def swift_store_user(self):"},{"line_number":233,"context_line":"        return \u0027tenant:user1\u0027"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"    def test_get_size(self):"},{"line_number":236,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":66,"id":"5adbc538_e0ae06e7","line":233,"updated":"2014-05-26 11:03:15.000000000","message":"This causes https://review.openstack.org/#/c/34801/66/glance/store/swift.py line 245 to be 3 and raise the BadStoreUri exception.","commit_id":"ba591d67e5e7d1e1a5a37334a245ef1baafea089"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"e08ed8a479d602e3c744bb983e51d7aa70d7b61c","unresolved":false,"context_lines":[{"line_number":378,"context_line":""},{"line_number":379,"context_line":"    def test_add_multi_store(self):"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"        conf \u003d SWIFT_CONF.copy()"},{"line_number":382,"context_line":"        conf[\u0027default_swift_reference\u0027] \u003d \u0027store_2\u0027"},{"line_number":383,"context_line":"        self.config(**conf)"},{"line_number":384,"context_line":"        reload(swift)"}],"source_content_type":"text/x-python","patch_set":67,"id":"1ae5cdf2_cfdc32e7","line":381,"updated":"2014-06-04 21:48:03.000000000","message":"Don\u0027t you need to use copy.deepcopy here? If the known_stores list is changed, this may break.","commit_id":"cd863e61b7fc3e2676ae11ebad7db10ebbd47459"},{"author":{"_account_id":7701,"name":"Amala Basha","email":"amala.alungal@RACKSPACE.COM","username":"amalabasha"},"change_message_id":"177cdcc9e630f917392decab2abe2e2b2d88afa3","unresolved":false,"context_lines":[{"line_number":378,"context_line":""},{"line_number":379,"context_line":"    def test_add_multi_store(self):"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"        conf \u003d SWIFT_CONF.copy()"},{"line_number":382,"context_line":"        conf[\u0027default_swift_reference\u0027] \u003d \u0027store_2\u0027"},{"line_number":383,"context_line":"        self.config(**conf)"},{"line_number":384,"context_line":"        reload(swift)"}],"source_content_type":"text/x-python","patch_set":67,"id":"1ae5cdf2_de05aa11","line":381,"in_reply_to":"1ae5cdf2_cfdc32e7","updated":"2014-06-05 14:18:42.000000000","message":"Done","commit_id":"cd863e61b7fc3e2676ae11ebad7db10ebbd47459"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"e08ed8a479d602e3c744bb983e51d7aa70d7b61c","unresolved":false,"context_lines":[{"line_number":390,"context_line":"        image_swift \u003d six.StringIO(expected_swift_contents)"},{"line_number":391,"context_line":"        global SWIFT_PUT_OBJECT_CALLS"},{"line_number":392,"context_line":"        SWIFT_PUT_OBJECT_CALLS \u003d 0"},{"line_number":393,"context_line":"        loc \u003d \\"},{"line_number":394,"context_line":"            \u0027swift+config://store_2/glance/%s\u0027"},{"line_number":395,"context_line":""},{"line_number":396,"context_line":"        expected_location \u003d loc % (expected_image_id)"}],"source_content_type":"text/x-python","patch_set":67,"id":"1ae5cdf2_afb9a67a","line":393,"updated":"2014-06-04 21:48:03.000000000","message":"Why the escape sequence?","commit_id":"cd863e61b7fc3e2676ae11ebad7db10ebbd47459"},{"author":{"_account_id":7701,"name":"Amala Basha","email":"amala.alungal@RACKSPACE.COM","username":"amalabasha"},"change_message_id":"177cdcc9e630f917392decab2abe2e2b2d88afa3","unresolved":false,"context_lines":[{"line_number":390,"context_line":"        image_swift \u003d six.StringIO(expected_swift_contents)"},{"line_number":391,"context_line":"        global SWIFT_PUT_OBJECT_CALLS"},{"line_number":392,"context_line":"        SWIFT_PUT_OBJECT_CALLS \u003d 0"},{"line_number":393,"context_line":"        loc \u003d \\"},{"line_number":394,"context_line":"            \u0027swift+config://store_2/glance/%s\u0027"},{"line_number":395,"context_line":""},{"line_number":396,"context_line":"        expected_location \u003d loc % (expected_image_id)"}],"source_content_type":"text/x-python","patch_set":67,"id":"1ae5cdf2_fe08a629","line":393,"in_reply_to":"1ae5cdf2_afb9a67a","updated":"2014-06-05 14:18:42.000000000","message":"I guess it was from an old pep8 issue. Shall change it.","commit_id":"cd863e61b7fc3e2676ae11ebad7db10ebbd47459"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"e08ed8a479d602e3c744bb983e51d7aa70d7b61c","unresolved":false,"context_lines":[{"line_number":407,"context_line":"        \"\"\""},{"line_number":408,"context_line":"        swift_store_utils.is_multiple_swift_store_accounts_enabled \u003d \\"},{"line_number":409,"context_line":"            mock.Mock(return_value\u003dTrue)"},{"line_number":410,"context_line":"        conf \u003d SWIFT_CONF.copy()"},{"line_number":411,"context_line":"        self.config(**conf)"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"        variations \u003d {"}],"source_content_type":"text/x-python","patch_set":67,"id":"1ae5cdf2_8f422a66","line":410,"updated":"2014-06-04 21:48:03.000000000","message":"ditto\n\ncopy.deepcopy?","commit_id":"cd863e61b7fc3e2676ae11ebad7db10ebbd47459"},{"author":{"_account_id":7701,"name":"Amala Basha","email":"amala.alungal@RACKSPACE.COM","username":"amalabasha"},"change_message_id":"177cdcc9e630f917392decab2abe2e2b2d88afa3","unresolved":false,"context_lines":[{"line_number":407,"context_line":"        \"\"\""},{"line_number":408,"context_line":"        swift_store_utils.is_multiple_swift_store_accounts_enabled \u003d \\"},{"line_number":409,"context_line":"            mock.Mock(return_value\u003dTrue)"},{"line_number":410,"context_line":"        conf \u003d SWIFT_CONF.copy()"},{"line_number":411,"context_line":"        self.config(**conf)"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"        variations \u003d {"}],"source_content_type":"text/x-python","patch_set":67,"id":"1ae5cdf2_9e17a244","line":410,"in_reply_to":"1ae5cdf2_8f422a66","updated":"2014-06-05 14:18:42.000000000","message":"Done","commit_id":"cd863e61b7fc3e2676ae11ebad7db10ebbd47459"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"e08ed8a479d602e3c744bb983e51d7aa70d7b61c","unresolved":false,"context_lines":[{"line_number":497,"context_line":""},{"line_number":498,"context_line":"        global SWIFT_PUT_OBJECT_CALLS"},{"line_number":499,"context_line":"        SWIFT_PUT_OBJECT_CALLS \u003d 0"},{"line_number":500,"context_line":"        conf \u003d SWIFT_CONF.copy()"},{"line_number":501,"context_line":"        conf[\u0027swift_store_user\u0027] \u003d \u0027tenant:user\u0027"},{"line_number":502,"context_line":"        conf[\u0027swift_store_create_container_on_put\u0027] \u003d True"},{"line_number":503,"context_line":"        conf[\u0027swift_store_container\u0027] \u003d \u0027noexist\u0027"}],"source_content_type":"text/x-python","patch_set":67,"id":"1ae5cdf2_c385ee5a","line":500,"updated":"2014-06-04 21:48:03.000000000","message":"ditto\n\ncopy.deepcopy?","commit_id":"cd863e61b7fc3e2676ae11ebad7db10ebbd47459"},{"author":{"_account_id":7701,"name":"Amala Basha","email":"amala.alungal@RACKSPACE.COM","username":"amalabasha"},"change_message_id":"177cdcc9e630f917392decab2abe2e2b2d88afa3","unresolved":false,"context_lines":[{"line_number":497,"context_line":""},{"line_number":498,"context_line":"        global SWIFT_PUT_OBJECT_CALLS"},{"line_number":499,"context_line":"        SWIFT_PUT_OBJECT_CALLS \u003d 0"},{"line_number":500,"context_line":"        conf \u003d SWIFT_CONF.copy()"},{"line_number":501,"context_line":"        conf[\u0027swift_store_user\u0027] \u003d \u0027tenant:user\u0027"},{"line_number":502,"context_line":"        conf[\u0027swift_store_create_container_on_put\u0027] \u003d True"},{"line_number":503,"context_line":"        conf[\u0027swift_store_container\u0027] \u003d \u0027noexist\u0027"}],"source_content_type":"text/x-python","patch_set":67,"id":"1ae5cdf2_be29be8b","line":500,"in_reply_to":"1ae5cdf2_c385ee5a","updated":"2014-06-05 14:18:42.000000000","message":"Done","commit_id":"cd863e61b7fc3e2676ae11ebad7db10ebbd47459"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"e08ed8a479d602e3c744bb983e51d7aa70d7b61c","unresolved":false,"context_lines":[{"line_number":1016,"context_line":"        conf.update({\u0027swift_store_config_file\u0027: self.swift_config_file})"},{"line_number":1017,"context_line":"        conf[\u0027default_swift_reference\u0027] \u003d \u0027ref1\u0027"},{"line_number":1018,"context_line":"        self.config(**conf)"},{"line_number":1019,"context_line":"        reload(swift)"},{"line_number":1020,"context_line":""},{"line_number":1021,"context_line":"        store \u003d swift.SingleTenantStore()"},{"line_number":1022,"context_line":"        location \u003d store.create_location(\u0027image-id\u0027)"}],"source_content_type":"text/x-python","patch_set":67,"id":"1ae5cdf2_63117a51","line":1019,"updated":"2014-06-04 21:48:03.000000000","message":"Why do you need to reload the swift module, here? Just trying to understand if it\u0027s necessary as that module is not used above. And, the setUp reloads it anyways.","commit_id":"cd863e61b7fc3e2676ae11ebad7db10ebbd47459"},{"author":{"_account_id":7701,"name":"Amala Basha","email":"amala.alungal@RACKSPACE.COM","username":"amalabasha"},"change_message_id":"177cdcc9e630f917392decab2abe2e2b2d88afa3","unresolved":false,"context_lines":[{"line_number":1016,"context_line":"        conf.update({\u0027swift_store_config_file\u0027: self.swift_config_file})"},{"line_number":1017,"context_line":"        conf[\u0027default_swift_reference\u0027] \u003d \u0027ref1\u0027"},{"line_number":1018,"context_line":"        self.config(**conf)"},{"line_number":1019,"context_line":"        reload(swift)"},{"line_number":1020,"context_line":""},{"line_number":1021,"context_line":"        store \u003d swift.SingleTenantStore()"},{"line_number":1022,"context_line":"        location \u003d store.create_location(\u0027image-id\u0027)"}],"source_content_type":"text/x-python","patch_set":67,"id":"1ae5cdf2_9e5c021b","line":1019,"in_reply_to":"1ae5cdf2_2686a0db","updated":"2014-06-05 14:18:42.000000000","message":"The config reset doesnt really flush out the config all the time. So when running multiple tests all of which change the config we kept bumping into issues.","commit_id":"cd863e61b7fc3e2676ae11ebad7db10ebbd47459"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"080bdcec211702f8aa45fc987cc611e02adbdcf9","unresolved":false,"context_lines":[{"line_number":1016,"context_line":"        conf.update({\u0027swift_store_config_file\u0027: self.swift_config_file})"},{"line_number":1017,"context_line":"        conf[\u0027default_swift_reference\u0027] \u003d \u0027ref1\u0027"},{"line_number":1018,"context_line":"        self.config(**conf)"},{"line_number":1019,"context_line":"        reload(swift)"},{"line_number":1020,"context_line":""},{"line_number":1021,"context_line":"        store \u003d swift.SingleTenantStore()"},{"line_number":1022,"context_line":"        location \u003d store.create_location(\u0027image-id\u0027)"}],"source_content_type":"text/x-python","patch_set":67,"id":"1ae5cdf2_2686a0db","line":1019,"in_reply_to":"1ae5cdf2_63117a51","updated":"2014-06-04 22:52:30.000000000","message":"Could it be because the config changes?\nBut is it necessary to reload at the setUp?\nAlso if deepcopy needed earlier, I think it would be in place here then as well.","commit_id":"cd863e61b7fc3e2676ae11ebad7db10ebbd47459"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"be9230815e7f90d6e59b5a331c6df082900446a3","unresolved":false,"context_lines":[{"line_number":1016,"context_line":"        conf.update({\u0027swift_store_config_file\u0027: self.swift_config_file})"},{"line_number":1017,"context_line":"        conf[\u0027default_swift_reference\u0027] \u003d \u0027ref1\u0027"},{"line_number":1018,"context_line":"        self.config(**conf)"},{"line_number":1019,"context_line":"        reload(swift)"},{"line_number":1020,"context_line":""},{"line_number":1021,"context_line":"        store \u003d swift.SingleTenantStore()"},{"line_number":1022,"context_line":"        location \u003d store.create_location(\u0027image-id\u0027)"}],"source_content_type":"text/x-python","patch_set":67,"id":"1ae5cdf2_14853306","line":1019,"in_reply_to":"1ae5cdf2_9e5c021b","updated":"2014-06-05 15:13:29.000000000","message":"Gotcha","commit_id":"cd863e61b7fc3e2676ae11ebad7db10ebbd47459"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"e08ed8a479d602e3c744bb983e51d7aa70d7b61c","unresolved":false,"context_lines":[{"line_number":1104,"context_line":"    def setUp(self):"},{"line_number":1105,"context_line":"        conf \u003d SWIFT_CONF.copy()"},{"line_number":1106,"context_line":"        self.config(**conf)"},{"line_number":1107,"context_line":"        reload(swift)"},{"line_number":1108,"context_line":"        super(TestChunkReader, self).setUp()"},{"line_number":1109,"context_line":""},{"line_number":1110,"context_line":"    def test_read_all_data(self):"}],"source_content_type":"text/x-python","patch_set":67,"id":"1ae5cdf2_a3fd42b3","line":1107,"updated":"2014-06-04 21:48:03.000000000","message":"You may not need to reload the module here. That might fasten up the test too.","commit_id":"cd863e61b7fc3e2676ae11ebad7db10ebbd47459"},{"author":{"_account_id":7701,"name":"Amala Basha","email":"amala.alungal@RACKSPACE.COM","username":"amalabasha"},"change_message_id":"177cdcc9e630f917392decab2abe2e2b2d88afa3","unresolved":false,"context_lines":[{"line_number":1104,"context_line":"    def setUp(self):"},{"line_number":1105,"context_line":"        conf \u003d SWIFT_CONF.copy()"},{"line_number":1106,"context_line":"        self.config(**conf)"},{"line_number":1107,"context_line":"        reload(swift)"},{"line_number":1108,"context_line":"        super(TestChunkReader, self).setUp()"},{"line_number":1109,"context_line":""},{"line_number":1110,"context_line":"    def test_read_all_data(self):"}],"source_content_type":"text/x-python","patch_set":67,"id":"1ae5cdf2_9ee1622c","line":1107,"in_reply_to":"1ae5cdf2_26eb0079","updated":"2014-06-05 14:18:42.000000000","message":"Hmmm,I think you\u0027re right. Will check","commit_id":"cd863e61b7fc3e2676ae11ebad7db10ebbd47459"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"080bdcec211702f8aa45fc987cc611e02adbdcf9","unresolved":false,"context_lines":[{"line_number":1104,"context_line":"    def setUp(self):"},{"line_number":1105,"context_line":"        conf \u003d SWIFT_CONF.copy()"},{"line_number":1106,"context_line":"        self.config(**conf)"},{"line_number":1107,"context_line":"        reload(swift)"},{"line_number":1108,"context_line":"        super(TestChunkReader, self).setUp()"},{"line_number":1109,"context_line":""},{"line_number":1110,"context_line":"    def test_read_all_data(self):"}],"source_content_type":"text/x-python","patch_set":67,"id":"1ae5cdf2_26eb0079","line":1107,"in_reply_to":"1ae5cdf2_a3fd42b3","updated":"2014-06-04 22:52:30.000000000","message":"How much and what would be the consequences not to if the config has been changed?\n\nAnd if deepcopy needed it would be needed here then as well..","commit_id":"cd863e61b7fc3e2676ae11ebad7db10ebbd47459"}],"glance/tests/utils.py":[{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"781b76aacc73d4ce6fb92463cfaaebf439158cfa","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"\"\"\"Common utilities used in testing\"\"\""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import ast"},{"line_number":21,"context_line":"import errno"},{"line_number":22,"context_line":"import functools"},{"line_number":23,"context_line":"import os"}],"source_content_type":"text/x-python","patch_set":26,"id":"AAAASn%2F%2FZVg%3D","line":20,"updated":"2013-09-05 08:21:19.000000000","message":"is this needed here? I couldn\u0027t find a use in this module.","commit_id":"123bb4f29d48f49e4c22ebc1ba66186b2dfb2531"}],"requirements.txt":[{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"781b76aacc73d4ce6fb92463cfaaebf439158cfa","unresolved":false,"context_lines":[{"line_number":20,"context_line":"kombu\u003e\u003d2.4.8"},{"line_number":21,"context_line":"pycrypto\u003e\u003d2.6"},{"line_number":22,"context_line":"iso8601\u003e\u003d0.1.4"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"-f http://tarballs.openstack.org/oslo.config/oslo.config-1.2.0a3.tar.gz#egg\u003doslo.config-1.2.0a3"},{"line_number":25,"context_line":"oslo.config\u003e\u003d1.2.0a3"},{"line_number":26,"context_line":""}],"source_content_type":"text/plain","patch_set":26,"id":"AAAASn%2F%2FZVo%3D","side":"PARENT","line":23,"updated":"2013-09-05 08:21:19.000000000","message":"don\u0027t think this change is needed here.","commit_id":"2cb68ac6d697e67d43cc0b8d3b7d0e4406538ed0"}],"tools/pip-requires":[{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"f9b3798047f8a3d1d1d3fc87873d1ba20c1ddd09","unresolved":false,"context_lines":[{"line_number":18,"context_line":"kombu\u003e2.4.7"},{"line_number":19,"context_line":"pycrypto\u003e\u003d2.1.0alpha1"},{"line_number":20,"context_line":"iso8601\u003e\u003d0.1.4"},{"line_number":21,"context_line":"http://tarballs.openstack.org/oslo.config/oslo.config-1.2.0a2.tar.gz#egg\u003doslo.config"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"# For Swift storage backend."}],"source_content_type":"application/octet-stream","patch_set":7,"id":"AAAAQn%2F%2FWyw%3D","line":21,"updated":"2013-08-01 13:59:08.000000000","message":"why this switch?","commit_id":"aa1e06c38cfbb5f058abb63005df8cd0dbfc8645"},{"author":{"_account_id":7531,"name":"Sridevi Koushik","email":"sridevi.koushik@rackspace.com","username":"sridevik"},"change_message_id":"a1c8fdf1d26c2cc2c3a6d4d3de734ab89f860417","unresolved":false,"context_lines":[{"line_number":18,"context_line":"kombu\u003e2.4.7"},{"line_number":19,"context_line":"pycrypto\u003e\u003d2.1.0alpha1"},{"line_number":20,"context_line":"iso8601\u003e\u003d0.1.4"},{"line_number":21,"context_line":"http://tarballs.openstack.org/oslo.config/oslo.config-1.2.0a2.tar.gz#egg\u003doslo.config"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"# For Swift storage backend."}],"source_content_type":"application/octet-stream","patch_set":7,"id":"AAAAQn%2F%2FWbY%3D","line":21,"in_reply_to":"AAAAQn%2F%2FWyw%3D","updated":"2013-08-01 15:45:14.000000000","message":"Iccha,\n\nThis version of oslo.config has support for DictOpts, which i needed for the swift configuration.","commit_id":"aa1e06c38cfbb5f058abb63005df8cd0dbfc8645"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"29795a2a01a10c746341cfbc1f1b9f6014f58104","unresolved":false,"context_lines":[{"line_number":18,"context_line":"kombu\u003e2.4.7"},{"line_number":19,"context_line":"pycrypto\u003e\u003d2.1.0alpha1"},{"line_number":20,"context_line":"iso8601\u003e\u003d0.1.4"},{"line_number":21,"context_line":"http://tarballs.openstack.org/oslo.config/oslo.config-1.2.0a2.tar.gz#egg\u003doslo.config"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"# For Swift storage backend."}],"source_content_type":"application/octet-stream","patch_set":7,"id":"AAAAQn%2F%2FWbQ%3D","line":21,"in_reply_to":"AAAAQn%2F%2FWyw%3D","updated":"2013-08-01 15:46:16.000000000","message":"You need:\n\n  -f http://tarballs.openstack.org/oslo.config/oslo.config-1.2.0a3.tar.gz#egg\u003doslo.config-1.2.0a3\n  oslo.config\u003e\u003d1.2.0a3\n\nsee https://bugs.launchpad.net/oslo/+bug/1194807","commit_id":"aa1e06c38cfbb5f058abb63005df8cd0dbfc8645"}]}
