)]}'
{"keystoneclient/tests/generic/__init__.py":[{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"41ac2e129750d57759248a2ae7340528fc5505e6","unresolved":false,"context_lines":[{"line_number":1,"context_line":"__author__ \u003d \u0027ilukyanenkov\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F9qq4%3D","line":1,"updated":"2013-12-09 02:15:45.000000000","message":"This is not something we (openstack) do","commit_id":"a55208ae68b0d2dec5eb0a542142f04aaa12d923"},{"author":{"_account_id":9300,"name":"Igor A. Lukyanenkov","email":"ilukyanenkov@griddynamics.com","username":"unconn"},"change_message_id":"c3cd47400308368470ab973efdfe222935ccd203","unresolved":false,"context_lines":[{"line_number":1,"context_line":"__author__ \u003d \u0027ilukyanenkov\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F9pDI%3D","line":1,"in_reply_to":"AAAATn%2F9qq4%3D","updated":"2013-12-09 12:37:33.000000000","message":"Done","commit_id":"a55208ae68b0d2dec5eb0a542142f04aaa12d923"}],"keystoneclient/tests/generic/test_shell.py":[{"author":{"_account_id":7366,"name":"Ivan Melnikov","email":"imelnikov@griddynamics.com","username":"imelnikov"},"change_message_id":"3ea6c0f4f3fd2b7b7e540fbefd41360a3a963549","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class ShellTest(utils.TestCase):"},{"line_number":22,"context_line":"    def setUp(self):"},{"line_number":23,"context_line":"        super(ShellTest, self).setUp()"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    @mock.patch(\u0027sys.stdout\u0027, new_callable\u003dStringIO.StringIO)"},{"line_number":26,"context_line":"    def test_discover_no_keystones(self, mock_stdout):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2BF50%3D","line":23,"updated":"2013-12-02 16:53:02.000000000","message":"Looks like this method is not needed.","commit_id":"42666c925b93bd3ecae4d3b4a8a62370e065b280"},{"author":{"_account_id":9300,"name":"Igor A. Lukyanenkov","email":"ilukyanenkov@griddynamics.com","username":"unconn"},"change_message_id":"eafd2d16c213c827d1dfcbd0876f5181d9d881da","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class ShellTest(utils.TestCase):"},{"line_number":22,"context_line":"    def setUp(self):"},{"line_number":23,"context_line":"        super(ShellTest, self).setUp()"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    @mock.patch(\u0027sys.stdout\u0027, new_callable\u003dStringIO.StringIO)"},{"line_number":26,"context_line":"    def test_discover_no_keystones(self, mock_stdout):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2BBdU%3D","line":23,"in_reply_to":"AAAATn%2F%2BF50%3D","updated":"2013-12-03 11:13:37.000000000","message":"Done","commit_id":"42666c925b93bd3ecae4d3b4a8a62370e065b280"},{"author":{"_account_id":7366,"name":"Ivan Melnikov","email":"imelnikov@griddynamics.com","username":"imelnikov"},"change_message_id":"3ea6c0f4f3fd2b7b7e540fbefd41360a3a963549","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        shell.do_discover(cs, None)"},{"line_number":30,"context_line":"        output \u003d mock_stdout.getvalue()"},{"line_number":31,"context_line":"        self.assertTrue("},{"line_number":32,"context_line":"            output.find(\"No Keystone-compatible endpoint found\") \u003e\u003d 0)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def test_discover_endpoint(self):"},{"line_number":35,"context_line":"        cs \u003d mock.Mock()"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2BF5I%3D","line":32,"updated":"2013-12-02 16:53:02.000000000","message":"Using \u0027in\u0027 operator here (as well as in several places below) would make code more readable. Ex.:\n\n    self.assertTrue(\"No Keystone....\" in output)\n\nEven better would be to use assertIn method provided by testtools:\n\n    self.assertIn(\"No Keysyone...\", output)","commit_id":"42666c925b93bd3ecae4d3b4a8a62370e065b280"},{"author":{"_account_id":9300,"name":"Igor A. Lukyanenkov","email":"ilukyanenkov@griddynamics.com","username":"unconn"},"change_message_id":"eafd2d16c213c827d1dfcbd0876f5181d9d881da","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        shell.do_discover(cs, None)"},{"line_number":30,"context_line":"        output \u003d mock_stdout.getvalue()"},{"line_number":31,"context_line":"        self.assertTrue("},{"line_number":32,"context_line":"            output.find(\"No Keystone-compatible endpoint found\") \u003e\u003d 0)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def test_discover_endpoint(self):"},{"line_number":35,"context_line":"        cs \u003d mock.Mock()"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2BBdc%3D","line":32,"in_reply_to":"AAAATn%2F%2BF5I%3D","updated":"2013-12-03 11:13:37.000000000","message":"Done","commit_id":"42666c925b93bd3ecae4d3b4a8a62370e065b280"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"41ac2e129750d57759248a2ae7340528fc5505e6","unresolved":false,"context_lines":[{"line_number":15,"context_line":"from keystoneclient.generic import shell"},{"line_number":16,"context_line":"from keystoneclient.tests import utils"},{"line_number":17,"context_line":"import mock"},{"line_number":18,"context_line":"import StringIO"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class ShellTest(utils.TestCase):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F9qqw%3D","line":18,"updated":"2013-12-09 02:15:45.000000000","message":"this would need to come from six. (py3 compat)","commit_id":"a55208ae68b0d2dec5eb0a542142f04aaa12d923"},{"author":{"_account_id":9300,"name":"Igor A. Lukyanenkov","email":"ilukyanenkov@griddynamics.com","username":"unconn"},"change_message_id":"c3cd47400308368470ab973efdfe222935ccd203","unresolved":false,"context_lines":[{"line_number":15,"context_line":"from keystoneclient.generic import shell"},{"line_number":16,"context_line":"from keystoneclient.tests import utils"},{"line_number":17,"context_line":"import mock"},{"line_number":18,"context_line":"import StringIO"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class ShellTest(utils.TestCase):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F9pC4%3D","line":18,"in_reply_to":"AAAATn%2F9qqw%3D","updated":"2013-12-09 12:37:33.000000000","message":"Done","commit_id":"a55208ae68b0d2dec5eb0a542142f04aaa12d923"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"40b0a381c8f322da27f627d8c0374c5c980004f8","unresolved":false,"context_lines":[{"line_number":15,"context_line":"from keystoneclient.generic import shell"},{"line_number":16,"context_line":"from keystoneclient.tests import utils"},{"line_number":17,"context_line":"import mock"},{"line_number":18,"context_line":"from six import moves"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class ShellTest(utils.TestCase):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F8vlA%3D","line":18,"updated":"2013-12-20 19:31:27.000000000","message":"organize imports as described in hacking: https://github.com/openstack-dev/hacking/blame/master/doc/source/index.rst#L57","commit_id":"6160117e8bbe65aef4486f25936f5ca88d450628"},{"author":{"_account_id":9300,"name":"Igor A. Lukyanenkov","email":"ilukyanenkov@griddynamics.com","username":"unconn"},"change_message_id":"e1524ae894549562b9a3d6bc49ccce767ed8c75c","unresolved":false,"context_lines":[{"line_number":15,"context_line":"from keystoneclient.generic import shell"},{"line_number":16,"context_line":"from keystoneclient.tests import utils"},{"line_number":17,"context_line":"import mock"},{"line_number":18,"context_line":"from six import moves"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class ShellTest(utils.TestCase):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAT3%2F%2F1mY%3D","line":18,"in_reply_to":"AAAATn%2F8vlA%3D","updated":"2013-12-30 12:55:52.000000000","message":"Done","commit_id":"6160117e8bbe65aef4486f25936f5ca88d450628"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"40b0a381c8f322da27f627d8c0374c5c980004f8","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    stub_message \u003d \"This is a stub message\""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def test_discover_no_keystones(self):"},{"line_number":35,"context_line":"        cs \u003d mock.Mock()"},{"line_number":36,"context_line":"        cs.discover.return_value \u003d {}"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        with mock.patch(\u0027sys.stdout\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F8vkc%3D","line":35,"updated":"2013-12-20 19:31:27.000000000","message":"what is \"cs\"? This needs a more descriptive name.","commit_id":"6160117e8bbe65aef4486f25936f5ca88d450628"},{"author":{"_account_id":9300,"name":"Igor A. Lukyanenkov","email":"ilukyanenkov@griddynamics.com","username":"unconn"},"change_message_id":"e1524ae894549562b9a3d6bc49ccce767ed8c75c","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    stub_message \u003d \"This is a stub message\""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def test_discover_no_keystones(self):"},{"line_number":35,"context_line":"        cs \u003d mock.Mock()"},{"line_number":36,"context_line":"        cs.discover.return_value \u003d {}"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        with mock.patch(\u0027sys.stdout\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAT3%2F%2F1lc%3D","line":35,"in_reply_to":"AAAATn%2F8vkc%3D","updated":"2013-12-30 12:55:52.000000000","message":"Done. Renamed to client_mock.","commit_id":"6160117e8bbe65aef4486f25936f5ca88d450628"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"40b0a381c8f322da27f627d8c0374c5c980004f8","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        with mock.patch(\u0027sys.stdout\u0027,"},{"line_number":39,"context_line":"                        new_callable\u003dmoves.StringIO) as mock_stdout:"},{"line_number":40,"context_line":"            shell.do_discover(cs, None)"},{"line_number":41,"context_line":"            output \u003d mock_stdout.getvalue()"},{"line_number":42,"context_line":"        self.assertIn(\"No Keystone-compatible endpoint found\", output)"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F8vkw%3D","line":40,"updated":"2013-12-20 19:31:27.000000000","message":"give a name to the None parameter so reviewers know what it\u0027s supposed to be for.\n\nThis applies throughout this file.","commit_id":"6160117e8bbe65aef4486f25936f5ca88d450628"},{"author":{"_account_id":9300,"name":"Igor A. Lukyanenkov","email":"ilukyanenkov@griddynamics.com","username":"unconn"},"change_message_id":"e1524ae894549562b9a3d6bc49ccce767ed8c75c","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        with mock.patch(\u0027sys.stdout\u0027,"},{"line_number":39,"context_line":"                        new_callable\u003dmoves.StringIO) as mock_stdout:"},{"line_number":40,"context_line":"            shell.do_discover(cs, None)"},{"line_number":41,"context_line":"            output \u003d mock_stdout.getvalue()"},{"line_number":42,"context_line":"        self.assertIn(\"No Keystone-compatible endpoint found\", output)"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAT3%2F%2F1mI%3D","line":40,"in_reply_to":"AAAATn%2F8vkw%3D","updated":"2013-12-30 12:55:52.000000000","message":"Done. Second parameter is never used through function under test.","commit_id":"6160117e8bbe65aef4486f25936f5ca88d450628"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"40b0a381c8f322da27f627d8c0374c5c980004f8","unresolved":false,"context_lines":[{"line_number":67,"context_line":"    def test_discover_versions_message(self):"},{"line_number":68,"context_line":"        cs \u003d mock.Mock()"},{"line_number":69,"context_line":"        cs.discover.return_value \u003d {\"message\": self.stub_message}"},{"line_number":70,"context_line":"        with mock.patch(\u0027sys.stdout\u0027,"},{"line_number":71,"context_line":"                        new_callable\u003dmoves.StringIO) as mock_stdout:"},{"line_number":72,"context_line":"            shell.do_discover(cs, None)"},{"line_number":73,"context_line":"            output \u003d mock_stdout.getvalue()"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F8vkY%3D","line":70,"updated":"2013-12-20 19:31:27.000000000","message":"use \u0027 or \" for strings consistently. The keystone guidance is to prefer \u0027","commit_id":"6160117e8bbe65aef4486f25936f5ca88d450628"},{"author":{"_account_id":9300,"name":"Igor A. Lukyanenkov","email":"ilukyanenkov@griddynamics.com","username":"unconn"},"change_message_id":"e1524ae894549562b9a3d6bc49ccce767ed8c75c","unresolved":false,"context_lines":[{"line_number":67,"context_line":"    def test_discover_versions_message(self):"},{"line_number":68,"context_line":"        cs \u003d mock.Mock()"},{"line_number":69,"context_line":"        cs.discover.return_value \u003d {\"message\": self.stub_message}"},{"line_number":70,"context_line":"        with mock.patch(\u0027sys.stdout\u0027,"},{"line_number":71,"context_line":"                        new_callable\u003dmoves.StringIO) as mock_stdout:"},{"line_number":72,"context_line":"            shell.do_discover(cs, None)"},{"line_number":73,"context_line":"            output \u003d mock_stdout.getvalue()"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAT3%2F%2F1mE%3D","line":70,"in_reply_to":"AAAATn%2F8vkY%3D","updated":"2013-12-30 12:55:52.000000000","message":"Done","commit_id":"6160117e8bbe65aef4486f25936f5ca88d450628"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"855bc73a497a1e1d236bc1ebd2d38ac9d79e26d6","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from keystoneclient.tests import utils"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class ShellTest(utils.TestCase):"},{"line_number":26,"context_line":"    foo_version \u003d {"},{"line_number":27,"context_line":"        \u0027id\u0027: \u0027foo_id\u0027,"},{"line_number":28,"context_line":"        \u0027status\u0027: \u0027foo_status\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAT3%2F%2F0lM%3D","line":25,"updated":"2013-12-30 19:51:51.000000000","message":"Add a docstring that describes what this is testing.","commit_id":"785a5759e91c1ec85e09d77b0cf03dbf8a8b8a0a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"855bc73a497a1e1d236bc1ebd2d38ac9d79e26d6","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    }"},{"line_number":36,"context_line":"    stub_message \u003d \u0027This is a stub message\u0027"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def test_discover_no_keystones(self):"},{"line_number":39,"context_line":"        client_mock \u003d mock.Mock()"},{"line_number":40,"context_line":"        client_mock.discover.return_value \u003d {}"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAT3%2F%2F0lI%3D","line":38,"updated":"2013-12-30 19:51:51.000000000","message":"there should be a comment on each of these test functions that says what it\u0027s testing.","commit_id":"785a5759e91c1ec85e09d77b0cf03dbf8a8b8a0a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"855bc73a497a1e1d236bc1ebd2d38ac9d79e26d6","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    stub_message \u003d \u0027This is a stub message\u0027"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def test_discover_no_keystones(self):"},{"line_number":39,"context_line":"        client_mock \u003d mock.Mock()"},{"line_number":40,"context_line":"        client_mock.discover.return_value \u003d {}"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        with mock.patch(\u0027sys.stdout\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAT3%2F%2F0lk%3D","line":39,"updated":"2013-12-30 19:51:51.000000000","message":"every test uses client_mock, so create it in setUp instead of copy-paste.","commit_id":"785a5759e91c1ec85e09d77b0cf03dbf8a8b8a0a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"855bc73a497a1e1d236bc1ebd2d38ac9d79e26d6","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        with mock.patch(\u0027sys.stdout\u0027,"},{"line_number":99,"context_line":"                        new_callable\u003dmoves.StringIO) as mock_stdout:"},{"line_number":100,"context_line":"            shell.do_discover(client_mock, args\u003dNone)"},{"line_number":101,"context_line":"            output \u003d mock_stdout.getvalue()"},{"line_number":102,"context_line":"        self.assertIn(self.foo_extension[\u0027foo\u0027], output)"},{"line_number":103,"context_line":"        self.assertIn(self.foo_extension[\u0027bar\u0027], output)"},{"line_number":104,"context_line":"        self.assertNotIn(self.foo_extension[\u0027message\u0027], output)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAT3%2F%2F0lE%3D","line":101,"updated":"2013-12-30 19:51:51.000000000","message":"lines 98-101 are duplicated in several places so should be moved to a function.","commit_id":"785a5759e91c1ec85e09d77b0cf03dbf8a8b8a0a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"3b8d3e731797497657216244ee01ed58929b6e61","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    \"\"\"Unit tests for do_discover function"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    Function under test prints discovered using provided client object"},{"line_number":29,"context_line":"    keystone servers capabilities (api versions and available extensions)"},{"line_number":30,"context_line":"    \"\"\""},{"line_number":31,"context_line":"    foo_version \u003d {"},{"line_number":32,"context_line":"        \u0027id\u0027: \u0027foo_id\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAT3%2F%2Fyok%3D","line":29,"updated":"2013-12-31 14:29:27.000000000","message":"I think this should be removed since it\u0027s just duplicating the documentation for the do_discover function. line 26 is enough.","commit_id":"03f29c3f3192f59e281ed04ef38caae077234fae"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"3b8d3e731797497657216244ee01ed58929b6e61","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            output \u003d mock_stdout.getvalue()"},{"line_number":58,"context_line":"        return output"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def test_discover_no_keystones(self):"},{"line_number":61,"context_line":"        # No severs configured for client,"},{"line_number":62,"context_line":"        # corresponding message should be printed"},{"line_number":63,"context_line":"        output \u003d self._execute_discover()"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAT3%2F%2FyoU%3D","line":60,"updated":"2013-12-31 14:29:27.000000000","message":"since the class name includes \"Discover\", should remove \"_discover\" from the test function names.","commit_id":"03f29c3f3192f59e281ed04ef38caae077234fae"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"789e7a04a9d66b556254dac98c69147b4799eadb","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        return output"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def _check_version_print(self, output, version):"},{"line_number":62,"context_line":"        \"\"\"Checks all api version\u0027s parameters is present in output.\"\"\""},{"line_number":63,"context_line":"        self.assertIn(version[\u0027id\u0027], output)"},{"line_number":64,"context_line":"        self.assertIn(version[\u0027status\u0027], output)"},{"line_number":65,"context_line":"        self.assertIn(version[\u0027url\u0027], output)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAT3%2F%2FqkY%3D","line":62,"updated":"2014-01-03 21:05:47.000000000","message":"change \"parameters is\" to \"parameters are\"","commit_id":"eae269104a89c81a72ea2c065fed9805e73b5251"},{"author":{"_account_id":9300,"name":"Igor A. Lukyanenkov","email":"ilukyanenkov@griddynamics.com","username":"unconn"},"change_message_id":"2a99dc41a185c4b54e3f96da5e6ef84d17757c7d","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        return output"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def _check_version_print(self, output, version):"},{"line_number":62,"context_line":"        \"\"\"Checks all api version\u0027s parameters is present in output.\"\"\""},{"line_number":63,"context_line":"        self.assertIn(version[\u0027id\u0027], output)"},{"line_number":64,"context_line":"        self.assertIn(version[\u0027status\u0027], output)"},{"line_number":65,"context_line":"        self.assertIn(version[\u0027url\u0027], output)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAUH%2F%2F30Y%3D","line":62,"in_reply_to":"AAAAT3%2F%2FqkY%3D","updated":"2014-01-07 11:58:01.000000000","message":"Done","commit_id":"eae269104a89c81a72ea2c065fed9805e73b5251"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"789e7a04a9d66b556254dac98c69147b4799eadb","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        self.assertIn(version[\u0027url\u0027], output)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def test_no_keystones(self):"},{"line_number":68,"context_line":"        # No severs configured for client,"},{"line_number":69,"context_line":"        # corresponding message should be printed"},{"line_number":70,"context_line":"        output \u003d self._execute_discover()"},{"line_number":71,"context_line":"        self.assertIn(\u0027No Keystone-compatible endpoint found\u0027, output)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAT3%2F%2Fqkw%3D","line":68,"updated":"2014-01-03 21:05:47.000000000","message":"(typo) change \"severs\" to \"servers\"","commit_id":"eae269104a89c81a72ea2c065fed9805e73b5251"},{"author":{"_account_id":9300,"name":"Igor A. Lukyanenkov","email":"ilukyanenkov@griddynamics.com","username":"unconn"},"change_message_id":"2a99dc41a185c4b54e3f96da5e6ef84d17757c7d","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        self.assertIn(version[\u0027url\u0027], output)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def test_no_keystones(self):"},{"line_number":68,"context_line":"        # No severs configured for client,"},{"line_number":69,"context_line":"        # corresponding message should be printed"},{"line_number":70,"context_line":"        output \u003d self._execute_discover()"},{"line_number":71,"context_line":"        self.assertIn(\u0027No Keystone-compatible endpoint found\u0027, output)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAUH%2F%2F30c%3D","line":68,"in_reply_to":"AAAAT3%2F%2Fqkw%3D","updated":"2014-01-07 11:58:01.000000000","message":"Done","commit_id":"eae269104a89c81a72ea2c065fed9805e73b5251"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"789e7a04a9d66b556254dac98c69147b4799eadb","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        self.client_mock.discover.assert_called_with()"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def test_message(self):"},{"line_number":97,"context_line":"        # If client.discover() result containing message - it should be printed"},{"line_number":98,"context_line":"        self.client_mock.discover.return_value \u003d {\u0027message\u0027: self.stub_message}"},{"line_number":99,"context_line":"        output \u003d self._execute_discover()"},{"line_number":100,"context_line":"        self.assertIn(self.stub_message, output)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAT3%2F%2FqkU%3D","line":97,"updated":"2014-01-03 21:05:47.000000000","message":"change \"containing\" to \"contains\"","commit_id":"eae269104a89c81a72ea2c065fed9805e73b5251"},{"author":{"_account_id":9300,"name":"Igor A. Lukyanenkov","email":"ilukyanenkov@griddynamics.com","username":"unconn"},"change_message_id":"2a99dc41a185c4b54e3f96da5e6ef84d17757c7d","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        self.client_mock.discover.assert_called_with()"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def test_message(self):"},{"line_number":97,"context_line":"        # If client.discover() result containing message - it should be printed"},{"line_number":98,"context_line":"        self.client_mock.discover.return_value \u003d {\u0027message\u0027: self.stub_message}"},{"line_number":99,"context_line":"        output \u003d self._execute_discover()"},{"line_number":100,"context_line":"        self.assertIn(self.stub_message, output)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAUH%2F%2F30g%3D","line":97,"in_reply_to":"AAAAT3%2F%2FqkU%3D","updated":"2014-01-07 11:58:01.000000000","message":"Done","commit_id":"eae269104a89c81a72ea2c065fed9805e73b5251"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"789e7a04a9d66b556254dac98c69147b4799eadb","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def test_versions(self):"},{"line_number":103,"context_line":"        # Every version in client.discover() result should be printed"},{"line_number":104,"context_line":"        # and client.discover_extension() should be called on it\u0027s url"},{"line_number":105,"context_line":"        self.client_mock.discover.return_value \u003d {"},{"line_number":106,"context_line":"            \u0027foo\u0027: self.foo_version,"},{"line_number":107,"context_line":"            \u0027bar\u0027: self.bar_version,"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAT3%2F%2FqkE%3D","line":104,"updated":"2014-01-03 21:05:47.000000000","message":"change \"it\u0027s\" to \"its\"","commit_id":"eae269104a89c81a72ea2c065fed9805e73b5251"},{"author":{"_account_id":9300,"name":"Igor A. Lukyanenkov","email":"ilukyanenkov@griddynamics.com","username":"unconn"},"change_message_id":"2a99dc41a185c4b54e3f96da5e6ef84d17757c7d","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def test_versions(self):"},{"line_number":103,"context_line":"        # Every version in client.discover() result should be printed"},{"line_number":104,"context_line":"        # and client.discover_extension() should be called on it\u0027s url"},{"line_number":105,"context_line":"        self.client_mock.discover.return_value \u003d {"},{"line_number":106,"context_line":"            \u0027foo\u0027: self.foo_version,"},{"line_number":107,"context_line":"            \u0027bar\u0027: self.bar_version,"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAUH%2F%2F30k%3D","line":104,"in_reply_to":"AAAAT3%2F%2FqkE%3D","updated":"2014-01-07 11:58:01.000000000","message":"Done","commit_id":"eae269104a89c81a72ea2c065fed9805e73b5251"},{"author":{"_account_id":2468,"name":"unicell","email":"unicell@gmail.com","username":"unicell"},"change_message_id":"f816866ef7a668da74f2f75283df250093eade57","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2014 OpenStack Foundation"},{"line_number":4,"context_line":"# All Rights Reserved."}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUH%2F%2Fyqw%3D","line":1,"updated":"2014-01-08 12:25:53.000000000","message":"Just a nit pick, vim modelines could be removed, but that doesn\u0027t worth a -1.\n\nhttp://openstack.10931.n7.nabble.com/Remove-vim-modelines-td21780.html","commit_id":"ed4d2a5d7e329f2917019aa64ac75fa339230743"}]}
