)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"4b7b8f1a56c6760f8f6536312ac5827f759e2890","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"There is deep dive about PEP-0274[2] and basic tests about"},{"line_number":18,"context_line":"performance[3]."},{"line_number":19,"context_line":"Note: This commit doesn\u0027t handle dict constructor with kwagrs."},{"line_number":20,"context_line":"This commit also adds a hacking rule."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"[1]http://legacy.python.org/dev/peps/pep-0274/"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3a961159_a1cde460","line":19,"updated":"2015-01-09 18:03:35.000000000","message":"s/kwagrs/kwargs","commit_id":"52aa0db054faf30f9cf5d16b10d68afef4049ecb"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"4b7b8f1a56c6760f8f6536312ac5827f759e2890","unresolved":false,"context_lines":[{"line_number":17,"context_line":"There is deep dive about PEP-0274[2] and basic tests about"},{"line_number":18,"context_line":"performance[3]."},{"line_number":19,"context_line":"Note: This commit doesn\u0027t handle dict constructor with kwagrs."},{"line_number":20,"context_line":"This commit also adds a hacking rule."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"[1]http://legacy.python.org/dev/peps/pep-0274/"},{"line_number":23,"context_line":"[2]http://doughellmann.com/2012/11/12/the-performance-impact-of-using-dict-instead-of-in-cpython-2-7-2.html"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3a961159_b30ff72e","line":20,"updated":"2015-01-09 18:03:35.000000000","message":"What is the hacking rule this commit adds?","commit_id":"52aa0db054faf30f9cf5d16b10d68afef4049ecb"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"4b7b8f1a56c6760f8f6536312ac5827f759e2890","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"[1]http://legacy.python.org/dev/peps/pep-0274/"},{"line_number":23,"context_line":"[2]http://doughellmann.com/2012/11/12/the-performance-impact-of-using-dict-instead-of-in-cpython-2-7-2.html"},{"line_number":24,"context_line":"[3]http://paste.openstack.org/show/154798/1]http://legacy.python.org/dev/peps/pep-0274/"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Change-Id: Ie74719d0c969fa7819c243d5b162df6656c1e136"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3a961159_219e546a","line":24,"updated":"2015-01-09 18:03:35.000000000","message":"Remove \u00271]http://legacy.python.org/dev/peps/pep-0274/\u0027 at the end,","commit_id":"52aa0db054faf30f9cf5d16b10d68afef4049ecb"}],"keystone/hacking/checks.py":[{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"f6c92094aeacc6e286173590567a3ed5460bfd31","unresolved":false,"context_lines":[{"line_number":410,"context_line":"    K008: dict([[i,i] for i in range(3)])"},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"    \"\"\""},{"line_number":413,"context_line":"    MESSAGE \u003d (\"K008 Must use a dict comprehension instead of a dict\""},{"line_number":414,"context_line":"               \" constructor with a sequence of key-value pairs.\")"},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"    dict_constructor_with_sequence_re \u003d re.compile(r\".*\\bdict\\((\\[)?(\\(|\\[)\")"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_cfccc4be","line":413,"updated":"2015-01-12 02:42:43.000000000","message":"Nice catch on the colon mark. I haven\u0027t noticed this.","commit_id":"42d980b3fa2d6494848fd2282e5dde22a6ed55a6"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"44b1375635e1882d03531be430a8fb8d71ba64b2","unresolved":false,"context_lines":[{"line_number":413,"context_line":"    MESSAGE \u003d (\"K008 Must use a dict comprehension instead of a dict\""},{"line_number":414,"context_line":"               \" constructor with a sequence of key-value pairs.\")"},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"    dict_constructor_with_sequence_re \u003d re.compile(r\".*\\bdict\\((\\[)?(\\(|\\[)\")"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"    if dict_constructor_with_sequence_re.match(logical_line):"},{"line_number":419,"context_line":"        yield (0, MESSAGE)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a961159_4fc29454","line":416,"updated":"2015-01-12 03:02:25.000000000","message":"I think this regex is not correct, it searches for \u0027dict([(\u0027, \u0027dict([[\u0027, \u0027dict((\u0027 or \u0027dict([\u0027.\n\nShould \u0027dict(({1:2}))\u0027 raise K008?\n\nNot sure this is a requirement, but why not use AST instead of regex, as the other hacking checks are doing?","commit_id":"a7195e77a58bfe41dcb617656bae2d2c24b094f3"},{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"2d6159b9ca0696f5595b2563f03dbe17b6742da5","unresolved":false,"context_lines":[{"line_number":413,"context_line":"    MESSAGE \u003d (\"K008 Must use a dict comprehension instead of a dict\""},{"line_number":414,"context_line":"               \" constructor with a sequence of key-value pairs.\")"},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"    dict_constructor_with_sequence_re \u003d re.compile(r\".*\\bdict\\((\\[)?(\\(|\\[)\")"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"    if dict_constructor_with_sequence_re.match(logical_line):"},{"line_number":419,"context_line":"        yield (0, MESSAGE)"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa81d914_8130de57","line":416,"in_reply_to":"1a930d6b_d7e9f8b7","updated":"2015-01-28 03:37:52.000000000","message":"re.compile(r\".*\\bdict\\((\\[)?(\\(|\\[)(?!\\{)\").match(\u0027dict(({1:2}))\u0027)  can handle the case, \n\nbut what\u0027s the other extra case we have ? and what\u0027s the exact regex can we use .","commit_id":"a7195e77a58bfe41dcb617656bae2d2c24b094f3"},{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"86ccd76904cbe9ef5beb1d58bef9997be4695f0b","unresolved":false,"context_lines":[{"line_number":413,"context_line":"    MESSAGE \u003d (\"K008 Must use a dict comprehension instead of a dict\""},{"line_number":414,"context_line":"               \" constructor with a sequence of key-value pairs.\")"},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"    dict_constructor_with_sequence_re \u003d re.compile(r\".*\\bdict\\((\\[)?(\\(|\\[)\")"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"    if dict_constructor_with_sequence_re.match(logical_line):"},{"line_number":419,"context_line":"        yield (0, MESSAGE)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a961159_aa54c6fe","line":416,"in_reply_to":"3a961159_4fc29454","updated":"2015-01-12 03:43:04.000000000","message":"\u0027dict(({1:2}))\u0027 is not fit the rule,  but strange to have this statement, should raise other K***, or be found by reviewers before it was merged.\n\nI have no experience with Python\u0027s AST , that\u0027s why I use regex :)","commit_id":"a7195e77a58bfe41dcb617656bae2d2c24b094f3"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"a69ab06d4437071fc4e0b821db04ce4a296938aa","unresolved":false,"context_lines":[{"line_number":413,"context_line":"    MESSAGE \u003d (\"K008 Must use a dict comprehension instead of a dict\""},{"line_number":414,"context_line":"               \" constructor with a sequence of key-value pairs.\")"},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"    dict_constructor_with_sequence_re \u003d re.compile(r\".*\\bdict\\((\\[)?(\\(|\\[)\")"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"    if dict_constructor_with_sequence_re.match(logical_line):"},{"line_number":419,"context_line":"        yield (0, MESSAGE)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a930d6b_d7e9f8b7","line":416,"in_reply_to":"3a961159_aa54c6fe","updated":"2015-01-27 14:42:48.000000000","message":"Well, it\u0027s caught by this regex. Try:\n\n    re.compile(r\".*\\bdict\\((\\[)?(\\(|\\[)\").match(\u0027dict(({1:2}))\u0027)","commit_id":"a7195e77a58bfe41dcb617656bae2d2c24b094f3"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"48d7bc8d86482f40a8b99b5bd6d333399015560c","unresolved":false,"context_lines":[{"line_number":416,"context_line":"    and it also makes code more readable."},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"    Okay: lower_res \u003d {k.lower(): v for k, v in six.iteritems(res[1])}"},{"line_number":419,"context_line":"    Okay: fool \u003d dict(a\u003d\u0027a\u0027, b\u003d\u0027b\u0027)"},{"line_number":420,"context_line":"    K008: lower_res \u003d dict((k.lower(), v) for k, v in six.iteritems(res[1]))"},{"line_number":421,"context_line":"    K008:     attrs \u003d dict([(k, _from_json(v))"},{"line_number":422,"context_line":"    K008: dict([[i,i] for i in range(3)])"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_55d9b855","line":419,"updated":"2015-02-11 14:09:22.000000000","message":"Why is this OK if the argument for enforcing this is about speed?","commit_id":"408b78b6177a11d4533cccb9493ec0c8557446d6"},{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"9e158c70d9106a77474f1e92afa225fc31d4dc68","unresolved":false,"context_lines":[{"line_number":416,"context_line":"    and it also makes code more readable."},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"    Okay: lower_res \u003d {k.lower(): v for k, v in six.iteritems(res[1])}"},{"line_number":419,"context_line":"    Okay: fool \u003d dict(a\u003d\u0027a\u0027, b\u003d\u0027b\u0027)"},{"line_number":420,"context_line":"    K008: lower_res \u003d dict((k.lower(), v) for k, v in six.iteritems(res[1]))"},{"line_number":421,"context_line":"    K008:     attrs \u003d dict([(k, _from_json(v))"},{"line_number":422,"context_line":"    K008: dict([[i,i] for i in range(3)])"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_710a318b","line":419,"in_reply_to":"da86d52c_55d9b855","updated":"2015-02-12 01:29:56.000000000","message":"As commit message said : This commit doesn\u0027t handle dict constructor with kwargs.  see the line 429","commit_id":"408b78b6177a11d4533cccb9493ec0c8557446d6"}],"keystone/tests/ksfixtures/hacking.py":[{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"f6c92094aeacc6e286173590567a3ed5460bfd31","unresolved":false,"context_lines":[{"line_number":184,"context_line":"            lower_res \u003d {k.lower(): v for k, v in six.iteritems(res[1])}"},{"line_number":185,"context_line":"            fool \u003d dict(a\u003d\u0027a\u0027, b\u003d\u0027b\u0027)"},{"line_number":186,"context_line":"            lower_res \u003d dict((k.lower(), v) for k, v in six.iteritems(res[1]))"},{"line_number":187,"context_line":"            attrs \u003d dict([(k, _from_json(v))"},{"line_number":188,"context_line":"            dict([[i,i] for i in range(3)])"},{"line_number":189,"context_line":"        \"\"\","},{"line_number":190,"context_line":"        \u0027expected_errors\u0027: ["}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_ef92609f","line":187,"updated":"2015-01-12 02:42:43.000000000","message":"How is it supposed to raise K008 since it has syntax errors?\nShouldn\u0027t the list expression be closed with a ] ?\nAlso, there is a parenthesis that is not closed.","commit_id":"42d980b3fa2d6494848fd2282e5dde22a6ed55a6"},{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"4d52fba4ab9fb5d7e41f76c87ddd4f58144906df","unresolved":false,"context_lines":[{"line_number":184,"context_line":"            lower_res \u003d {k.lower(): v for k, v in six.iteritems(res[1])}"},{"line_number":185,"context_line":"            fool \u003d dict(a\u003d\u0027a\u0027, b\u003d\u0027b\u0027)"},{"line_number":186,"context_line":"            lower_res \u003d dict((k.lower(), v) for k, v in six.iteritems(res[1]))"},{"line_number":187,"context_line":"            attrs \u003d dict([(k, _from_json(v))"},{"line_number":188,"context_line":"            dict([[i,i] for i in range(3)])"},{"line_number":189,"context_line":"        \"\"\","},{"line_number":190,"context_line":"        \u0027expected_errors\u0027: ["}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_ef6ee096","line":187,"in_reply_to":"3a961159_ef92609f","updated":"2015-01-12 02:49:36.000000000","message":"yes,  will adjust this in next patch:)","commit_id":"42d980b3fa2d6494848fd2282e5dde22a6ed55a6"}],"keystone/tests/unit/test_hacking_checks.py":[{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"f6c92094aeacc6e286173590567a3ed5460bfd31","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        self.assertEqual(expected_errors or [], actual_errors)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"class TestDictoryComprehension(BaseStyleCheck):"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def get_checker(self):"},{"line_number":128,"context_line":"        return checks.dict_constructor_with_sequence_copy"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_cff5a4ee","line":125,"updated":"2015-01-12 02:42:43.000000000","message":"As the other tests, I\u0027d suggest to put a more meaningful name here. It could simply be:\nTestDictConstructorWithSequenceCopy","commit_id":"42d980b3fa2d6494848fd2282e5dde22a6ed55a6"},{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"4d52fba4ab9fb5d7e41f76c87ddd4f58144906df","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        self.assertEqual(expected_errors or [], actual_errors)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"class TestDictoryComprehension(BaseStyleCheck):"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def get_checker(self):"},{"line_number":128,"context_line":"        return checks.dict_constructor_with_sequence_copy"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_cf5a04f2","line":125,"in_reply_to":"3a961159_cff5a4ee","updated":"2015-01-12 02:49:36.000000000","message":"Done","commit_id":"42d980b3fa2d6494848fd2282e5dde22a6ed55a6"}]}
