)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"8f6cd93097e6e5d4d36de73d1f9a1ed0b15daaf2","unresolved":false,"context_lines":[{"line_number":12,"context_line":" - file - all file related utilities"},{"line_number":13,"context_line":" - helpers - all kinds of helps"},{"line_number":14,"context_line":" - host - all host related utilities"},{"line_number":15,"context_line":" - process - all process related utilities"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I4fe150d42a70a7ce5192c30ffaae52d1cf3d5d87"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"bab6814e_583551d8","line":15,"updated":"2016-05-25 11:54:57.000000000","message":"What about net?","commit_id":"5aa6db3861966482f173eb5328d62ae003b8c502"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"0da19e7acedbe341ed2f804231d77ba932b8116a","unresolved":false,"context_lines":[{"line_number":12,"context_line":" - file - all file related utilities"},{"line_number":13,"context_line":" - helpers - all kinds of helps"},{"line_number":14,"context_line":" - host - all host related utilities"},{"line_number":15,"context_line":" - process - all process related utilities"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I4fe150d42a70a7ce5192c30ffaae52d1cf3d5d87"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"bab6814e_4e158899","line":15,"in_reply_to":"bab6814e_583551d8","updated":"2016-05-25 13:35:50.000000000","message":"Done","commit_id":"5aa6db3861966482f173eb5328d62ae003b8c502"}],"neutron_lib/tests/unit/utils/test_file.py":[{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"8f6cd93097e6e5d4d36de73d1f9a1ed0b15daaf2","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2012 OpenStack Foundation."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_b80c3d3c","line":1,"updated":"2016-05-25 11:54:57.000000000","message":"https://wiki.openstack.org/wiki/LegalIssuesFAQ#OpenStack_Foundation_Copyright_Headers\n\n\nAccording to https://wiki.openstack.org/wiki/LegalIssuesFAQ#Copyright_Headers it says \"Copyright notices are not required in order to create or protect your copyright rights\" so IMO just leave it out.","commit_id":"5aa6db3861966482f173eb5328d62ae003b8c502"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"0da19e7acedbe341ed2f804231d77ba932b8116a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2012 OpenStack Foundation."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_ee26fc14","line":1,"in_reply_to":"bab6814e_b80c3d3c","updated":"2016-05-25 13:35:50.000000000","message":"Done","commit_id":"5aa6db3861966482f173eb5328d62ae003b8c502"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"1da4db9157f961bbcf1486bcf9f4976823ed0f17","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#"},{"line_number":2,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":3,"context_line":"# you may not use this file except in compliance with the License."},{"line_number":4,"context_line":"# You may obtain a copy of the License at"}],"source_content_type":"text/x-python","patch_set":11,"id":"7aa08908_20693526","line":1,"updated":"2016-06-07 07:15:01.000000000","message":"just a question; is this empty comment line preferred?","commit_id":"1c9feabfb675468a6dca3e31daec442775e4cb69"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"7fb0f55933635df27ed1f95980907500d9732986","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#"},{"line_number":2,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":3,"context_line":"# you may not use this file except in compliance with the License."},{"line_number":4,"context_line":"# You may obtain a copy of the License at"}],"source_content_type":"text/x-python","patch_set":11,"id":"7aa08908_e592919e","line":1,"in_reply_to":"7aa08908_20693526","updated":"2016-06-07 10:29:12.000000000","message":"Same question too.","commit_id":"1c9feabfb675468a6dca3e31daec442775e4cb69"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"821eeb1c6788761896f57a7065eb9cef755da4f4","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#"},{"line_number":2,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":3,"context_line":"# you may not use this file except in compliance with the License."},{"line_number":4,"context_line":"# You may obtain a copy of the License at"}],"source_content_type":"text/x-python","patch_set":11,"id":"7aa08908_540392b8","line":1,"in_reply_to":"7aa08908_e592919e","updated":"2016-06-10 03:03:53.000000000","message":"In other files in neutron-lib, we don\u0027t have a blank line at the top.\nI think it is better to remove it.","commit_id":"1c9feabfb675468a6dca3e31daec442775e4cb69"}],"neutron_lib/tests/unit/utils/test_host.py":[{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"08bf715dab8696d7e7024aeb1fd42ae53114713a","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    @mock.patch.object(multiprocessing, \u0027cpu_count\u0027,"},{"line_number":31,"context_line":"                       side_effect\u003dNotImplementedError())"},{"line_number":32,"context_line":"    def test_cpu_counti_not_implemented(self, mock_cpu_count):"},{"line_number":33,"context_line":"        self.assertEqual(1, host.cpu_count())"}],"source_content_type":"text/x-python","patch_set":9,"id":"9abb7d3a_c2a527b6","line":32,"updated":"2016-05-27 11:24:07.000000000","message":"This test seems fine, but I question the value of test_cpu_count().","commit_id":"945fccb358a482c73434a50eb3fdd95587fb499a"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"ecdf1344c2ef69df7f5f326462ec843ac83f7842","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    @mock.patch.object(multiprocessing, \u0027cpu_count\u0027,"},{"line_number":31,"context_line":"                       side_effect\u003dNotImplementedError())"},{"line_number":32,"context_line":"    def test_cpu_counti_not_implemented(self, mock_cpu_count):"},{"line_number":33,"context_line":"        self.assertEqual(1, host.cpu_count())"}],"source_content_type":"text/x-python","patch_set":9,"id":"7aa08908_393ffad7","line":32,"in_reply_to":"9abb7d3a_9caa36d3","updated":"2016-06-09 16:48:44.000000000","message":"I have been thinking about this issue of \"questionable value\" tests. At this point my thoughts are leaning towards:\n\n* It\u0027s good to test method signatures, since this is a stable library.\n* We can have a goal of 100% unit test coverage, which allows us to easily spot lack of test coverage.","commit_id":"945fccb358a482c73434a50eb3fdd95587fb499a"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"910fce62780f62c03b2129a78507f21b37ddbc25","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    @mock.patch.object(multiprocessing, \u0027cpu_count\u0027,"},{"line_number":31,"context_line":"                       side_effect\u003dNotImplementedError())"},{"line_number":32,"context_line":"    def test_cpu_counti_not_implemented(self, mock_cpu_count):"},{"line_number":33,"context_line":"        self.assertEqual(1, host.cpu_count())"}],"source_content_type":"text/x-python","patch_set":9,"id":"9abb7d3a_9caa36d3","line":32,"in_reply_to":"9abb7d3a_c2a527b6","updated":"2016-05-29 06:49:07.000000000","message":"not sure that i understand the question - i think that the point here is to test every method that we provide. in some cases these are just wrapping some python calls. in these cases we just need to test the signature, which is what i am doing above","commit_id":"945fccb358a482c73434a50eb3fdd95587fb499a"}],"neutron_lib/tests/unit/utils/test_net.py":[{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"08bf715dab8696d7e7024aeb1fd42ae53114713a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"9abb7d3a_220fd3e2","updated":"2016-05-27 11:24:07.000000000","message":"Questioning the usefulness of this test, especially since the method is really just a simple wrapper. What are we testing that could possibly break?","commit_id":"945fccb358a482c73434a50eb3fdd95587fb499a"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"910fce62780f62c03b2129a78507f21b37ddbc25","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"9abb7d3a_fcaf02e1","in_reply_to":"9abb7d3a_220fd3e2","updated":"2016-05-29 06:49:07.000000000","message":"same answer as before - we are just testing the signatures here","commit_id":"945fccb358a482c73434a50eb3fdd95587fb499a"}],"neutron_lib/tests/unit/utils/test_process.py":[{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"08bf715dab8696d7e7024aeb1fd42ae53114713a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"9abb7d3a_828ddf7d","updated":"2016-05-27 11:24:07.000000000","message":"Questioning the usefulness of these tests, especially since the methods are really just simple wrappers. What are we testing that could possibly break?","commit_id":"945fccb358a482c73434a50eb3fdd95587fb499a"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"910fce62780f62c03b2129a78507f21b37ddbc25","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"9abb7d3a_5c872e61","in_reply_to":"9abb7d3a_828ddf7d","updated":"2016-05-29 06:49:07.000000000","message":"ditto","commit_id":"945fccb358a482c73434a50eb3fdd95587fb499a"}],"neutron_lib/utils/file.py":[{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"8f6cd93097e6e5d4d36de73d1f9a1ed0b15daaf2","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    except OSError as e:"},{"line_number":26,"context_line":"        # If the directory already existed, don\u0027t raise the error."},{"line_number":27,"context_line":"        if e.errno !\u003d errno.EEXIST:"},{"line_number":28,"context_line":"            raise"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"def replace_file(file_name, data, file_mode\u003d0o644):"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_6d7cd9eb","line":28,"range":{"start_line":28,"start_character":12,"end_line":28,"end_character":17},"updated":"2016-05-25 11:54:57.000000000","message":"If you run \"tox -e cover\" you will see there is no unit test coverage for this. I am trying to maintain as close to 100% coverage as possible for neutron-lib.","commit_id":"5aa6db3861966482f173eb5328d62ae003b8c502"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"0da19e7acedbe341ed2f804231d77ba932b8116a","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    except OSError as e:"},{"line_number":26,"context_line":"        # If the directory already existed, don\u0027t raise the error."},{"line_number":27,"context_line":"        if e.errno !\u003d errno.EEXIST:"},{"line_number":28,"context_line":"            raise"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"def replace_file(file_name, data, file_mode\u003d0o644):"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_e1028d3d","line":28,"range":{"start_line":28,"start_character":12,"end_line":28,"end_character":17},"in_reply_to":"bab6814e_6d7cd9eb","updated":"2016-05-25 13:35:50.000000000","message":"Done","commit_id":"5aa6db3861966482f173eb5328d62ae003b8c502"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"a37caf3e245a18b98033d164303416df99d6e355","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#"},{"line_number":2,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":3,"context_line":"# you may not use this file except in compliance with the License."},{"line_number":4,"context_line":"# You may obtain a copy of the License at"}],"source_content_type":"text/x-python","patch_set":9,"id":"9abb7d3a_b8113db2","line":1,"updated":"2016-05-27 07:16:03.000000000","message":"i don\u0027t understand why moving code changes the copyright notice.  can you explain in the commit message?","commit_id":"945fccb358a482c73434a50eb3fdd95587fb499a"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"910fce62780f62c03b2129a78507f21b37ddbc25","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#"},{"line_number":2,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":3,"context_line":"# you may not use this file except in compliance with the License."},{"line_number":4,"context_line":"# You may obtain a copy of the License at"}],"source_content_type":"text/x-python","patch_set":9,"id":"9abb7d3a_3c918a9a","line":1,"in_reply_to":"9abb7d3a_b8113db2","updated":"2016-05-29 06:49:07.000000000","message":"Sure - please see Henry\u0027s comment on PS 5.","commit_id":"945fccb358a482c73434a50eb3fdd95587fb499a"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"c6acc2c7bd930d6b34652abd0c30a9003ec8721d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#"},{"line_number":2,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":3,"context_line":"# you may not use this file except in compliance with the License."},{"line_number":4,"context_line":"# You may obtain a copy of the License at"}],"source_content_type":"text/x-python","patch_set":10,"id":"9abb7d3a_5f41ce0a","line":1,"updated":"2016-06-03 09:51:06.000000000","message":"code in this file seem to be taken from neutron/common/utils.py, which has VMware copyright notice.\ni don\u0027t think https://wiki.openstack.org/wiki/LegalIssuesFAQ#Copyright_Headers is suggesting to drop VMware\u0027s copyright notice.","commit_id":"d9c3cd205cde9403cbc44d50c59e5a59153ff3fe"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"1426491d098cbfd2e04f98da9305442baeccc8a9","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#"},{"line_number":2,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":3,"context_line":"# you may not use this file except in compliance with the License."},{"line_number":4,"context_line":"# You may obtain a copy of the License at"}],"source_content_type":"text/x-python","patch_set":10,"id":"7aa08908_42449473","line":1,"in_reply_to":"9abb7d3a_5f41ce0a","updated":"2016-06-05 13:56:48.000000000","message":"Done","commit_id":"d9c3cd205cde9403cbc44d50c59e5a59153ff3fe"}],"neutron_lib/utils/helpers.py":[{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"c4d2e95750a9dff56914a366a2a33e24dbd7ab69","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"bab6814e_76a4e107","updated":"2016-05-24 13:53:56.000000000","message":"IMHO we need to test coverage for these functions. For example in neutron [1] will test parse_mappings(). I didn\u0027t check if there\u0027s neutron tests for the others, but if not I think we should invest a little time here to write a few UTs for coverage\n\n\n[1] https://github.com/openstack/neutron/blob/master/neutron/tests/unit/common/test_utils.py#L35","commit_id":"9b032918f2b4a0ac2b96417fb166d9bd5d7c3f22"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"34872bc2ba3322f595070efcb46762dfec0b4505","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"bab6814e_4403e00f","in_reply_to":"bab6814e_76a4e107","updated":"2016-05-24 15:16:26.000000000","message":"good point - i missed pushing the test_helpers.py. Will do that tomorrow\ni have coverage for 95% of the methods here bar some which i still need to work on","commit_id":"9b032918f2b4a0ac2b96417fb166d9bd5d7c3f22"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"8f6cd93097e6e5d4d36de73d1f9a1ed0b15daaf2","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    This method doesn\u0027t consider ordering"},{"line_number":69,"context_line":"    \"\"\""},{"line_number":70,"context_line":"    return set(a or []) \u003d\u003d set(b or [])"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"def safe_sort_key(value):"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_4dbf55fb","line":70,"updated":"2016-05-25 11:54:57.000000000","message":"You changed the implementation slightly but I believe it is the same logic, so it is OK.","commit_id":"5aa6db3861966482f173eb5328d62ae003b8c502"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"8f6cd93097e6e5d4d36de73d1f9a1ed0b15daaf2","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    return set(a or []) \u003d\u003d set(b or [])"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"def safe_sort_key(value):"},{"line_number":74,"context_line":"    \"\"\"Return value hash or build one for dictionaries.\"\"\""},{"line_number":75,"context_line":"    if isinstance(value, collections.Mapping):"},{"line_number":76,"context_line":"        return sorted(value.items())"},{"line_number":77,"context_line":"    return value"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"def dict2str(dic):"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_0d6eed2e","line":77,"range":{"start_line":73,"start_character":0,"end_line":77,"end_character":16},"updated":"2016-05-25 11:54:57.000000000","message":"There is no test coverage of this method.","commit_id":"5aa6db3861966482f173eb5328d62ae003b8c502"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"0da19e7acedbe341ed2f804231d77ba932b8116a","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    return set(a or []) \u003d\u003d set(b or [])"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"def safe_sort_key(value):"},{"line_number":74,"context_line":"    \"\"\"Return value hash or build one for dictionaries.\"\"\""},{"line_number":75,"context_line":"    if isinstance(value, collections.Mapping):"},{"line_number":76,"context_line":"        return sorted(value.items())"},{"line_number":77,"context_line":"    return value"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"def dict2str(dic):"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_21abf51e","line":77,"range":{"start_line":73,"start_character":0,"end_line":77,"end_character":16},"in_reply_to":"bab6814e_0d6eed2e","updated":"2016-05-25 13:35:50.000000000","message":"I will add this tomorrow","commit_id":"5aa6db3861966482f173eb5328d62ae003b8c502"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"7fb0f55933635df27ed1f95980907500d9732986","unresolved":false,"context_lines":[{"line_number":112,"context_line":"    return \u0027\u0027.join(s.replace(\u0027_\u0027, \u0027 \u0027).title().split())"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"def round_val(val):"},{"line_number":116,"context_line":"    # we rely on decimal module since it behaves consistently across Python"},{"line_number":117,"context_line":"    # versions (2.x vs. 3.x)"},{"line_number":118,"context_line":"    return int(decimal.Decimal(val).quantize(decimal.Decimal(\u00271\u0027),"}],"source_content_type":"text/x-python","patch_set":11,"id":"7aa08908_6503410e","line":115,"updated":"2016-06-07 10:29:12.000000000","message":"It is better to have a docstring here.\nI think it is useful if there is a description on how a value is rounded.","commit_id":"1c9feabfb675468a6dca3e31daec442775e4cb69"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"821eeb1c6788761896f57a7065eb9cef755da4f4","unresolved":false,"context_lines":[{"line_number":112,"context_line":"    return \u0027\u0027.join(s.replace(\u0027_\u0027, \u0027 \u0027).title().split())"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"def round_val(val):"},{"line_number":116,"context_line":"    # we rely on decimal module since it behaves consistently across Python"},{"line_number":117,"context_line":"    # versions (2.x vs. 3.x)"},{"line_number":118,"context_line":"    return int(decimal.Decimal(val).quantize(decimal.Decimal(\u00271\u0027),"}],"source_content_type":"text/x-python","patch_set":11,"id":"7aa08908_74084e92","line":115,"in_reply_to":"7aa08908_4f118903","updated":"2016-06-10 03:03:53.000000000","message":"Thanks for discussing this. I am okay to clean up or imporve documentation later.","commit_id":"1c9feabfb675468a6dca3e31daec442775e4cb69"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"54cf3c3c7fddfc8fa975cede4fbc7faa2bb2b8ca","unresolved":false,"context_lines":[{"line_number":112,"context_line":"    return \u0027\u0027.join(s.replace(\u0027_\u0027, \u0027 \u0027).title().split())"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"def round_val(val):"},{"line_number":116,"context_line":"    # we rely on decimal module since it behaves consistently across Python"},{"line_number":117,"context_line":"    # versions (2.x vs. 3.x)"},{"line_number":118,"context_line":"    return int(decimal.Decimal(val).quantize(decimal.Decimal(\u00271\u0027),"}],"source_content_type":"text/x-python","patch_set":11,"id":"7aa08908_a4c9965b","line":115,"in_reply_to":"7aa08908_6503410e","updated":"2016-06-07 15:23:27.000000000","message":"I\u0027m going to bring this topic up in the neutron-lib meeting this week. Currently we are inconsistent in our method/function docs, so I\u0027d like to understand if we should strive for more docstrings given the broad consumption of neutron-lib.","commit_id":"1c9feabfb675468a6dca3e31daec442775e4cb69"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"382051a52a4cb162a5488c6f501a12622c84d0b1","unresolved":false,"context_lines":[{"line_number":112,"context_line":"    return \u0027\u0027.join(s.replace(\u0027_\u0027, \u0027 \u0027).title().split())"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"def round_val(val):"},{"line_number":116,"context_line":"    # we rely on decimal module since it behaves consistently across Python"},{"line_number":117,"context_line":"    # versions (2.x vs. 3.x)"},{"line_number":118,"context_line":"    return int(decimal.Decimal(val).quantize(decimal.Decimal(\u00271\u0027),"}],"source_content_type":"text/x-python","patch_set":11,"id":"7aa08908_4f118903","line":115,"in_reply_to":"7aa08908_a4c9965b","updated":"2016-06-08 21:16:25.000000000","message":"Today in the networking lib meeting we discussed the topic of enhancing the src docs for code moving into the lib. The consensus was that it\u0027s less impact/risk to move the code \u0027as-is\u0027 and then take doc enhancement patches post-merge. That said IMHO it\u0027s OK to leave as-is here and address it later.","commit_id":"1c9feabfb675468a6dca3e31daec442775e4cb69"}],"neutron_lib/utils/host.py":[{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"c4d2e95750a9dff56914a366a2a33e24dbd7ab69","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import socket"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"def get_hostname():"},{"line_number":21,"context_line":"    return socket.gethostname()"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"bab6814e_87af917c","line":20,"range":{"start_line":20,"start_character":4,"end_line":20,"end_character":16},"updated":"2016-05-24 13:53:56.000000000","message":"I\u0027m on the fence as to if this belongs here or if we should have a net.py or something. I see a number of net related utils in neutron that\u0027ll need to come over at some point.","commit_id":"9b032918f2b4a0ac2b96417fb166d9bd5d7c3f22"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"34872bc2ba3322f595070efcb46762dfec0b4505","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import socket"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"def get_hostname():"},{"line_number":21,"context_line":"    return socket.gethostname()"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"bab6814e_c724f2b0","line":20,"range":{"start_line":20,"start_character":4,"end_line":20,"end_character":16},"in_reply_to":"bab6814e_87af917c","updated":"2016-05-24 15:16:26.000000000","message":"nice idea.","commit_id":"9b032918f2b4a0ac2b96417fb166d9bd5d7c3f22"}],"neutron_lib/utils/process.py":[{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"8f6cd93097e6e5d4d36de73d1f9a1ed0b15daaf2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"bab6814e_0d78adc3","updated":"2016-05-25 11:54:57.000000000","message":"There is no unit test coverage of this file.","commit_id":"5aa6db3861966482f173eb5328d62ae003b8c502"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"0da19e7acedbe341ed2f804231d77ba932b8116a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"bab6814e_a16d2506","in_reply_to":"bab6814e_0d78adc3","updated":"2016-05-25 13:35:50.000000000","message":"Done","commit_id":"5aa6db3861966482f173eb5328d62ae003b8c502"}]}
