)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"90a1671598887a630da2b374eaa0f8027b4a7dbc","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     David Stanek \u003cdstanek@dstanek.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-03-05 16:02:08 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Adds style checks to ease reviewer burdon"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The following checks were added in this commit:"},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"AAAAVn%2F%2FhjE%3D","line":7,"updated":"2014-03-05 16:04:45.000000000","message":"s/burdon/burden","commit_id":"5ebe084dd6c1f4f08daca4821097a56000953f26"},{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"a5a9640cc031e63b68d1df428560cc3c30bec19d","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     David Stanek \u003cdstanek@dstanek.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-03-05 21:54:07 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Adds style checks to ease reviewer burdon"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The following checks were added in this commit:"},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAAVn%2F%2FHoo%3D","line":7,"updated":"2014-03-09 02:19:31.000000000","message":"typo: burdon should be burden","commit_id":"1fd52c7bbddb25ecea676a496ce5a6e32db637f3"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"d12ff589df8ec26a2224d5fbb79893f8a88af964","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     David Stanek \u003cdstanek@dstanek.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-03-05 21:54:07 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Adds style checks to ease reviewer burdon"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The following checks were added in this commit:"},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAAVn%2F%2FE%2B0%3D","line":7,"in_reply_to":"AAAAVn%2F%2FHoo%3D","updated":"2014-03-10 05:28:28.000000000","message":"Done","commit_id":"1fd52c7bbddb25ecea676a496ce5a6e32db637f3"}],"keystone/hacking/checks.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"44fa09ccf285032ea8d9ddc3d71477f018a897ff","unresolved":false,"context_lines":[{"line_number":50,"context_line":"def space_after_comment_hash(physical_line, tokens, line_number):"},{"line_number":51,"context_line":"    \"\"\"There should be a single space after the # of block comments."},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    There is already a check in pep8 that enforces this rule for"},{"line_number":54,"context_line":"    inline comments."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    Okay: # this is a comment"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2FjAQ%3D","line":53,"updated":"2014-03-05 13:54:59.000000000","message":"Does a check already exist or is this a style guideline? http://legacy.python.org/dev/peps/pep-0008/#inline-comments","commit_id":"6654c1f6d6b3b658406133a2c3ef54235cf38055"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"58cdfa91040cbf528fdfc5cdd39629aeb89806d1","unresolved":false,"context_lines":[{"line_number":50,"context_line":"def space_after_comment_hash(physical_line, tokens, line_number):"},{"line_number":51,"context_line":"    \"\"\"There should be a single space after the # of block comments."},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    There is already a check in pep8 that enforces this rule for"},{"line_number":54,"context_line":"    inline comments."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    Okay: # this is a comment"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2FitY%3D","line":53,"in_reply_to":"AAAAVn%2F%2FixE%3D","updated":"2014-03-05 14:18:20.000000000","message":"Maybe we should add a TODO, saying that this check should be upstreamed in pep8?","commit_id":"6654c1f6d6b3b658406133a2c3ef54235cf38055"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"6b69c1eaf00ecfb6e292f5c2ef4b078f4abd8a79","unresolved":false,"context_lines":[{"line_number":50,"context_line":"def space_after_comment_hash(physical_line, tokens, line_number):"},{"line_number":51,"context_line":"    \"\"\"There should be a single space after the # of block comments."},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    There is already a check in pep8 that enforces this rule for"},{"line_number":54,"context_line":"    inline comments."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    Okay: # this is a comment"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2FixE%3D","line":53,"in_reply_to":"AAAAVn%2F%2FjAQ%3D","updated":"2014-03-05 14:14:00.000000000","message":"This is in the pep8 doc http://legacy.python.org/dev/peps/pep-0008/#block-comments, but the pep8 package is not currenly checking for it. I need to change the same to match upstream and I\u0027m going to submit it there.","commit_id":"6654c1f6d6b3b658406133a2c3ef54235cf38055"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"44fa09ccf285032ea8d9ddc3d71477f018a897ff","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    Okay: # this is a comment"},{"line_number":57,"context_line":"    K102: #this is a comment"},{"line_number":58,"context_line":"    K102: #  this is a comment"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    \"\"\""},{"line_number":61,"context_line":"    MESSAGE \u003d \"K102 block comments should start with \u0027# \u0027\""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2Fi%2Fs%3D","line":58,"updated":"2014-03-05 13:54:59.000000000","message":"Do we want to allow #\u003cspace\u003e\u003cspace\u003eComment starts here type comments or be really strict on only allowing one space after the hash?","commit_id":"6654c1f6d6b3b658406133a2c3ef54235cf38055"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"6b69c1eaf00ecfb6e292f5c2ef4b078f4abd8a79","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    Okay: # this is a comment"},{"line_number":57,"context_line":"    K102: #this is a comment"},{"line_number":58,"context_line":"    K102: #  this is a comment"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    \"\"\""},{"line_number":61,"context_line":"    MESSAGE \u003d \"K102 block comments should start with \u0027# \u0027\""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2Fivw%3D","line":58,"in_reply_to":"AAAAVn%2F%2Fi%2Fs%3D","updated":"2014-03-05 14:14:00.000000000","message":"Good question. pep8 says that the block comments start with a single space and doesn\u0027t say it can\u0027t have multiple. There are block comments in our code where the first line has a single space and then the rest are indented a little more...is that OK?","commit_id":"6654c1f6d6b3b658406133a2c3ef54235cf38055"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"58cdfa91040cbf528fdfc5cdd39629aeb89806d1","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    Okay: # this is a comment"},{"line_number":57,"context_line":"    K102: #this is a comment"},{"line_number":58,"context_line":"    K102: #  this is a comment"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    \"\"\""},{"line_number":61,"context_line":"    MESSAGE \u003d \"K102 block comments should start with \u0027# \u0027\""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2Fiuw%3D","line":58,"in_reply_to":"AAAAVn%2F%2Fivw%3D","updated":"2014-03-05 14:18:20.000000000","message":"Good point, that would break the following case: \n\n    # NOTE(lbragstad): here is some comment that is so detailed\n    #                  it is going to span a few lines.\n\nWhich I would say is probably up to the developer.","commit_id":"6654c1f6d6b3b658406133a2c3ef54235cf38055"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"44fa09ccf285032ea8d9ddc3d71477f018a897ff","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    K102: #  this is a comment"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    \"\"\""},{"line_number":61,"context_line":"    MESSAGE \u003d \"K102 block comments should start with \u0027# \u0027\""},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    # shebangs are OK"},{"line_number":64,"context_line":"    if line_number \u003d\u003d 1 and physical_line.startswith(\u0027#!\u0027):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2Fi%2BA%3D","line":61,"updated":"2014-03-05 13:54:59.000000000","message":"I take it we will be enforcing this on # TODO type comments too, by not allowing #TODO and #NOTE for example?","commit_id":"6654c1f6d6b3b658406133a2c3ef54235cf38055"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"6b69c1eaf00ecfb6e292f5c2ef4b078f4abd8a79","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    K102: #  this is a comment"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    \"\"\""},{"line_number":61,"context_line":"    MESSAGE \u003d \"K102 block comments should start with \u0027# \u0027\""},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    # shebangs are OK"},{"line_number":64,"context_line":"    if line_number \u003d\u003d 1 and physical_line.startswith(\u0027#!\u0027):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2Fivo%3D","line":61,"in_reply_to":"AAAAVn%2F%2Fi%2BA%3D","updated":"2014-03-05 14:14:00.000000000","message":"Yes","commit_id":"6654c1f6d6b3b658406133a2c3ef54235cf38055"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"58cdfa91040cbf528fdfc5cdd39629aeb89806d1","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    K102: #  this is a comment"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    \"\"\""},{"line_number":61,"context_line":"    MESSAGE \u003d \"K102 block comments should start with \u0027# \u0027\""},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    # shebangs are OK"},{"line_number":64,"context_line":"    if line_number \u003d\u003d 1 and physical_line.startswith(\u0027#!\u0027):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2FiuU%3D","line":61,"in_reply_to":"AAAAVn%2F%2Fivo%3D","updated":"2014-03-05 14:18:20.000000000","message":"++","commit_id":"6654c1f6d6b3b658406133a2c3ef54235cf38055"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"ea932bb1f2b9133767afa221d2bd28eb63611a91","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    \"\"\""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def __init__(self, tree, filename):"},{"line_number":31,"context_line":"        self._tree \u003d tree"},{"line_number":32,"context_line":"        self._errors \u003d []"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAVn%2F%2B4ps%3D","line":30,"updated":"2014-03-11 15:07:31.000000000","message":"(NIT): docstrings for these?","commit_id":"11f21f702230d2f6d9372511828036d868ca190f"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"8e2d39d233793c96415021a6b66b34e9e59600d9","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    \"\"\""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def __init__(self, tree, filename):"},{"line_number":31,"context_line":"        self._tree \u003d tree"},{"line_number":32,"context_line":"        self._errors \u003d []"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAWH%2F%2FpgI%3D","line":30,"in_reply_to":"AAAAVn%2F%2B4ps%3D","updated":"2014-03-14 18:51:24.000000000","message":"Done","commit_id":"11f21f702230d2f6d9372511828036d868ca190f"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"ea932bb1f2b9133767afa221d2bd28eb63611a91","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        super(CheckForMutableDefaultArgs, self).generic_visit(node)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"def block_comments_begin_with_a_space(physical_line, tokens, line_number):"},{"line_number":71,"context_line":"    \"\"\"There should be a single space after the # of block comments."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    There is already a check in pep8 that enforces this rule for"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAVn%2F%2B4gU%3D","line":70,"updated":"2014-03-11 15:07:31.000000000","message":"Should an explanation be added here to detail why this is a module-level function instead of a class like the other two checks here?","commit_id":"11f21f702230d2f6d9372511828036d868ca190f"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"8e2d39d233793c96415021a6b66b34e9e59600d9","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        super(CheckForMutableDefaultArgs, self).generic_visit(node)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"def block_comments_begin_with_a_space(physical_line, tokens, line_number):"},{"line_number":71,"context_line":"    \"\"\"There should be a single space after the # of block comments."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    There is already a check in pep8 that enforces this rule for"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAWH%2F%2Fpb4%3D","line":70,"in_reply_to":"AAAAVn%2F%2B4gU%3D","updated":"2014-03-14 18:51:24.000000000","message":"I added some documentation to the module doc comment.","commit_id":"11f21f702230d2f6d9372511828036d868ca190f"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"ea932bb1f2b9133767afa221d2bd28eb63611a91","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    There is already a check in pep8 that enforces this rule for"},{"line_number":74,"context_line":"    inline comments."},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    Okay: # this is a comment"},{"line_number":77,"context_line":"    K002: #this is a comment"},{"line_number":78,"context_line":"    K002: #  this is a comment"},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAVn%2F%2B4kw%3D","line":76,"updated":"2014-03-11 15:07:31.000000000","message":"Should we add: \n\n    Okay:  #!/usr/bin/python","commit_id":"11f21f702230d2f6d9372511828036d868ca190f"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"8e2d39d233793c96415021a6b66b34e9e59600d9","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    There is already a check in pep8 that enforces this rule for"},{"line_number":74,"context_line":"    inline comments."},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    Okay: # this is a comment"},{"line_number":77,"context_line":"    K002: #this is a comment"},{"line_number":78,"context_line":"    K002: #  this is a comment"},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAWH%2F%2Fpmc%3D","line":76,"in_reply_to":"AAAAVn%2F%2B4kw%3D","updated":"2014-03-14 18:51:24.000000000","message":"Done","commit_id":"11f21f702230d2f6d9372511828036d868ca190f"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"ea932bb1f2b9133767afa221d2bd28eb63611a91","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    MESSAGE \u003d \"K002 block comments should start with \u0027# \u0027\""},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    # shebangs are OK"},{"line_number":84,"context_line":"    if line_number \u003d\u003d 1 and physical_line.startswith(\u0027#!\u0027):"},{"line_number":85,"context_line":"        return"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    text \u003d physical_line.strip()"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAVn%2F%2B4kI%3D","line":84,"updated":"2014-03-11 15:07:31.000000000","message":"Can we always assume that the shebang will be on the first line?","commit_id":"11f21f702230d2f6d9372511828036d868ca190f"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"8e2d39d233793c96415021a6b66b34e9e59600d9","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    MESSAGE \u003d \"K002 block comments should start with \u0027# \u0027\""},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    # shebangs are OK"},{"line_number":84,"context_line":"    if line_number \u003d\u003d 1 and physical_line.startswith(\u0027#!\u0027):"},{"line_number":85,"context_line":"        return"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    text \u003d physical_line.strip()"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAWH%2F%2Fpmo%3D","line":84,"in_reply_to":"AAAAVn%2F%2B4kI%3D","updated":"2014-03-14 18:51:24.000000000","message":"Yes. I believe #!  has to be the first two characters in the file for (*)nix\u0027s exec.","commit_id":"11f21f702230d2f6d9372511828036d868ca190f"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d51ff37626dc17a6bc9b734552592c087aa6d2e6","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        super(CheckForMutableDefaultArgs, self).generic_visit(node)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"def block_comments_begin_with_a_space(physical_line, tokens, line_number):"},{"line_number":91,"context_line":"    \"\"\"There should be a single space after the # of block comments."},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    There is already a check in pep8 that enforces this rule for"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAWH%2F%2FolM%3D","line":90,"updated":"2014-03-14 20:47:11.000000000","message":"would it make sense to have all module level checks grouped together after CheckForAssertingNoneEqual? That way when we start to get more check it will make certain checks easier to find.","commit_id":"7b880a1d0701f6847b716726b3f4c0ac31ee5131"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"c592b3f1360375b71ed3e3d7ff772fa4f9035dd4","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        super(CheckForMutableDefaultArgs, self).generic_visit(node)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"def block_comments_begin_with_a_space(physical_line, tokens, line_number):"},{"line_number":90,"context_line":"    \"\"\"There should be a single space after the # of block comments."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    There is already a check in pep8 that enforces this rule for"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAWH%2F%2Bdkk%3D","line":89,"updated":"2014-03-26 16:23:19.000000000","message":"tokens is not used","commit_id":"31bf7c93e83686339118296297afbde3bb3edbb3"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"d3b1a24b16b022fdd736228372a4907de666b463","unresolved":false,"context_lines":[{"line_number":113,"context_line":"class CheckForAssertingNoneEquality(BaseASTChecker):"},{"line_number":114,"context_line":"    \"\"\"Ensures that code does not use a None with assert(Not*)Equal.\"\"\""},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    CHECK_DESC_IS \u003d \u0027K003 Use assertIsNone when comparing against None\u0027"},{"line_number":117,"context_line":"    CHECK_DESC_ISNOT \u003d \u0027K004 Use assertIsNone when comparing against None\u0027"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def visit_Call(self, node):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAWH%2F%2BJdQ%3D","line":116,"updated":"2014-03-28 19:42:04.000000000","message":"Let\u0027s suggest to use a matcher -- assertThat(..., matchers.Is(None))","commit_id":"31bf7c93e83686339118296297afbde3bb3edbb3"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"9b3c3e3fff41ee673c6befae2b5ff0b1b608db31","unresolved":false,"context_lines":[{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    CHECK_DESC_IS \u003d (\u0027K003 Use self.assertThat(..., matchers.Is(None)) \u0027"},{"line_number":117,"context_line":"                     \u0027when comparing against None\u0027)"},{"line_number":118,"context_line":"    CHECK_DESC_ISNOT \u003d \u0027K004 Use assertIsNone when comparing against None\u0027"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    def visit_Call(self, node):"},{"line_number":121,"context_line":"        # NOTE(dstanek): I wrote this in a verbose way to make it easier to"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAWH%2F9g5o%3D","line":118,"updated":"2014-04-04 00:55:40.000000000","message":"should be assertIsNotNone","commit_id":"ad6497dd7d466b7649af378404c569e70c33b4df"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"6e18ecb1834d15c4a60f4b684bc6ac6ace61340d","unresolved":false,"context_lines":[{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    CHECK_DESC_IS \u003d (\u0027K003 Use self.assertThat(..., matchers.Is(None)) \u0027"},{"line_number":117,"context_line":"                     \u0027when comparing against None\u0027)"},{"line_number":118,"context_line":"    CHECK_DESC_ISNOT \u003d \u0027K004 Use assertIsNone when comparing against None\u0027"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    def visit_Call(self, node):"},{"line_number":121,"context_line":"        # NOTE(dstanek): I wrote this in a verbose way to make it easier to"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAW3%2F%2F2VU%3D","line":118,"in_reply_to":"AAAAWH%2F9g5o%3D","updated":"2014-04-09 23:42:15.000000000","message":"Done","commit_id":"ad6497dd7d466b7649af378404c569e70c33b4df"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"fcf304d71b393b7a19aabbef2662a0d4be014a41","unresolved":false,"context_lines":[{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    Okay: # this is a comment"},{"line_number":96,"context_line":"    Okay: #!/usr/bin/python"},{"line_number":97,"context_line":"    Okay: #  this is a comment"},{"line_number":98,"context_line":"    K002: #this is a comment"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAW3%2F%2F2Ek%3D","line":97,"updated":"2014-04-10 00:48:13.000000000","message":"How did the test change but the code didn\u0027t?","commit_id":"ec6d5d4718e47e6f3e05a959fa348d3ca01efb7f"}],"keystone/tests/test_hacking_checks.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"6e7f0435589334798952e0aff8955b5c1440f7d1","unresolved":false,"context_lines":[{"line_number":25,"context_line":"        \"\"\"Returns the checker to be used for tests in this class.\"\"\""},{"line_number":26,"context_line":"        raise NotImplemented(\u0027subclasses must provide a real implementation\u0027)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    # We are patching pep8 so that only the check under test is actuall"},{"line_number":29,"context_line":"    # installed."},{"line_number":30,"context_line":"    @mock.patch(\u0027pep8._checks\u0027,"},{"line_number":31,"context_line":"                {\u0027physical_line\u0027: {}, \u0027logical_line\u0027: {}, \u0027tree\u0027: {}})"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAWH%2F%2BsWA%3D","line":28,"updated":"2014-03-25 01:41:06.000000000","message":"actually*","commit_id":"31bf7c93e83686339118296297afbde3bb3edbb3"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"d3b1a24b16b022fdd736228372a4907de666b463","unresolved":false,"context_lines":[{"line_number":116,"context_line":"                    self.assertEqual(\u0027\u0027, None)"},{"line_number":117,"context_line":"                    self.assertEqual(None, \u0027\u0027)"},{"line_number":118,"context_line":"                    self.assertNotEqual(\u0027\u0027, None)"},{"line_number":119,"context_line":"                    self.assertNotEqual(None, \u0027\u0027)"},{"line_number":120,"context_line":"        \"\"\""},{"line_number":121,"context_line":"        expected_errors \u003d ["},{"line_number":122,"context_line":"            (5, 8, \u0027K003\u0027),"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAWH%2F%2BJcc%3D","line":119,"updated":"2014-03-28 19:42:04.000000000","message":"Make sure there\u0027s also a test where # noqa is used, this seems to not work all the time.","commit_id":"31bf7c93e83686339118296297afbde3bb3edbb3"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"9b3c3e3fff41ee673c6befae2b5ff0b1b608db31","unresolved":false,"context_lines":[{"line_number":25,"context_line":"        \"\"\"Returns the checker to be used for tests in this class.\"\"\""},{"line_number":26,"context_line":"        raise NotImplemented(\u0027subclasses must provide a real implementation\u0027)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    # We are patching pep8 so that only the check under test is actuall"},{"line_number":29,"context_line":"    # installed."},{"line_number":30,"context_line":"    @mock.patch(\u0027pep8._checks\u0027,"},{"line_number":31,"context_line":"                {\u0027physical_line\u0027: {}, \u0027logical_line\u0027: {}, \u0027tree\u0027: {}})"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAWH%2F9g50%3D","line":28,"updated":"2014-04-04 00:55:40.000000000","message":"change \"actuall\" to \"actually\"","commit_id":"ad6497dd7d466b7649af378404c569e70c33b4df"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"6e18ecb1834d15c4a60f4b684bc6ac6ace61340d","unresolved":false,"context_lines":[{"line_number":25,"context_line":"        \"\"\"Returns the checker to be used for tests in this class.\"\"\""},{"line_number":26,"context_line":"        raise NotImplemented(\u0027subclasses must provide a real implementation\u0027)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    # We are patching pep8 so that only the check under test is actuall"},{"line_number":29,"context_line":"    # installed."},{"line_number":30,"context_line":"    @mock.patch(\u0027pep8._checks\u0027,"},{"line_number":31,"context_line":"                {\u0027physical_line\u0027: {}, \u0027logical_line\u0027: {}, \u0027tree\u0027: {}})"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAW3%2F%2F2qM%3D","line":28,"in_reply_to":"AAAAWH%2F9g50%3D","updated":"2014-04-09 23:42:15.000000000","message":"Done","commit_id":"ad6497dd7d466b7649af378404c569e70c33b4df"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"9b3c3e3fff41ee673c6befae2b5ff0b1b608db31","unresolved":false,"context_lines":[{"line_number":66,"context_line":"            def f(foo, bad\u003d{}):"},{"line_number":67,"context_line":"                pass"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"            def f(foo, bad\u003d{}, another_bad\u003d[], fine\u003dNone):"},{"line_number":70,"context_line":"                pass"},{"line_number":71,"context_line":"        \"\"\""},{"line_number":72,"context_line":"        expected_errors \u003d ["}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAWH%2F9g5Q%3D","line":69,"updated":"2014-04-04 00:55:40.000000000","message":"Make sure there\u0027s also a test where # noqa is used, this seems to not work all the time.","commit_id":"ad6497dd7d466b7649af378404c569e70c33b4df"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"6e18ecb1834d15c4a60f4b684bc6ac6ace61340d","unresolved":false,"context_lines":[{"line_number":66,"context_line":"            def f(foo, bad\u003d{}):"},{"line_number":67,"context_line":"                pass"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"            def f(foo, bad\u003d{}, another_bad\u003d[], fine\u003dNone):"},{"line_number":70,"context_line":"                pass"},{"line_number":71,"context_line":"        \"\"\""},{"line_number":72,"context_line":"        expected_errors \u003d ["}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAW3%2F%2F2n4%3D","line":69,"in_reply_to":"AAAAWH%2F9g5Q%3D","updated":"2014-04-09 23:42:15.000000000","message":"Done","commit_id":"ad6497dd7d466b7649af378404c569e70c33b4df"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"9b3c3e3fff41ee673c6befae2b5ff0b1b608db31","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"            # This is alright and can"},{"line_number":99,"context_line":"            #    be continued with extra indentation"},{"line_number":100,"context_line":"            #    if that\u0027s what the developer wants."},{"line_number":101,"context_line":"        \"\"\""},{"line_number":102,"context_line":"        self.assert_has_errors(code, [(3, 0, \u0027K002\u0027)])"},{"line_number":103,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAWH%2F9g5U%3D","line":100,"updated":"2014-04-04 00:55:40.000000000","message":"Make sure there\u0027s also a test where # noqa is used, this seems to not work all the time.","commit_id":"ad6497dd7d466b7649af378404c569e70c33b4df"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"6e18ecb1834d15c4a60f4b684bc6ac6ace61340d","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"            # This is alright and can"},{"line_number":99,"context_line":"            #    be continued with extra indentation"},{"line_number":100,"context_line":"            #    if that\u0027s what the developer wants."},{"line_number":101,"context_line":"        \"\"\""},{"line_number":102,"context_line":"        self.assert_has_errors(code, [(3, 0, \u0027K002\u0027)])"},{"line_number":103,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAW3%2F%2F2V0%3D","line":100,"in_reply_to":"AAAAWH%2F9g5U%3D","updated":"2014-04-09 23:42:15.000000000","message":"I didn\u0027t do this yet. It seems that the pep8 check that will eventually replace this doesn\u0027t appear to respect # noqa. I\u0027ll look into this further.","commit_id":"ad6497dd7d466b7649af378404c569e70c33b4df"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"9b3c3e3fff41ee673c6befae2b5ff0b1b608db31","unresolved":false,"context_lines":[{"line_number":116,"context_line":"                    self.assertEqual(\u0027\u0027, None)"},{"line_number":117,"context_line":"                    self.assertEqual(None, \u0027\u0027)"},{"line_number":118,"context_line":"                    self.assertNotEqual(\u0027\u0027, None)"},{"line_number":119,"context_line":"                    self.assertNotEqual(None, \u0027\u0027)"},{"line_number":120,"context_line":"        \"\"\""},{"line_number":121,"context_line":"        expected_errors \u003d ["},{"line_number":122,"context_line":"            (5, 8, \u0027K003\u0027),"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAWH%2F9g6E%3D","line":119,"updated":"2014-04-04 00:55:40.000000000","message":"Make sure there\u0027s also a test where # noqa is used, this seems to not work all the time.","commit_id":"ad6497dd7d466b7649af378404c569e70c33b4df"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"6e18ecb1834d15c4a60f4b684bc6ac6ace61340d","unresolved":false,"context_lines":[{"line_number":116,"context_line":"                    self.assertEqual(\u0027\u0027, None)"},{"line_number":117,"context_line":"                    self.assertEqual(None, \u0027\u0027)"},{"line_number":118,"context_line":"                    self.assertNotEqual(\u0027\u0027, None)"},{"line_number":119,"context_line":"                    self.assertNotEqual(None, \u0027\u0027)"},{"line_number":120,"context_line":"        \"\"\""},{"line_number":121,"context_line":"        expected_errors \u003d ["},{"line_number":122,"context_line":"            (5, 8, \u0027K003\u0027),"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAW3%2F%2F2oE%3D","line":119,"in_reply_to":"AAAAWH%2F9g6E%3D","updated":"2014-04-09 23:42:15.000000000","message":"Done","commit_id":"ad6497dd7d466b7649af378404c569e70c33b4df"}]}
