)]}'
{"keystone/logic/types/tenant.py":[{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"ae03a3ae36eee133da3464b0cedf16c84ff30de4","unresolved":false,"context_lines":[{"line_number":88,"context_line":"                set_enabled \u003d tenant[\"enabled\"]"},{"line_number":89,"context_line":"                if not isinstance(set_enabled, bool):"},{"line_number":90,"context_line":"                    raise fault.BadRequestFault(\"Bad enabled attribute!\")"},{"line_number":91,"context_line":"            if \"description\" in tenant:"},{"line_number":92,"context_line":"                description \u003d tenant[\"description\"]"},{"line_number":93,"context_line":"            else:"},{"line_number":94,"context_line":"                description \u003d None"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAC3%2F%2F658%3D","line":91,"updated":"2011-12-23 17:12:48.000000000","message":"This if/else block is not needed; use the dict\u0027s get() method, which returns None (or any other default value) if the key is not found. E.g.:\n\ndescription \u003d tenant.get(\"description\")","commit_id":"d32f9434425e5dc8e9d8c32a7649b9535f6db7c6"},{"author":{"_account_id":5,"name":"Ziad Sawalha","email":"ziad.sawalha@rackspace.com","username":"ziad-sawalha"},"change_message_id":"b6847e64d54cf5544152443e1bac922637401c83","unresolved":false,"context_lines":[{"line_number":88,"context_line":"                set_enabled \u003d tenant[\"enabled\"]"},{"line_number":89,"context_line":"                if not isinstance(set_enabled, bool):"},{"line_number":90,"context_line":"                    raise fault.BadRequestFault(\"Bad enabled attribute!\")"},{"line_number":91,"context_line":"            if \"description\" in tenant:"},{"line_number":92,"context_line":"                description \u003d tenant[\"description\"]"},{"line_number":93,"context_line":"            else:"},{"line_number":94,"context_line":"                description \u003d None"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAC3%2F%2F6wI%3D","line":91,"in_reply_to":"AAAAC3%2F%2F658%3D","updated":"2011-12-23 18:40:31.000000000","message":"Done","commit_id":"d32f9434425e5dc8e9d8c32a7649b9535f6db7c6"}],"keystone/test/__init__.py":[{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"ae03a3ae36eee133da3464b0cedf16c84ff30de4","unresolved":false,"context_lines":[{"line_number":489,"context_line":"            has_base \u003d False"},{"line_number":490,"context_line":"            for x in args:"},{"line_number":491,"context_line":"                if x.startswith(\u0027functional\u0027) or x.startswith(\u0027unit\u0027) \\"},{"line_number":492,"context_line":"                                            or x.startswith(\u0027client\u0027):"},{"line_number":493,"context_line":"                    argv.append(\u0027keystone.test.%s\u0027 % x)"},{"line_number":494,"context_line":"                    has_base \u003d True"},{"line_number":495,"context_line":"                elif x.startswith(\u0027--hide-elapsed\u0027):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAC3%2F%2F6zo%3D","line":492,"updated":"2011-12-23 17:12:48.000000000","message":"Simplify, since startswith() can take an iterable:\n\nif x.startswith((\u0027functional\u0027, \u0027unit\u0027, \u0027client\u0027)):\n\n(also for lines 546 and 583 below)","commit_id":"d32f9434425e5dc8e9d8c32a7649b9535f6db7c6"},{"author":{"_account_id":5,"name":"Ziad Sawalha","email":"ziad.sawalha@rackspace.com","username":"ziad-sawalha"},"change_message_id":"b6847e64d54cf5544152443e1bac922637401c83","unresolved":false,"context_lines":[{"line_number":489,"context_line":"            has_base \u003d False"},{"line_number":490,"context_line":"            for x in args:"},{"line_number":491,"context_line":"                if x.startswith(\u0027functional\u0027) or x.startswith(\u0027unit\u0027) \\"},{"line_number":492,"context_line":"                                            or x.startswith(\u0027client\u0027):"},{"line_number":493,"context_line":"                    argv.append(\u0027keystone.test.%s\u0027 % x)"},{"line_number":494,"context_line":"                    has_base \u003d True"},{"line_number":495,"context_line":"                elif x.startswith(\u0027--hide-elapsed\u0027):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAC3%2F%2F6wA%3D","line":492,"in_reply_to":"AAAAC3%2F%2F6zo%3D","updated":"2011-12-23 18:40:31.000000000","message":"Done","commit_id":"d32f9434425e5dc8e9d8c32a7649b9535f6db7c6"}],"keystone/test/client/test_client.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"1132efe8905a3aa802c35ad55af9ea8ab5dcc621","unresolved":false,"context_lines":[{"line_number":2,"context_line":""},{"line_number":3,"context_line":"import keystone.common.exception"},{"line_number":4,"context_line":"import keystone.client"},{"line_number":5,"context_line":"from keystone.test.functional.common import isSsl"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"class TestAdminClient(unittest.TestCase):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAC3%2F%2F7JU%3D","line":5,"updated":"2011-12-22 06:53:23.000000000","message":"importing from a different package\u0027s common module is awkward","commit_id":"34a2516fdc703ad4c3f4feac08d151efac948dd0"},{"author":{"_account_id":5,"name":"Ziad Sawalha","email":"ziad.sawalha@rackspace.com","username":"ziad-sawalha"},"change_message_id":"17cb5dc491d91717876323c5fb39678e49b6911f","unresolved":false,"context_lines":[{"line_number":2,"context_line":""},{"line_number":3,"context_line":"import keystone.common.exception"},{"line_number":4,"context_line":"import keystone.client"},{"line_number":5,"context_line":"from keystone.test.functional.common import isSsl"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"class TestAdminClient(unittest.TestCase):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAC3%2F%2F68Y%3D","line":5,"in_reply_to":"AAAAC3%2F%2F7JU%3D","updated":"2011-12-22 20:32:30.000000000","message":"Done","commit_id":"34a2516fdc703ad4c3f4feac08d151efac948dd0"}],"keystone/test/client/test_frontends.py":[{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"ae03a3ae36eee133da3464b0cedf16c84ff30de4","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"        self.services \u003d {}"},{"line_number":18,"context_line":"        self.endpoint_templates \u003d {}"},{"line_number":19,"context_line":"        for x in range(0, 5):"},{"line_number":20,"context_line":"            self.services[x] \u003d self.create_service().json[\u0027OS-KSADM:service\u0027]"},{"line_number":21,"context_line":"            self.endpoint_templates[x] \u003d self.create_endpoint_template("},{"line_number":22,"context_line":"                name\u003dself.services[x][\u0027name\u0027], \\"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAC3%2F%2F6zk%3D","line":19,"updated":"2011-12-23 17:12:48.000000000","message":"Minor: the zero isn\u0027t needed in the range call. range(5) is the same as range(0, 5)","commit_id":"d32f9434425e5dc8e9d8c32a7649b9535f6db7c6"},{"author":{"_account_id":5,"name":"Ziad Sawalha","email":"ziad.sawalha@rackspace.com","username":"ziad-sawalha"},"change_message_id":"b6847e64d54cf5544152443e1bac922637401c83","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"        self.services \u003d {}"},{"line_number":18,"context_line":"        self.endpoint_templates \u003d {}"},{"line_number":19,"context_line":"        for x in range(0, 5):"},{"line_number":20,"context_line":"            self.services[x] \u003d self.create_service().json[\u0027OS-KSADM:service\u0027]"},{"line_number":21,"context_line":"            self.endpoint_templates[x] \u003d self.create_endpoint_template("},{"line_number":22,"context_line":"                name\u003dself.services[x][\u0027name\u0027], \\"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAC3%2F%2F6v8%3D","line":19,"in_reply_to":"AAAAC3%2F%2F6zk%3D","updated":"2011-12-23 18:40:31.000000000","message":"Done","commit_id":"d32f9434425e5dc8e9d8c32a7649b9535f6db7c6"}],"keystone/test/functional/common.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"1132efe8905a3aa802c35ad55af9ea8ab5dcc621","unresolved":false,"context_lines":[{"line_number":324,"context_line":"    def tearDown(self):"},{"line_number":325,"context_line":"        pass"},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"    def request(self, host\u003d\u0027127.0.0.1\u0027, port\u003d80, method\u003d\u0027GET\u0027, path\u003d\u0027/\u0027,"},{"line_number":328,"context_line":"            headers\u003dNone, body\u003dNone, assert_status\u003dNone, server\u003dNone):"},{"line_number":329,"context_line":"        \"\"\"Overrides HttpTestCase and uses local calls\"\"\""},{"line_number":330,"context_line":"        if self.use_server:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAC3%2F%2F7Jk%3D","line":327,"updated":"2011-12-22 06:53:23.000000000","message":"I see why you called this \u0027request\u0027, but it would have saved even more code to replace the parent class instead, especially if it\u0027s no longer being used in test.functional","commit_id":"34a2516fdc703ad4c3f4feac08d151efac948dd0"},{"author":{"_account_id":5,"name":"Ziad Sawalha","email":"ziad.sawalha@rackspace.com","username":"ziad-sawalha"},"change_message_id":"5b29123e0b9a1523b28d13c327de1197ba7664c5","unresolved":false,"context_lines":[{"line_number":324,"context_line":"    def tearDown(self):"},{"line_number":325,"context_line":"        pass"},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"    def request(self, host\u003d\u0027127.0.0.1\u0027, port\u003d80, method\u003d\u0027GET\u0027, path\u003d\u0027/\u0027,"},{"line_number":328,"context_line":"            headers\u003dNone, body\u003dNone, assert_status\u003dNone, server\u003dNone):"},{"line_number":329,"context_line":"        \"\"\"Overrides HttpTestCase and uses local calls\"\"\""},{"line_number":330,"context_line":"        if self.use_server:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAC3%2F%2F6%2B0%3D","line":327,"in_reply_to":"AAAAC3%2F%2F7Jk%3D","updated":"2011-12-22 19:12:39.000000000","message":"The one in parent class is still being used by client tests","commit_id":"34a2516fdc703ad4c3f4feac08d151efac948dd0"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"1132efe8905a3aa802c35ad55af9ea8ab5dcc621","unresolved":false,"context_lines":[{"line_number":350,"context_line":""},{"line_number":351,"context_line":"        # Automatically assert HTTP status code"},{"line_number":352,"context_line":"        if assert_status:"},{"line_number":353,"context_line":"            self.assertEqual(res.status_int, assert_status,"},{"line_number":354,"context_line":"                \u0027Status code %s is not %s, as expected)\\n\\n%s\u0027 %"},{"line_number":355,"context_line":"                (res.status_int, assert_status, res.body))"},{"line_number":356,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAC3%2F%2F7Jo%3D","line":353,"updated":"2011-12-22 06:53:23.000000000","message":"why not call the assert methods you have available?","commit_id":"34a2516fdc703ad4c3f4feac08d151efac948dd0"},{"author":{"_account_id":5,"name":"Ziad Sawalha","email":"ziad.sawalha@rackspace.com","username":"ziad-sawalha"},"change_message_id":"17cb5dc491d91717876323c5fb39678e49b6911f","unresolved":false,"context_lines":[{"line_number":350,"context_line":""},{"line_number":351,"context_line":"        # Automatically assert HTTP status code"},{"line_number":352,"context_line":"        if assert_status:"},{"line_number":353,"context_line":"            self.assertEqual(res.status_int, assert_status,"},{"line_number":354,"context_line":"                \u0027Status code %s is not %s, as expected)\\n\\n%s\u0027 %"},{"line_number":355,"context_line":"                (res.status_int, assert_status, res.body))"},{"line_number":356,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAC3%2F%2F68Q%3D","line":353,"in_reply_to":"AAAAC3%2F%2F7Jo%3D","updated":"2011-12-22 20:32:30.000000000","message":"They don\u0027t work with this type of response (see res.status_int below)","commit_id":"34a2516fdc703ad4c3f4feac08d151efac948dd0"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"1132efe8905a3aa802c35ad55af9ea8ab5dcc621","unresolved":false,"context_lines":[{"line_number":375,"context_line":"                response.xml \u003d self._decode_xml(response.body)"},{"line_number":376,"context_line":"        return response"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"    def assertResponseSuccessful(self, response):"},{"line_number":379,"context_line":"        \"\"\"Asserts that a status code lies inside the 2xx range"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"        :param response: :py:class:`webob.Response` to be"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAC3%2F%2F7Jw%3D","line":378,"updated":"2011-12-22 06:53:23.000000000","message":"How is this different from the method you\u0027re overriding?","commit_id":"34a2516fdc703ad4c3f4feac08d151efac948dd0"},{"author":{"_account_id":5,"name":"Ziad Sawalha","email":"ziad.sawalha@rackspace.com","username":"ziad-sawalha"},"change_message_id":"5b29123e0b9a1523b28d13c327de1197ba7664c5","unresolved":false,"context_lines":[{"line_number":375,"context_line":"                response.xml \u003d self._decode_xml(response.body)"},{"line_number":376,"context_line":"        return response"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"    def assertResponseSuccessful(self, response):"},{"line_number":379,"context_line":"        \"\"\"Asserts that a status code lies inside the 2xx range"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"        :param response: :py:class:`webob.Response` to be"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAC3%2F%2F6%2B4%3D","line":378,"in_reply_to":"AAAAC3%2F%2F7Jw%3D","updated":"2011-12-22 19:12:39.000000000","message":"Handles webob.request (not httplib)","commit_id":"34a2516fdc703ad4c3f4feac08d151efac948dd0"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"1132efe8905a3aa802c35ad55af9ea8ab5dcc621","unresolved":false,"context_lines":[{"line_number":394,"context_line":"            \u0027Status code %d is outside of the expected range (2xx)\\n\\n%s\u0027 %"},{"line_number":395,"context_line":"            (response.status_int, response.body))"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"    def assertResponseStatus(self, response, assert_status):"},{"line_number":398,"context_line":"        \"\"\"Asserts a specific status code on the response"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"        :param response: :py:class:`webob.Response`"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAC3%2F%2F7Js%3D","line":397,"updated":"2011-12-22 06:53:23.000000000","message":"Same question as above","commit_id":"34a2516fdc703ad4c3f4feac08d151efac948dd0"},{"author":{"_account_id":5,"name":"Ziad Sawalha","email":"ziad.sawalha@rackspace.com","username":"ziad-sawalha"},"change_message_id":"5b29123e0b9a1523b28d13c327de1197ba7664c5","unresolved":false,"context_lines":[{"line_number":394,"context_line":"            \u0027Status code %d is outside of the expected range (2xx)\\n\\n%s\u0027 %"},{"line_number":395,"context_line":"            (response.status_int, response.body))"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"    def assertResponseStatus(self, response, assert_status):"},{"line_number":398,"context_line":"        \"\"\"Asserts a specific status code on the response"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"        :param response: :py:class:`webob.Response`"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAC3%2F%2F6%2B8%3D","line":397,"in_reply_to":"AAAAC3%2F%2F7Js%3D","updated":"2011-12-22 19:12:39.000000000","message":"Note: response.status_int. The difference is that we are handling a webob.Response instead of an httplib one","commit_id":"34a2516fdc703ad4c3f4feac08d151efac948dd0"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"ae03a3ae36eee133da3464b0cedf16c84ff30de4","unresolved":false,"context_lines":[{"line_number":354,"context_line":"                \u0027Status code %s is not %s, as expected)\\n\\n%s\u0027 %"},{"line_number":355,"context_line":"                (res.status_int, assert_status, res.body))"},{"line_number":356,"context_line":"        else:"},{"line_number":357,"context_line":"            self.assertTrue(res.status_int \u003e\u003d 200 and res.status_int \u003c\u003d 299,"},{"line_number":358,"context_line":"                \u0027Status code %d is outside of the expected range (2xx)\\n\\n%s\u0027 %"},{"line_number":359,"context_line":"                (res.status_int, res.body))"},{"line_number":360,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAC3%2F%2F6zQ%3D","line":357,"updated":"2011-12-23 17:12:48.000000000","message":"Can write:\nres.status_int \u003e\u003d 200 and res.status_int \u003c\u003d 299\nin just one comparison:\n299 \u003e\u003d res.status_int \u003e\u003d 200","commit_id":"d32f9434425e5dc8e9d8c32a7649b9535f6db7c6"},{"author":{"_account_id":5,"name":"Ziad Sawalha","email":"ziad.sawalha@rackspace.com","username":"ziad-sawalha"},"change_message_id":"b6847e64d54cf5544152443e1bac922637401c83","unresolved":false,"context_lines":[{"line_number":354,"context_line":"                \u0027Status code %s is not %s, as expected)\\n\\n%s\u0027 %"},{"line_number":355,"context_line":"                (res.status_int, assert_status, res.body))"},{"line_number":356,"context_line":"        else:"},{"line_number":357,"context_line":"            self.assertTrue(res.status_int \u003e\u003d 200 and res.status_int \u003c\u003d 299,"},{"line_number":358,"context_line":"                \u0027Status code %d is outside of the expected range (2xx)\\n\\n%s\u0027 %"},{"line_number":359,"context_line":"                (res.status_int, res.body))"},{"line_number":360,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAC3%2F%2F6v4%3D","line":357,"in_reply_to":"AAAAC3%2F%2F6zQ%3D","updated":"2011-12-23 18:40:31.000000000","message":"Done","commit_id":"d32f9434425e5dc8e9d8c32a7649b9535f6db7c6"}],"keystone/test/functional/test_tenants.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"1132efe8905a3aa802c35ad55af9ea8ab5dcc621","unresolved":false,"context_lines":[{"line_number":290,"context_line":"        tenant \u003d self.assertValidJsonTenantResponse(r)"},{"line_number":291,"context_line":"        self.assertEquals(self.tenant[\u0027id\u0027], tenant[\u0027id\u0027])"},{"line_number":292,"context_line":"        self.assertEquals(self.tenant[\u0027name\u0027], tenant[\u0027name\u0027])"},{"line_number":293,"context_line":"        self.assertFalse(\u0027description\u0027 in tenant)"},{"line_number":294,"context_line":"        self.assertEquals(self.tenant[\u0027enabled\u0027], tenant[\u0027enabled\u0027])"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"    def test_get_tenant_xml(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAC3%2F%2F7Jg%3D","line":293,"updated":"2011-12-22 06:53:23.000000000","message":"I don\u0027t understand the tenant description changes","commit_id":"34a2516fdc703ad4c3f4feac08d151efac948dd0"},{"author":{"_account_id":5,"name":"Ziad Sawalha","email":"ziad.sawalha@rackspace.com","username":"ziad-sawalha"},"change_message_id":"5b29123e0b9a1523b28d13c327de1197ba7664c5","unresolved":false,"context_lines":[{"line_number":290,"context_line":"        tenant \u003d self.assertValidJsonTenantResponse(r)"},{"line_number":291,"context_line":"        self.assertEquals(self.tenant[\u0027id\u0027], tenant[\u0027id\u0027])"},{"line_number":292,"context_line":"        self.assertEquals(self.tenant[\u0027name\u0027], tenant[\u0027name\u0027])"},{"line_number":293,"context_line":"        self.assertFalse(\u0027description\u0027 in tenant)"},{"line_number":294,"context_line":"        self.assertEquals(self.tenant[\u0027enabled\u0027], tenant[\u0027enabled\u0027])"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"    def test_get_tenant_xml(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAC3%2F%2F6%2Bw%3D","line":293,"in_reply_to":"AAAAC3%2F%2F7Jg%3D","updated":"2011-12-22 19:12:39.000000000","message":"THe assumption in the test was that there is always a description in tenant. But looking at the XSD, it is an optional field. So the test was invalid. We\u0027re now testing that description doesn\u0027t show up \u0027automatically\u0027 when it isn\u0027t set.","commit_id":"34a2516fdc703ad4c3f4feac08d151efac948dd0"}],"keystone/test/unit/test_models_Tenant.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"1132efe8905a3aa802c35ad55af9ea8ab5dcc621","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        tenant \u003d Tenant(id\u003d9, name\u003d\"the tenant\", blank\u003dNone)"},{"line_number":111,"context_line":"        self.assertTrue(tenant.validate())"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def test_tenant_description_values(self):"},{"line_number":114,"context_line":"        tenant \u003d Tenant(id\u003d10, name\u003d\"the tenant\")"},{"line_number":115,"context_line":"        self.assertIsNone(tenant.description,"},{"line_number":116,"context_line":"                          \"Uninitialized description should be None\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAC3%2F%2F7Jc%3D","line":113,"updated":"2011-12-22 06:53:23.000000000","message":"this should be 4 tests","commit_id":"34a2516fdc703ad4c3f4feac08d151efac948dd0"},{"author":{"_account_id":5,"name":"Ziad Sawalha","email":"ziad.sawalha@rackspace.com","username":"ziad-sawalha"},"change_message_id":"17cb5dc491d91717876323c5fb39678e49b6911f","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        tenant \u003d Tenant(id\u003d9, name\u003d\"the tenant\", blank\u003dNone)"},{"line_number":111,"context_line":"        self.assertTrue(tenant.validate())"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def test_tenant_description_values(self):"},{"line_number":114,"context_line":"        tenant \u003d Tenant(id\u003d10, name\u003d\"the tenant\")"},{"line_number":115,"context_line":"        self.assertIsNone(tenant.description,"},{"line_number":116,"context_line":"                          \"Uninitialized description should be None\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAC3%2F%2F68M%3D","line":113,"in_reply_to":"AAAAC3%2F%2F7Jc%3D","updated":"2011-12-22 20:32:30.000000000","message":"Done","commit_id":"34a2516fdc703ad4c3f4feac08d151efac948dd0"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"ae03a3ae36eee133da3464b0cedf16c84ff30de4","unresolved":false,"context_lines":[{"line_number":24,"context_line":"        self.assertEquals(tenant.name, \"the tenant\")"},{"line_number":25,"context_line":"        self.assertTrue(tenant.enabled)"},{"line_number":26,"context_line":"        self.assertEquals(tenant.description, None)"},{"line_number":27,"context_line":"        try:"},{"line_number":28,"context_line":"            x \u003d tenant.some_bad_property"},{"line_number":29,"context_line":"        except AttributeError:"},{"line_number":30,"context_line":"            pass"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAC3%2F%2F6zA%3D","side":"PARENT","line":27,"updated":"2011-12-23 17:12:48.000000000","message":"Use the assertRaises() method instead of this \u0027try\u0027 construct:\n\nself.assertRaises(AttributeError, getattr, tenant, \u0027some_bad_property\u0027)","commit_id":"ed3c5aa9321ca5b1cbcd67651df6a981d4f987cc"},{"author":{"_account_id":5,"name":"Ziad Sawalha","email":"ziad.sawalha@rackspace.com","username":"ziad-sawalha"},"change_message_id":"b6847e64d54cf5544152443e1bac922637401c83","unresolved":false,"context_lines":[{"line_number":24,"context_line":"        self.assertEquals(tenant.name, \"the tenant\")"},{"line_number":25,"context_line":"        self.assertTrue(tenant.enabled)"},{"line_number":26,"context_line":"        self.assertEquals(tenant.description, None)"},{"line_number":27,"context_line":"        try:"},{"line_number":28,"context_line":"            x \u003d tenant.some_bad_property"},{"line_number":29,"context_line":"        except AttributeError:"},{"line_number":30,"context_line":"            pass"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAC3%2F%2F6vw%3D","side":"PARENT","line":27,"in_reply_to":"AAAAC3%2F%2F6zA%3D","updated":"2011-12-23 18:40:31.000000000","message":"Done","commit_id":"ed3c5aa9321ca5b1cbcd67651df6a981d4f987cc"}]}
