)]}'
{"marconi/tests/functional/README.rst":[{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"53a09ba2e9b00779fc462f171daa60eed839eb59","unresolved":false,"context_lines":[{"line_number":1,"context_line":"Marconi Functional Tests"},{"line_number":2,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"Marconi\u0027s functional tests treat Marconi as a black box. In other"}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAASn%2F%2FzWs%3D","line":1,"updated":"2013-08-29 11:29:13.000000000","message":"I guess we\u0027ll remove this file once we integrate this tests with tox, right?","commit_id":"d14b5d3613ca3a31307a9b29c43a4af82ed2dbdd"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"08b4d4c5a8a4a6caf43769491634307af4601e94","unresolved":false,"context_lines":[{"line_number":1,"context_line":"Marconi Functional Tests"},{"line_number":2,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"Marconi\u0027s functional tests treat Marconi as a black box. In other"}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAASn%2F%2Fy50%3D","line":1,"in_reply_to":"AAAASn%2F%2FzWs%3D","updated":"2013-08-29 14:25:28.000000000","message":"+1 - tox will Do The Right Thing, and possibly also be self-documenting for those curious about how we run our tests.","commit_id":"d14b5d3613ca3a31307a9b29c43a4af82ed2dbdd"},{"author":{"_account_id":7498,"name":"Malini Kamalambal","email":"malini.kamalambal@rackspace.com","username":"malini-pk"},"change_message_id":"c2da3fa25ad07f7c94b71e59001b035b266ef6d8","unresolved":false,"context_lines":[{"line_number":1,"context_line":"Marconi Functional Tests"},{"line_number":2,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"Marconi\u0027s functional tests treat Marconi as a black box. In other"}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAASn%2F%2Fy60%3D","line":1,"in_reply_to":"AAAASn%2F%2FzWs%3D","updated":"2013-08-29 16:55:57.000000000","message":"We need to be able to run  functional tests against,\n1. tox with a local server (AND)\n2. against a remote marconi server for CI/CD pipleine, deployment testing for cloud providers etc.\nSo I would rather keep this file   \u0026 update it as a how to for Step 2.","commit_id":"d14b5d3613ca3a31307a9b29c43a4af82ed2dbdd"}],"marconi/tests/functional/test_claims.py":[{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"4f4c6ef05ccfc287a1637539f1aa14a2ffbc4f35","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    @classmethod"},{"line_number":29,"context_line":"    def setUpClass(cls):"},{"line_number":30,"context_line":"        \"\"\"Create Queue, Post Messages for Claim Tests.\"\"\""},{"line_number":31,"context_line":"        cls.cfg \u003d config.Config()"},{"line_number":32,"context_line":"        cls.header \u003d helpers.create_marconi_headers()"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        cls.headers_response_with_body \u003d set([\u0027location\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAASX%2F%2F0tk%3D","line":31,"updated":"2013-08-26 18:44:13.000000000","message":"cls.cfg also doesn\u0027t need to be a class-level variable. It\u0027s only used in setUpClass.","commit_id":"1e472bda4908914c5bf562d37109e1fc592361a3"},{"author":{"_account_id":7498,"name":"Malini Kamalambal","email":"malini.kamalambal@rackspace.com","username":"malini-pk"},"change_message_id":"3af303dd873b6af4daed1108ef6db19d9ee7e630","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    @classmethod"},{"line_number":29,"context_line":"    def setUpClass(cls):"},{"line_number":30,"context_line":"        \"\"\"Create Queue, Post Messages for Claim Tests.\"\"\""},{"line_number":31,"context_line":"        cls.cfg \u003d config.Config()"},{"line_number":32,"context_line":"        cls.header \u003d helpers.create_marconi_headers()"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        cls.headers_response_with_body \u003d set([\u0027location\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAASn%2F%2F%2Ftw%3D","line":31,"in_reply_to":"AAAASX%2F%2F0tk%3D","updated":"2013-08-27 03:10:24.000000000","message":"I thought about this quite a bit \u0026 not making cfg a class variable sounded like a good idea. \nBut cls.cfg is used in a few other places in the tests such as to get the max messages allowed).It is needed in the queues \u0026 messages tests due to the same reason.","commit_id":"1e472bda4908914c5bf562d37109e1fc592361a3"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"4c2071154b34d9e79052c9193b180cb78cac03b5","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    @classmethod"},{"line_number":29,"context_line":"    def setUpClass(cls):"},{"line_number":30,"context_line":"        \"\"\"Create Queue, Post Messages for Claim Tests.\"\"\""},{"line_number":31,"context_line":"        cls.cfg \u003d config.Config()"},{"line_number":32,"context_line":"        cls.header \u003d helpers.create_marconi_headers()"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        cls.headers_response_with_body \u003d set([\u0027location\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAASn%2F%2F8yE%3D","line":31,"in_reply_to":"AAAASn%2F%2F%2Ftw%3D","updated":"2013-08-27 16:49:51.000000000","message":"Works for me.","commit_id":"1e472bda4908914c5bf562d37109e1fc592361a3"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"4f4c6ef05ccfc287a1637539f1aa14a2ffbc4f35","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    def setUpClass(cls):"},{"line_number":30,"context_line":"        \"\"\"Create Queue, Post Messages for Claim Tests.\"\"\""},{"line_number":31,"context_line":"        cls.cfg \u003d config.Config()"},{"line_number":32,"context_line":"        cls.header \u003d helpers.create_marconi_headers()"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        cls.headers_response_with_body \u003d set([\u0027location\u0027,"},{"line_number":35,"context_line":"                                              \u0027content-type\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAASX%2F%2F0uQ%3D","line":32,"updated":"2013-08-26 18:44:13.000000000","message":"header doesn\u0027t need to be saved at the class level since it isn\u0027t used in any of the tests. You can just save it as a plain variable and use it in this setup method.","commit_id":"1e472bda4908914c5bf562d37109e1fc592361a3"},{"author":{"_account_id":7498,"name":"Malini Kamalambal","email":"malini.kamalambal@rackspace.com","username":"malini-pk"},"change_message_id":"3af303dd873b6af4daed1108ef6db19d9ee7e630","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    def setUpClass(cls):"},{"line_number":30,"context_line":"        \"\"\"Create Queue, Post Messages for Claim Tests.\"\"\""},{"line_number":31,"context_line":"        cls.cfg \u003d config.Config()"},{"line_number":32,"context_line":"        cls.header \u003d helpers.create_marconi_headers()"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        cls.headers_response_with_body \u003d set([\u0027location\u0027,"},{"line_number":35,"context_line":"                                              \u0027content-type\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAASn%2F%2F%2Fto%3D","line":32,"in_reply_to":"AAAASX%2F%2F0uQ%3D","updated":"2013-08-27 03:10:24.000000000","message":"cls.header is used in the tests to make http requests","commit_id":"1e472bda4908914c5bf562d37109e1fc592361a3"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"4c2071154b34d9e79052c9193b180cb78cac03b5","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    def setUpClass(cls):"},{"line_number":30,"context_line":"        \"\"\"Create Queue, Post Messages for Claim Tests.\"\"\""},{"line_number":31,"context_line":"        cls.cfg \u003d config.Config()"},{"line_number":32,"context_line":"        cls.header \u003d helpers.create_marconi_headers()"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        cls.headers_response_with_body \u003d set([\u0027location\u0027,"},{"line_number":35,"context_line":"                                              \u0027content-type\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAASn%2F%2F8x8%3D","line":32,"in_reply_to":"AAAASn%2F%2F%2Fto%3D","updated":"2013-08-27 16:49:51.000000000","message":"I missed that! It\u0027s fine as is.","commit_id":"1e472bda4908914c5bf562d37109e1fc592361a3"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"4f4c6ef05ccfc287a1637539f1aa14a2ffbc4f35","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        cls.header \u003d helpers.create_marconi_headers()"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        cls.headers_response_with_body \u003d set([\u0027location\u0027,"},{"line_number":35,"context_line":"                                              \u0027content-type\u0027])"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"        url \u003d cls.cfg.base_url + \u0027/queues/claimtestqueue\u0027"},{"line_number":38,"context_line":"        http.put(url, cls.header)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAASX%2F%2F0uI%3D","line":35,"updated":"2013-08-26 18:44:13.000000000","message":"Same here as above.","commit_id":"1e472bda4908914c5bf562d37109e1fc592361a3"},{"author":{"_account_id":7498,"name":"Malini Kamalambal","email":"malini.kamalambal@rackspace.com","username":"malini-pk"},"change_message_id":"3af303dd873b6af4daed1108ef6db19d9ee7e630","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        cls.header \u003d helpers.create_marconi_headers()"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        cls.headers_response_with_body \u003d set([\u0027location\u0027,"},{"line_number":35,"context_line":"                                              \u0027content-type\u0027])"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"        url \u003d cls.cfg.base_url + \u0027/queues/claimtestqueue\u0027"},{"line_number":38,"context_line":"        http.put(url, cls.header)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAASn%2F%2F%2Ftk%3D","line":35,"in_reply_to":"AAAASX%2F%2F0uI%3D","updated":"2013-08-27 03:10:24.000000000","message":"same as above :)","commit_id":"1e472bda4908914c5bf562d37109e1fc592361a3"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"4f4c6ef05ccfc287a1637539f1aa14a2ffbc4f35","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        cls.headers_response_with_body \u003d set([\u0027location\u0027,"},{"line_number":35,"context_line":"                                              \u0027content-type\u0027])"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"        url \u003d cls.cfg.base_url + \u0027/queues/claimtestqueue\u0027"},{"line_number":38,"context_line":"        http.put(url, cls.header)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        #Post Messages"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAASX%2F%2F0vA%3D","line":37,"updated":"2013-08-26 18:44:13.000000000","message":"You can store the queue URL as:\n\ncls.queue_url \u003d cls.cfg.base_url + \u0027/queues/claimtestqueue\u0027\n\nTo increase DRYness. Later, in a setUp method, you do:\n\ndef setUp(self): self.queue_url \u003d TestClaims.queue_url\n\nSo you can use:\n\nself.queue_url\n\nIn each of the tests. This avoids having to re-type \u0027/queues/claimtestqueue\u0027 in every test.","commit_id":"1e472bda4908914c5bf562d37109e1fc592361a3"},{"author":{"_account_id":7498,"name":"Malini Kamalambal","email":"malini.kamalambal@rackspace.com","username":"malini-pk"},"change_message_id":"3af303dd873b6af4daed1108ef6db19d9ee7e630","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        cls.headers_response_with_body \u003d set([\u0027location\u0027,"},{"line_number":35,"context_line":"                                              \u0027content-type\u0027])"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"        url \u003d cls.cfg.base_url + \u0027/queues/claimtestqueue\u0027"},{"line_number":38,"context_line":"        http.put(url, cls.header)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        #Post Messages"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAASn%2F%2F%2Ftc%3D","line":37,"in_reply_to":"AAAASX%2F%2F0vA%3D","updated":"2013-08-27 03:10:24.000000000","message":"This will require declaring multiple variables in the class-\nmessage_url, claim_url, queue_url \u0026 potentially more if the test suite deals with multiple queues. Personally, I think that will make the tests less explicit \u0026 hard to read.\nThoughts?","commit_id":"1e472bda4908914c5bf562d37109e1fc592361a3"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"4c2071154b34d9e79052c9193b180cb78cac03b5","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        cls.headers_response_with_body \u003d set([\u0027location\u0027,"},{"line_number":35,"context_line":"                                              \u0027content-type\u0027])"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"        url \u003d cls.cfg.base_url + \u0027/queues/claimtestqueue\u0027"},{"line_number":38,"context_line":"        http.put(url, cls.header)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        #Post Messages"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAASn%2F%2F8wk%3D","line":37,"in_reply_to":"AAAASn%2F%2F%2Ftc%3D","updated":"2013-08-27 16:49:51.000000000","message":"Good news for this test: a proper grep of the source shows me that every URL (13 of them) that is used is of the form \u0027url \u003d cls.cfg.base_url + \u0027/queues/claimtestqueue\u0027. This tells me that it\u0027d be great to have a singular definition of queues, e.g., cls.test_queue.","commit_id":"1e472bda4908914c5bf562d37109e1fc592361a3"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"4f4c6ef05ccfc287a1637539f1aa14a2ffbc4f35","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        self.assertEqual(result.status_code, 201)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        actual_message_count \u003d len(result.json())"},{"line_number":63,"context_line":"        self.assertMessageCount(message_count, actual_message_count)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        response_headers \u003d set(result.headers.keys())"},{"line_number":66,"context_line":"        self.assertIsSubset(self.headers_response_with_body, response_headers)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAASX%2F%2F0xY%3D","line":63,"updated":"2013-08-26 18:44:13.000000000","message":"This test can be made a little simpler. Instead of passing in the limit as a string \u0027url_appender\u0027, why not pass it in as an integer and construct the URL from that? That way, you don\u0027t have to do parsing on the parameter to determine what our limit should be, and you can construct the URL as:\n\n\u0027/queues/claimtestqueue/claims/%s\u0027 % limit","commit_id":"1e472bda4908914c5bf562d37109e1fc592361a3"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"4c2071154b34d9e79052c9193b180cb78cac03b5","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        self.assertEqual(result.status_code, 201)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        actual_message_count \u003d len(result.json())"},{"line_number":63,"context_line":"        self.assertMessageCount(message_count, actual_message_count)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        response_headers \u003d set(result.headers.keys())"},{"line_number":66,"context_line":"        self.assertIsSubset(self.headers_response_with_body, response_headers)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAASn%2F%2F8wE%3D","line":63,"in_reply_to":"AAAASX%2F%2F0j8%3D","updated":"2013-08-27 16:49:51.000000000","message":"I see your point. How about?:\n\nif limit !\u003d 0: url +\u003d \u0027?limit\u003d%s\u0027 % limit","commit_id":"1e472bda4908914c5bf562d37109e1fc592361a3"},{"author":{"_account_id":7498,"name":"Malini Kamalambal","email":"malini.kamalambal@rackspace.com","username":"malini-pk"},"change_message_id":"3af303dd873b6af4daed1108ef6db19d9ee7e630","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        self.assertEqual(result.status_code, 201)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        actual_message_count \u003d len(result.json())"},{"line_number":63,"context_line":"        self.assertMessageCount(message_count, actual_message_count)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        response_headers \u003d set(result.headers.keys())"},{"line_number":66,"context_line":"        self.assertIsSubset(self.headers_response_with_body, response_headers)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAASX%2F%2F0j8%3D","line":63,"in_reply_to":"AAAASX%2F%2F0xY%3D","updated":"2013-08-27 03:10:24.000000000","message":"I did that inorder to handle the no params in the url case \n(\u0027\u0027 will translate to \nself.cfg.base_url + \u0027/queues/claimtestqueue/claims AND\n\u0027?limit\u003d2\u0027 will translate to self.cfg.base_url + \u0027/queues/claimtestqueue/claims?limit\u003d2\u0027 )","commit_id":"1e472bda4908914c5bf562d37109e1fc592361a3"},{"author":{"_account_id":7498,"name":"Malini Kamalambal","email":"malini.kamalambal@rackspace.com","username":"malini-pk"},"change_message_id":"e72ac844ea498ab598d6512a0f8d0c8195603d3d","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        self.assertEqual(result.status_code, 201)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        actual_message_count \u003d len(result.json())"},{"line_number":63,"context_line":"        self.assertMessageCount(message_count, actual_message_count)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        response_headers \u003d set(result.headers.keys())"},{"line_number":66,"context_line":"        self.assertIsSubset(self.headers_response_with_body, response_headers)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAASn%2F%2F4LE%3D","line":63,"in_reply_to":"AAAASn%2F%2F8wE%3D","updated":"2013-08-28 15:54:21.000000000","message":"the test data represent the url params.\ni.e. \u0027\u0027 --\u003e does a get with no url params\n\u0027?limit\u003d5\u0027 --\u003e does a get with params \u0027?limit\u003d5\u0027\n\nSo I would rather keep it as is for the sake of readability \u0026 ease of understanding.","commit_id":"1e472bda4908914c5bf562d37109e1fc592361a3"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"4f4c6ef05ccfc287a1637539f1aa14a2ffbc4f35","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        #Delete Claimed Messages"},{"line_number":138,"context_line":"        for url in url_list:"},{"line_number":139,"context_line":"            result \u003d http.delete(url, self.header)"},{"line_number":140,"context_line":"            self.assertEqual(result.status_code, 204)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    test_delete_claimed_message.tags \u003d [\u0027smoke\u0027, \u0027positive\u0027]"},{"line_number":143,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAASX%2F%2F0vo%3D","line":140,"updated":"2013-08-26 18:44:13.000000000","message":"Not all messages will be deleted if an exception is raised or if the status code is not 204.","commit_id":"1e472bda4908914c5bf562d37109e1fc592361a3"},{"author":{"_account_id":7498,"name":"Malini Kamalambal","email":"malini.kamalambal@rackspace.com","username":"malini-pk"},"change_message_id":"3af303dd873b6af4daed1108ef6db19d9ee7e630","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        #Delete Claimed Messages"},{"line_number":138,"context_line":"        for url in url_list:"},{"line_number":139,"context_line":"            result \u003d http.delete(url, self.header)"},{"line_number":140,"context_line":"            self.assertEqual(result.status_code, 204)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    test_delete_claimed_message.tags \u003d [\u0027smoke\u0027, \u0027positive\u0027]"},{"line_number":143,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAASn%2F%2F%2FtU%3D","line":140,"in_reply_to":"AAAASX%2F%2F0vo%3D","updated":"2013-08-27 03:10:24.000000000","message":"Here I am sending separate delete messages for each claimed message.","commit_id":"1e472bda4908914c5bf562d37109e1fc592361a3"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"4c2071154b34d9e79052c9193b180cb78cac03b5","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        #Delete Claimed Messages"},{"line_number":138,"context_line":"        for url in url_list:"},{"line_number":139,"context_line":"            result \u003d http.delete(url, self.header)"},{"line_number":140,"context_line":"            self.assertEqual(result.status_code, 204)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    test_delete_claimed_message.tags \u003d [\u0027smoke\u0027, \u0027positive\u0027]"},{"line_number":143,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAASn%2F%2F8uo%3D","line":140,"in_reply_to":"AAAASn%2F%2F%2FtU%3D","updated":"2013-08-27 16:49:51.000000000","message":"That doesn\u0027t change the deletion behavior. If an exception is encountered, say if result.status_code !\u003d 204, then execution will break out of the loop.\n\nI am okay with this behavior for the time being, I just wanted to let you know that this was the case. :)","commit_id":"1e472bda4908914c5bf562d37109e1fc592361a3"}],"marconi/tests/functional/test_messages.py":[{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"4f4c6ef05ccfc287a1637539f1aa14a2ffbc4f35","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        http.put(url, cls.header)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"        url \u003d cls.cfg.base_url + \u0027/queues/singlemessagequeue\u0027"},{"line_number":40,"context_line":"        http.put(url, cls.header)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def test_message_single_insert(self):"},{"line_number":43,"context_line":"        \"\"\"Insert Single Message into the Queue."}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAASX%2F%2F0tU%3D","line":40,"updated":"2013-08-26 18:44:13.000000000","message":"See my comments on improving setUpClass in test_claims.py. Most of those apply here, too.","commit_id":"1e472bda4908914c5bf562d37109e1fc592361a3"},{"author":{"_account_id":7498,"name":"Malini Kamalambal","email":"malini.kamalambal@rackspace.com","username":"malini-pk"},"change_message_id":"3af303dd873b6af4daed1108ef6db19d9ee7e630","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        http.put(url, cls.header)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"        url \u003d cls.cfg.base_url + \u0027/queues/singlemessagequeue\u0027"},{"line_number":40,"context_line":"        http.put(url, cls.header)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def test_message_single_insert(self):"},{"line_number":43,"context_line":"        \"\"\"Insert Single Message into the Queue."}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAASn%2F%2F%2Fsc%3D","line":40,"in_reply_to":"AAAASX%2F%2F0tU%3D","updated":"2013-08-27 03:10:24.000000000","message":"Same response as in test_claims.py.\nIf you think we need a different approach, let us discuss further in IRC","commit_id":"1e472bda4908914c5bf562d37109e1fc592361a3"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"4c2071154b34d9e79052c9193b180cb78cac03b5","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        http.put(url, cls.header)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"        url \u003d cls.cfg.base_url + \u0027/queues/singlemessagequeue\u0027"},{"line_number":40,"context_line":"        http.put(url, cls.header)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def test_message_single_insert(self):"},{"line_number":43,"context_line":"        \"\"\"Insert Single Message into the Queue."}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAASn%2F%2F8uE%3D","line":40,"in_reply_to":"AAAASn%2F%2F%2Fsc%3D","updated":"2013-08-27 16:49:51.000000000","message":"Woot, DRY responses! ;)\n\nI checked the queues in this test, too. \u0027singlemessagesqueue\u0027 (6) and \u0027messagetestqueue\u0027 (16) are used frequently. They might make good candidates for class-level variables.","commit_id":"1e472bda4908914c5bf562d37109e1fc592361a3"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"4f4c6ef05ccfc287a1637539f1aa14a2ffbc4f35","unresolved":false,"context_lines":[{"line_number":123,"context_line":"            expected_msg_count \u003d 10"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        # Test Setup"},{"line_number":126,"context_line":"        doc \u003d helpers.get_message_body(messagecount\u003d20)"},{"line_number":127,"context_line":"        url \u003d self.cfg.base_url + \u0027/queues/messagetestqueue/messages\u0027"},{"line_number":128,"context_line":"        result \u003d http.post(url, self.header, doc)"},{"line_number":129,"context_line":"        self.assertEqual(result.status_code, 201)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAASX%2F%2F0tM%3D","line":126,"updated":"2013-08-26 18:44:13.000000000","message":"See my comments on replacing url_appender in test_claims with an integer. They apply here, too.","commit_id":"1e472bda4908914c5bf562d37109e1fc592361a3"},{"author":{"_account_id":7498,"name":"Malini Kamalambal","email":"malini.kamalambal@rackspace.com","username":"malini-pk"},"change_message_id":"3af303dd873b6af4daed1108ef6db19d9ee7e630","unresolved":false,"context_lines":[{"line_number":123,"context_line":"            expected_msg_count \u003d 10"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        # Test Setup"},{"line_number":126,"context_line":"        doc \u003d helpers.get_message_body(messagecount\u003d20)"},{"line_number":127,"context_line":"        url \u003d self.cfg.base_url + \u0027/queues/messagetestqueue/messages\u0027"},{"line_number":128,"context_line":"        result \u003d http.post(url, self.header, doc)"},{"line_number":129,"context_line":"        self.assertEqual(result.status_code, 201)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAASn%2F%2F%2FsY%3D","line":126,"in_reply_to":"AAAASX%2F%2F0tM%3D","updated":"2013-08-27 03:10:24.000000000","message":"Same as in test_claims.py - this is to handle the no url appender scenario \u0027\u0027","commit_id":"1e472bda4908914c5bf562d37109e1fc592361a3"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"4f4c6ef05ccfc287a1637539f1aa14a2ffbc4f35","unresolved":false,"context_lines":[{"line_number":141,"context_line":"                self.assertMessageCount(actual_msg_count, expected_msg_count)"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"                href \u003d result.json()[\u0027links\u0027][0][\u0027href\u0027]"},{"line_number":144,"context_line":"                url \u003d self.cfg.base_server + href"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        self.assertEqual(result.status_code, 204)"},{"line_number":147,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAASX%2F%2F0sc%3D","line":144,"updated":"2013-08-26 18:44:13.000000000","message":"Having python-marconiclient would be so cool here. Messages generator... :D","commit_id":"1e472bda4908914c5bf562d37109e1fc592361a3"},{"author":{"_account_id":7498,"name":"Malini Kamalambal","email":"malini.kamalambal@rackspace.com","username":"malini-pk"},"change_message_id":"3af303dd873b6af4daed1108ef6db19d9ee7e630","unresolved":false,"context_lines":[{"line_number":141,"context_line":"                self.assertMessageCount(actual_msg_count, expected_msg_count)"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"                href \u003d result.json()[\u0027links\u0027][0][\u0027href\u0027]"},{"line_number":144,"context_line":"                url \u003d self.cfg.base_server + href"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        self.assertEqual(result.status_code, 204)"},{"line_number":147,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAASn%2F%2F%2Fr4%3D","line":144,"in_reply_to":"AAAASX%2F%2F0sc%3D","updated":"2013-08-27 03:10:24.000000000","message":"While python-marconiclient will make things easier, I am for keeping the core API testing separate from the client . That being said, the client needs separate tests too. There was a discussion in openstack-dev on this. I\u0027ll dig up that email chain for you.","commit_id":"1e472bda4908914c5bf562d37109e1fc592361a3"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"4c2071154b34d9e79052c9193b180cb78cac03b5","unresolved":false,"context_lines":[{"line_number":141,"context_line":"                self.assertMessageCount(actual_msg_count, expected_msg_count)"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"                href \u003d result.json()[\u0027links\u0027][0][\u0027href\u0027]"},{"line_number":144,"context_line":"                url \u003d self.cfg.base_server + href"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        self.assertEqual(result.status_code, 204)"},{"line_number":147,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAASn%2F%2F8t4%3D","line":144,"in_reply_to":"AAAASn%2F%2F%2Fr4%3D","updated":"2013-08-27 16:49:51.000000000","message":"Thanks!","commit_id":"1e472bda4908914c5bf562d37109e1fc592361a3"}],"marconi/tests/functional/test_queue.py":[{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"4f4c6ef05ccfc287a1637539f1aa14a2ffbc4f35","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        http.put(url, cls.header)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        url \u003d cls.cfg.base_url + \u0027/queues/nonASCIImetadata\u0027"},{"line_number":46,"context_line":"        http.put(url, cls.header)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    @ddt.data(\u0027qtestqueue\u0027, \u0027TESTqueue\u0027, \u0027hyphen-name\u0027, \u0027_undersore\u0027,"},{"line_number":49,"context_line":"              \u0027i\u0027 * 64)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAASX%2F%2F0sM%3D","line":46,"updated":"2013-08-26 18:44:13.000000000","message":"As with test_claims and test_messages, there\u0027s a few improvements that can be made here regarding the use of class-level vs. local variables.\n\nRegarding the queue urls, you can store three class-level queue variables to avoid having to write those out in each test: self.queue_url, self.toplevel_queue_url, self.bad_queue_url.","commit_id":"1e472bda4908914c5bf562d37109e1fc592361a3"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"4f4c6ef05ccfc287a1637539f1aa14a2ffbc4f35","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        http.put(url, cls.header)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    @ddt.data(\u0027qtestqueue\u0027, \u0027TESTqueue\u0027, \u0027hyphen-name\u0027, \u0027_undersore\u0027,"},{"line_number":49,"context_line":"              \u0027i\u0027 * 64)"},{"line_number":50,"context_line":"    def test_insert_queue(self, queue_name):"},{"line_number":51,"context_line":"        \"\"\"Create Queue.\"\"\""},{"line_number":52,"context_line":"        url \u003d self.cfg.base_url + \u0027/queues/\u0027 + queue_name"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAASX%2F%2F0sI%3D","line":49,"updated":"2013-08-26 18:44:13.000000000","message":"+1","commit_id":"1e472bda4908914c5bf562d37109e1fc592361a3"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"4f4c6ef05ccfc287a1637539f1aa14a2ffbc4f35","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    test_insert_queue.tags \u003d [\u0027positive\u0027, \u0027smoke\u0027]"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    @ddt.data(\u0027汉字漢字\u0027, \u0027@$@^qw\u0027, \u0027i\u0027 * 65)"},{"line_number":68,"context_line":"    def test_insert_queue_invalid_name(self, queue_name):"},{"line_number":69,"context_line":"        \"\"\"Create Queue.\"\"\""},{"line_number":70,"context_line":"        url \u003d self.cfg.base_url + \u0027/queues/\u0027 + queue_name"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAASX%2F%2F0r4%3D","line":67,"updated":"2013-08-26 18:44:13.000000000","message":"+1","commit_id":"1e472bda4908914c5bf562d37109e1fc592361a3"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"4f4c6ef05ccfc287a1637539f1aa14a2ffbc4f35","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        self.assertEqual(result.status_code, 200)"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"        response_keys_actual \u003d result.json()[\u0027queues\u0027][0].keys()"},{"line_number":183,"context_line":"        response_keys_actual.sort()"},{"line_number":184,"context_line":"        response_keys_expected \u003d [\u0027href\u0027, \u0027metadata\u0027, \u0027name\u0027]"},{"line_number":185,"context_line":"        self.assertEqual(response_keys_actual, response_keys_expected)"},{"line_number":186,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAASX%2F%2F0rk%3D","line":183,"updated":"2013-08-26 18:44:13.000000000","message":"It\u0027s more pythonic to do:\n\nresponse_keys_actual \u003d sorted(result.json()[\u0027queues\u0027][0].keys())\n\nIt avoids the extra assignment.","commit_id":"1e472bda4908914c5bf562d37109e1fc592361a3"},{"author":{"_account_id":7498,"name":"Malini Kamalambal","email":"malini.kamalambal@rackspace.com","username":"malini-pk"},"change_message_id":"3af303dd873b6af4daed1108ef6db19d9ee7e630","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        self.assertEqual(result.status_code, 200)"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"        response_keys_actual \u003d result.json()[\u0027queues\u0027][0].keys()"},{"line_number":183,"context_line":"        response_keys_actual.sort()"},{"line_number":184,"context_line":"        response_keys_expected \u003d [\u0027href\u0027, \u0027metadata\u0027, \u0027name\u0027]"},{"line_number":185,"context_line":"        self.assertEqual(response_keys_actual, response_keys_expected)"},{"line_number":186,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAASn%2F%2F%2Frs%3D","line":183,"in_reply_to":"AAAASX%2F%2F0rk%3D","updated":"2013-08-27 03:10:24.000000000","message":"Will fix that","commit_id":"1e472bda4908914c5bf562d37109e1fc592361a3"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"4f4c6ef05ccfc287a1637539f1aa14a2ffbc4f35","unresolved":false,"context_lines":[{"line_number":249,"context_line":""},{"line_number":250,"context_line":"        for queue in queue_list:"},{"line_number":251,"context_line":"            url \u003d cls.cfg.base_url + \u0027/queues/\u0027 + queue"},{"line_number":252,"context_line":"            http.delete(url, cls.header)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAASX%2F%2F0q0%3D","line":252,"updated":"2013-08-26 18:44:13.000000000","message":"Using a queue-creating context manager would avoid having to maintain a list of queues to delete at the end of the test. I don\u0027t mind if this isn\u0027t addressed in this patch, but whenever you want to guarantee that a resource acquired is released, use a context manager.\n\nSee: https://github.com/cabrera/marconi/blob/fix_system_tests/marconi/tests/system/common/utils.py#L22","commit_id":"1e472bda4908914c5bf562d37109e1fc592361a3"},{"author":{"_account_id":7498,"name":"Malini Kamalambal","email":"malini.kamalambal@rackspace.com","username":"malini-pk"},"change_message_id":"3af303dd873b6af4daed1108ef6db19d9ee7e630","unresolved":false,"context_lines":[{"line_number":249,"context_line":""},{"line_number":250,"context_line":"        for queue in queue_list:"},{"line_number":251,"context_line":"            url \u003d cls.cfg.base_url + \u0027/queues/\u0027 + queue"},{"line_number":252,"context_line":"            http.delete(url, cls.header)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAASn%2F%2F%2FrE%3D","line":252,"in_reply_to":"AAAASX%2F%2F0q0%3D","updated":"2013-08-27 03:10:24.000000000","message":"Will look into that in a future patch. For now, I am adding it to the blueprint","commit_id":"1e472bda4908914c5bf562d37109e1fc592361a3"},{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"53a09ba2e9b00779fc462f171daa60eed839eb59","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    \"\"\"Tests for queue.\"\"\""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    @classmethod"},{"line_number":31,"context_line":"    def setUpClass(cls):"},{"line_number":32,"context_line":"        cls.cfg \u003d config.Config()"},{"line_number":33,"context_line":"        cls.header \u003d helpers.create_marconi_headers()"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAASn%2F%2FzXE%3D","line":31,"updated":"2013-08-29 11:29:13.000000000","message":"can you use the setUp method instead?","commit_id":"d14b5d3613ca3a31307a9b29c43a4af82ed2dbdd"},{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"53a09ba2e9b00779fc462f171daa60eed839eb59","unresolved":false,"context_lines":[{"line_number":240,"context_line":"    test_get_queue_malformed_marker.tags \u003d [\u0027negative\u0027]"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"    @classmethod"},{"line_number":243,"context_line":"    def tearDownClass(cls):"},{"line_number":244,"context_line":"        \"\"\"Delete Queue.\"\"\""},{"line_number":245,"context_line":"        queue_list \u003d [\u0027qtestqueue\u0027, \u0027testqueue\u0027, \u0027TESTqueue\u0027,"},{"line_number":246,"context_line":"                      \u0027hyphen-name\u0027, \u0027_undersore\u0027, \u0027i\u0027 * 64,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAASn%2F%2FzXI%3D","line":243,"updated":"2013-08-29 11:29:13.000000000","message":"Can you do this in the tearDown method instead?","commit_id":"d14b5d3613ca3a31307a9b29c43a4af82ed2dbdd"}],"marconi/tests/functional/util/__init__.py":[{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"53a09ba2e9b00779fc462f171daa60eed839eb59","unresolved":false,"context_lines":[{"line_number":13,"context_line":"# See the License for the specific language governing permissions and"},{"line_number":14,"context_line":"# limitations under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"\"\"\"Functional Test Utilities\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAASn%2F%2FzlE%3D","line":16,"updated":"2013-08-29 11:29:13.000000000","message":"I don\u0027t think we need this package. What do you think about moving base.py out of it and put it in tests/functional/ ?\n\nWe should probably do the same w/ the tests base, but I\u0027ll do that in a separate patch.","commit_id":"d14b5d3613ca3a31307a9b29c43a4af82ed2dbdd"}],"marconi/tests/functional/util/base.py":[{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"53a09ba2e9b00779fc462f171daa60eed839eb59","unresolved":false,"context_lines":[{"line_number":15,"context_line":"import testtools"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"class FunctionalTestBase(testtools.TestCase):"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"    def assertIsSubset(self, required_values, actual_values):"},{"line_number":21,"context_line":"        \"\"\"Checks if a list is subset of another."}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAASn%2F%2FzlI%3D","line":18,"updated":"2013-08-29 11:29:13.000000000","message":"Pls, read my comment in the config.py module :)","commit_id":"d14b5d3613ca3a31307a9b29c43a4af82ed2dbdd"}],"marconi/tests/functional/util/config.py":[{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"53a09ba2e9b00779fc462f171daa60eed839eb59","unresolved":false,"context_lines":[{"line_number":18,"context_line":"import uuid"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class Config(object):"},{"line_number":22,"context_line":"    def __init__(self, config_path\u003dNone):"},{"line_number":23,"context_line":"        if config_path is None:"},{"line_number":24,"context_line":"            if os.path.exists(\u0027/etc/marconi/functional-tests.conf\u0027):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAASn%2F%2FzlQ%3D","line":21,"updated":"2013-08-29 11:29:13.000000000","message":"I don\u0027t think we need this class anymore. What do you think about deprecating it and making the base class inherit from https://github.com/stackforge/marconi/blob/master/marconi/tests/util/base.py ?\n\nYou\u0027ll then be able to access config parameters as everywhere else in Marconi.","commit_id":"d14b5d3613ca3a31307a9b29c43a4af82ed2dbdd"},{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"53a09ba2e9b00779fc462f171daa60eed839eb59","unresolved":false,"context_lines":[{"line_number":21,"context_line":"class Config(object):"},{"line_number":22,"context_line":"    def __init__(self, config_path\u003dNone):"},{"line_number":23,"context_line":"        if config_path is None:"},{"line_number":24,"context_line":"            if os.path.exists(\u0027/etc/marconi/functional-tests.conf\u0027):"},{"line_number":25,"context_line":"                config_path \u003d \u0027/etc/marconi/functional-tests.conf\u0027"},{"line_number":26,"context_line":"            else:"},{"line_number":27,"context_line":"                config_path \u003d os.path.expanduser(\u0027~/.marconi\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAASn%2F%2FzWc%3D","line":24,"updated":"2013-08-29 11:29:13.000000000","message":"If you do the above, oslo.config will take care of this.","commit_id":"d14b5d3613ca3a31307a9b29c43a4af82ed2dbdd"}],"marconi/tests/functional/util/helpers.py":[{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"4f4c6ef05ccfc287a1637539f1aa14a2ffbc4f35","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    headers[\u0027User-Agent\u0027] \u003d CFG.user_agent"},{"line_number":64,"context_line":"    headers[\u0027X-Project-ID\u0027] \u003d CFG.project_id"},{"line_number":65,"context_line":"    headers[\u0027X-Auth-Token\u0027] \u003d auth_token"},{"line_number":66,"context_line":"    headers[\u0027Client-ID\u0027] \u003d CFG.uuid"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    return headers"},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAASX%2F%2F0qM%3D","line":66,"updated":"2013-08-26 18:44:13.000000000","message":"You can simplify this by merging the assignments (headers[key] \u003d cfg.X) and the dictionary definition. For example:\n\nheaders \u003d {\u0027Host\u0027: CFG.host, \u0027User-Agent\u0027: CFG.user_agent, \u0027x-project-id\u0027: CFG.project_id, ...}","commit_id":"1e472bda4908914c5bf562d37109e1fc592361a3"},{"author":{"_account_id":7498,"name":"Malini Kamalambal","email":"malini.kamalambal@rackspace.com","username":"malini-pk"},"change_message_id":"3af303dd873b6af4daed1108ef6db19d9ee7e630","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    headers[\u0027User-Agent\u0027] \u003d CFG.user_agent"},{"line_number":64,"context_line":"    headers[\u0027X-Project-ID\u0027] \u003d CFG.project_id"},{"line_number":65,"context_line":"    headers[\u0027X-Auth-Token\u0027] \u003d auth_token"},{"line_number":66,"context_line":"    headers[\u0027Client-ID\u0027] \u003d CFG.uuid"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    return headers"},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAASn%2F%2F%2Fqg%3D","line":66,"in_reply_to":"AAAASX%2F%2F0qM%3D","updated":"2013-08-27 03:10:24.000000000","message":"Good Catch! This is some CRUFT , from when it used to be a string..Will fix that.","commit_id":"1e472bda4908914c5bf562d37109e1fc592361a3"},{"author":{"_account_id":6943,"name":"Zhihao Yuan","email":"zhihao.yuan@rackspace.com","username":"zyuan"},"change_message_id":"101ad978ed18ca76e6827ca9bb42b60217911a9c","unresolved":false,"context_lines":[{"line_number":102,"context_line":"    else:"},{"line_number":103,"context_line":"        body \u003d generate_dict(2)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    if \u0027ttl\u0027 in kwargs.keys():"},{"line_number":106,"context_line":"        ttl \u003d kwargs[\u0027ttl\u0027]"},{"line_number":107,"context_line":"    else:"},{"line_number":108,"context_line":"        ttl \u003d valid_ttl"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAASX%2F%2F6zA%3D","line":105,"updated":"2013-08-23 18:51:25.000000000","message":"You don\u0027t need .keys()","commit_id":"1e472bda4908914c5bf562d37109e1fc592361a3"},{"author":{"_account_id":7498,"name":"Malini Kamalambal","email":"malini.kamalambal@rackspace.com","username":"malini-pk"},"change_message_id":"3af303dd873b6af4daed1108ef6db19d9ee7e630","unresolved":false,"context_lines":[{"line_number":102,"context_line":"    else:"},{"line_number":103,"context_line":"        body \u003d generate_dict(2)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    if \u0027ttl\u0027 in kwargs.keys():"},{"line_number":106,"context_line":"        ttl \u003d kwargs[\u0027ttl\u0027]"},{"line_number":107,"context_line":"    else:"},{"line_number":108,"context_line":"        ttl \u003d valid_ttl"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAASn%2F%2F%2Fqc%3D","line":105,"in_reply_to":"AAAASX%2F%2F6zA%3D","updated":"2013-08-27 03:10:24.000000000","message":"Thanks!! Will fix that.","commit_id":"1e472bda4908914c5bf562d37109e1fc592361a3"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"4f4c6ef05ccfc287a1637539f1aa14a2ffbc4f35","unresolved":false,"context_lines":[{"line_number":120,"context_line":"    multiple_message_body \u003d []"},{"line_number":121,"context_line":"    for i in range(message_count):"},{"line_number":122,"context_line":"        message_body \u003d single_message_body(**kwargs)"},{"line_number":123,"context_line":"        multiple_message_body.append(message_body)"},{"line_number":124,"context_line":"    return multiple_message_body"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAASX%2F%2F0qE%3D","line":123,"updated":"2013-08-26 18:44:13.000000000","message":"This can be simplified using a list comprehension:\n\nreturn [single_message_body(**kwargs) for i in range(message_count)]","commit_id":"1e472bda4908914c5bf562d37109e1fc592361a3"},{"author":{"_account_id":7498,"name":"Malini Kamalambal","email":"malini.kamalambal@rackspace.com","username":"malini-pk"},"change_message_id":"3af303dd873b6af4daed1108ef6db19d9ee7e630","unresolved":false,"context_lines":[{"line_number":120,"context_line":"    multiple_message_body \u003d []"},{"line_number":121,"context_line":"    for i in range(message_count):"},{"line_number":122,"context_line":"        message_body \u003d single_message_body(**kwargs)"},{"line_number":123,"context_line":"        multiple_message_body.append(message_body)"},{"line_number":124,"context_line":"    return multiple_message_body"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAASn%2F%2F%2FnA%3D","line":123,"in_reply_to":"AAAASX%2F%2F0qE%3D","updated":"2013-08-27 03:10:24.000000000","message":"Will fix that","commit_id":"1e472bda4908914c5bf562d37109e1fc592361a3"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"7f4fa113209a047e3a8c2ef01a96be7bb3501f5a","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        key \u003d generate_random_string()"},{"line_number":72,"context_line":"        value \u003d generate_random_string()"},{"line_number":73,"context_line":"        dict[key] \u003d value"},{"line_number":74,"context_line":"    return dict"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"def generate_random_string(length\u003d10):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAASn%2F%2F8ss%3D","line":74,"updated":"2013-08-27 16:50:04.000000000","message":"I was thinking of comprehensions and this one can be simplified, too.\n\nreturn dict([(generate_random_string(), generate_random_string()) for _ in range(dict_length)])","commit_id":"e248fbeb9e2851fba65b32f761cec322b21f360f"}]}
