)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"524b3c316b8f3fd3e6cff78d7596d5e1ed12d8c9","unresolved":false,"context_lines":[{"line_number":10,"context_line":"Adds waiter to DeletableFloatingIP"},{"line_number":11,"context_line":"Adds Network resource error to exceptions"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Partially-implements: bp:tempest-client-scenarios"},{"line_number":14,"context_line":"Partially Implements: blueprint fip-op-status"},{"line_number":15,"context_line":"Partially Implements: blueprint neutron-advanced-scenarios"},{"line_number":16,"context_line":"Verifies FloatingIP changes status correctly on association and dis-association"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"fa98f980_bb84f0d4","line":13,"updated":"2014-09-02 02:30:49.000000000","message":"Is this patch really a part of bp:tempest-client-scenarios?\nIf so, I think you should split patches.","commit_id":"5b27c1c49a6572b3128e03704d393390912ee483"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"a400cc4bdbd4f1a0f2752667cc3277d95fa2edc1","unresolved":false,"context_lines":[{"line_number":10,"context_line":"Adds waiter to DeletableFloatingIP"},{"line_number":11,"context_line":"Adds Network resource error to exceptions"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Partially-implements: bp:tempest-client-scenarios"},{"line_number":14,"context_line":"Partially Implements: blueprint fip-op-status"},{"line_number":15,"context_line":"Partially Implements: blueprint neutron-advanced-scenarios"},{"line_number":16,"context_line":"Verifies FloatingIP changes status correctly on association and dis-association"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"fa98f980_b277aa3a","line":13,"in_reply_to":"fa98f980_bb84f0d4","updated":"2014-09-02 05:47:15.000000000","message":"Not sure if it is really part of it. it\u0027s based on a migrated change, but maybe you\u0027re right. I\u0027ll remove that flag","commit_id":"5b27c1c49a6572b3128e03704d393390912ee483"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"a106b76dca62f1d0ae3b0a5f0075d51038c4865d","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Adds network waiter to waiters module"},{"line_number":10,"context_line":"Adds waiter to DeletableFloatingIP"},{"line_number":11,"context_line":"Adds Network resource error to exceptions"},{"line_number":12,"context_line":"Verifies FloatingIP changes status correctly on association and dis-association"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Partially Implements: blueprint fip-op-status"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":23,"id":"fa98f980_a5d8b453","line":11,"updated":"2014-09-15 13:54:48.000000000","message":"You need to explain what and why on these items. Just listing what was done in the commit message isn\u0027t useful in this case because it\u0027s non-obvious why any of these are being done. An explanation of the rationale behind these additions will make things more clear to reviewers and when looking at the commit log.","commit_id":"0512035e5a3a8f0901ebce06d158d1d3021c9a5c"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"a106b76dca62f1d0ae3b0a5f0075d51038c4865d","unresolved":false,"context_lines":[{"line_number":11,"context_line":"Adds Network resource error to exceptions"},{"line_number":12,"context_line":"Verifies FloatingIP changes status correctly on association and dis-association"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Partially Implements: blueprint fip-op-status"},{"line_number":15,"context_line":"Partially Implements: blueprint neutron-advanced-scenarios"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: Ibd45f3092cebc8f9fd0d16a3a543c2ef72156409"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":23,"id":"fa98f980_a5eef41f","line":14,"updated":"2014-09-15 13:54:48.000000000","message":"I can\u0027t find an open bp with this name","commit_id":"0512035e5a3a8f0901ebce06d158d1d3021c9a5c"}],"tempest/common/waiters.py":[{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"e0fe264cbf9b6bdd1013fa6e1422cba135783419","unresolved":false,"context_lines":[{"line_number":138,"context_line":"    \"\"\"Waits for an resource to reach a given status."},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    The client should have a get_image(image_id) method to get the resource."},{"line_number":141,"context_line":"    The client should also have build_interval and build_timeout attributes."},{"line_number":142,"context_line":"    \"\"\""},{"line_number":143,"context_line":"    interval \u003d interval or CONF.compute.build_interval"},{"line_number":144,"context_line":"    timeout \u003d timeout or CONF.compute.build_timeout"}],"source_content_type":"text/x-python","patch_set":9,"id":"7ac7a964_cd2aed2b","line":141,"updated":"2014-08-15 08:09:59.000000000","message":"copy \u0026 paste gone wrong?","commit_id":"5147d34d655925ef203c0d9b219cba4dcdc2db0c"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"c930676b3ba1001b3c5ca9eecae8bbcaed55b0c3","unresolved":false,"context_lines":[{"line_number":138,"context_line":"    \"\"\"Waits for an resource to reach a given status."},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    The client should have a get_image(image_id) method to get the resource."},{"line_number":141,"context_line":"    The client should also have build_interval and build_timeout attributes."},{"line_number":142,"context_line":"    \"\"\""},{"line_number":143,"context_line":"    interval \u003d interval or CONF.compute.build_interval"},{"line_number":144,"context_line":"    timeout \u003d timeout or CONF.compute.build_timeout"}],"source_content_type":"text/x-python","patch_set":9,"id":"7ac7a964_c521e1a0","line":141,"in_reply_to":"7ac7a964_cd2aed2b","updated":"2014-08-15 09:17:07.000000000","message":"yeah","commit_id":"5147d34d655925ef203c0d9b219cba4dcdc2db0c"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"e0fe264cbf9b6bdd1013fa6e1422cba135783419","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        # the timeout at the same time that the resource reached the expected"},{"line_number":157,"context_line":"        # status"},{"line_number":158,"context_line":"        if resource[\u0027status\u0027] \u003d\u003d status:"},{"line_number":159,"context_line":"            return"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        if int(time.time()) - start \u003e\u003d timeout:"},{"line_number":162,"context_line":"            message \u003d (\u0027Network resource %(resource)s failed to reach %(\u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"7ac7a964_6d89d925","line":159,"updated":"2014-08-15 08:09:59.000000000","message":"don\u0027t bother about this comment as you\u0027ve just copied what others have done - however I think this check makes the one one while statement not necessary. There you could have just a while true condition as anyway the code is built in a way that loop can\u0027t possibly become infinite.","commit_id":"5147d34d655925ef203c0d9b219cba4dcdc2db0c"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"c930676b3ba1001b3c5ca9eecae8bbcaed55b0c3","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        # the timeout at the same time that the resource reached the expected"},{"line_number":157,"context_line":"        # status"},{"line_number":158,"context_line":"        if resource[\u0027status\u0027] \u003d\u003d status:"},{"line_number":159,"context_line":"            return"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        if int(time.time()) - start \u003e\u003d timeout:"},{"line_number":162,"context_line":"            message \u003d (\u0027Network resource %(resource)s failed to reach %(\u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"7ac7a964_9362d6ab","line":159,"in_reply_to":"7ac7a964_6d89d925","updated":"2014-08-15 09:17:07.000000000","message":"I believe the condition is meant to cover the option where the status is already achieved prior to the loop. so we avoid the first wait","commit_id":"5147d34d655925ef203c0d9b219cba4dcdc2db0c"},{"author":{"_account_id":1192,"name":"David Kranz","email":"dkranz@redhat.com","username":"david-kranz"},"change_message_id":"482d07b4fe4eb861924dcc300513284a535b8946","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        ERROR state"},{"line_number":144,"context_line":"    \"\"\""},{"line_number":145,"context_line":"    interval \u003d interval or CONF.network.build_interval"},{"line_number":146,"context_line":"    timeout \u003d timeout or CONF.network.build_timeout"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    resource \u003d fetch()"},{"line_number":149,"context_line":"    start \u003d int(time.time())"}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_dd30ffa0","line":146,"updated":"2014-08-25 18:44:36.000000000","message":"Due to the python \"feature\" where 0 is interpreted as conditional False, we should not use this idiom to test whether an integer parameter was provided. The way this is now you cannot pass 0, for example.","commit_id":"c320522fd0e16842b0c563a88fac547dfa5e51c1"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"10223446f3cfad74d45e09583c4cb67f8b7ba508","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        ERROR state"},{"line_number":144,"context_line":"    \"\"\""},{"line_number":145,"context_line":"    interval \u003d interval or CONF.network.build_interval"},{"line_number":146,"context_line":"    timeout \u003d timeout or CONF.network.build_timeout"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    resource \u003d fetch()"},{"line_number":149,"context_line":"    start \u003d int(time.time())"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa98f980_078fa4cd","line":146,"in_reply_to":"1abeadc6_dd30ffa0","updated":"2014-09-07 09:20:20.000000000","message":"Done","commit_id":"c320522fd0e16842b0c563a88fac547dfa5e51c1"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"24cccc2a2636e3331cc707831f6bb725f9d10302","unresolved":false,"context_lines":[{"line_number":146,"context_line":"    timeout \u003d timeout or CONF.network.build_timeout"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    resource \u003d fetch()"},{"line_number":149,"context_line":"    start \u003d int(time.time())"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    while resource[\u0027status\u0027] !\u003d status:"},{"line_number":152,"context_line":"        time.sleep(interval)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_68781df9","line":149,"updated":"2014-08-27 11:49:50.000000000","message":"There\u0027s no real need to convert time.time() to int (can compare int and float). Same for L163.","commit_id":"c320522fd0e16842b0c563a88fac547dfa5e51c1"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"10223446f3cfad74d45e09583c4cb67f8b7ba508","unresolved":false,"context_lines":[{"line_number":146,"context_line":"    timeout \u003d timeout or CONF.network.build_timeout"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    resource \u003d fetch()"},{"line_number":149,"context_line":"    start \u003d int(time.time())"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    while resource[\u0027status\u0027] !\u003d status:"},{"line_number":152,"context_line":"        time.sleep(interval)"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa98f980_873f14d6","line":149,"in_reply_to":"1abeadc6_68781df9","updated":"2014-09-07 09:20:20.000000000","message":"Done","commit_id":"c320522fd0e16842b0c563a88fac547dfa5e51c1"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"24cccc2a2636e3331cc707831f6bb725f9d10302","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        time.sleep(interval)"},{"line_number":153,"context_line":"        resource \u003d fetch()"},{"line_number":154,"context_line":"        if resource[\u0027status\u0027] \u003d\u003d \u0027ERROR\u0027:"},{"line_number":155,"context_line":"            raise exception_on_error(resource[\u0027id\u0027])"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        # check the status again to avoid a false negative where we hit"},{"line_number":158,"context_line":"        # the timeout at the same time that the resource reached the expected"}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_5772be7c","line":155,"updated":"2014-08-27 11:49:50.000000000","message":"I\u0027m having a hard time understanding this line. in resource.py L138 you initialize exception_on_error (there it is called \"error_exception\") to be exceptions.NetworkResourceErrorException(self) - which is an initialized instance of some exception class, but here you\u0027re trying to initialize it again, ie:\n\n raise exceptions.NetworkResourceErrorException(self)(resource[\u0027id\u0027]).\n\nIf I\u0027m not mistaken, than this line should fail.","commit_id":"c320522fd0e16842b0c563a88fac547dfa5e51c1"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"10223446f3cfad74d45e09583c4cb67f8b7ba508","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        time.sleep(interval)"},{"line_number":153,"context_line":"        resource \u003d fetch()"},{"line_number":154,"context_line":"        if resource[\u0027status\u0027] \u003d\u003d \u0027ERROR\u0027:"},{"line_number":155,"context_line":"            raise exception_on_error(resource[\u0027id\u0027])"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        # check the status again to avoid a false negative where we hit"},{"line_number":158,"context_line":"        # the timeout at the same time that the resource reached the expected"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa98f980_2749088f","line":155,"in_reply_to":"1abeadc6_5772be7c","updated":"2014-09-07 09:20:20.000000000","message":"fixed in later rebase","commit_id":"c320522fd0e16842b0c563a88fac547dfa5e51c1"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"fdb26de15ac7e16a2f13cc332e5345b818c0f62f","unresolved":false,"context_lines":[{"line_number":154,"context_line":"    while resource[\u0027status\u0027] !\u003d status:"},{"line_number":155,"context_line":"        time.sleep(interval)"},{"line_number":156,"context_line":"        resource \u003d fetch()"},{"line_number":157,"context_line":"        if resource[\u0027status\u0027] \u003d\u003d \u0027ERROR\u0027:"},{"line_number":158,"context_line":"            raise exceptions.NetworkResourceErrorException("},{"line_number":159,"context_line":"                resource_dict\u003dresource)"},{"line_number":160,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_c4447a1d","line":157,"updated":"2014-09-09 12:26:40.000000000","message":"The first fetch isn\u0027t checked for error status.","commit_id":"285faacd29ac78ae254f4960f3c53f587bbd76ed"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"b0728414023aebac6fb403539427349dd4d91f53","unresolved":false,"context_lines":[{"line_number":154,"context_line":"    while resource[\u0027status\u0027] !\u003d status:"},{"line_number":155,"context_line":"        time.sleep(interval)"},{"line_number":156,"context_line":"        resource \u003d fetch()"},{"line_number":157,"context_line":"        if resource[\u0027status\u0027] \u003d\u003d \u0027ERROR\u0027:"},{"line_number":158,"context_line":"            raise exceptions.NetworkResourceErrorException("},{"line_number":159,"context_line":"                resource_dict\u003dresource)"},{"line_number":160,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_60863a15","line":157,"in_reply_to":"fa98f980_c4447a1d","updated":"2014-09-10 10:40:36.000000000","message":"Done","commit_id":"285faacd29ac78ae254f4960f3c53f587bbd76ed"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"fdb26de15ac7e16a2f13cc332e5345b818c0f62f","unresolved":false,"context_lines":[{"line_number":158,"context_line":"            raise exceptions.NetworkResourceErrorException("},{"line_number":159,"context_line":"                resource_dict\u003dresource)"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        # check the status again to avoid a false negative where we hit"},{"line_number":162,"context_line":"        # the timeout at the same time that the resource reached the expected"},{"line_number":163,"context_line":"        # status"},{"line_number":164,"context_line":"        if resource[\u0027status\u0027] \u003d\u003d status:"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_245546c6","line":161,"updated":"2014-09-09 12:26:40.000000000","message":"This second check is a good indication that the wait condition should be the timer rather than the status.","commit_id":"285faacd29ac78ae254f4960f3c53f587bbd76ed"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"b0728414023aebac6fb403539427349dd4d91f53","unresolved":false,"context_lines":[{"line_number":158,"context_line":"            raise exceptions.NetworkResourceErrorException("},{"line_number":159,"context_line":"                resource_dict\u003dresource)"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        # check the status again to avoid a false negative where we hit"},{"line_number":162,"context_line":"        # the timeout at the same time that the resource reached the expected"},{"line_number":163,"context_line":"        # status"},{"line_number":164,"context_line":"        if resource[\u0027status\u0027] \u003d\u003d status:"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_409a1664","line":161,"in_reply_to":"fa98f980_245546c6","updated":"2014-09-10 10:40:36.000000000","message":"Done","commit_id":"285faacd29ac78ae254f4960f3c53f587bbd76ed"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"fdb26de15ac7e16a2f13cc332e5345b818c0f62f","unresolved":false,"context_lines":[{"line_number":171,"context_line":"                       {\u0027resource\u0027: resource,"},{"line_number":172,"context_line":"                        \u0027status\u0027: status,"},{"line_number":173,"context_line":"                        \u0027timeout\u0027: timeout})"},{"line_number":174,"context_line":"            message +\u003d \u0027 Current status: %s.\u0027 % resource[\u0027status\u0027]"},{"line_number":175,"context_line":"            caller \u003d misc_utils.find_test_caller()"},{"line_number":176,"context_line":"            if caller:"},{"line_number":177,"context_line":"                message \u003d \u0027(%s) %s\u0027 % (caller, message)"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_4467aab7","line":174,"updated":"2014-09-09 12:26:40.000000000","message":"It makes no sense to template the first part of the message and then concatenate this part.  Pick one way to compose the message.","commit_id":"285faacd29ac78ae254f4960f3c53f587bbd76ed"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"b0728414023aebac6fb403539427349dd4d91f53","unresolved":false,"context_lines":[{"line_number":171,"context_line":"                       {\u0027resource\u0027: resource,"},{"line_number":172,"context_line":"                        \u0027status\u0027: status,"},{"line_number":173,"context_line":"                        \u0027timeout\u0027: timeout})"},{"line_number":174,"context_line":"            message +\u003d \u0027 Current status: %s.\u0027 % resource[\u0027status\u0027]"},{"line_number":175,"context_line":"            caller \u003d misc_utils.find_test_caller()"},{"line_number":176,"context_line":"            if caller:"},{"line_number":177,"context_line":"                message \u003d \u0027(%s) %s\u0027 % (caller, message)"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_40ff7667","line":174,"in_reply_to":"fa98f980_4467aab7","updated":"2014-09-10 10:40:36.000000000","message":"Done","commit_id":"285faacd29ac78ae254f4960f3c53f587bbd76ed"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"fdb26de15ac7e16a2f13cc332e5345b818c0f62f","unresolved":false,"context_lines":[{"line_number":172,"context_line":"                        \u0027status\u0027: status,"},{"line_number":173,"context_line":"                        \u0027timeout\u0027: timeout})"},{"line_number":174,"context_line":"            message +\u003d \u0027 Current status: %s.\u0027 % resource[\u0027status\u0027]"},{"line_number":175,"context_line":"            caller \u003d misc_utils.find_test_caller()"},{"line_number":176,"context_line":"            if caller:"},{"line_number":177,"context_line":"                message \u003d \u0027(%s) %s\u0027 % (caller, message)"},{"line_number":178,"context_line":"            raise exceptions.TimeoutException(message)"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_240386b9","line":175,"updated":"2014-09-09 12:26:40.000000000","message":"This pattern of prepending the caller is just crying out for a helper method.","commit_id":"285faacd29ac78ae254f4960f3c53f587bbd76ed"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"4e8e0cbd7d5fc5ad2a6c13de7f8ff0afd41260ac","unresolved":false,"context_lines":[{"line_number":172,"context_line":"                        \u0027status\u0027: status,"},{"line_number":173,"context_line":"                        \u0027timeout\u0027: timeout})"},{"line_number":174,"context_line":"            message +\u003d \u0027 Current status: %s.\u0027 % resource[\u0027status\u0027]"},{"line_number":175,"context_line":"            caller \u003d misc_utils.find_test_caller()"},{"line_number":176,"context_line":"            if caller:"},{"line_number":177,"context_line":"                message \u003d \u0027(%s) %s\u0027 % (caller, message)"},{"line_number":178,"context_line":"            raise exceptions.TimeoutException(message)"}],"source_content_type":"text/x-python","patch_set":21,"id":"da9df570_e400b2ac","line":175,"in_reply_to":"fa98f980_2008b290","updated":"2014-09-23 02:33:07.000000000","message":"This is the 3rd place in this module that the caller is appended to the message.  It also appears on lines 94 and 130.  This could be factored out, e.g.\n\ndef set_caller(message):\n  caller \u003d misc_utils.find_test_caller()\n  if caller:\n     message \u003d ...\n  return message\n\nmessage \u003d set_caller(message)","commit_id":"285faacd29ac78ae254f4960f3c53f587bbd76ed"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"b0728414023aebac6fb403539427349dd4d91f53","unresolved":false,"context_lines":[{"line_number":172,"context_line":"                        \u0027status\u0027: status,"},{"line_number":173,"context_line":"                        \u0027timeout\u0027: timeout})"},{"line_number":174,"context_line":"            message +\u003d \u0027 Current status: %s.\u0027 % resource[\u0027status\u0027]"},{"line_number":175,"context_line":"            caller \u003d misc_utils.find_test_caller()"},{"line_number":176,"context_line":"            if caller:"},{"line_number":177,"context_line":"                message \u003d \u0027(%s) %s\u0027 % (caller, message)"},{"line_number":178,"context_line":"            raise exceptions.TimeoutException(message)"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_2008b290","line":175,"in_reply_to":"fa98f980_240386b9","updated":"2014-09-10 10:40:36.000000000","message":"could you please elaborate on that?","commit_id":"285faacd29ac78ae254f4960f3c53f587bbd76ed"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"8d544d8906cafcfe62a786fa1a25434e5abfcd6f","unresolved":false,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":"def wait_for_network_resource_status(fetch, status,"},{"line_number":137,"context_line":"                                     interval\u003dNone, timeout\u003dNone):"},{"line_number":138,"context_line":"    \"\"\"Waits for an resource to reach a given status."},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    @fetch: method for retrieving the resource"},{"line_number":141,"context_line":"    @status: usually upper case"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa98f980_4d26ce17","line":138,"updated":"2014-09-10 12:13:58.000000000","message":"nit: s/an/a/g","commit_id":"14ebf26923373f109d83412d784546e07c7da0c2"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"a106b76dca62f1d0ae3b0a5f0075d51038c4865d","unresolved":false,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":"def wait_for_network_resource_status(fetch, status,"},{"line_number":137,"context_line":"                                     interval\u003dNone, timeout\u003dNone):"},{"line_number":138,"context_line":"    \"\"\"Waits for an resource to reach a given status."},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    @fetch: method for retrieving the resource"},{"line_number":141,"context_line":"    @status: usually upper case"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa98f980_4532a8f2","line":138,"updated":"2014-09-15 13:54:48.000000000","message":"John\u0027s nit from the previous rev.","commit_id":"0512035e5a3a8f0901ebce06d158d1d3021c9a5c"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"10bb03113eeff4ff43db859c94724cd5d94cb727","unresolved":false,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":"def wait_for_network_resource_status(fetch, status,"},{"line_number":137,"context_line":"                                     interval\u003dNone, timeout\u003dNone):"},{"line_number":138,"context_line":"    \"\"\"Waits for an resource to reach a given status."},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    @fetch: method for retrieving the resource"},{"line_number":141,"context_line":"    @status: usually upper case"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa98f980_f027dc60","line":138,"in_reply_to":"fa98f980_4532a8f2","updated":"2014-09-15 15:12:07.000000000","message":"Done","commit_id":"0512035e5a3a8f0901ebce06d158d1d3021c9a5c"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"a106b76dca62f1d0ae3b0a5f0075d51038c4865d","unresolved":false,"context_lines":[{"line_number":158,"context_line":"                resource_dict\u003dresource)"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        elif resource[\u0027status\u0027] \u003d\u003d status:"},{"line_number":161,"context_line":"            break"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    else:"},{"line_number":164,"context_line":"        message \u003d (\u0027Network resource {resource} failed to reach {status} \u0027"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa98f980_e558fc32","line":161,"updated":"2014-09-15 13:54:48.000000000","message":"Why not just return true?","commit_id":"0512035e5a3a8f0901ebce06d158d1d3021c9a5c"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"10bb03113eeff4ff43db859c94724cd5d94cb727","unresolved":false,"context_lines":[{"line_number":158,"context_line":"                resource_dict\u003dresource)"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        elif resource[\u0027status\u0027] \u003d\u003d status:"},{"line_number":161,"context_line":"            break"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    else:"},{"line_number":164,"context_line":"        message \u003d (\u0027Network resource {resource} failed to reach {status} \u0027"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa98f980_301de40f","line":161,"in_reply_to":"fa98f980_e558fc32","updated":"2014-09-15 15:12:07.000000000","message":"Done","commit_id":"0512035e5a3a8f0901ebce06d158d1d3021c9a5c"}],"tempest/exceptions.py":[{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"24cccc2a2636e3331cc707831f6bb725f9d10302","unresolved":false,"context_lines":[{"line_number":117,"context_line":"               \"due to \u0027%(stack_status_reason)s\u0027\")"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"class NetworkResourceErrorException(TempestException):"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    def __init__(self, resource_dict, *args, **kwargs):"},{"line_number":123,"context_line":"        self.resource_dict \u003d resource_dict"}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_57ce3e84","line":120,"updated":"2014-08-27 11:49:50.000000000","message":"\"...ErrorException\" is a bad name. Exceptions are ofcourse errors - no need to mention that twice :\u003c","commit_id":"c320522fd0e16842b0c563a88fac547dfa5e51c1"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"10223446f3cfad74d45e09583c4cb67f8b7ba508","unresolved":false,"context_lines":[{"line_number":117,"context_line":"               \"due to \u0027%(stack_status_reason)s\u0027\")"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"class NetworkResourceErrorException(TempestException):"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    def __init__(self, resource_dict, *args, **kwargs):"},{"line_number":123,"context_line":"        self.resource_dict \u003d resource_dict"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa98f980_39fe9006","line":120,"in_reply_to":"1abeadc6_57ce3e84","updated":"2014-09-07 09:20:20.000000000","message":"This is an Exception raised when \"ERROR\" status is reached.","commit_id":"c320522fd0e16842b0c563a88fac547dfa5e51c1"}],"tempest/scenario/manager.py":[{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"378454c5c0ac5536c832df4389ae564e0e13a70b","unresolved":false,"context_lines":[{"line_number":648,"context_line":"        super(NetworkScenarioTest, cls).setUpClass()"},{"line_number":649,"context_line":"        cls.tenant_id \u003d cls.manager.identity_client.tenant_id"},{"line_number":650,"context_line":""},{"line_number":651,"context_line":"    def status_timeout_neutron(self, neutron_resource,"},{"line_number":652,"context_line":"                               expected_status,"},{"line_number":653,"context_line":"                               error_status\u003d\u0027ERROR\u0027,"},{"line_number":654,"context_line":"                               timeout\u003d10,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_8b3b1e37","line":651,"updated":"2014-06-26 15:43:37.000000000","message":"Many OpenStack resources have a status, have you considered if you could reuse the status_timeout method as defined in line 179 of this file? This will help avoid duplicating code.","commit_id":"818d125da7a0bb35faf8fa3babd95ae1d2052796"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"b325bf2739c470fbb8a381523adc1aecc53522b6","unresolved":false,"context_lines":[{"line_number":648,"context_line":"        super(NetworkScenarioTest, cls).setUpClass()"},{"line_number":649,"context_line":"        cls.tenant_id \u003d cls.manager.identity_client.tenant_id"},{"line_number":650,"context_line":""},{"line_number":651,"context_line":"    def status_timeout_neutron(self, neutron_resource,"},{"line_number":652,"context_line":"                               expected_status,"},{"line_number":653,"context_line":"                               error_status\u003d\u0027ERROR\u0027,"},{"line_number":654,"context_line":"                               timeout\u003d10,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_235a2e1e","line":651,"in_reply_to":"1ae5cdf2_8b3b1e37","updated":"2014-06-26 17:32:00.000000000","message":"I was going to, but because neutron-client is \"half-baked\" there are not managers with get() method to be used, so using the existing status_timeout would require quite a bit of re-factoring. We have a patch in review that does this, so this is a short term (2day-2months - depending on review) solution, to get this patch working.\n\nhttps://review.openstack.org/#/c/62101/","commit_id":"818d125da7a0bb35faf8fa3babd95ae1d2052796"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"cca4c6388a80e91e368526b27e0783d657a1ff11","unresolved":false,"context_lines":[{"line_number":650,"context_line":""},{"line_number":651,"context_line":"    def status_timeout_neutron(self, neutron_resource,"},{"line_number":652,"context_line":"                               expected_status,"},{"line_number":653,"context_line":"                               error_status\u003d\u0027ERROR\u0027,"},{"line_number":654,"context_line":"                               timeout\u003d10,"},{"line_number":655,"context_line":"                               poll_interval\u003d1):"},{"line_number":656,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_f58d5cd5","line":653,"updated":"2014-06-26 16:51:04.000000000","message":"if you\u0027re defaulting to lowercase the use lowercase also for the default here.","commit_id":"818d125da7a0bb35faf8fa3babd95ae1d2052796"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"b325bf2739c470fbb8a381523adc1aecc53522b6","unresolved":false,"context_lines":[{"line_number":650,"context_line":""},{"line_number":651,"context_line":"    def status_timeout_neutron(self, neutron_resource,"},{"line_number":652,"context_line":"                               expected_status,"},{"line_number":653,"context_line":"                               error_status\u003d\u0027ERROR\u0027,"},{"line_number":654,"context_line":"                               timeout\u003d10,"},{"line_number":655,"context_line":"                               poll_interval\u003d1):"},{"line_number":656,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_23b14e44","line":653,"in_reply_to":"1ae5cdf2_f58d5cd5","updated":"2014-06-26 17:32:00.000000000","message":"Done","commit_id":"818d125da7a0bb35faf8fa3babd95ae1d2052796"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"cca4c6388a80e91e368526b27e0783d657a1ff11","unresolved":false,"context_lines":[{"line_number":669,"context_line":""},{"line_number":670,"context_line":"            # Some components are reporting error status in lower case"},{"line_number":671,"context_line":"            # so case sensitive comparisons can really mess things"},{"line_number":672,"context_line":"            # up."},{"line_number":673,"context_line":"            if new_status.lower() \u003d\u003d error_status.lower():"},{"line_number":674,"context_line":"                message \u003d (\"%s failed to get to expected status (%s). \""},{"line_number":675,"context_line":"                           \"In %s state.\") % (neutron_resource,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_b5003436","line":672,"updated":"2014-06-26 16:51:04.000000000","message":"uh, which ones - in doubt however convert to upper (most statuses are already upper I think)","commit_id":"818d125da7a0bb35faf8fa3babd95ae1d2052796"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"b325bf2739c470fbb8a381523adc1aecc53522b6","unresolved":false,"context_lines":[{"line_number":669,"context_line":""},{"line_number":670,"context_line":"            # Some components are reporting error status in lower case"},{"line_number":671,"context_line":"            # so case sensitive comparisons can really mess things"},{"line_number":672,"context_line":"            # up."},{"line_number":673,"context_line":"            if new_status.lower() \u003d\u003d error_status.lower():"},{"line_number":674,"context_line":"                message \u003d (\"%s failed to get to expected status (%s). \""},{"line_number":675,"context_line":"                           \"In %s state.\") % (neutron_resource,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_03b45234","line":672,"in_reply_to":"1ae5cdf2_b5003436","updated":"2014-06-26 17:32:00.000000000","message":"Done","commit_id":"818d125da7a0bb35faf8fa3babd95ae1d2052796"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"cca4c6388a80e91e368526b27e0783d657a1ff11","unresolved":false,"context_lines":[{"line_number":678,"context_line":"                raise exceptions.NeutronErrorException("},{"line_number":679,"context_line":"                    message,"},{"line_number":680,"context_line":"                    resource\u003dneutron_resource)"},{"line_number":681,"context_line":"            elif expected_status is not None and new_status \u003d\u003d expected_status:"},{"line_number":682,"context_line":"                return True  # All good."},{"line_number":683,"context_line":"            LOG.debug(\"Waiting for %s to get to %s status. \""},{"line_number":684,"context_line":"                      \"Currently in %s status\","}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_d57220e2","line":681,"updated":"2014-06-26 16:51:04.000000000","message":"I think this is one of those case where is not None is not needed... also what would this function do if expected_status is None - what would mean checking a status where it\u0027s expected to be None?","commit_id":"818d125da7a0bb35faf8fa3babd95ae1d2052796"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"b325bf2739c470fbb8a381523adc1aecc53522b6","unresolved":false,"context_lines":[{"line_number":678,"context_line":"                raise exceptions.NeutronErrorException("},{"line_number":679,"context_line":"                    message,"},{"line_number":680,"context_line":"                    resource\u003dneutron_resource)"},{"line_number":681,"context_line":"            elif expected_status is not None and new_status \u003d\u003d expected_status:"},{"line_number":682,"context_line":"                return True  # All good."},{"line_number":683,"context_line":"            LOG.debug(\"Waiting for %s to get to %s status. \""},{"line_number":684,"context_line":"                      \"Currently in %s status\","}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_8377828d","line":681,"in_reply_to":"1ae5cdf2_d57220e2","updated":"2014-06-26 17:32:00.000000000","message":"that\u0027s how the code is done in status_timeout. I think status is assumed to be a string","commit_id":"818d125da7a0bb35faf8fa3babd95ae1d2052796"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"378454c5c0ac5536c832df4389ae564e0e13a70b","unresolved":false,"context_lines":[{"line_number":800,"context_line":"                         \"Unable to determine which port to target.\")"},{"line_number":801,"context_line":"        return ports[0][\u0027id\u0027]"},{"line_number":802,"context_line":""},{"line_number":803,"context_line":"    def verifyFloatingIPStatus(self, status, floating_ip):"},{"line_number":804,"context_line":""},{"line_number":805,"context_line":"        # only implemented in Icehouse"},{"line_number":806,"context_line":"        if not hasattr(floating_ip, \u0027status\u0027):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_8bc07e7d","line":803,"updated":"2014-06-26 15:43:37.000000000","message":"is this the right naming convention? shouldn\u0027t this be:\n\nverify_floatingip_status?","commit_id":"818d125da7a0bb35faf8fa3babd95ae1d2052796"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"b325bf2739c470fbb8a381523adc1aecc53522b6","unresolved":false,"context_lines":[{"line_number":800,"context_line":"                         \"Unable to determine which port to target.\")"},{"line_number":801,"context_line":"        return ports[0][\u0027id\u0027]"},{"line_number":802,"context_line":""},{"line_number":803,"context_line":"    def verifyFloatingIPStatus(self, status, floating_ip):"},{"line_number":804,"context_line":""},{"line_number":805,"context_line":"        # only implemented in Icehouse"},{"line_number":806,"context_line":"        if not hasattr(floating_ip, \u0027status\u0027):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_23df8e67","line":803,"in_reply_to":"1ae5cdf2_8bc07e7d","updated":"2014-06-26 17:32:00.000000000","message":"Done","commit_id":"818d125da7a0bb35faf8fa3babd95ae1d2052796"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"07fea7863319105d25e3eafd0bb78f2d82785e0e","unresolved":false,"context_lines":[{"line_number":648,"context_line":"        super(NetworkScenarioTest, cls).setUpClass()"},{"line_number":649,"context_line":"        cls.tenant_id \u003d cls.manager.identity_client.tenant_id"},{"line_number":650,"context_line":""},{"line_number":651,"context_line":"    def status_timeout_neutron(self, neutron_resource,"},{"line_number":652,"context_line":"                               expected_status,"},{"line_number":653,"context_line":"                               error_status\u003d\u0027ERROR\u0027,"},{"line_number":654,"context_line":"                               timeout\u003d10,"}],"source_content_type":"text/x-python","patch_set":5,"id":"dab895d6_c114a4f7","line":651,"updated":"2014-06-30 09:56:26.000000000","message":"This introduce a lot of code duplication. I believe you can use the _status_timeout() methode instead here.","commit_id":"f66be4f4c9c8f5e2a4c6bd70b719643e86c4b7f9"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"f5dd1e65330d3057e4b5284ff8ddda0ec770c460","unresolved":false,"context_lines":[{"line_number":648,"context_line":"        super(NetworkScenarioTest, cls).setUpClass()"},{"line_number":649,"context_line":"        cls.tenant_id \u003d cls.manager.identity_client.tenant_id"},{"line_number":650,"context_line":""},{"line_number":651,"context_line":"    def status_timeout_neutron(self, neutron_resource,"},{"line_number":652,"context_line":"                               expected_status,"},{"line_number":653,"context_line":"                               error_status\u003d\u0027ERROR\u0027,"},{"line_number":654,"context_line":"                               timeout\u003d10,"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_11959e87","line":651,"in_reply_to":"dab895d6_c114a4f7","updated":"2014-07-24 15:05:22.000000000","message":"you are right. tnx","commit_id":"f66be4f4c9c8f5e2a4c6bd70b719643e86c4b7f9"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"d0c42681d314f4c9b48cee731b344d1b454b6626","unresolved":false,"context_lines":[{"line_number":483,"context_line":"        return self._admin_lister(\u0027ports\u0027)(*args, **kwargs)"},{"line_number":484,"context_line":""},{"line_number":485,"context_line":"    def _admin_lister(self, resource_type):"},{"line_number":486,"context_line":"        def temp(*args, **kwargs):"},{"line_number":487,"context_line":"            temp_method \u003d self.admin_manager.network_client.__getattr__("},{"line_number":488,"context_line":"                \u0027list_%s\u0027 % resource_type)"},{"line_number":489,"context_line":"            _, resource_list \u003d temp_method(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa98f980_845b392d","line":486,"updated":"2014-09-02 08:55:35.000000000","message":"I think that \u0027temp\u0027 is a bad name (seeing as how this code isn\u0027t really temporary)","commit_id":"7beee6237c6cc42bbb227846e23bcafe6b117281"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"e2d184df5fbe7bdc65a8a5d577f7985b93c373fe","unresolved":false,"context_lines":[{"line_number":483,"context_line":"        return self._admin_lister(\u0027ports\u0027)(*args, **kwargs)"},{"line_number":484,"context_line":""},{"line_number":485,"context_line":"    def _admin_lister(self, resource_type):"},{"line_number":486,"context_line":"        def temp(*args, **kwargs):"},{"line_number":487,"context_line":"            temp_method \u003d self.admin_manager.network_client.__getattr__("},{"line_number":488,"context_line":"                \u0027list_%s\u0027 % resource_type)"},{"line_number":489,"context_line":"            _, resource_list \u003d temp_method(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa98f980_a7009836","line":486,"in_reply_to":"fa98f980_845b392d","updated":"2014-09-07 09:19:16.000000000","message":"Done","commit_id":"7beee6237c6cc42bbb227846e23bcafe6b117281"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"d0c42681d314f4c9b48cee731b344d1b454b6626","unresolved":false,"context_lines":[{"line_number":484,"context_line":""},{"line_number":485,"context_line":"    def _admin_lister(self, resource_type):"},{"line_number":486,"context_line":"        def temp(*args, **kwargs):"},{"line_number":487,"context_line":"            temp_method \u003d self.admin_manager.network_client.__getattr__("},{"line_number":488,"context_line":"                \u0027list_%s\u0027 % resource_type)"},{"line_number":489,"context_line":"            _, resource_list \u003d temp_method(*args, **kwargs)"},{"line_number":490,"context_line":"            return resource_list[resource_type]"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa98f980_442a317f","line":487,"updated":"2014-09-02 08:55:35.000000000","message":"Why not use the following? Any specific reason?\n\n getattr(self.admin_manager.network_client, \u0027list_%s\u0027 % resource_type)","commit_id":"7beee6237c6cc42bbb227846e23bcafe6b117281"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"e2d184df5fbe7bdc65a8a5d577f7985b93c373fe","unresolved":false,"context_lines":[{"line_number":484,"context_line":""},{"line_number":485,"context_line":"    def _admin_lister(self, resource_type):"},{"line_number":486,"context_line":"        def temp(*args, **kwargs):"},{"line_number":487,"context_line":"            temp_method \u003d self.admin_manager.network_client.__getattr__("},{"line_number":488,"context_line":"                \u0027list_%s\u0027 % resource_type)"},{"line_number":489,"context_line":"            _, resource_list \u003d temp_method(*args, **kwargs)"},{"line_number":490,"context_line":"            return resource_list[resource_type]"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa98f980_4799ac1e","line":487,"in_reply_to":"fa98f980_442a317f","updated":"2014-09-07 09:19:16.000000000","message":"Done","commit_id":"7beee6237c6cc42bbb227846e23bcafe6b117281"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"a106b76dca62f1d0ae3b0a5f0075d51038c4865d","unresolved":false,"context_lines":[{"line_number":512,"context_line":"        return self._admin_lister(\u0027ports\u0027)(*args, **kwargs)"},{"line_number":513,"context_line":""},{"line_number":514,"context_line":"    def _admin_lister(self, resource_type):"},{"line_number":515,"context_line":"        def retriever(*args, **kwargs):"},{"line_number":516,"context_line":"            dynamic_method \u003d getattr(self.admin_manager.network_client,"},{"line_number":517,"context_line":"                                     \u0027list_%s\u0027 % resource_type)"},{"line_number":518,"context_line":"            _, resource_list \u003d dynamic_method(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa98f980_8a1adf7a","line":515,"updated":"2014-09-15 13:54:48.000000000","message":"How is this rename related to this commit? You should avoid unrelated no-op code cleanups in commits with functional changes and try to have only 1 logical change per commit.\n\nPlease take a look at: https://wiki.openstack.org/wiki/GitCommitMessages#Structural_split_of_changes","commit_id":"0512035e5a3a8f0901ebce06d158d1d3021c9a5c"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"10bb03113eeff4ff43db859c94724cd5d94cb727","unresolved":false,"context_lines":[{"line_number":512,"context_line":"        return self._admin_lister(\u0027ports\u0027)(*args, **kwargs)"},{"line_number":513,"context_line":""},{"line_number":514,"context_line":"    def _admin_lister(self, resource_type):"},{"line_number":515,"context_line":"        def retriever(*args, **kwargs):"},{"line_number":516,"context_line":"            dynamic_method \u003d getattr(self.admin_manager.network_client,"},{"line_number":517,"context_line":"                                     \u0027list_%s\u0027 % resource_type)"},{"line_number":518,"context_line":"            _, resource_list \u003d dynamic_method(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa98f980_9084d05e","line":515,"in_reply_to":"fa98f980_8a1adf7a","updated":"2014-09-15 15:12:07.000000000","message":"Don\u0027t know how this got here. probably due to all the rebasing and various dependent patches I was juggling around. sorry. will remove this","commit_id":"0512035e5a3a8f0901ebce06d158d1d3021c9a5c"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"5bdd5aa623b031f6e0e157df7c00fc07fae8b9af","unresolved":false,"context_lines":[{"line_number":640,"context_line":"    def check_floating_ip_status(self, floating_ip, status):"},{"line_number":641,"context_line":"        \"\"\"Verifies floatingip has reached given status. without waiting"},{"line_number":642,"context_line":""},{"line_number":643,"context_line":"        @param floating_ip: net_resources.DeletableFloatingIp"},{"line_number":644,"context_line":"        @param status: target status"},{"line_number":645,"context_line":"        @raise: AssertionError if status doesn\u0027t match"},{"line_number":646,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":27,"id":"da9df570_01f90d80","line":643,"updated":"2014-09-23 17:57:22.000000000","message":"The syntax used to document parameters should match what is already used, e.g. line 634 in this module, leading with a \u0027:\u0027 rather than a \u0027@\u0027.\n\nReference: https://pythonhosted.org/an_example_pypi_project/sphinx.html#full-code-example","commit_id":"1b5ad8c4ad6c8bd50f161c50e08578d9b64fa92e"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"a961686905192778165e972ead8b85e40fd8dacd","unresolved":false,"context_lines":[{"line_number":640,"context_line":"    def check_floating_ip_status(self, floating_ip, status):"},{"line_number":641,"context_line":"        \"\"\"Verifies floatingip has reached given status. without waiting"},{"line_number":642,"context_line":""},{"line_number":643,"context_line":"        @param floating_ip: net_resources.DeletableFloatingIp"},{"line_number":644,"context_line":"        @param status: target status"},{"line_number":645,"context_line":"        @raise: AssertionError if status doesn\u0027t match"},{"line_number":646,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":27,"id":"da9df570_392fb889","line":643,"in_reply_to":"da9df570_01f90d80","updated":"2014-09-28 05:53:50.000000000","message":"Done","commit_id":"1b5ad8c4ad6c8bd50f161c50e08578d9b64fa92e"}],"tempest/scenario/test_network_basic_ops.py":[{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"5bdd5aa623b031f6e0e157df7c00fc07fae8b9af","unresolved":false,"context_lines":[{"line_number":182,"context_line":"        Floating IP status is verified after connectivity test in order to"},{"line_number":183,"context_line":"        not add extra waiting and mask racing conditions."},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        @param bool should_connect: determines if connectivity check is"},{"line_number":186,"context_line":"        negative or positive."},{"line_number":187,"context_line":"        @param msg: Failure message to add to Error message. Should describe"},{"line_number":188,"context_line":"        the place in the test scenario where the method was called,"}],"source_content_type":"text/x-python","patch_set":27,"id":"da9df570_c15b8585","line":185,"updated":"2014-09-23 17:57:22.000000000","message":"Same concern regarding prefixing with a \u0027@\u0027 instead of \u0027:\u0027.  Also, why is the type included in this parameter def but not anywhere else?  Please try to be consistent with the existing code, which doesn\u0027t appear to document the types of parameters.","commit_id":"1b5ad8c4ad6c8bd50f161c50e08578d9b64fa92e"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"a961686905192778165e972ead8b85e40fd8dacd","unresolved":false,"context_lines":[{"line_number":182,"context_line":"        Floating IP status is verified after connectivity test in order to"},{"line_number":183,"context_line":"        not add extra waiting and mask racing conditions."},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        @param bool should_connect: determines if connectivity check is"},{"line_number":186,"context_line":"        negative or positive."},{"line_number":187,"context_line":"        @param msg: Failure message to add to Error message. Should describe"},{"line_number":188,"context_line":"        the place in the test scenario where the method was called,"}],"source_content_type":"text/x-python","patch_set":27,"id":"da9df570_1932f4f1","line":185,"in_reply_to":"da9df570_c15b8585","updated":"2014-09-28 05:53:50.000000000","message":"Done","commit_id":"1b5ad8c4ad6c8bd50f161c50e08578d9b64fa92e"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"5bdd5aa623b031f6e0e157df7c00fc07fae8b9af","unresolved":false,"context_lines":[{"line_number":192,"context_line":"        floating_ip, server \u003d self.floating_ip_tuple"},{"line_number":193,"context_line":"        ip_address \u003d floating_ip.floating_ip_address"},{"line_number":194,"context_line":"        private_key \u003d None"},{"line_number":195,"context_line":"        flip_status \u003d \u0027DOWN\u0027"},{"line_number":196,"context_line":"        if should_connect:"},{"line_number":197,"context_line":"            private_key \u003d self._get_server_key(server)"},{"line_number":198,"context_line":"            flip_status \u003d \u0027ACTIVE\u0027"}],"source_content_type":"text/x-python","patch_set":27,"id":"da9df570_41aeb586","line":195,"updated":"2014-09-23 17:57:22.000000000","message":"(Suggestion only) Avoid using short variable names that obscure the purpose of the variable.  \u0027flip\u0027 is a word that doesn\u0027t immediately suggest \u0027floating_ip\u0027.","commit_id":"1b5ad8c4ad6c8bd50f161c50e08578d9b64fa92e"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"a961686905192778165e972ead8b85e40fd8dacd","unresolved":false,"context_lines":[{"line_number":192,"context_line":"        floating_ip, server \u003d self.floating_ip_tuple"},{"line_number":193,"context_line":"        ip_address \u003d floating_ip.floating_ip_address"},{"line_number":194,"context_line":"        private_key \u003d None"},{"line_number":195,"context_line":"        flip_status \u003d \u0027DOWN\u0027"},{"line_number":196,"context_line":"        if should_connect:"},{"line_number":197,"context_line":"            private_key \u003d self._get_server_key(server)"},{"line_number":198,"context_line":"            flip_status \u003d \u0027ACTIVE\u0027"}],"source_content_type":"text/x-python","patch_set":27,"id":"da9df570_f938d0d4","line":195,"in_reply_to":"da9df570_41aeb586","updated":"2014-09-28 05:53:50.000000000","message":"Done","commit_id":"1b5ad8c4ad6c8bd50f161c50e08578d9b64fa92e"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"b5c8636ab52b3bf22c7df2bd1c275907e8629707","unresolved":false,"context_lines":[{"line_number":174,"context_line":"        floating_ip \u003d self._create_floating_ip(server, public_network_id)"},{"line_number":175,"context_line":"        self.floating_ip_tuple \u003d Floating_IP_tuple(floating_ip, server)"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"    def _check_public_network_connectivity(self, should_connect\u003dTrue,"},{"line_number":178,"context_line":"                                           msg\u003dNone):"},{"line_number":179,"context_line":"        \"\"\"Verifies connectivty to a VM via public network and floating IP,"},{"line_number":180,"context_line":"        and verifies floating IP has resource status is correct."}],"source_content_type":"text/x-python","patch_set":30,"id":"baa201ad_7ce6adb1","line":177,"updated":"2014-10-06 11:16:25.000000000","message":"This function become more context dependent, probably it will not be promoted (moved to upper level) to be used in more situation.","commit_id":"45f92958c7a6dae18d562c3a5b2e5d6f9b674f97"}],"tempest/services/network/resources.py":[{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"d0c42681d314f4c9b48cee731b344d1b454b6626","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":"from tempest.common import waiters"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import abc"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"fa98f980_4486b166","line":15,"updated":"2014-09-02 08:55:35.000000000","message":"Please see http://docs.openstack.org/developer/hacking/#real-world-import-order-examples regarding how to organize your imports","commit_id":"7beee6237c6cc42bbb227846e23bcafe6b117281"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"e2d184df5fbe7bdc65a8a5d577f7985b93c373fe","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":"from tempest.common import waiters"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import abc"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"fa98f980_c784bcb3","line":15,"in_reply_to":"fa98f980_4486b166","updated":"2014-09-07 09:19:16.000000000","message":"Done","commit_id":"7beee6237c6cc42bbb227846e23bcafe6b117281"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"fdb26de15ac7e16a2f13cc332e5345b818c0f62f","unresolved":false,"context_lines":[{"line_number":111,"context_line":"                                                *args,"},{"line_number":112,"context_line":"                                                **kwargs)"},{"line_number":113,"context_line":"        super(DeletableFloatingIp, self).update(**result[\u0027floatingip\u0027])"},{"line_number":114,"context_line":"        return self"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    def update(self, *args, **kwargs):"},{"line_number":117,"context_line":"        _, result \u003d self.client.update_floatingip(self.id,"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_64a10ea9","line":114,"updated":"2014-09-09 12:26:40.000000000","message":"This makes little sense - the caller already has a reference to the instance.","commit_id":"285faacd29ac78ae254f4960f3c53f587bbd76ed"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"157f63de0f97e054942656748aaac5ed8875c86c","unresolved":false,"context_lines":[{"line_number":111,"context_line":"                                                *args,"},{"line_number":112,"context_line":"                                                **kwargs)"},{"line_number":113,"context_line":"        super(DeletableFloatingIp, self).update(**result[\u0027floatingip\u0027])"},{"line_number":114,"context_line":"        return self"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    def update(self, *args, **kwargs):"},{"line_number":117,"context_line":"        _, result \u003d self.client.update_floatingip(self.id,"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_acd55ce6","line":114,"in_reply_to":"fa98f980_64a10ea9","updated":"2014-09-11 09:06:12.000000000","message":"since this is a getter method, it seems logical to me return the object as well as updating it, exactly for the reasons it\u0027s used later.\nAlso, I seem to recall that\u0027s how the native clients do that (with the exception of neutron)","commit_id":"285faacd29ac78ae254f4960f3c53f587bbd76ed"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"4e8e0cbd7d5fc5ad2a6c13de7f8ff0afd41260ac","unresolved":false,"context_lines":[{"line_number":111,"context_line":"                                                *args,"},{"line_number":112,"context_line":"                                                **kwargs)"},{"line_number":113,"context_line":"        super(DeletableFloatingIp, self).update(**result[\u0027floatingip\u0027])"},{"line_number":114,"context_line":"        return self"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    def update(self, *args, **kwargs):"},{"line_number":117,"context_line":"        _, result \u003d self.client.update_floatingip(self.id,"}],"source_content_type":"text/x-python","patch_set":21,"id":"da9df570_84b0c68c","line":114,"in_reply_to":"fa98f980_acd55ce6","updated":"2014-09-23 02:33:07.000000000","message":"From what I can tell by looking at the python-novaclient, the corresponding show method [1] is an accessor of a manager object.  It retrieves data from the server and returns it.  Yes, the _get() method writes to a local cache, but the object being written is not the same as the manager instance that the _get() method is called on.\n\nIn the case of the native clients, they have 2 types of objects - a manager and an instance.  The manager can invoke methods on any instance and would return the result of a given operation (returning an object where it makes sense).  An instance object can invoke operations only on itself.\n\nThe method as written here is both an accessor and a mutatator.  It confuses the responsibilities of a manager and an instance by both changing the state of the object _and_ returning the object.  It should do one or the other, but not both, since any caller of this object already has a reference to it.\n\nDoes that make more sense?  Or can you point me to an example that better justifies your reasoning?\n\n1: https://github.com/openstack/python-novaclient/blob/master/novaclient/v1_1/floating_ips.py#L58","commit_id":"285faacd29ac78ae254f4960f3c53f587bbd76ed"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"fdb26de15ac7e16a2f13cc332e5345b818c0f62f","unresolved":false,"context_lines":[{"line_number":118,"context_line":"                                                  *args,"},{"line_number":119,"context_line":"                                                  **kwargs)"},{"line_number":120,"context_line":"        super(DeletableFloatingIp, self).update(**result[\u0027floatingip\u0027])"},{"line_number":121,"context_line":"        return self"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def __repr__(self):"},{"line_number":124,"context_line":"        return \u0027\u003c%s addr\u003d\"%s\"\u003e\u0027 % (self.__class__.__name__,"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_84a432ba","line":121,"updated":"2014-09-09 12:26:40.000000000","message":"ditto.  And where is the result of this even used?","commit_id":"285faacd29ac78ae254f4960f3c53f587bbd76ed"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"157f63de0f97e054942656748aaac5ed8875c86c","unresolved":false,"context_lines":[{"line_number":118,"context_line":"                                                  *args,"},{"line_number":119,"context_line":"                                                  **kwargs)"},{"line_number":120,"context_line":"        super(DeletableFloatingIp, self).update(**result[\u0027floatingip\u0027])"},{"line_number":121,"context_line":"        return self"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def __repr__(self):"},{"line_number":124,"context_line":"        return \u0027\u003c%s addr\u003d\"%s\"\u003e\u0027 % (self.__class__.__name__,"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_8cd8981f","line":121,"in_reply_to":"fa98f980_84a432ba","updated":"2014-09-11 09:06:12.000000000","message":"That\u0027s how the native clients do that (with the exception of neutron).\nthis might not be needed now, but since I\u0027m fixing this class\u0027s methods, I think they should have a consistent API.","commit_id":"285faacd29ac78ae254f4960f3c53f587bbd76ed"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"fdb26de15ac7e16a2f13cc332e5345b818c0f62f","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        if not hasattr(self, \u0027status\u0027):"},{"line_number":136,"context_line":"            return"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        fetch \u003d self.show"},{"line_number":139,"context_line":"        return waiters.wait_for_network_resource_status("},{"line_number":140,"context_line":"            fetch, status)"},{"line_number":141,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_84e0b2cd","line":138,"updated":"2014-09-09 12:26:40.000000000","message":"If the goal is updating the instance and returning it, a helper method is preferable, e.g.\n\ndef fetch(*args, **kargs):\n  self.update(*args, **kwargs)\n  return self","commit_id":"285faacd29ac78ae254f4960f3c53f587bbd76ed"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"157f63de0f97e054942656748aaac5ed8875c86c","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        if not hasattr(self, \u0027status\u0027):"},{"line_number":136,"context_line":"            return"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        fetch \u003d self.show"},{"line_number":139,"context_line":"        return waiters.wait_for_network_resource_status("},{"line_number":140,"context_line":"            fetch, status)"},{"line_number":141,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_aca71ca6","line":138,"in_reply_to":"fa98f980_84e0b2cd","updated":"2014-09-11 09:06:12.000000000","message":"update is not what we want here. we need \"show\" (ie - getter) to retrieve the latest status of the object.\nWhy create a helper method when a single line above works better","commit_id":"285faacd29ac78ae254f4960f3c53f587bbd76ed"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"4e8e0cbd7d5fc5ad2a6c13de7f8ff0afd41260ac","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        if not hasattr(self, \u0027status\u0027):"},{"line_number":136,"context_line":"            return"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        fetch \u003d self.show"},{"line_number":139,"context_line":"        return waiters.wait_for_network_resource_status("},{"line_number":140,"context_line":"            fetch, status)"},{"line_number":141,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"da9df570_2fcb73a6","line":138,"in_reply_to":"fa98f980_aca71ca6","updated":"2014-09-23 02:33:07.000000000","message":"It is well worth creating a helper method to avoid confusing the responsibilities of manager and instance classes.","commit_id":"285faacd29ac78ae254f4960f3c53f587bbd76ed"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"8d544d8906cafcfe62a786fa1a25434e5abfcd6f","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import abc"},{"line_number":17,"context_line":"import six"},{"line_number":18,"context_line":"from tempest.common import waiters"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"fa98f980_0d5be687","line":17,"updated":"2014-09-10 12:13:58.000000000","message":"nit: there should be a line of space here.","commit_id":"14ebf26923373f109d83412d784546e07c7da0c2"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"a106b76dca62f1d0ae3b0a5f0075d51038c4865d","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import abc"},{"line_number":17,"context_line":"import six"},{"line_number":18,"context_line":"from tempest.common import waiters"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class AttributeDict(dict):"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa98f980_0a0eef3a","line":18,"updated":"2014-09-15 13:54:48.000000000","message":"You should separate tempest imports from thirdparty lib imports. See the hacking guidelines:\n\nhttp://docs.openstack.org/developer/hacking/#imports","commit_id":"0512035e5a3a8f0901ebce06d158d1d3021c9a5c"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"10bb03113eeff4ff43db859c94724cd5d94cb727","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import abc"},{"line_number":17,"context_line":"import six"},{"line_number":18,"context_line":"from tempest.common import waiters"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class AttributeDict(dict):"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa98f980_f010bc01","line":18,"in_reply_to":"fa98f980_0a0eef3a","updated":"2014-09-15 15:12:07.000000000","message":"Done","commit_id":"0512035e5a3a8f0901ebce06d158d1d3021c9a5c"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"7fb4f0774d6938301cb81755c5344e68585a9545","unresolved":false,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    def wait_for_status(self, status):"},{"line_number":137,"context_line":"        if not hasattr(self, \u0027status\u0027):"},{"line_number":138,"context_line":"            return"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        fetch \u003d self.show"},{"line_number":141,"context_line":"        return waiters.wait_for_network_resource_status("}],"source_content_type":"text/x-python","patch_set":24,"id":"fa98f980_0b7a60b9","line":138,"updated":"2014-09-16 02:56:36.000000000","message":"How about raise an exception instead of ignoring?\nIs there any situation about not having \u0027status\u0027 attribute here?","commit_id":"3d8d102122b9660f35a4a6cf85ead517cf58b369"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"3532d03392f91439ff7ca83612d4493508774be5","unresolved":false,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    def wait_for_status(self, status):"},{"line_number":137,"context_line":"        if not hasattr(self, \u0027status\u0027):"},{"line_number":138,"context_line":"            return"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        fetch \u003d self.show"},{"line_number":141,"context_line":"        return waiters.wait_for_network_resource_status("}],"source_content_type":"text/x-python","patch_set":24,"id":"fa98f980_a421814e","line":138,"in_reply_to":"fa98f980_0b7a60b9","updated":"2014-09-16 05:52:51.000000000","message":"Done\nSeems reasonable","commit_id":"3d8d102122b9660f35a4a6cf85ead517cf58b369"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"16eac0c45e20f3968c76606b8ed3c5bea1702ecf","unresolved":false,"context_lines":[{"line_number":113,"context_line":"                                                *args,"},{"line_number":114,"context_line":"                                                **kwargs)"},{"line_number":115,"context_line":"        super(DeletableFloatingIp, self).update(**result[\u0027floatingip\u0027])"},{"line_number":116,"context_line":"        return self"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def update(self, *args, **kwargs):"},{"line_number":119,"context_line":"        _, result \u003d self.client.update_floatingip(self.id,"}],"source_content_type":"text/x-python","patch_set":26,"id":"fa98f980_7dbc6707","line":116,"updated":"2014-09-17 11:16:04.000000000","message":"I think we still need to hear from Maru regarding alternatives to return self here and in the update method","commit_id":"ffd22eebe0d01f766ccb49796bf155f318ffb6db"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"97e06a1ea49f2d8b119d96016cf6cd8867daaccd","unresolved":false,"context_lines":[{"line_number":113,"context_line":"                                                *args,"},{"line_number":114,"context_line":"                                                **kwargs)"},{"line_number":115,"context_line":"        super(DeletableFloatingIp, self).update(**result[\u0027floatingip\u0027])"},{"line_number":116,"context_line":"        return self"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def update(self, *args, **kwargs):"},{"line_number":119,"context_line":"        _, result \u003d self.client.update_floatingip(self.id,"}],"source_content_type":"text/x-python","patch_set":26,"id":"da9df570_2f10d300","line":116,"in_reply_to":"da9df570_a844dd74","updated":"2014-09-23 02:41:19.000000000","message":"As per my comments on patch 21, this method should not be both modifying the object and returning it.  I recommend changing the name of the method to refresh() and removing the return statement.","commit_id":"ffd22eebe0d01f766ccb49796bf155f318ffb6db"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"5fa56999cf8c994323c5f833c582cdd191caf189","unresolved":false,"context_lines":[{"line_number":113,"context_line":"                                                *args,"},{"line_number":114,"context_line":"                                                **kwargs)"},{"line_number":115,"context_line":"        super(DeletableFloatingIp, self).update(**result[\u0027floatingip\u0027])"},{"line_number":116,"context_line":"        return self"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def update(self, *args, **kwargs):"},{"line_number":119,"context_line":"        _, result \u003d self.client.update_floatingip(self.id,"}],"source_content_type":"text/x-python","patch_set":26,"id":"da9df570_a844dd74","line":116,"in_reply_to":"fa98f980_7dbc6707","updated":"2014-09-22 03:14:55.000000000","message":"agreed this is kind of ugly","commit_id":"ffd22eebe0d01f766ccb49796bf155f318ffb6db"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"97e06a1ea49f2d8b119d96016cf6cd8867daaccd","unresolved":false,"context_lines":[{"line_number":138,"context_line":"            raise AttributeError(\u0027Network resource %s has no attribute \u0027"},{"line_number":139,"context_line":"                                 \u0027\"status\"\u0027 % self)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        fetch \u003d self.show"},{"line_number":142,"context_line":"        return waiters.wait_for_network_resource_status("},{"line_number":143,"context_line":"            fetch, status)"},{"line_number":144,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"da9df570_cf0027ad","line":141,"updated":"2014-09-23 02:41:19.000000000","message":"As per my comment on a patch 21, please create a helper method that wraps self.refresh (or whatever you end up calling it).\n\ndef fetch():\n  self.refresh()\n  return self","commit_id":"ffd22eebe0d01f766ccb49796bf155f318ffb6db"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"03672927b71efa563251a9a3976779b8f4e26dff","unresolved":false,"context_lines":[{"line_number":116,"context_line":""},{"line_number":117,"context_line":"class DeletableFloatingIp(DeletableResource):"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def show(self, *args, **kwargs):"},{"line_number":120,"context_line":"        _, result \u003d self.client.show_floatingip(self.id,"},{"line_number":121,"context_line":"                                                *args,"},{"line_number":122,"context_line":"                                                **kwargs)"}],"source_content_type":"text/x-python","patch_set":28,"id":"baa201ad_ef126161","line":119,"updated":"2014-09-30 05:01:17.000000000","message":"I think you should rename this to something like refresh as Maru suggested in an earlier PS. Its not really doing a show.","commit_id":"12e930b64712d889d2b086041e4b2ceab8f992f9"}]}
