)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"5c5b662126dc428ba4fb9ccda9b464d03b11145e","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Gary Kotton \u003cgkotton@vmware.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-09-29 16:22:59 -0700"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Replace assertEqual(None, *) with assertIsNone in tests"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Replace assertEqual(None, *) with assertIsNone in tests to have"},{"line_number":10,"context_line":"more clear messages in case of failure."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3a98d1f4_fca757a4","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":55},"updated":"2016-10-03 13:41:31.000000000","message":"this patch doesn\u0027t replace anything, does it?","commit_id":"a282db20bd04fe4c1eaa52165b8a07b7c2a87bda"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"befa8a5fd24ce99b0fafa875f9c8a091e9ae3d67","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Gary Kotton \u003cgkotton@vmware.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-09-29 16:22:59 -0700"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Replace assertEqual(None, *) with assertIsNone in tests"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Replace assertEqual(None, *) with assertIsNone in tests to have"},{"line_number":10,"context_line":"more clear messages in case of failure."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"1a95cdbc_dbdf0638","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":55},"in_reply_to":"3a98d1f4_fca757a4","updated":"2016-10-09 09:30:51.000000000","message":"No, it just adds the new validation as a gate in the event that this is added in the future","commit_id":"a282db20bd04fe4c1eaa52165b8a07b7c2a87bda"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"befa8a5fd24ce99b0fafa875f9c8a091e9ae3d67","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Replace assertEqual(None, *) with assertIsNone in tests"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Replace assertEqual(None, *) with assertIsNone in tests to have"},{"line_number":10,"context_line":"more clear messages in case of failure."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"This is based on commit 33a459c2c309670b0fcb2fcac5d128e802be7a69"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"1a95cdbc_1be6ce14","line":9,"updated":"2016-10-09 09:30:51.000000000","message":"These lines below are not relevant.","commit_id":"a282db20bd04fe4c1eaa52165b8a07b7c2a87bda"}],"HACKING.rst":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"5c5b662126dc428ba4fb9ccda9b464d03b11145e","unresolved":false,"context_lines":[{"line_number":22,"context_line":"- [N534] Exception messages should be translated"},{"line_number":23,"context_line":"- [N535] Usage of Python eventlet module not allowed"},{"line_number":24,"context_line":"- [N536] String interpolation should be delayed at logging calls."},{"line_number":25,"context_line":"- [N537] Change assertEqual(A, None) or assertEqual(None, A) by optimal assert like"},{"line_number":26,"context_line":"         assertIsNone(A)"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a98d1f4_5ce68be8","line":26,"range":{"start_line":25,"start_character":9,"end_line":26,"end_character":24},"updated":"2016-10-03 13:41:31.000000000","message":"I\u0027d expect something like: \"use assertIsNone() when asserting None\"","commit_id":"a282db20bd04fe4c1eaa52165b8a07b7c2a87bda"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"ebd891924f40a275563b7a15bf006c6ab9cf235c","unresolved":false,"context_lines":[{"line_number":22,"context_line":"- [N534] Exception messages should be translated"},{"line_number":23,"context_line":"- [N535] Usage of Python eventlet module not allowed"},{"line_number":24,"context_line":"- [N536] String interpolation should be delayed at logging calls."},{"line_number":25,"context_line":"- [N537] Change assertEqual(A, None) or assertEqual(None, A) by optimal assert like"},{"line_number":26,"context_line":"         assertIsNone(A)"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a98d1f4_c5055e14","line":26,"range":{"start_line":25,"start_character":9,"end_line":26,"end_character":24},"in_reply_to":"3a98d1f4_5ce68be8","updated":"2016-10-03 14:41:27.000000000","message":"+1 yeah I agree this description could be cleaned up a little bit to better match what the check does.","commit_id":"a282db20bd04fe4c1eaa52165b8a07b7c2a87bda"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"befa8a5fd24ce99b0fafa875f9c8a091e9ae3d67","unresolved":false,"context_lines":[{"line_number":22,"context_line":"- [N534] Exception messages should be translated"},{"line_number":23,"context_line":"- [N535] Usage of Python eventlet module not allowed"},{"line_number":24,"context_line":"- [N536] String interpolation should be delayed at logging calls."},{"line_number":25,"context_line":"- [N537] Change assertEqual(A, None) or assertEqual(None, A) by optimal assert like"},{"line_number":26,"context_line":"         assertIsNone(A)"}],"source_content_type":"text/x-rst","patch_set":3,"id":"1a95cdbc_3bf1cacd","line":26,"range":{"start_line":25,"start_character":9,"end_line":26,"end_character":24},"in_reply_to":"3a98d1f4_c5055e14","updated":"2016-10-09 09:30:51.000000000","message":"Done","commit_id":"a282db20bd04fe4c1eaa52165b8a07b7c2a87bda"},{"author":{"_account_id":14611,"name":"dasm","display_name":"dasm","email":"dsmigiel@redhat.com","username":"dasm"},"change_message_id":"dccc4e41c066793c10a59588284b8b9c4d02dcdb","unresolved":false,"context_lines":[{"line_number":22,"context_line":"- [N534] Exception messages should be translated"},{"line_number":23,"context_line":"- [N535] Usage of Python eventlet module not allowed"},{"line_number":24,"context_line":"- [N536] String interpolation should be delayed at logging calls."},{"line_number":25,"context_line":"- [N537] Use assertIsNone(A) when checking that A is None instead of assertEqual."}],"source_content_type":"text/x-rst","patch_set":6,"id":"fa6399be_42bb9bc4","line":25,"range":{"start_line":25,"start_character":13,"end_line":25,"end_character":25},"updated":"2016-10-11 17:12:13.000000000","message":"Add also info about assertIsNotNone","commit_id":"e3317653028dddcb4805729820af65f7e8d07dab"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"4cd09ff1cbbec3e4dba46ae12103f11feafff39e","unresolved":false,"context_lines":[{"line_number":22,"context_line":"- [N534] Exception messages should be translated"},{"line_number":23,"context_line":"- [N535] Usage of Python eventlet module not allowed"},{"line_number":24,"context_line":"- [N536] String interpolation should be delayed at logging calls."},{"line_number":25,"context_line":"- [N537] Use assertIsNone(A) when checking that A is None instead of assertEqual."}],"source_content_type":"text/x-rst","patch_set":6,"id":"9a629dbe_b715c89c","line":25,"range":{"start_line":25,"start_character":13,"end_line":25,"end_character":25},"in_reply_to":"fa6399be_42bb9bc4","updated":"2016-11-13 05:16:59.000000000","message":"Agreed !","commit_id":"e3317653028dddcb4805729820af65f7e8d07dab"}],"neutron_lib/hacking/checks.py":[{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"7a2ed86fca82a9808d1dda37537231145cde36ad","unresolved":false,"context_lines":[{"line_number":229,"context_line":"    _end_re \u003d re.compile(r\"assertEqual\\(None,\")"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"    if _start_re.search(logical_line) or _end_re.search(logical_line):"},{"line_number":232,"context_line":"        yield (0, \"N537: assertEqual(A, None) or assertEqual(None, A) \""},{"line_number":233,"context_line":"               \"sentences not allowed. Use assertIsNone(A) instead.\")"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"    _start_re \u003d re.compile(r\"assertIs(Not)?\\(None,\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a98d1f4_47fe2438","line":232,"range":{"start_line":232,"start_character":15,"end_line":232,"end_character":16},"updated":"2016-09-29 22:08:42.000000000","message":"For this positions, can we yield the actual char index of the string. For example: https://github.com/openstack/neutron-lib/blob/master/neutron_lib/hacking/checks.py#L68","commit_id":"64691ddd107f2b9cff1baab8572b85f4f3d70e5c"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"9d4a64fc9a0a38ec1f9e75301d1c5b200646b3dc","unresolved":false,"context_lines":[{"line_number":229,"context_line":"    _end_re \u003d re.compile(r\"assertEqual\\(None,\")"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"    if _start_re.search(logical_line) or _end_re.search(logical_line):"},{"line_number":232,"context_line":"        yield (0, \"N537: assertEqual(A, None) or assertEqual(None, A) \""},{"line_number":233,"context_line":"               \"sentences not allowed. Use assertIsNone(A) instead.\")"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"    _start_re \u003d re.compile(r\"assertIs(Not)?\\(None,\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a98d1f4_7f1644a8","line":232,"range":{"start_line":232,"start_character":15,"end_line":232,"end_character":16},"in_reply_to":"3a98d1f4_47fe2438","updated":"2016-09-29 23:23:37.000000000","message":"Done","commit_id":"64691ddd107f2b9cff1baab8572b85f4f3d70e5c"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"7a2ed86fca82a9808d1dda37537231145cde36ad","unresolved":false,"context_lines":[{"line_number":235,"context_line":"    _start_re \u003d re.compile(r\"assertIs(Not)?\\(None,\")"},{"line_number":236,"context_line":"    _end_re \u003d re.compile(r\"assertIs(Not)?\\(.*,\\s+None\\)$\")"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    if _start_re.search(logical_line) or _end_re.search(logical_line):"},{"line_number":239,"context_line":"        yield (0, \"N537: assertIsNot(A, None) or assertIsNot(None, A) must \""},{"line_number":240,"context_line":"               \"not be used. Use assertIsNone(A) or assertIsNotNone(A) \""},{"line_number":241,"context_line":"               \"instead.\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a98d1f4_c7e95482","line":238,"updated":"2016-09-29 22:08:42.000000000","message":"The yield in this if: block isn\u0027t tested. Please see: http://logs.openstack.org/04/379804/2/check/neutron-lib-coverage-ubuntu-xenial/38f6c5a/cover/neutron_lib_hacking_checks_py.html","commit_id":"64691ddd107f2b9cff1baab8572b85f4f3d70e5c"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"9d4a64fc9a0a38ec1f9e75301d1c5b200646b3dc","unresolved":false,"context_lines":[{"line_number":235,"context_line":"    _start_re \u003d re.compile(r\"assertIs(Not)?\\(None,\")"},{"line_number":236,"context_line":"    _end_re \u003d re.compile(r\"assertIs(Not)?\\(.*,\\s+None\\)$\")"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    if _start_re.search(logical_line) or _end_re.search(logical_line):"},{"line_number":239,"context_line":"        yield (0, \"N537: assertIsNot(A, None) or assertIsNot(None, A) must \""},{"line_number":240,"context_line":"               \"not be used. Use assertIsNone(A) or assertIsNotNone(A) \""},{"line_number":241,"context_line":"               \"instead.\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a98d1f4_bfa36c4e","line":238,"in_reply_to":"3a98d1f4_c7e95482","updated":"2016-09-29 23:23:37.000000000","message":"Done","commit_id":"64691ddd107f2b9cff1baab8572b85f4f3d70e5c"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"7a2ed86fca82a9808d1dda37537231145cde36ad","unresolved":false,"context_lines":[{"line_number":257,"context_line":"    register(translation_checks.check_raised_localized_exceptions)"},{"line_number":258,"context_line":"    # TODO(boden) - uncomment this after 0.4.0 ships"},{"line_number":259,"context_line":"    # register(translation_checks.check_delayed_string_interpolation)"},{"line_number":260,"context_line":"    register(assert_equal_none)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a98d1f4_e7bad06d","line":260,"updated":"2016-09-29 22:08:42.000000000","message":"Personally I\u0027m not ready to add any new public checks until we figure out how to roll them out without mass gate impact to consumers with something like [1]. But that\u0027s just me.\n\n\n[1] https://review.openstack.org/#/c/350723/","commit_id":"64691ddd107f2b9cff1baab8572b85f4f3d70e5c"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"9d4a64fc9a0a38ec1f9e75301d1c5b200646b3dc","unresolved":false,"context_lines":[{"line_number":257,"context_line":"    register(translation_checks.check_raised_localized_exceptions)"},{"line_number":258,"context_line":"    # TODO(boden) - uncomment this after 0.4.0 ships"},{"line_number":259,"context_line":"    # register(translation_checks.check_delayed_string_interpolation)"},{"line_number":260,"context_line":"    register(assert_equal_none)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a98d1f4_1f9540dd","line":260,"in_reply_to":"3a98d1f4_e7bad06d","updated":"2016-09-29 23:23:37.000000000","message":"Done","commit_id":"64691ddd107f2b9cff1baab8572b85f4f3d70e5c"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"5c5b662126dc428ba4fb9ccda9b464d03b11145e","unresolved":false,"context_lines":[{"line_number":225,"context_line":""},{"line_number":226,"context_line":"def assert_equal_none(logical_line):"},{"line_number":227,"context_line":"    \"\"\"N537 - Use assertIsNone\"\"\""},{"line_number":228,"context_line":"    _start_re \u003d re.compile(r\"assertEqual\\(.*?,\\s+None\\)$\")"},{"line_number":229,"context_line":"    _end_re \u003d re.compile(r\"assertEqual\\(None,\")"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"    if _start_re.search(logical_line) or _end_re.search(logical_line):"},{"line_number":232,"context_line":"        msg \u003d (\"N537: assertEqual(A, None) or assertEqual(None, A) \""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a98d1f4_1cca431b","line":229,"range":{"start_line":228,"start_character":4,"end_line":229,"end_character":47},"updated":"2016-10-03 13:41:31.000000000","message":"consider moving to the module level to not compile every time the func is called","commit_id":"a282db20bd04fe4c1eaa52165b8a07b7c2a87bda"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"befa8a5fd24ce99b0fafa875f9c8a091e9ae3d67","unresolved":false,"context_lines":[{"line_number":225,"context_line":""},{"line_number":226,"context_line":"def assert_equal_none(logical_line):"},{"line_number":227,"context_line":"    \"\"\"N537 - Use assertIsNone\"\"\""},{"line_number":228,"context_line":"    _start_re \u003d re.compile(r\"assertEqual\\(.*?,\\s+None\\)$\")"},{"line_number":229,"context_line":"    _end_re \u003d re.compile(r\"assertEqual\\(None,\")"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"    if _start_re.search(logical_line) or _end_re.search(logical_line):"},{"line_number":232,"context_line":"        msg \u003d (\"N537: assertEqual(A, None) or assertEqual(None, A) \""}],"source_content_type":"text/x-python","patch_set":3,"id":"1a95cdbc_dbb626f8","line":229,"range":{"start_line":228,"start_character":4,"end_line":229,"end_character":47},"in_reply_to":"3a98d1f4_1cca431b","updated":"2016-10-09 09:30:51.000000000","message":"Done","commit_id":"a282db20bd04fe4c1eaa52165b8a07b7c2a87bda"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"ebd891924f40a275563b7a15bf006c6ab9cf235c","unresolved":false,"context_lines":[{"line_number":225,"context_line":""},{"line_number":226,"context_line":"def assert_equal_none(logical_line):"},{"line_number":227,"context_line":"    \"\"\"N537 - Use assertIsNone\"\"\""},{"line_number":228,"context_line":"    _start_re \u003d re.compile(r\"assertEqual\\(.*?,\\s+None\\)$\")"},{"line_number":229,"context_line":"    _end_re \u003d re.compile(r\"assertEqual\\(None,\")"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"    if _start_re.search(logical_line) or _end_re.search(logical_line):"},{"line_number":232,"context_line":"        msg \u003d (\"N537: assertEqual(A, None) or assertEqual(None, A) \""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a98d1f4_f08a1663","line":229,"range":{"start_line":228,"start_character":4,"end_line":229,"end_character":47},"in_reply_to":"3a98d1f4_1cca431b","updated":"2016-10-03 14:41:27.000000000","message":"Probably a good practice, but IMHO doesn\u0027t really buy us much here since these in practice these are only really run once per pep8 check...\n\n\nAlso note lots of other checks define them in their functions. Maybe we should go ahead and put them all at the module level as part of a separate patch?","commit_id":"a282db20bd04fe4c1eaa52165b8a07b7c2a87bda"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"5c5b662126dc428ba4fb9ccda9b464d03b11145e","unresolved":false,"context_lines":[{"line_number":233,"context_line":"               \"sentences not allowed. Use assertIsNone(A) instead.\")"},{"line_number":234,"context_line":"        yield logical_line.index(\u0027assert\u0027), msg"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    _start_re \u003d re.compile(r\"assertIs(Not)?\\(None,\")"},{"line_number":237,"context_line":"    _end_re \u003d re.compile(r\"assertIs(Not)?\\(.*,\\s+None\\)$\")"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    if _start_re.search(logical_line) or _end_re.search(logical_line):"},{"line_number":240,"context_line":"        msg \u003d (\"N537: assertIsNot(A, None) or assertIsNot(None, A) must \""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a98d1f4_7ca18745","line":237,"range":{"start_line":236,"start_character":4,"end_line":237,"end_character":58},"updated":"2016-10-03 13:41:31.000000000","message":"ditto","commit_id":"a282db20bd04fe4c1eaa52165b8a07b7c2a87bda"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"befa8a5fd24ce99b0fafa875f9c8a091e9ae3d67","unresolved":false,"context_lines":[{"line_number":233,"context_line":"               \"sentences not allowed. Use assertIsNone(A) instead.\")"},{"line_number":234,"context_line":"        yield logical_line.index(\u0027assert\u0027), msg"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    _start_re \u003d re.compile(r\"assertIs(Not)?\\(None,\")"},{"line_number":237,"context_line":"    _end_re \u003d re.compile(r\"assertIs(Not)?\\(.*,\\s+None\\)$\")"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    if _start_re.search(logical_line) or _end_re.search(logical_line):"},{"line_number":240,"context_line":"        msg \u003d (\"N537: assertIsNot(A, None) or assertIsNot(None, A) must \""}],"source_content_type":"text/x-python","patch_set":3,"id":"1a95cdbc_fbd12224","line":237,"range":{"start_line":236,"start_character":4,"end_line":237,"end_character":58},"in_reply_to":"3a98d1f4_7ca18745","updated":"2016-10-09 09:30:51.000000000","message":"Done","commit_id":"a282db20bd04fe4c1eaa52165b8a07b7c2a87bda"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"0b7075ff4216a74b152e0bcb17f43fdc354c7a96","unresolved":false,"context_lines":[{"line_number":37,"context_line":"namespace_imports_from_root \u003d re.compile(r\"from[\\s]+([\\w]+)[\\s]+import[\\s]+\")"},{"line_number":38,"context_line":"contextlib_nested \u003d re.compile(r\"^\\s*with (contextlib\\.)?nested\\(\")"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"start_equal_none \u003d re.compile(r\"assertEqual\\(.*?,\\s+None\\)$\")"},{"line_number":41,"context_line":"end_equal_none \u003d re.compile(r\"assertEqual\\(None,\")"},{"line_number":42,"context_line":"start_is_none \u003d re.compile(r\"assertIs(Not)?\\(None,\")"},{"line_number":43,"context_line":"end_is_none \u003d re.compile(r\"assertIs(Not)?\\(.*,\\s+None\\)$\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a95cdbc_d114474e","line":40,"range":{"start_line":40,"start_character":58,"end_line":40,"end_character":59},"updated":"2016-10-09 14:59:19.000000000","message":"Don\u0027t include the line-end token (\u0027$\u0027), or it will miss statements with comments.","commit_id":"efc77af05aa1c08078e16b2dbf28b1e08cb03fc1"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"4f0617a3b98233f5753510c612af6d5a8130a388","unresolved":false,"context_lines":[{"line_number":37,"context_line":"namespace_imports_from_root \u003d re.compile(r\"from[\\s]+([\\w]+)[\\s]+import[\\s]+\")"},{"line_number":38,"context_line":"contextlib_nested \u003d re.compile(r\"^\\s*with (contextlib\\.)?nested\\(\")"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"start_equal_none \u003d re.compile(r\"assertEqual\\(.*?,\\s+None\\)$\")"},{"line_number":41,"context_line":"end_equal_none \u003d re.compile(r\"assertEqual\\(None,\")"},{"line_number":42,"context_line":"start_is_none \u003d re.compile(r\"assertIs(Not)?\\(None,\")"},{"line_number":43,"context_line":"end_is_none \u003d re.compile(r\"assertIs(Not)?\\(.*,\\s+None\\)$\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a95cdbc_64000e67","line":40,"range":{"start_line":40,"start_character":58,"end_line":40,"end_character":59},"in_reply_to":"1a95cdbc_d114474e","updated":"2016-10-10 06:27:44.000000000","message":"Done","commit_id":"efc77af05aa1c08078e16b2dbf28b1e08cb03fc1"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"0b7075ff4216a74b152e0bcb17f43fdc354c7a96","unresolved":false,"context_lines":[{"line_number":40,"context_line":"start_equal_none \u003d re.compile(r\"assertEqual\\(.*?,\\s+None\\)$\")"},{"line_number":41,"context_line":"end_equal_none \u003d re.compile(r\"assertEqual\\(None,\")"},{"line_number":42,"context_line":"start_is_none \u003d re.compile(r\"assertIs(Not)?\\(None,\")"},{"line_number":43,"context_line":"end_is_none \u003d re.compile(r\"assertIs(Not)?\\(.*,\\s+None\\)$\")"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"def use_jsonutils(logical_line, filename):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a95cdbc_110b0f2b","line":43,"range":{"start_line":43,"start_character":55,"end_line":43,"end_character":56},"updated":"2016-10-09 14:59:19.000000000","message":"ditto","commit_id":"efc77af05aa1c08078e16b2dbf28b1e08cb03fc1"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"4f0617a3b98233f5753510c612af6d5a8130a388","unresolved":false,"context_lines":[{"line_number":40,"context_line":"start_equal_none \u003d re.compile(r\"assertEqual\\(.*?,\\s+None\\)$\")"},{"line_number":41,"context_line":"end_equal_none \u003d re.compile(r\"assertEqual\\(None,\")"},{"line_number":42,"context_line":"start_is_none \u003d re.compile(r\"assertIs(Not)?\\(None,\")"},{"line_number":43,"context_line":"end_is_none \u003d re.compile(r\"assertIs(Not)?\\(.*,\\s+None\\)$\")"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"def use_jsonutils(logical_line, filename):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a95cdbc_84fb5a78","line":43,"range":{"start_line":43,"start_character":55,"end_line":43,"end_character":56},"in_reply_to":"1a95cdbc_110b0f2b","updated":"2016-10-10 06:27:44.000000000","message":"Done","commit_id":"efc77af05aa1c08078e16b2dbf28b1e08cb03fc1"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"034468d74be7ae608912a0514d1e30fbd6d2d428","unresolved":false,"context_lines":[{"line_number":37,"context_line":"namespace_imports_from_root \u003d re.compile(r\"from[\\s]+([\\w]+)[\\s]+import[\\s]+\")"},{"line_number":38,"context_line":"contextlib_nested \u003d re.compile(r\"^\\s*with (contextlib\\.)?nested\\(\")"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"equal_ends_with_none \u003d re.compile(r\"assertEqual\\(.*?,\\s+None\\)\")"},{"line_number":41,"context_line":"equal_starts_with_none \u003d re.compile(r\"assertEqual\\(None,\")"},{"line_number":42,"context_line":"is_ends_with_none \u003d re.compile(r\"assertIs(Not)?\\(None,\")"},{"line_number":43,"context_line":"is_starts_with_none \u003d re.compile(r\"assertIs(Not)?\\(.*,\\s+None\\)\")"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"def use_jsonutils(logical_line, filename):"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a95cdbc_3fcc36ba","line":43,"range":{"start_line":40,"start_character":0,"end_line":43,"end_character":65},"updated":"2016-10-10 14:48:20.000000000","message":"A few comments on these:\n- Couldn\u0027t we combine them to only have 2 total REs making it easier to check them in fn below? For example::\n    is_ends_with_none \u003d re.compile(r\"assertIs(Not)?\\(None,|assertIs(Not)?\\(.*,\\s+None\\)\")\n- About the naming; should we consider a more descriptive name for the var like \"assert_equal_none\".\n- I\u0027m not sure why we make these public TBH. If we\u0027re going to keep them as public should we consider all CAPS naming to reflect the fact that they\u0027re really constants??","commit_id":"e3317653028dddcb4805729820af65f7e8d07dab"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"034468d74be7ae608912a0514d1e30fbd6d2d428","unresolved":false,"context_lines":[{"line_number":228,"context_line":"        yield logical_line.index(\u0027eventlet\u0027), msg"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"def assert_equal_none(logical_line):"},{"line_number":232,"context_line":"    \"\"\"N537 - Use assertIsNone\"\"\""},{"line_number":233,"context_line":"    if (equal_ends_with_none.search(logical_line) or"},{"line_number":234,"context_line":"            equal_starts_with_none.search(logical_line)):"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a95cdbc_9f4d4ac6","line":231,"range":{"start_line":231,"start_character":4,"end_line":231,"end_character":21},"updated":"2016-10-10 14:48:20.000000000","message":"The interesting thing about this check is that it \"seems\" most applicable to UT code and I\u0027m not sure if/how consumers use pep8 on their tests. I guess by including it here consumers can decide how to apply within their project.","commit_id":"e3317653028dddcb4805729820af65f7e8d07dab"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"034468d74be7ae608912a0514d1e30fbd6d2d428","unresolved":false,"context_lines":[{"line_number":229,"context_line":""},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"def assert_equal_none(logical_line):"},{"line_number":232,"context_line":"    \"\"\"N537 - Use assertIsNone\"\"\""},{"line_number":233,"context_line":"    if (equal_ends_with_none.search(logical_line) or"},{"line_number":234,"context_line":"            equal_starts_with_none.search(logical_line)):"},{"line_number":235,"context_line":"        msg \u003d (\"N537: assertEqual(A, None) or assertEqual(None, A) \""}],"source_content_type":"text/x-python","patch_set":6,"id":"1a95cdbc_bfebe6da","line":232,"range":{"start_line":232,"start_character":18,"end_line":232,"end_character":30},"updated":"2016-10-10 14:48:20.000000000","message":"Nit: period after this for consistency with others herein.","commit_id":"e3317653028dddcb4805729820af65f7e8d07dab"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"034468d74be7ae608912a0514d1e30fbd6d2d428","unresolved":false,"context_lines":[{"line_number":232,"context_line":"    \"\"\"N537 - Use assertIsNone\"\"\""},{"line_number":233,"context_line":"    if (equal_ends_with_none.search(logical_line) or"},{"line_number":234,"context_line":"            equal_starts_with_none.search(logical_line)):"},{"line_number":235,"context_line":"        msg \u003d (\"N537: assertEqual(A, None) or assertEqual(None, A) \""},{"line_number":236,"context_line":"               \"sentences not allowed. Use assertIsNone(A) instead.\")"},{"line_number":237,"context_line":"        yield logical_line.index(\u0027assert\u0027), msg"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    if (is_ends_with_none.search(logical_line) or"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a95cdbc_ff8d6e31","line":236,"range":{"start_line":235,"start_character":16,"end_line":236,"end_character":67},"updated":"2016-10-10 14:48:20.000000000","message":"I\u0027d opt for something a bit more compact (and without the word \u0027sentence\u0027) like: \"Use assertIsNone rather than assertEqual to check for None values.\"","commit_id":"e3317653028dddcb4805729820af65f7e8d07dab"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"034468d74be7ae608912a0514d1e30fbd6d2d428","unresolved":false,"context_lines":[{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    if (is_ends_with_none.search(logical_line) or"},{"line_number":240,"context_line":"            is_starts_with_none.search(logical_line)):"},{"line_number":241,"context_line":"        msg \u003d (\"N537: assertIsNot(A, None) or assertIsNot(None, A) must \""},{"line_number":242,"context_line":"               \"not be used. Use assertIsNone(A) or assertIsNotNone(A) \""},{"line_number":243,"context_line":"               \"instead.\")"},{"line_number":244,"context_line":"        yield logical_line.index(\u0027assert\u0027), msg"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1a95cdbc_7fa15e93","line":243,"range":{"start_line":241,"start_character":16,"end_line":243,"end_character":25},"updated":"2016-10-10 14:48:20.000000000","message":"Ditto. I\u0027d opt for something like: \"Use assertIsNone or assertIsNotNone rather than assertIs or assertIsNone to check for None values.\"","commit_id":"e3317653028dddcb4805729820af65f7e8d07dab"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"e6b2ba61e08a7b85224d71a62c03322bae866671","unresolved":false,"context_lines":[{"line_number":258,"context_line":"    # TODO(boden) - uncomment this after 0.4.0 ships"},{"line_number":259,"context_line":"    # register(translation_checks.check_delayed_string_interpolation)"},{"line_number":260,"context_line":"    # TODO(boden): uncomment once hacking check rollout solidifies"},{"line_number":261,"context_line":"    # register(assert_equal_none)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a71b18c_0c9fe050","line":261,"updated":"2016-12-09 13:33:35.000000000","message":"I think we should wait for [1]; otherwise this hacking check just sits dormant; perhaps collecting dust.\n\n\n[1] https://review.openstack.org/#/c/350723/","commit_id":"bac984e417762857c9fc40e84b330beb6e2cbb2c"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"88f9dd1434ba838371ffcabbb104f5e5cc2f2358","unresolved":false,"context_lines":[{"line_number":261,"context_line":"    register(translation_checks.no_translate_debug_logs)"},{"line_number":262,"context_line":"    register(translation_checks.check_log_warn_deprecated)"},{"line_number":263,"context_line":"    register(translation_checks.check_raised_localized_exceptions)"},{"line_number":264,"context_line":"    register(assert_equal_none)"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"def incubating_factory(register):"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a6eadb0_6c16dba8","line":264,"updated":"2016-12-19 14:05:16.000000000","message":"New checks should be added to the incubating_factory so that consumers can have a chance to adopt/comply. See [1] for the approximate process.\n\n\n[1] https://github.com/openstack/neutron-lib/blob/master/doc/source/usage.rst","commit_id":"6fcd5da088f15c4d0f1527ba26d23d98475278c5"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"222e5d22cec60644dae2de4734ee583d4c2464d4","unresolved":false,"context_lines":[{"line_number":261,"context_line":"    register(translation_checks.no_translate_debug_logs)"},{"line_number":262,"context_line":"    register(translation_checks.check_log_warn_deprecated)"},{"line_number":263,"context_line":"    register(translation_checks.check_raised_localized_exceptions)"},{"line_number":264,"context_line":"    register(assert_equal_none)"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"def incubating_factory(register):"}],"source_content_type":"text/x-python","patch_set":8,"id":"da4df55a_d0e643b3","line":264,"in_reply_to":"1a6eadb0_6c16dba8","updated":"2016-12-26 07:43:10.000000000","message":"Done","commit_id":"6fcd5da088f15c4d0f1527ba26d23d98475278c5"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"020a30ffbcc9a6ecd7c9b2b3d8e08c1ea833fb6c","unresolved":false,"context_lines":[{"line_number":289,"context_line":""},{"line_number":290,"context_line":"    # neutron-lib project specific checks below"},{"line_number":291,"context_line":"    register(check_no_eventlet_imports)"},{"line_number":292,"context_line":"    register(assert_equal_none)"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba5201f7_007264ad","line":292,"updated":"2017-01-03 18:50:30.000000000","message":"This should go into incubating_factory() since it\u0027ll be rolled out to consumers sooner rather than later. _neutron_lib_factory() is for checks that we don\u0027t plan to introduce to consumers anytime soon.","commit_id":"fb2379b36f51157d51dbbd70c6a37503532e8846"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"637346ca0d7c61c6da0fb7e8edb753a36982373b","unresolved":false,"context_lines":[{"line_number":289,"context_line":""},{"line_number":290,"context_line":"    # neutron-lib project specific checks below"},{"line_number":291,"context_line":"    register(check_no_eventlet_imports)"},{"line_number":292,"context_line":"    register(assert_equal_none)"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a3c09a3_413740b0","line":292,"in_reply_to":"ba5201f7_007264ad","updated":"2017-01-13 14:23:44.000000000","message":"Done","commit_id":"fb2379b36f51157d51dbbd70c6a37503532e8846"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"fb4a00919b3d224ded879a5d21a05a48e71e91df","unresolved":false,"context_lines":[{"line_number":273,"context_line":"    :param register: The function to register the check functions with."},{"line_number":274,"context_line":"    :returns: None."},{"line_number":275,"context_line":"    \"\"\""},{"line_number":276,"context_line":"    register(assert_equal_none)"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"def _neutron_lib_factory(register):"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a3c09a3_488d9c30","line":276,"updated":"2017-01-13 16:50:31.000000000","message":"Note that since my last review, Armando and I have discussed this approach and it\u0027s likely the notion of incubating factory will go away due to the complexity in testing 2 separate factories for consumer gate job logic. However I don\u0027t think it\u0027s safe to update the approach until after Ocata.\n\nSo for now, this patch is fine; the check will run for neutron_lib and not affect consumers.","commit_id":"49df895f189caa5ec513559e12970b3f3cd0bfc2"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"4a7f38381dffa4320ce6cd0e7e810541742d442f","unresolved":false,"context_lines":[{"line_number":273,"context_line":"    :param register: The function to register the check functions with."},{"line_number":274,"context_line":"    :returns: None."},{"line_number":275,"context_line":"    \"\"\""},{"line_number":276,"context_line":"    register(assert_equal_none)"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"def _neutron_lib_factory(register):"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a3c09a3_f3a87879","line":276,"in_reply_to":"7a3c09a3_488d9c30","updated":"2017-01-17 16:12:33.000000000","message":"It is not easy to switch the factory itself.\n\nInstead how about having an option like \u0027enable-incubation-check \u003d True\u0027 in [hacking] section in tox.ini?\n\nfactory() function can be updated as follows:\n\n  def factory(register):\n      \u003cvarious official checks\u003e\n      if hacking.core.CONF.get(\u0027enable-incubation-check\u0027, default\u003dFalse):\n          incubating_factory(register)\n\nBy doing so, we can easily enable both official and incubated checks at the same time by changing the hacking option to True.\n\nOne thing which might need a discussion is whether we can add a neutron specific option to [hacking] section.\n\nThought?","commit_id":"49df895f189caa5ec513559e12970b3f3cd0bfc2"}],"neutron_lib/tests/unit/hacking/test_checks.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"5c5b662126dc428ba4fb9ccda9b464d03b11145e","unresolved":false,"context_lines":[{"line_number":231,"context_line":""},{"line_number":232,"context_line":"    def test_assert_equal_none(self):"},{"line_number":233,"context_line":"        self.assertEqual(len(list(checks.assert_equal_none("},{"line_number":234,"context_line":"            \"self.assertEqual(A, None)\"))), 1)"},{"line_number":235,"context_line":"        self.assertEqual(len(list(checks.assert_equal_none("},{"line_number":236,"context_line":"            \"self.assertEqual(None, A)\"))), 1)"},{"line_number":237,"context_line":"        self.assertEqual(len(list(checks.assert_equal_none("}],"source_content_type":"text/x-python","patch_set":3,"id":"3a98d1f4_1c3403fa","line":234,"range":{"start_line":234,"start_character":12,"end_line":234,"end_character":39},"updated":"2016-10-03 13:41:31.000000000","message":"what about newlines, like:\n \"self.assertEqual(A,\n      None)\"","commit_id":"a282db20bd04fe4c1eaa52165b8a07b7c2a87bda"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"befa8a5fd24ce99b0fafa875f9c8a091e9ae3d67","unresolved":false,"context_lines":[{"line_number":231,"context_line":""},{"line_number":232,"context_line":"    def test_assert_equal_none(self):"},{"line_number":233,"context_line":"        self.assertEqual(len(list(checks.assert_equal_none("},{"line_number":234,"context_line":"            \"self.assertEqual(A, None)\"))), 1)"},{"line_number":235,"context_line":"        self.assertEqual(len(list(checks.assert_equal_none("},{"line_number":236,"context_line":"            \"self.assertEqual(None, A)\"))), 1)"},{"line_number":237,"context_line":"        self.assertEqual(len(list(checks.assert_equal_none("}],"source_content_type":"text/x-python","patch_set":3,"id":"1a95cdbc_bb987a6b","line":234,"range":{"start_line":234,"start_character":12,"end_line":234,"end_character":39},"in_reply_to":"3a98d1f4_1c3403fa","updated":"2016-10-09 09:30:51.000000000","message":"This is already done when using the logical line","commit_id":"a282db20bd04fe4c1eaa52165b8a07b7c2a87bda"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"0b7075ff4216a74b152e0bcb17f43fdc354c7a96","unresolved":false,"context_lines":[{"line_number":241,"context_line":"        self.assertEqual("},{"line_number":242,"context_line":"            len(list(checks.assert_equal_none(\"self.assertIsNone(A)\"))), 0)"},{"line_number":243,"context_line":"        self.assertEqual("},{"line_number":244,"context_line":"            len(list(checks.assert_equal_none(\"self.assertIsNotNone(A)\"))), 0)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a95cdbc_35055610","line":244,"updated":"2016-10-09 14:59:19.000000000","message":"Include a test for a statement with a comment.","commit_id":"efc77af05aa1c08078e16b2dbf28b1e08cb03fc1"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"4f0617a3b98233f5753510c612af6d5a8130a388","unresolved":false,"context_lines":[{"line_number":241,"context_line":"        self.assertEqual("},{"line_number":242,"context_line":"            len(list(checks.assert_equal_none(\"self.assertIsNone(A)\"))), 0)"},{"line_number":243,"context_line":"        self.assertEqual("},{"line_number":244,"context_line":"            len(list(checks.assert_equal_none(\"self.assertIsNotNone(A)\"))), 0)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a95cdbc_2f889f70","line":244,"in_reply_to":"1a95cdbc_35055610","updated":"2016-10-10 06:27:44.000000000","message":"Done","commit_id":"efc77af05aa1c08078e16b2dbf28b1e08cb03fc1"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"020a30ffbcc9a6ecd7c9b2b3d8e08c1ea833fb6c","unresolved":false,"context_lines":[{"line_number":228,"context_line":""},{"line_number":229,"context_line":"    def test_assert_equal_none(self):"},{"line_number":230,"context_line":"        self.assertEqual(len(list(checks.assert_equal_none("},{"line_number":231,"context_line":"            \"self.assertEqual(A, None)\"))), 1)"},{"line_number":232,"context_line":"        self.assertEqual(len(list(checks.assert_equal_none("},{"line_number":233,"context_line":"            \"self.assertEqual(A, None)  # Comment\"))), 1)"},{"line_number":234,"context_line":"        self.assertEqual(len(list(checks.assert_equal_none("}],"source_content_type":"text/x-python","patch_set":9,"id":"ba5201f7_0080a445","line":231,"updated":"2017-01-03 18:50:30.000000000","message":"Nit: Isn\u0027t it an unwritten style to use the constant for assertEqual as the 1st arg and the actual result as the 2nd?","commit_id":"fb2379b36f51157d51dbbd70c6a37503532e8846"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"637346ca0d7c61c6da0fb7e8edb753a36982373b","unresolved":false,"context_lines":[{"line_number":228,"context_line":""},{"line_number":229,"context_line":"    def test_assert_equal_none(self):"},{"line_number":230,"context_line":"        self.assertEqual(len(list(checks.assert_equal_none("},{"line_number":231,"context_line":"            \"self.assertEqual(A, None)\"))), 1)"},{"line_number":232,"context_line":"        self.assertEqual(len(list(checks.assert_equal_none("},{"line_number":233,"context_line":"            \"self.assertEqual(A, None)  # Comment\"))), 1)"},{"line_number":234,"context_line":"        self.assertEqual(len(list(checks.assert_equal_none("}],"source_content_type":"text/x-python","patch_set":9,"id":"7a3c09a3_a1462421","line":231,"in_reply_to":"ba5201f7_0080a445","updated":"2017-01-13 14:23:44.000000000","message":"This is checked a few lines below. No sure what to here - this just covers all bases. I can blow this away.","commit_id":"fb2379b36f51157d51dbbd70c6a37503532e8846"}],"releasenotes/notes/hacking-check-n537-280ec39c061d9dd7.yaml":[{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"88f9dd1434ba838371ffcabbb104f5e5cc2f2358","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Added hacking check N537. This hacking check is currently not registered"},{"line_number":4,"context_line":"    as part of neutron_lib.hacking.checks.factory()."}],"source_content_type":"text/x-yaml","patch_set":8,"id":"1a6eadb0_2c4b03b2","line":4,"range":{"start_line":3,"start_character":49,"end_line":4,"end_character":51},"updated":"2016-12-19 14:05:16.000000000","message":"As mentioned on checks.py, the new check should go into the incubating_factory; so this statement isn\u0027t correct.\n\n\nAlso nit: code refs format better like this::\n\n   ``neutron_lib.hacking.checks.factory()``","commit_id":"6fcd5da088f15c4d0f1527ba26d23d98475278c5"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"222e5d22cec60644dae2de4734ee583d4c2464d4","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Added hacking check N537. This hacking check is currently not registered"},{"line_number":4,"context_line":"    as part of neutron_lib.hacking.checks.factory()."}],"source_content_type":"text/x-yaml","patch_set":8,"id":"da4df55a_b0fe1f36","line":4,"range":{"start_line":3,"start_character":49,"end_line":4,"end_character":51},"in_reply_to":"1a6eadb0_2c4b03b2","updated":"2016-12-26 07:43:10.000000000","message":"Done","commit_id":"6fcd5da088f15c4d0f1527ba26d23d98475278c5"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"020a30ffbcc9a6ecd7c9b2b3d8e08c1ea833fb6c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Added hacking check N536. This hacking check is added to the"},{"line_number":4,"context_line":"    incubated checks."}],"source_content_type":"text/x-yaml","patch_set":9,"id":"ba5201f7_20de886d","line":4,"range":{"start_line":4,"start_character":4,"end_line":4,"end_character":13},"updated":"2017-01-03 18:50:30.000000000","message":"Nit: maybe \"incubating\" would read better?","commit_id":"fb2379b36f51157d51dbbd70c6a37503532e8846"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"637346ca0d7c61c6da0fb7e8edb753a36982373b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Added hacking check N536. This hacking check is added to the"},{"line_number":4,"context_line":"    incubated checks."}],"source_content_type":"text/x-yaml","patch_set":9,"id":"7a3c09a3_41a100a9","line":4,"range":{"start_line":4,"start_character":4,"end_line":4,"end_character":13},"in_reply_to":"ba5201f7_20de886d","updated":"2017-01-13 14:23:44.000000000","message":"Done","commit_id":"fb2379b36f51157d51dbbd70c6a37503532e8846"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"fb4a00919b3d224ded879a5d21a05a48e71e91df","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Added hacking check N536. This hacking check is added to the"},{"line_number":4,"context_line":"    incubating checks."}],"source_content_type":"text/x-yaml","patch_set":10,"id":"7a3c09a3_6899786e","line":3,"range":{"start_line":3,"start_character":24,"end_line":3,"end_character":28},"updated":"2017-01-13 16:50:31.000000000","message":"Nit: use code formatting like ``N536``","commit_id":"49df895f189caa5ec513559e12970b3f3cd0bfc2"}]}
