)]}'
{"keystone/backends/sqlalchemy/api/role.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"546b29ef62f35caa9f2ccaf2600f285cd6d869f4","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    def __init__(self, *args, **kw):"},{"line_number":26,"context_line":"        super(RoleAPI, self).__init__(*args, **kw)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    # pylint: disable\u003dW0221"},{"line_number":29,"context_line":"    @staticmethod"},{"line_number":30,"context_line":"    def transpose(values):"},{"line_number":31,"context_line":"        \"\"\" Handles transposing field names from Keystone model to"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAADX%2F%2F%2Fq4%3D","line":28,"updated":"2012-01-06 16:31:29.000000000","message":"I\u0027m not sure this pylint override is necessary here?","commit_id":"78b1d830c7945f47506c08c0d616d477f5929ba4"},{"author":{"_account_id":5,"name":"Ziad Sawalha","email":"ziad.sawalha@rackspace.com","username":"ziad-sawalha"},"change_message_id":"8241d10868e65fc1f9d3c909b1a103597e284ac4","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    def __init__(self, *args, **kw):"},{"line_number":26,"context_line":"        super(RoleAPI, self).__init__(*args, **kw)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    # pylint: disable\u003dW0221"},{"line_number":29,"context_line":"    @staticmethod"},{"line_number":30,"context_line":"    def transpose(values):"},{"line_number":31,"context_line":"        \"\"\" Handles transposing field names from Keystone model to"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAADX%2F%2F%2Fpg%3D","line":28,"in_reply_to":"AAAADX%2F%2F%2Fq4%3D","updated":"2012-01-06 17:55:00.000000000","message":"Done","commit_id":"78b1d830c7945f47506c08c0d616d477f5929ba4"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"2a31a8833976f896032aa27cf7ae8008ec7af989","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        \"\"\""},{"line_number":37,"context_line":"        if \u0027description\u0027 in values:"},{"line_number":38,"context_line":"            values[\u0027desc\u0027] \u003d values[\u0027description\u0027]"},{"line_number":39,"context_line":"            del values[\u0027description\u0027]"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    @staticmethod"},{"line_number":42,"context_line":"    def to_model(ref):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAADX%2F%2F%2Fr8%3D","line":39,"updated":"2012-01-06 16:30:31.000000000","message":"Simpler:\nvalues[\u0027desc\u0027] \u003d values.pop(\u0027description\u0027)","commit_id":"78b1d830c7945f47506c08c0d616d477f5929ba4"},{"author":{"_account_id":5,"name":"Ziad Sawalha","email":"ziad.sawalha@rackspace.com","username":"ziad-sawalha"},"change_message_id":"8241d10868e65fc1f9d3c909b1a103597e284ac4","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        \"\"\""},{"line_number":37,"context_line":"        if \u0027description\u0027 in values:"},{"line_number":38,"context_line":"            values[\u0027desc\u0027] \u003d values[\u0027description\u0027]"},{"line_number":39,"context_line":"            del values[\u0027description\u0027]"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    @staticmethod"},{"line_number":42,"context_line":"    def to_model(ref):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAADX%2F%2F%2Fpc%3D","line":39,"in_reply_to":"AAAADX%2F%2F%2Fr8%3D","updated":"2012-01-06 17:55:00.000000000","message":"Done","commit_id":"78b1d830c7945f47506c08c0d616d477f5929ba4"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"546b29ef62f35caa9f2ccaf2600f285cd6d869f4","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        return [RoleAPI.to_model(ref) for ref in refs]"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    @staticmethod"},{"line_number":53,"context_line":"    def to_ura_model(ref):"},{"line_number":54,"context_line":"        \"\"\" Returns Keystone model object based on SQLAlchemy model\"\"\""},{"line_number":55,"context_line":"        if ref:"},{"line_number":56,"context_line":"            return UserRoleAssociation(id\u003dref.id,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAADX%2F%2F%2Fq0%3D","line":53,"updated":"2012-01-06 16:31:29.000000000","message":"This is a red flag that this API has too many responsibilities..","commit_id":"78b1d830c7945f47506c08c0d616d477f5929ba4"},{"author":{"_account_id":5,"name":"Ziad Sawalha","email":"ziad.sawalha@rackspace.com","username":"ziad-sawalha"},"change_message_id":"8241d10868e65fc1f9d3c909b1a103597e284ac4","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        return [RoleAPI.to_model(ref) for ref in refs]"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    @staticmethod"},{"line_number":53,"context_line":"    def to_ura_model(ref):"},{"line_number":54,"context_line":"        \"\"\" Returns Keystone model object based on SQLAlchemy model\"\"\""},{"line_number":55,"context_line":"        if ref:"},{"line_number":56,"context_line":"            return UserRoleAssociation(id\u003dref.id,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAADX%2F%2F%2FpY%3D","line":53,"in_reply_to":"AAAADX%2F%2F%2Fq0%3D","updated":"2012-01-06 17:55:00.000000000","message":"Agreed. I\u0027ve already split out the managers (Role and Grant manager) and sorted this module into role and grant functions. We\u0027ll get to this (maybe after E3)","commit_id":"78b1d830c7945f47506c08c0d616d477f5929ba4"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"2a31a8833976f896032aa27cf7ae8008ec7af989","unresolved":false,"context_lines":[{"line_number":291,"context_line":"        return (prev_page, next_page)"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"    def rolegrant_get_page(self, marker, limit, user_id, tenant_id,"},{"line_number":294,"context_line":"                                                                session\u003dNone):"},{"line_number":295,"context_line":"        if not session:"},{"line_number":296,"context_line":"            session \u003d get_session()"},{"line_number":297,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAADX%2F%2F%2Fr0%3D","line":294,"updated":"2012-01-06 16:30:31.000000000","message":"Purely stylistic: what possible rationale is there for the indentation on the continued line? The preferred method is 2 levels (8 spaces) inside of the preceding line, or, for those who have a compulsion to line things up, to some level that lines up with a relevant part of the preceding line. This does neither, and appears to be floating aimlessly.","commit_id":"78b1d830c7945f47506c08c0d616d477f5929ba4"},{"author":{"_account_id":5,"name":"Ziad Sawalha","email":"ziad.sawalha@rackspace.com","username":"ziad-sawalha"},"change_message_id":"8241d10868e65fc1f9d3c909b1a103597e284ac4","unresolved":false,"context_lines":[{"line_number":291,"context_line":"        return (prev_page, next_page)"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"    def rolegrant_get_page(self, marker, limit, user_id, tenant_id,"},{"line_number":294,"context_line":"                                                                session\u003dNone):"},{"line_number":295,"context_line":"        if not session:"},{"line_number":296,"context_line":"            session \u003d get_session()"},{"line_number":297,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAADX%2F%2F%2FpI%3D","line":294,"in_reply_to":"AAAADX%2F%2F%2Fr0%3D","updated":"2012-01-06 17:55:00.000000000","message":"Done. Used the \"for those who have a compulsion to line things up\" approach :-)","commit_id":"78b1d830c7945f47506c08c0d616d477f5929ba4"}],"keystone/logic/service.py":[{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"2a31a8833976f896032aa27cf7ae8008ec7af989","unresolved":false,"context_lines":[{"line_number":929,"context_line":"                \"A role with that name \u0027%s\u0027 already exists\" % role.name)"},{"line_number":930,"context_line":""},{"line_number":931,"context_line":"        print role"},{"line_number":932,"context_line":"        print role.service_id"},{"line_number":933,"context_line":"        #Check if the role name includes an embedded service: in it"},{"line_number":934,"context_line":"        #if so, verify the service exists"},{"line_number":935,"context_line":"        if role.service_id is None:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAADX%2F%2F%2Frw%3D","line":932,"updated":"2012-01-06 16:30:31.000000000","message":"Is this debugging output?","commit_id":"78b1d830c7945f47506c08c0d616d477f5929ba4"},{"author":{"_account_id":5,"name":"Ziad Sawalha","email":"ziad.sawalha@rackspace.com","username":"ziad-sawalha"},"change_message_id":"8241d10868e65fc1f9d3c909b1a103597e284ac4","unresolved":false,"context_lines":[{"line_number":929,"context_line":"                \"A role with that name \u0027%s\u0027 already exists\" % role.name)"},{"line_number":930,"context_line":""},{"line_number":931,"context_line":"        print role"},{"line_number":932,"context_line":"        print role.service_id"},{"line_number":933,"context_line":"        #Check if the role name includes an embedded service: in it"},{"line_number":934,"context_line":"        #if so, verify the service exists"},{"line_number":935,"context_line":"        if role.service_id is None:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAADX%2F%2F%2FpA%3D","line":932,"in_reply_to":"AAAADX%2F%2F%2Frw%3D","updated":"2012-01-06 17:55:00.000000000","message":"Yep! Removed.","commit_id":"78b1d830c7945f47506c08c0d616d477f5929ba4"}],"keystone/models.py":[{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"2a31a8833976f896032aa27cf7ae8008ec7af989","unresolved":false,"context_lines":[{"line_number":419,"context_line":"            for name, type in type_mappings:"},{"line_number":420,"context_line":"                if type is int:"},{"line_number":421,"context_line":"                    target[name] \u003d int(target[name])"},{"line_number":422,"context_line":"                elif type is str or type is basestring:"},{"line_number":423,"context_line":"                    # Move sub to string"},{"line_number":424,"context_line":"                    if name in target:"},{"line_number":425,"context_line":"                        value \u003d target[name]"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAADX%2F%2F%2Frs%3D","line":422,"updated":"2012-01-06 16:30:31.000000000","message":"Cleaner:\n\nif issubclass(type, basestring):\n\nor:\n\nif type in (str, basestring):","commit_id":"78b1d830c7945f47506c08c0d616d477f5929ba4"},{"author":{"_account_id":5,"name":"Ziad Sawalha","email":"ziad.sawalha@rackspace.com","username":"ziad-sawalha"},"change_message_id":"8241d10868e65fc1f9d3c909b1a103597e284ac4","unresolved":false,"context_lines":[{"line_number":419,"context_line":"            for name, type in type_mappings:"},{"line_number":420,"context_line":"                if type is int:"},{"line_number":421,"context_line":"                    target[name] \u003d int(target[name])"},{"line_number":422,"context_line":"                elif type is str or type is basestring:"},{"line_number":423,"context_line":"                    # Move sub to string"},{"line_number":424,"context_line":"                    if name in target:"},{"line_number":425,"context_line":"                        value \u003d target[name]"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAADX%2F%2F%2Fo8%3D","line":422,"in_reply_to":"AAAADX%2F%2F%2Frs%3D","updated":"2012-01-06 17:55:00.000000000","message":"Done","commit_id":"78b1d830c7945f47506c08c0d616d477f5929ba4"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"2a31a8833976f896032aa27cf7ae8008ec7af989","unresolved":false,"context_lines":[{"line_number":423,"context_line":"                    # Move sub to string"},{"line_number":424,"context_line":"                    if name in target:"},{"line_number":425,"context_line":"                        value \u003d target[name]"},{"line_number":426,"context_line":"                        if value is dict:"},{"line_number":427,"context_line":"                            value \u003d value[0]"},{"line_number":428,"context_line":"                        if value:"},{"line_number":429,"context_line":"                            target[name] \u003d str(value)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAADX%2F%2F%2Fro%3D","line":426,"updated":"2012-01-06 16:30:31.000000000","message":"If \u0027value\u0027 is a dictionary, this won\u0027t work. An object is not the same as its type. I think that this is what you need:\n\nif isinstance(value, dict):","commit_id":"78b1d830c7945f47506c08c0d616d477f5929ba4"},{"author":{"_account_id":5,"name":"Ziad Sawalha","email":"ziad.sawalha@rackspace.com","username":"ziad-sawalha"},"change_message_id":"8241d10868e65fc1f9d3c909b1a103597e284ac4","unresolved":false,"context_lines":[{"line_number":423,"context_line":"                    # Move sub to string"},{"line_number":424,"context_line":"                    if name in target:"},{"line_number":425,"context_line":"                        value \u003d target[name]"},{"line_number":426,"context_line":"                        if value is dict:"},{"line_number":427,"context_line":"                            value \u003d value[0]"},{"line_number":428,"context_line":"                        if value:"},{"line_number":429,"context_line":"                            target[name] \u003d str(value)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAADX%2F%2F%2Fo0%3D","line":426,"in_reply_to":"AAAADX%2F%2F%2Fro%3D","updated":"2012-01-06 17:55:00.000000000","message":"Done","commit_id":"78b1d830c7945f47506c08c0d616d477f5929ba4"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"2a31a8833976f896032aa27cf7ae8008ec7af989","unresolved":false,"context_lines":[{"line_number":783,"context_line":"            self.user_id \u003d str(self.user_id)"},{"line_number":784,"context_line":"        if isinstance(self.tenant_id, int):"},{"line_number":785,"context_line":"            self.tenant_id \u003d str(self.tenant_id)"},{"line_number":786,"context_line":""},{"line_number":787,"context_line":"    def to_json(self, hints\u003dNone, model_name\u003dNone):"},{"line_number":788,"context_line":"        if model_name is None:"},{"line_number":789,"context_line":"            model_name \u003d \"role\""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAADX%2F%2F%2FrA%3D","line":786,"updated":"2012-01-06 16:30:31.000000000","message":"How about refactoring out the common code in the next 3 methods into this method:\n\ndef _check_hints(self, hints):\n    if hints is None:\n        hints \u003d {}\n    if \u0027maps\u0027 not in hints:\n    hints[\u0027maps\u0027] \u003d {\"userId\": \"user_id\",\n            \"roleId\": \"role_id\",\n            \"tenantId\": \"tenant_id\"}\n    return hints\n\n...and then replace the code in those 3 methods with:\n\nhints \u003d self._check_hints(hints)","commit_id":"78b1d830c7945f47506c08c0d616d477f5929ba4"},{"author":{"_account_id":5,"name":"Ziad Sawalha","email":"ziad.sawalha@rackspace.com","username":"ziad-sawalha"},"change_message_id":"8241d10868e65fc1f9d3c909b1a103597e284ac4","unresolved":false,"context_lines":[{"line_number":783,"context_line":"            self.user_id \u003d str(self.user_id)"},{"line_number":784,"context_line":"        if isinstance(self.tenant_id, int):"},{"line_number":785,"context_line":"            self.tenant_id \u003d str(self.tenant_id)"},{"line_number":786,"context_line":""},{"line_number":787,"context_line":"    def to_json(self, hints\u003dNone, model_name\u003dNone):"},{"line_number":788,"context_line":"        if model_name is None:"},{"line_number":789,"context_line":"            model_name \u003d \"role\""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAADX%2F%2F%2Fok%3D","line":786,"in_reply_to":"AAAADX%2F%2F%2FrA%3D","updated":"2012-01-06 17:55:00.000000000","message":"Done - but used the approach for Role on line 667 which is where I was heading to clean these up.","commit_id":"78b1d830c7945f47506c08c0d616d477f5929ba4"}],"keystone/test/functional/test_tenants.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"546b29ef62f35caa9f2ccaf2600f285cd6d869f4","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    def _assertValidXmlTenant(self, xml):"},{"line_number":40,"context_line":"        self.assertEquals(xml.tag, \u0027{%s}tenant\u0027 % self.xmlns)"},{"line_number":41,"context_line":"        self._assertValidTenant(xml)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        description \u003d xml.find(\u0027{%s}description\u0027 % self.xmlns)"},{"line_number":44,"context_line":"        self.assertIsNotNone(description)"},{"line_number":45,"context_line":"        self.assertIn(xml.get(\u0027enabled\u0027), [\u0027true\u0027, \u0027false\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAADX%2F%2F%2Fqg%3D","side":"PARENT","line":42,"updated":"2012-01-06 16:31:29.000000000","message":"See _assertValidJsonTenant() above: # TODO(dolph): this is still a valid assertion in some cases\n\nI don\u0027t think we should completely remove this code, as it\u0027s still valid and needs future consideration. Completely removing it just arbitrarily reduces test coverage.","commit_id":"eac98b07b30b46edcc12b7b2f0789e294cac539b"},{"author":{"_account_id":5,"name":"Ziad Sawalha","email":"ziad.sawalha@rackspace.com","username":"ziad-sawalha"},"change_message_id":"8241d10868e65fc1f9d3c909b1a103597e284ac4","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    def _assertValidXmlTenant(self, xml):"},{"line_number":40,"context_line":"        self.assertEquals(xml.tag, \u0027{%s}tenant\u0027 % self.xmlns)"},{"line_number":41,"context_line":"        self._assertValidTenant(xml)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        description \u003d xml.find(\u0027{%s}description\u0027 % self.xmlns)"},{"line_number":44,"context_line":"        self.assertIsNotNone(description)"},{"line_number":45,"context_line":"        self.assertIn(xml.get(\u0027enabled\u0027), [\u0027true\u0027, \u0027false\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAADX%2F%2F%2Fog%3D","side":"PARENT","line":42,"in_reply_to":"AAAADX%2F%2F%2Fqg%3D","updated":"2012-01-06 17:55:00.000000000","message":"Done","commit_id":"eac98b07b30b46edcc12b7b2f0789e294cac539b"}],"keystone/test/unit/base.py":[{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"2a31a8833976f896032aa27cf7ae8008ec7af989","unresolved":false,"context_lines":[{"line_number":62,"context_line":"             \u0027name\u0027: \u0027regular_role\u0027,"},{"line_number":63,"context_line":"             \u0027desc\u0027: \u0027regular role\u0027,"},{"line_number":64,"context_line":"             \u0027service_id\u0027: self.service_attrs[\u0027id\u0027]},"},{"line_number":65,"context_line":"            {\u0027id\u0027: 1,"},{"line_number":66,"context_line":"             \u0027name\u0027: \u0027Admin\u0027,"},{"line_number":67,"context_line":"             \u0027desc\u0027: \u0027Admin role\u0027,"},{"line_number":68,"context_line":"             \u0027service_id\u0027: self.service_attrs[\u0027id\u0027]},"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAADX%2F%2F%2Fq8%3D","side":"PARENT","line":65,"updated":"2012-01-06 16:30:31.000000000","message":"Why is the \u0027id\u0027 in first element changed to a string value, but this one is still an integer?","commit_id":"eac98b07b30b46edcc12b7b2f0789e294cac539b"},{"author":{"_account_id":5,"name":"Ziad Sawalha","email":"ziad.sawalha@rackspace.com","username":"ziad-sawalha"},"change_message_id":"8241d10868e65fc1f9d3c909b1a103597e284ac4","unresolved":false,"context_lines":[{"line_number":62,"context_line":"             \u0027name\u0027: \u0027regular_role\u0027,"},{"line_number":63,"context_line":"             \u0027desc\u0027: \u0027regular role\u0027,"},{"line_number":64,"context_line":"             \u0027service_id\u0027: self.service_attrs[\u0027id\u0027]},"},{"line_number":65,"context_line":"            {\u0027id\u0027: 1,"},{"line_number":66,"context_line":"             \u0027name\u0027: \u0027Admin\u0027,"},{"line_number":67,"context_line":"             \u0027desc\u0027: \u0027Admin role\u0027,"},{"line_number":68,"context_line":"             \u0027service_id\u0027: self.service_attrs[\u0027id\u0027]},"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAADX%2F%2F%2Foc%3D","side":"PARENT","line":65,"in_reply_to":"AAAADX%2F%2F%2Fq8%3D","updated":"2012-01-06 17:55:00.000000000","message":"Done","commit_id":"eac98b07b30b46edcc12b7b2f0789e294cac539b"}],"keystone/test/unit/test_models_Role.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"546b29ef62f35caa9f2ccaf2600f285cd6d869f4","unresolved":false,"context_lines":[{"line_number":3,"context_line":""},{"line_number":4,"context_line":"from keystone.models import Role, UserRoleAssociation"},{"line_number":5,"context_line":"from keystone.test import utils as testutils"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"class TestModelsRole(unittest.TestCase):"},{"line_number":9,"context_line":"    \u0027\u0027\u0027Unit tests for keystone/models.py:Role class.\u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAADX%2F%2F%2Fqs%3D","line":6,"updated":"2012-01-06 16:31:29.000000000","message":"PEP8: \"Modules should have short, all-lowercase names.  Underscores can be used in the module name if it improves readability.\"","commit_id":"78b1d830c7945f47506c08c0d616d477f5929ba4"},{"author":{"_account_id":5,"name":"Ziad Sawalha","email":"ziad.sawalha@rackspace.com","username":"ziad-sawalha"},"change_message_id":"8241d10868e65fc1f9d3c909b1a103597e284ac4","unresolved":false,"context_lines":[{"line_number":3,"context_line":""},{"line_number":4,"context_line":"from keystone.models import Role, UserRoleAssociation"},{"line_number":5,"context_line":"from keystone.test import utils as testutils"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"class TestModelsRole(unittest.TestCase):"},{"line_number":9,"context_line":"    \u0027\u0027\u0027Unit tests for keystone/models.py:Role class.\u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAADX%2F%2F%2FoU%3D","line":6,"in_reply_to":"AAAADX%2F%2F%2Fqs%3D","updated":"2012-01-06 17:55:00.000000000","message":"Done. Renamed them all","commit_id":"78b1d830c7945f47506c08c0d616d477f5929ba4"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"2a31a8833976f896032aa27cf7ae8008ec7af989","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        role \u003d Role(id\u003d1, name\u003d\"the role\", blank\u003dNone)"},{"line_number":54,"context_line":"        xml_str \u003d role.to_xml()"},{"line_number":55,"context_line":"        expected \u003d (\u0027\u003crole xmlns\u003d\"http://docs.openstack.org/identity/api/v2.0\"\u0027"},{"line_number":56,"context_line":"                    \u0027id\u003d\"1\" name\u003d\"the role\"/\u003e\u0027)"},{"line_number":57,"context_line":"        self.assertTrue(testutils.XMLTools.xmlEqual(xml_str, expected),"},{"line_number":58,"context_line":"                        msg\u003d\u0027%s !\u003d %s\u0027 % (xml_str, expected))"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAADX%2F%2F%2Fqw%3D","line":56,"updated":"2012-01-06 16:30:31.000000000","message":"Shouldn\u0027t there be a space either at the end of the string in the first line (after: v2.0\"), or at the beginning of the string in the second line (before: id\u003d)? Same comment applies here and lines 65-6","commit_id":"78b1d830c7945f47506c08c0d616d477f5929ba4"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"b64dd38cf7152509cbfea5bc4f8f8facd95fdb69","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        role \u003d Role(id\u003d1, name\u003d\"the role\", blank\u003dNone)"},{"line_number":54,"context_line":"        xml_str \u003d role.to_xml()"},{"line_number":55,"context_line":"        expected \u003d (\u0027\u003crole xmlns\u003d\"http://docs.openstack.org/identity/api/v2.0\"\u0027"},{"line_number":56,"context_line":"                    \u0027id\u003d\"1\" name\u003d\"the role\"/\u003e\u0027)"},{"line_number":57,"context_line":"        self.assertTrue(testutils.XMLTools.xmlEqual(xml_str, expected),"},{"line_number":58,"context_line":"                        msg\u003d\u0027%s !\u003d %s\u0027 % (xml_str, expected))"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAADX%2F%2F%2FqY%3D","line":56,"in_reply_to":"AAAADX%2F%2F%2Fqw%3D","updated":"2012-01-06 16:34:04.000000000","message":"+1","commit_id":"78b1d830c7945f47506c08c0d616d477f5929ba4"},{"author":{"_account_id":5,"name":"Ziad Sawalha","email":"ziad.sawalha@rackspace.com","username":"ziad-sawalha"},"change_message_id":"8241d10868e65fc1f9d3c909b1a103597e284ac4","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        role \u003d Role(id\u003d1, name\u003d\"the role\", blank\u003dNone)"},{"line_number":54,"context_line":"        xml_str \u003d role.to_xml()"},{"line_number":55,"context_line":"        expected \u003d (\u0027\u003crole xmlns\u003d\"http://docs.openstack.org/identity/api/v2.0\"\u0027"},{"line_number":56,"context_line":"                    \u0027id\u003d\"1\" name\u003d\"the role\"/\u003e\u0027)"},{"line_number":57,"context_line":"        self.assertTrue(testutils.XMLTools.xmlEqual(xml_str, expected),"},{"line_number":58,"context_line":"                        msg\u003d\u0027%s !\u003d %s\u0027 % (xml_str, expected))"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAADX%2F%2F%2FoQ%3D","line":56,"in_reply_to":"AAAADX%2F%2F%2Fqw%3D","updated":"2012-01-06 17:55:00.000000000","message":"Done","commit_id":"78b1d830c7945f47506c08c0d616d477f5929ba4"}],"keystone/test/unit/test_models_Tenant.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"546b29ef62f35caa9f2ccaf2600f285cd6d869f4","unresolved":false,"context_lines":[{"line_number":3,"context_line":""},{"line_number":4,"context_line":"from keystone.models import Tenant"},{"line_number":5,"context_line":"from keystone.test import utils as testutils"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"class TestModelsTenant(unittest.TestCase):"},{"line_number":9,"context_line":"    \u0027\u0027\u0027Unit tests for keystone/models.py:Tenant class.\u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAADX%2F%2F%2Fqo%3D","line":6,"updated":"2012-01-06 16:31:29.000000000","message":"PEP8: \"Modules should have short, all-lowercase names.  Underscores can be used in the module name if it improves readability.\"","commit_id":"78b1d830c7945f47506c08c0d616d477f5929ba4"},{"author":{"_account_id":5,"name":"Ziad Sawalha","email":"ziad.sawalha@rackspace.com","username":"ziad-sawalha"},"change_message_id":"8241d10868e65fc1f9d3c909b1a103597e284ac4","unresolved":false,"context_lines":[{"line_number":3,"context_line":""},{"line_number":4,"context_line":"from keystone.models import Tenant"},{"line_number":5,"context_line":"from keystone.test import utils as testutils"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"class TestModelsTenant(unittest.TestCase):"},{"line_number":9,"context_line":"    \u0027\u0027\u0027Unit tests for keystone/models.py:Tenant class.\u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAADX%2F%2F%2FoM%3D","line":6,"in_reply_to":"AAAADX%2F%2F%2Fqo%3D","updated":"2012-01-06 17:55:00.000000000","message":"Done","commit_id":"78b1d830c7945f47506c08c0d616d477f5929ba4"}]}
