)]}'
{"HACKING.rst":[{"author":{"_account_id":12321,"name":"Ryan Brown","email":"rybrown@redhat.com","username":"ryansb"},"change_message_id":"ce916d0d542ad217744d1bd0a228723b193145a0","unresolved":false,"context_lines":[{"line_number":250,"context_line":""},{"line_number":251,"context_line":"- [H238]"},{"line_number":252,"context_line":"  Old style classes are deprecated an no more available in Python 3 (they"},{"line_number":253,"context_line":"  are converted to new style classes). In order too avoid any unwanted side"},{"line_number":254,"context_line":"  affect all classes should be declared using new style."},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"  Example::"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1abeadc6_4ec94078","line":253,"updated":"2014-08-27 15:33:29.000000000","message":"Please replace \"too\" with \"to\" and \"affect\" with \"effects\".","commit_id":"15afa1058194e595a75bed52d15fdeee7a20dafc"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"8f92bd99e91c77ce4899c67b943051967e5edbcc","unresolved":false,"context_lines":[{"line_number":250,"context_line":""},{"line_number":251,"context_line":"- [H238]"},{"line_number":252,"context_line":"  Old style classes are deprecated an no more available in Python 3 (they"},{"line_number":253,"context_line":"  are converted to new style classes). In order too avoid any unwanted side"},{"line_number":254,"context_line":"  affect all classes should be declared using new style."},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"  Example::"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1abeadc6_2420a548","line":253,"in_reply_to":"1abeadc6_4ec94078","updated":"2014-08-27 16:11:01.000000000","message":"Done","commit_id":"15afa1058194e595a75bed52d15fdeee7a20dafc"},{"author":{"_account_id":12321,"name":"Ryan Brown","email":"rybrown@redhat.com","username":"ryansb"},"change_message_id":"35c8069d12cf0d7943073648e545801e379e6fb8","unresolved":false,"context_lines":[{"line_number":249,"context_line":"    class YourClass():"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"- [H238]"},{"line_number":252,"context_line":"  Old style classes are deprecated an no more available in Python 3 (they"},{"line_number":253,"context_line":"  are converted to new style classes). In order to avoid any unwanted side"},{"line_number":254,"context_line":"  effects all classes should be declared using new style."},{"line_number":255,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"1abeadc6_69451142","line":252,"updated":"2014-08-27 17:52:17.000000000","message":"replace \"an no more\" with \"and no longer\".","commit_id":"72544c467052ad89a3f965955efe64979d819717"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"9a36f030293e5714015d514cb33a224a0da5c0e4","unresolved":false,"context_lines":[{"line_number":249,"context_line":"    class YourClass():"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"- [H238]"},{"line_number":252,"context_line":"  Old style classes are deprecated an no more available in Python 3 (they"},{"line_number":253,"context_line":"  are converted to new style classes). In order to avoid any unwanted side"},{"line_number":254,"context_line":"  effects all classes should be declared using new style."},{"line_number":255,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"1abeadc6_4a53c716","line":252,"in_reply_to":"1abeadc6_69451142","updated":"2014-08-28 12:49:06.000000000","message":"Done","commit_id":"72544c467052ad89a3f965955efe64979d819717"},{"author":{"_account_id":866,"name":"Chmouel Boudjnah","email":"chmouel@chmouel.com","username":"chmouel"},"change_message_id":"8b63c4f5845884669a2fecb2ffdd930a03b89db3","unresolved":false,"context_lines":[{"line_number":249,"context_line":"    class YourClass():"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"- [H238]"},{"line_number":252,"context_line":"  Old style classes are deprecated an no longer available in Python 3 (they"},{"line_number":253,"context_line":"  are converted to new style classes). In order to avoid any unwanted side"},{"line_number":254,"context_line":"  effects all classes should be declared using new style."},{"line_number":255,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"1abeadc6_aa27a410","line":252,"updated":"2014-08-30 12:17:16.000000000","message":"(nit) and","commit_id":"e6904e474261b1516f5867b9d25cd6dfc7f8627d"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"d8fbd59b4743bc9f21c689cb814847918a570359","unresolved":false,"context_lines":[{"line_number":251,"context_line":"- [H238]"},{"line_number":252,"context_line":"  Old style classes are deprecated an no longer available in Python 3 (they"},{"line_number":253,"context_line":"  are converted to new style classes). In order to avoid any unwanted side"},{"line_number":254,"context_line":"  effects all classes should be declared using new style."},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"  Example::"},{"line_number":257,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"1abeadc6_1cc2eb84","line":254,"updated":"2014-08-28 19:15:31.000000000","message":"what kind of side effects? Can you elaborate","commit_id":"e6904e474261b1516f5867b9d25cd6dfc7f8627d"},{"author":{"_account_id":7680,"name":"Alex Gaynor","email":"alex.gaynor@gmail.com","username":"alex_gaynor"},"change_message_id":"946d27c220273348c9bb40a5fbf11986303b2c69","unresolved":false,"context_lines":[{"line_number":251,"context_line":"- [H238]"},{"line_number":252,"context_line":"  Old style classes are deprecated an no longer available in Python 3 (they"},{"line_number":253,"context_line":"  are converted to new style classes). In order to avoid any unwanted side"},{"line_number":254,"context_line":"  effects all classes should be declared using new style."},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"  Example::"},{"line_number":257,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"1abeadc6_f109c895","line":254,"in_reply_to":"1abeadc6_1cc2eb84","updated":"2014-08-29 03:38:27.000000000","message":"The most obvious ones are that setters on descriptors (e.g. property) don\u0027t work. There\u0027s also a bunch of other random, small, semantic differences which will of course break on python3.\n\nAlso: new style classes are faster on PyPy :-)","commit_id":"e6904e474261b1516f5867b9d25cd6dfc7f8627d"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"a470ee34d1d483d69325ff2b878ed5047aa7b20a","unresolved":false,"context_lines":[{"line_number":251,"context_line":"- [H238]"},{"line_number":252,"context_line":"  Old style classes are deprecated and no longer available in Python 3 (they are"},{"line_number":253,"context_line":"  converted to new style classes). In order to avoid any unwanted side effects"},{"line_number":254,"context_line":"  all classes should be declared using new style."},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"  Example::"},{"line_number":257,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"baa201ad_dde2ba02","line":254,"updated":"2014-09-29 21:51:42.000000000","message":"Can you elaborate on the unwanted side effects here.  It should be easy for a reader to figure out why we are adding this rule","commit_id":"49158d5dda305310eb3619a0455ba907ba8a98be"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"b54bab623f2060c457712783ba95e394e1338f7e","unresolved":false,"context_lines":[{"line_number":251,"context_line":"- [H238]"},{"line_number":252,"context_line":"  Old style classes are deprecated and no longer available in Python 3 (they are"},{"line_number":253,"context_line":"  converted to new style classes). In order to avoid any unwanted side effects"},{"line_number":254,"context_line":"  all classes should be declared using new style."},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"  Example::"},{"line_number":257,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"baa201ad_a9792e95","line":254,"in_reply_to":"baa201ad_dde2ba02","updated":"2014-09-30 11:58:38.000000000","message":"Done","commit_id":"49158d5dda305310eb3619a0455ba907ba8a98be"}],"hacking/checks/python23.py":[{"author":{"_account_id":6794,"name":"Simon Pasquier","email":"pasquier.simon@gmail.com","username":"simon-pasquier"},"change_message_id":"7b2635abcfae34af6a8073a181e7a99b12558c0a","unresolved":false,"context_lines":[{"line_number":205,"context_line":"                      \"removed in Python 3\" % module_name)"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"RE_NEW_STYLE_CLASS \u003d re.compile(r\"^class [^(]+\\([^(]+\\):\")"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"@core.flake8ext"}],"source_content_type":"text/x-python","patch_set":2,"id":"1abeadc6_45f8487c","line":208,"range":{"start_line":208,"start_character":50,"end_line":208,"end_character":51},"updated":"2014-08-27 12:46:32.000000000","message":"I don\u0027t see the point of the second \u0027[^(]+\u0027 pattern between \u0027\\(\u0027 and \u0027\\)\u0027. For me, a good-enough regexp would be \"^class [^(]+\\(.+\\):\".","commit_id":"15afa1058194e595a75bed52d15fdeee7a20dafc"},{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"8cc6f098e8c28dc3690adc74e1c07fcc6806f08c","unresolved":false,"context_lines":[{"line_number":205,"context_line":"                      \"removed in Python 3\" % module_name)"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"RE_NEW_STYLE_CLASS \u003d re.compile(r\"^class [^(]+\\([^(]+\\):\")"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"@core.flake8ext"}],"source_content_type":"text/x-python","patch_set":2,"id":"1abeadc6_4b25b7c0","line":208,"in_reply_to":"1abeadc6_45f8487c","updated":"2014-08-27 13:49:59.000000000","message":"Here\u0027s a (contrived) example of valid syntax that your \u0027good-enough\u0027 regexp regards as a new-style class:\n\n  class Foo(): foo \u003d {(\u0027foo\u0027,): \u0027bar\u0027}\n\nUsing \"[^)]+\" is a common pattern (no pun intended) to avoid those kinds of issues, although it\u0027s rendered here - I assume accidentally - as \"[^(]+\" (open parenthesis instead of close parenthesis).\n\nAlso, the initial ^ to match only at the beginning of a line is redundant, as we are calling match() rather than search().","commit_id":"15afa1058194e595a75bed52d15fdeee7a20dafc"},{"author":{"_account_id":6794,"name":"Simon Pasquier","email":"pasquier.simon@gmail.com","username":"simon-pasquier"},"change_message_id":"bcc4cd18f6d22c9a10ffec832d131819242870d2","unresolved":false,"context_lines":[{"line_number":205,"context_line":"                      \"removed in Python 3\" % module_name)"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"RE_NEW_STYLE_CLASS \u003d re.compile(r\"^class [^(]+\\([^(]+\\):\")"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"@core.flake8ext"}],"source_content_type":"text/x-python","patch_set":2,"id":"1abeadc6_f0caeb9f","line":208,"in_reply_to":"1abeadc6_4b25b7c0","updated":"2014-08-27 14:54:01.000000000","message":"Agreed, initially I spotted the typo on the open parenthesis.","commit_id":"15afa1058194e595a75bed52d15fdeee7a20dafc"},{"author":{"_account_id":6794,"name":"Simon Pasquier","email":"pasquier.simon@gmail.com","username":"simon-pasquier"},"change_message_id":"9f201d12fc9b98a331842f133f54bf4bb48f92ce","unresolved":false,"context_lines":[{"line_number":205,"context_line":"                      \"removed in Python 3\" % module_name)"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"RE_NEW_STYLE_CLASS \u003d re.compile(r\"^class [^(]+\\([^(]+\\):\")"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"@core.flake8ext"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_4a6911bd","line":208,"updated":"2014-08-28 07:44:02.000000000","message":"please fix the typo in the regexp, should be r\"^class [^(]+\\([^)]+\\):\"","commit_id":"72544c467052ad89a3f965955efe64979d819717"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"9a36f030293e5714015d514cb33a224a0da5c0e4","unresolved":false,"context_lines":[{"line_number":205,"context_line":"                      \"removed in Python 3\" % module_name)"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"RE_NEW_STYLE_CLASS \u003d re.compile(r\"^class [^(]+\\([^(]+\\):\")"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"@core.flake8ext"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_6a5403fe","line":208,"in_reply_to":"1abeadc6_4a6911bd","updated":"2014-08-28 12:49:06.000000000","message":"Done","commit_id":"72544c467052ad89a3f965955efe64979d819717"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"d8fbd59b4743bc9f21c689cb814847918a570359","unresolved":false,"context_lines":[{"line_number":215,"context_line":"    Examples:"},{"line_number":216,"context_line":"    Okay: class Foo(object):\\n    pass"},{"line_number":217,"context_line":"    Okay: class Foo(Bar, Baz):\\n    pass"},{"line_number":218,"context_line":"    H238: class Bar:\\n    pass"},{"line_number":219,"context_line":"    \"\"\""},{"line_number":220,"context_line":"    if noqa:"},{"line_number":221,"context_line":"        return"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_fcf9afc8","line":218,"updated":"2014-08-28 19:15:31.000000000","message":"can you add a few more tests here","commit_id":"e6904e474261b1516f5867b9d25cd6dfc7f8627d"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"d8fbd59b4743bc9f21c689cb814847918a570359","unresolved":false,"context_lines":[{"line_number":221,"context_line":"        return"},{"line_number":222,"context_line":"    line \u003d core.import_normalize(logical_line.strip())"},{"line_number":223,"context_line":"    if line.startswith(\"class \") and not RE_NEW_STYLE_CLASS.match(line):"},{"line_number":224,"context_line":"            yield 0, \"H238: old style class declaration\""}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_1cf74bd4","line":224,"updated":"2014-08-28 19:15:31.000000000","message":"this is pretty vague and not very helpful. Can you make this message explain how to fix it.","commit_id":"e6904e474261b1516f5867b9d25cd6dfc7f8627d"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"a470ee34d1d483d69325ff2b878ed5047aa7b20a","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        if token_type \u003d\u003d tokenize.NAME and text \u003d\u003d \"assert_\":"},{"line_number":140,"context_line":"            yield ("},{"line_number":141,"context_line":"                start_index[1],"},{"line_number":142,"context_line":"                \"H235: assert_ is deprecated, use assertTrue\")"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"@core.flake8ext"}],"source_content_type":"text/x-python","patch_set":5,"id":"baa201ad_fd1f7e07","line":142,"updated":"2014-09-29 21:51:42.000000000","message":"Example of a helpful message.","commit_id":"49158d5dda305310eb3619a0455ba907ba8a98be"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"a470ee34d1d483d69325ff2b878ed5047aa7b20a","unresolved":false,"context_lines":[{"line_number":215,"context_line":"    Examples:"},{"line_number":216,"context_line":"    Okay: class Foo(object):\\n    pass"},{"line_number":217,"context_line":"    Okay: class Foo(Bar, Baz):\\n    pass"},{"line_number":218,"context_line":"    H238: class Bar:\\n    pass"},{"line_number":219,"context_line":"    \"\"\""},{"line_number":220,"context_line":"    if noqa:"},{"line_number":221,"context_line":"        return"}],"source_content_type":"text/x-python","patch_set":5,"id":"baa201ad_dd5d5aeb","line":218,"updated":"2014-09-29 21:51:42.000000000","message":"A few more tests would be nice here","commit_id":"49158d5dda305310eb3619a0455ba907ba8a98be"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"b54bab623f2060c457712783ba95e394e1338f7e","unresolved":false,"context_lines":[{"line_number":215,"context_line":"    Examples:"},{"line_number":216,"context_line":"    Okay: class Foo(object):\\n    pass"},{"line_number":217,"context_line":"    Okay: class Foo(Bar, Baz):\\n    pass"},{"line_number":218,"context_line":"    H238: class Bar:\\n    pass"},{"line_number":219,"context_line":"    \"\"\""},{"line_number":220,"context_line":"    if noqa:"},{"line_number":221,"context_line":"        return"}],"source_content_type":"text/x-python","patch_set":5,"id":"baa201ad_89e9ca1c","line":218,"in_reply_to":"baa201ad_dd5d5aeb","updated":"2014-09-30 11:58:38.000000000","message":"Added one, but I don\u0027t have any more idea for an error case.","commit_id":"49158d5dda305310eb3619a0455ba907ba8a98be"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"a470ee34d1d483d69325ff2b878ed5047aa7b20a","unresolved":false,"context_lines":[{"line_number":221,"context_line":"        return"},{"line_number":222,"context_line":"    line \u003d core.import_normalize(logical_line.strip())"},{"line_number":223,"context_line":"    if line.startswith(\"class \") and not RE_NEW_STYLE_CLASS.match(line):"},{"line_number":224,"context_line":"            yield 0, \"H238: old style class declaration\""}],"source_content_type":"text/x-python","patch_set":5,"id":"baa201ad_9d3112a5","line":224,"updated":"2014-09-29 21:51:42.000000000","message":"this message can be a little more helpful.","commit_id":"49158d5dda305310eb3619a0455ba907ba8a98be"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"b54bab623f2060c457712783ba95e394e1338f7e","unresolved":false,"context_lines":[{"line_number":221,"context_line":"        return"},{"line_number":222,"context_line":"    line \u003d core.import_normalize(logical_line.strip())"},{"line_number":223,"context_line":"    if line.startswith(\"class \") and not RE_NEW_STYLE_CLASS.match(line):"},{"line_number":224,"context_line":"            yield 0, \"H238: old style class declaration\""}],"source_content_type":"text/x-python","patch_set":5,"id":"baa201ad_09af9ae4","line":224,"in_reply_to":"baa201ad_9d3112a5","updated":"2014-09-30 11:58:38.000000000","message":"Done","commit_id":"49158d5dda305310eb3619a0455ba907ba8a98be"}]}
