)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"883c39c6790f73b91fa07590cbb1a3aac96c2cc6","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Adds a wip decorator for tests"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This decorator can be used to commit failing tests while they are still"},{"line_number":10,"context_line":"in development. It can also be used be people that can show how an issue"},{"line_number":11,"context_line":"can be reproduced without them having to make the code changes necessary"},{"line_number":12,"context_line":"to make the test pass."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"3a961159_1ff67a63","line":10,"updated":"2014-12-11 15:49:01.000000000","message":"Typo: \"used be\" should be \"used by\"","commit_id":"7a5d6a2004e67869a511bc8c0824cce7a1b83163"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"2a4c72ec51109c9d81e5bf57205c6228303b183c","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Adds a wip decorator for tests"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This decorator can be used to commit failing tests while they are still"},{"line_number":10,"context_line":"in development. It can also be used be people that can show how an issue"},{"line_number":11,"context_line":"can be reproduced without them having to make the code changes necessary"},{"line_number":12,"context_line":"to make the test pass."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"3a961159_01786e2a","line":10,"in_reply_to":"3a961159_1ff67a63","updated":"2015-01-29 22:10:13.000000000","message":"Done","commit_id":"7a5d6a2004e67869a511bc8c0824cce7a1b83163"}],"doc/source/developing.rst":[{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"5b77847ab1ec763bc344880308cd899b14f32b4e","unresolved":false,"context_lines":[{"line_number":390,"context_line":"    to a non-negative value."},{"line_number":391,"context_line":""},{"line_number":392,"context_line":""},{"line_number":393,"context_line":"\"Work in progress\" Tests"},{"line_number":394,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":395,"context_line":""},{"line_number":396,"context_line":"Work in progress (WIP) tests are very useful in a variety of situations"}],"source_content_type":"text/x-rst","patch_set":8,"id":"da86d52c_93b7edd7","line":393,"updated":"2015-02-03 19:53:45.000000000","message":"Great description","commit_id":"3b7988f45dbe00efa663bf941265529dae485ac2"}],"keystone/tests/unit/tests/test_utils.py":[{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"e7dbd2a961311c9b2b8c908a7e91ea10cb686e24","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"        @utils.wip(\u0027waiting on bug #000000\u0027)"},{"line_number":33,"context_line":"        def test():"},{"line_number":34,"context_line":"            pass  # literally"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"        e \u003d self.assertRaises(AssertionError, test)"},{"line_number":37,"context_line":"        self.assertThat(str(e), matchers.Contains(\u0027#000000\u0027))"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_59dcb473","line":34,"updated":"2014-12-11 03:32:49.000000000","message":":)","commit_id":"7a5d6a2004e67869a511bc8c0824cce7a1b83163"},{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"883c39c6790f73b91fa07590cbb1a3aac96c2cc6","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"        @utils.wip(\u0027waiting on bug #000000\u0027)"},{"line_number":33,"context_line":"        def test():"},{"line_number":34,"context_line":"            pass  # literally"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"        e \u003d self.assertRaises(AssertionError, test)"},{"line_number":37,"context_line":"        self.assertThat(str(e), matchers.Contains(\u0027#000000\u0027))"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_5aebb0af","line":34,"updated":"2014-12-11 15:49:01.000000000","message":"Well a literal value you could not put here is \"Brian Hoyer\".  He most certainly can\u0027t pass :-).","commit_id":"7a5d6a2004e67869a511bc8c0824cce7a1b83163"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"2a4c72ec51109c9d81e5bf57205c6228303b183c","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"        @utils.wip(\u0027waiting on bug #000000\u0027)"},{"line_number":33,"context_line":"        def test():"},{"line_number":34,"context_line":"            pass  # literally"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"        e \u003d self.assertRaises(AssertionError, test)"},{"line_number":37,"context_line":"        self.assertThat(str(e), matchers.Contains(\u0027#000000\u0027))"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_81937e4e","line":34,"in_reply_to":"3a961159_5aebb0af","updated":"2015-01-29 22:10:13.000000000","message":"harsh...not untrue, but harsh","commit_id":"7a5d6a2004e67869a511bc8c0824cce7a1b83163"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0359abdb8ff4db1cac1040dc1b323a861e8dc56a","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def test_raises_SkipError_when_broken_test_fails_without_message(self):"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        @utils.wip"},{"line_number":42,"context_line":"        def test():"},{"line_number":43,"context_line":"            raise Exception(\u0027i expected a failure - this is a WIP\u0027)"},{"line_number":44,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_3bcbe31f","line":41,"updated":"2014-12-15 19:46:24.000000000","message":"I think wip should require a message.","commit_id":"7a5d6a2004e67869a511bc8c0824cce7a1b83163"}],"keystone/tests/utils.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"b756ba60ce182c081b188c6276d3874790fa0c9e","unresolved":false,"context_lines":[{"line_number":92,"context_line":"      \u003e\u003e\u003e @wip(\u0027waiting on bug #000000\u0027)"},{"line_number":93,"context_line":"      \u003e\u003e\u003e def test():"},{"line_number":94,"context_line":"      \u003e\u003e\u003e     pass"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    \"\"\""},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def _wip(f):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_0a489eb1","line":95,"updated":"2014-12-15 15:14:58.000000000","message":"This doc string provides some really nice information that might be useful to have in our developing documentation: \n\nhttps://github.com/openstack/keystone/blob/9ee165f19d53febe27d2bbc7df21bc9f074b3535/doc/source/developing.rst#writing-tests","commit_id":"7a5d6a2004e67869a511bc8c0824cce7a1b83163"},{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"883c39c6790f73b91fa07590cbb1a3aac96c2cc6","unresolved":false,"context_lines":[{"line_number":96,"context_line":"    \"\"\""},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def _wip(f):"},{"line_number":99,"context_line":"        @six.wraps(f)"},{"line_number":100,"context_line":"        def run_test(*args, **kwargs):"},{"line_number":101,"context_line":"            try:"},{"line_number":102,"context_line":"                f(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_bab73439","line":99,"updated":"2014-12-11 15:49:01.000000000","message":"oh great.  So six provides a standard way to to wrap functions.  So once someone new to python finally figures out the function wrapping stuff they now get to learn the new version  :-)","commit_id":"7a5d6a2004e67869a511bc8c0824cce7a1b83163"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"2a4c72ec51109c9d81e5bf57205c6228303b183c","unresolved":false,"context_lines":[{"line_number":96,"context_line":"    \"\"\""},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def _wip(f):"},{"line_number":99,"context_line":"        @six.wraps(f)"},{"line_number":100,"context_line":"        def run_test(*args, **kwargs):"},{"line_number":101,"context_line":"            try:"},{"line_number":102,"context_line":"                f(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_019f8e51","line":99,"in_reply_to":"3a961159_bab73439","updated":"2015-01-29 22:10:13.000000000","message":":-P If we didn\u0027t have to support old, busted versions of Python (read: py2.7) then this wouldn\u0027t be an issue!","commit_id":"7a5d6a2004e67869a511bc8c0824cce7a1b83163"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"2e0abb07296361d67fb6756ad58e57cfe53ce8d6","unresolved":false,"context_lines":[{"line_number":96,"context_line":"    \"\"\""},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def _wip(f):"},{"line_number":99,"context_line":"        @six.wraps(f)"},{"line_number":100,"context_line":"        def run_test(*args, **kwargs):"},{"line_number":101,"context_line":"            try:"},{"line_number":102,"context_line":"                f(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_d73739fd","line":99,"in_reply_to":"3a961159_bab73439","updated":"2014-12-13 20:44:05.000000000","message":"And six.wraps misses the mark in a number of ways, as does functools.wraps... so wrapping functions is ugly no matter what! ;) [ This comment does not imply a change is needed]","commit_id":"7a5d6a2004e67869a511bc8c0824cce7a1b83163"},{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"883c39c6790f73b91fa07590cbb1a3aac96c2cc6","unresolved":false,"context_lines":[{"line_number":110,"context_line":"            raise AssertionError(msg)"},{"line_number":111,"context_line":"        return run_test"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    if not callable(arg):"},{"line_number":114,"context_line":"        extra_message \u003d str(arg)"},{"line_number":115,"context_line":"        return _wip"},{"line_number":116,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_dafec0ad","line":113,"updated":"2014-12-11 15:49:01.000000000","message":"Very slick!  Love how it can either take the message on why the test is marked work in progress or the actual test function.  Love the duality. Very cool!!!","commit_id":"7a5d6a2004e67869a511bc8c0824cce7a1b83163"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0359abdb8ff4db1cac1040dc1b323a861e8dc56a","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        return run_test"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    if not callable(arg):"},{"line_number":114,"context_line":"        extra_message \u003d str(arg)"},{"line_number":115,"context_line":"        return _wip"},{"line_number":116,"context_line":"    else:"},{"line_number":117,"context_line":"        extra_message \u003d \u0027\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_db565f2a","line":114,"updated":"2014-12-15 19:46:24.000000000","message":"I think we should require a message. I don\u0027t want a bunch of wip tests without an explanation.","commit_id":"7a5d6a2004e67869a511bc8c0824cce7a1b83163"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"2a4c72ec51109c9d81e5bf57205c6228303b183c","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        return run_test"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    if not callable(arg):"},{"line_number":114,"context_line":"        extra_message \u003d str(arg)"},{"line_number":115,"context_line":"        return _wip"},{"line_number":116,"context_line":"    else:"},{"line_number":117,"context_line":"        extra_message \u003d \u0027\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_b0cfd4b2","line":114,"in_reply_to":"3a961159_db565f2a","updated":"2015-01-29 22:10:13.000000000","message":"Done","commit_id":"7a5d6a2004e67869a511bc8c0824cce7a1b83163"}]}
