)]}'
{"neutron_lib/tests/unit/test_utils.py":[{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"67002cc681e3c3df4cbcc23f1b560c01a6ea5494","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from neutron_lib import utils"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class TestWaitUntilTrue(base.BaseTestCase):"},{"line_number":22,"context_line":"    def test_wait_until_true_predicate_succeeds(self):"},{"line_number":23,"context_line":"        utils.wait_until_true(lambda: True)"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5a9d85d2_3feea68b","line":21,"updated":"2016-06-20 17:35:47.000000000","message":"Thanks for adding these tests.","commit_id":"e18812f23207f61457a733356e52a04bd271d990"}],"neutron_lib/utils.py":[{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"67002cc681e3c3df4cbcc23f1b560c01a6ea5494","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"5a9d85d2_ff77feff","updated":"2016-06-20 17:35:47.000000000","message":"While putting all utils in the base lib package is one approach, I\u0027m wondering if we should consider that longer term we may have a significant number of utils coming over (agent, common, etc.) and it might be nice to structure them.\n\nI was thinking something like:\nneutron_lib.utils.common.py\nneutron_lib.utils.agent.py\nneutron_lib.utils.whatever.py\n\nI prefer this structure because all of the utils are in the same package, but can be subdevided via their module name within the package.\n\nObviously lots of other approaches.\n\nWhat do others think here???","commit_id":"e18812f23207f61457a733356e52a04bd271d990"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"9a7b0f7a142bcf703a336fedaca82dfe40d6a9d7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"5a9d85d2_2ddc97e3","in_reply_to":"5a9d85d2_ff77feff","updated":"2016-06-21 11:29:01.000000000","message":"Durr for me... We already have https://review.openstack.org/#/c/319769/ that breaks out the util structure.\n\nPerhaps this patch needs to depend on 319769 and fit into the util structure it lays out.","commit_id":"e18812f23207f61457a733356e52a04bd271d990"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"67002cc681e3c3df4cbcc23f1b560c01a6ea5494","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import eventlet"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"def wait_until_true(predicate, timeout\u003d60, sleep\u003d1, exception\u003dNone):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a9d85d2_a4ce0b58","line":15,"range":{"start_line":15,"start_character":7,"end_line":15,"end_character":15},"updated":"2016-06-20 17:35:47.000000000","message":"Need to add eventlet to requirements.txt","commit_id":"e18812f23207f61457a733356e52a04bd271d990"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"accde1e4b0b30a16c55821be58b08a370073e1fe","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import eventlet"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"def wait_until_true(predicate, timeout\u003d60, sleep\u003d1, exception\u003dNone):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3aaa91ec_4769fbbd","line":15,"in_reply_to":"5a9d85d2_a4ce0b58","updated":"2016-06-23 02:34:19.000000000","message":"You just convinced me to -1 this, because requiring to pull in eventlet sounds awful.","commit_id":"e18812f23207f61457a733356e52a04bd271d990"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"67002cc681e3c3df4cbcc23f1b560c01a6ea5494","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    :param exception: Exception class for eventlet.Timeout."},{"line_number":26,"context_line":"    (see doc for eventlet.Timeout for more information)"},{"line_number":27,"context_line":"    \"\"\""},{"line_number":28,"context_line":"    with eventlet.timeout.Timeout(timeout, exception):"},{"line_number":29,"context_line":"        while not predicate():"},{"line_number":30,"context_line":"            eventlet.sleep(sleep)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a9d85d2_dfc5e25b","line":30,"range":{"start_line":28,"start_character":4,"end_line":30,"end_character":33},"updated":"2016-06-20 17:35:47.000000000","message":"None of these require \"greening the world\" correct?\n\nAt some point we (neutron-lib) may need to consider if we\u0027re going to do any greening (monkey patch or other) or leave that to consumers.","commit_id":"e18812f23207f61457a733356e52a04bd271d990"}]}
