)]}'
{"keystone/backends/sqlalchemy/api/service.py":[{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"7f92d8033923b53ea3194f8127395b337f02886c","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    def get(self, id, session\u003dNone):"},{"line_number":43,"context_line":"        if not session:"},{"line_number":44,"context_line":"            session \u003d get_session()"},{"line_number":45,"context_line":"        return ServiceAPI.to_model(session.query(models.Service).\\"},{"line_number":46,"context_line":"                                   filter_by(id\u003did).first())"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def get_by_name(self, name, session\u003dNone):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAADH%2F%2F%2FrI%3D","line":45,"updated":"2011-12-29 18:49:45.000000000","message":"Trailing backslash is not needed here and line 51.","commit_id":"6cac9a436135a40835bb1d747c0382cc42e2aca3"},{"author":{"_account_id":5,"name":"Ziad Sawalha","email":"ziad.sawalha@rackspace.com","username":"ziad-sawalha"},"change_message_id":"d876c9f2fb89e1b3f288ab9abde880b56ef3e55f","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    def get(self, id, session\u003dNone):"},{"line_number":43,"context_line":"        if not session:"},{"line_number":44,"context_line":"            session \u003d get_session()"},{"line_number":45,"context_line":"        return ServiceAPI.to_model(session.query(models.Service).\\"},{"line_number":46,"context_line":"                                   filter_by(id\u003did).first())"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def get_by_name(self, name, session\u003dNone):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAADH%2F%2F%2FlQ%3D","line":45,"in_reply_to":"AAAADH%2F%2F%2FrI%3D","updated":"2011-12-29 21:11:12.000000000","message":"Done","commit_id":"6cac9a436135a40835bb1d747c0382cc42e2aca3"}],"keystone/logic/service.py":[{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"7f92d8033923b53ea3194f8127395b337f02886c","unresolved":false,"context_lines":[{"line_number":668,"context_line":"            ts.append(User(None, dtenantuser.id, dtenantuser.name, tenant_id,"},{"line_number":669,"context_line":"                           dtenantuser.email, dtenantuser.enabled,"},{"line_number":670,"context_line":"                           dtenantuser.tenant_roles if hasattr(dtenantuser,"},{"line_number":671,"context_line":"                                                    \"tenant_roles\") else None))"},{"line_number":672,"context_line":"        links \u003d []"},{"line_number":673,"context_line":"        if ts.__len__():"},{"line_number":674,"context_line":"            prev, next \u003d api.USER.users_get_by_tenant_get_page_markers("}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAADH%2F%2F%2FqY%3D","side":"PARENT","line":671,"updated":"2011-12-29 18:49:45.000000000","message":"This line is way to jumbled; it should be broken apart to make it clearer:\ntry:\n\ttroles \u003d dtenantuser.tenant_roles\nexcept AttributeError:\n\ttroles \u003d None\nts.append(User(None, dtenantuser.id, dtenantuser.name, tenant_id,\n        dtenantuser.email, dtenantuser.enabled, troles)","commit_id":"3f2b53586ca804115d8cf91e43f63ec7a300e82c"},{"author":{"_account_id":5,"name":"Ziad Sawalha","email":"ziad.sawalha@rackspace.com","username":"ziad-sawalha"},"change_message_id":"d876c9f2fb89e1b3f288ab9abde880b56ef3e55f","unresolved":false,"context_lines":[{"line_number":668,"context_line":"            ts.append(User(None, dtenantuser.id, dtenantuser.name, tenant_id,"},{"line_number":669,"context_line":"                           dtenantuser.email, dtenantuser.enabled,"},{"line_number":670,"context_line":"                           dtenantuser.tenant_roles if hasattr(dtenantuser,"},{"line_number":671,"context_line":"                                                    \"tenant_roles\") else None))"},{"line_number":672,"context_line":"        links \u003d []"},{"line_number":673,"context_line":"        if ts.__len__():"},{"line_number":674,"context_line":"            prev, next \u003d api.USER.users_get_by_tenant_get_page_markers("}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAADH%2F%2F%2FlE%3D","side":"PARENT","line":671,"in_reply_to":"AAAADH%2F%2F%2FqY%3D","updated":"2011-12-29 21:11:12.000000000","message":"Done","commit_id":"3f2b53586ca804115d8cf91e43f63ec7a300e82c"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"7f92d8033923b53ea3194f8127395b337f02886c","unresolved":false,"context_lines":[{"line_number":907,"context_line":"                if not is_owner({\"api\": api}, user, service):"},{"line_number":908,"context_line":"                    if not has_admin_role(admin_token):"},{"line_number":909,"context_line":"                        raise fault.UnauthorizedFault("},{"line_number":910,"context_line":"                            \"You do not have ownership of the \u0027%s\u0027 service\" \\"},{"line_number":911,"context_line":"                            % service.name)"},{"line_number":912,"context_line":""},{"line_number":913,"context_line":"        role_refs \u003d api.ROLE.ref_get_by_role(role_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAADH%2F%2F%2FqQ%3D","side":"PARENT","line":910,"updated":"2011-12-29 18:49:45.000000000","message":"Trailing backslash is not needed.","commit_id":"3f2b53586ca804115d8cf91e43f63ec7a300e82c"},{"author":{"_account_id":5,"name":"Ziad Sawalha","email":"ziad.sawalha@rackspace.com","username":"ziad-sawalha"},"change_message_id":"d876c9f2fb89e1b3f288ab9abde880b56ef3e55f","unresolved":false,"context_lines":[{"line_number":907,"context_line":"                if not is_owner({\"api\": api}, user, service):"},{"line_number":908,"context_line":"                    if not has_admin_role(admin_token):"},{"line_number":909,"context_line":"                        raise fault.UnauthorizedFault("},{"line_number":910,"context_line":"                            \"You do not have ownership of the \u0027%s\u0027 service\" \\"},{"line_number":911,"context_line":"                            % service.name)"},{"line_number":912,"context_line":""},{"line_number":913,"context_line":"        role_refs \u003d api.ROLE.ref_get_by_role(role_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAADH%2F%2F%2FlA%3D","side":"PARENT","line":910,"in_reply_to":"AAAADH%2F%2F%2FqQ%3D","updated":"2011-12-29 21:11:12.000000000","message":"Done","commit_id":"3f2b53586ca804115d8cf91e43f63ec7a300e82c"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"7f92d8033923b53ea3194f8127395b337f02886c","unresolved":false,"context_lines":[{"line_number":347,"context_line":"        dbapi \u003d env[\u0027api\u0027]"},{"line_number":348,"context_line":"        for role_ref in dbapi.ROLE.ref_get_all_global_roles(user.id):"},{"line_number":349,"context_line":"            if (role_ref.role_id \u003d\u003d role) \\"},{"line_number":350,"context_line":"                and role_ref.tenant_id is None:"},{"line_number":351,"context_line":"                return True"},{"line_number":352,"context_line":"        return False"},{"line_number":353,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAADH%2F%2F%2Fqs%3D","line":350,"updated":"2011-12-29 18:49:45.000000000","message":"Continued lines that start a block should be indented two levels, to distinguish them from the enclosed block. You should also add parens around the full \u0027if\u0027 expression to eliminate the need for the trailing backslash.","commit_id":"6cac9a436135a40835bb1d747c0382cc42e2aca3"},{"author":{"_account_id":5,"name":"Ziad Sawalha","email":"ziad.sawalha@rackspace.com","username":"ziad-sawalha"},"change_message_id":"d876c9f2fb89e1b3f288ab9abde880b56ef3e55f","unresolved":false,"context_lines":[{"line_number":347,"context_line":"        dbapi \u003d env[\u0027api\u0027]"},{"line_number":348,"context_line":"        for role_ref in dbapi.ROLE.ref_get_all_global_roles(user.id):"},{"line_number":349,"context_line":"            if (role_ref.role_id \u003d\u003d role) \\"},{"line_number":350,"context_line":"                and role_ref.tenant_id is None:"},{"line_number":351,"context_line":"                return True"},{"line_number":352,"context_line":"        return False"},{"line_number":353,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAADH%2F%2F%2FlM%3D","line":350,"in_reply_to":"AAAADH%2F%2F%2Fqs%3D","updated":"2011-12-29 21:11:12.000000000","message":"Done","commit_id":"6cac9a436135a40835bb1d747c0382cc42e2aca3"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"7f92d8033923b53ea3194f8127395b337f02886c","unresolved":false,"context_lines":[{"line_number":367,"context_line":"            if object.owner_id \u003d\u003d user.id:"},{"line_number":368,"context_line":"                return True"},{"line_number":369,"context_line":"        return False"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"    def validate_unscoped_token(self, token_id, belongs_to\u003dNone):"},{"line_number":372,"context_line":"        (token, user) \u003d self._validate_token(token_id, belongs_to)"},{"line_number":373,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAADH%2F%2F%2Fqo%3D","line":370,"updated":"2011-12-29 18:49:45.000000000","message":"Between here and line 480 there seems to be a lot of unneeded blank lines within the methods. Blank lines should indicate logical chunks; rarely does a single line need to be set off by blank lines.","commit_id":"6cac9a436135a40835bb1d747c0382cc42e2aca3"},{"author":{"_account_id":5,"name":"Ziad Sawalha","email":"ziad.sawalha@rackspace.com","username":"ziad-sawalha"},"change_message_id":"d876c9f2fb89e1b3f288ab9abde880b56ef3e55f","unresolved":false,"context_lines":[{"line_number":367,"context_line":"            if object.owner_id \u003d\u003d user.id:"},{"line_number":368,"context_line":"                return True"},{"line_number":369,"context_line":"        return False"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"    def validate_unscoped_token(self, token_id, belongs_to\u003dNone):"},{"line_number":372,"context_line":"        (token, user) \u003d self._validate_token(token_id, belongs_to)"},{"line_number":373,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAADH%2F%2F%2FlI%3D","line":370,"in_reply_to":"AAAADH%2F%2F%2Fqo%3D","updated":"2011-12-29 21:11:12.000000000","message":"Done","commit_id":"6cac9a436135a40835bb1d747c0382cc42e2aca3"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"7f92d8033923b53ea3194f8127395b337f02886c","unresolved":false,"context_lines":[{"line_number":1346,"context_line":"        if duser_name.id !\u003d duser.id:"},{"line_number":1347,"context_line":"            raise fault.UserConflictFault("},{"line_number":1348,"context_line":"                \"A user with that name already exists\")"},{"line_number":1349,"context_line":"        values \u003d {\u0027id\u0027: user_id, \u0027password\u0027: password_credentials.password, \\"},{"line_number":1350,"context_line":"            \u0027name\u0027: password_credentials.user_name}"},{"line_number":1351,"context_line":"        self.user_manager.update(values)"},{"line_number":1352,"context_line":"        duser \u003d self.user_manager.get(user_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAADH%2F%2F%2FqA%3D","line":1349,"updated":"2011-12-29 18:49:45.000000000","message":"Trailing backslash is not needed.","commit_id":"6cac9a436135a40835bb1d747c0382cc42e2aca3"},{"author":{"_account_id":5,"name":"Ziad Sawalha","email":"ziad.sawalha@rackspace.com","username":"ziad-sawalha"},"change_message_id":"d876c9f2fb89e1b3f288ab9abde880b56ef3e55f","unresolved":false,"context_lines":[{"line_number":1346,"context_line":"        if duser_name.id !\u003d duser.id:"},{"line_number":1347,"context_line":"            raise fault.UserConflictFault("},{"line_number":1348,"context_line":"                \"A user with that name already exists\")"},{"line_number":1349,"context_line":"        values \u003d {\u0027id\u0027: user_id, \u0027password\u0027: password_credentials.password, \\"},{"line_number":1350,"context_line":"            \u0027name\u0027: password_credentials.user_name}"},{"line_number":1351,"context_line":"        self.user_manager.update(values)"},{"line_number":1352,"context_line":"        duser \u003d self.user_manager.get(user_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAADH%2F%2F%2Fk8%3D","line":1349,"in_reply_to":"AAAADH%2F%2F%2FqA%3D","updated":"2011-12-29 21:11:12.000000000","message":"Done","commit_id":"6cac9a436135a40835bb1d747c0382cc42e2aca3"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"7f92d8033923b53ea3194f8127395b337f02886c","unresolved":false,"context_lines":[{"line_number":1371,"context_line":"        if duser.password:"},{"line_number":1372,"context_line":"            raise fault.BadRequestFault("},{"line_number":1373,"context_line":"                \"Password credentials already available.\")"},{"line_number":1374,"context_line":"        values \u003d {\u0027id\u0027: user_id, \u0027password\u0027: password_credentials.password, \\"},{"line_number":1375,"context_line":"            \u0027name\u0027: password_credentials.user_name}"},{"line_number":1376,"context_line":"        self.user_manager.update(values)"},{"line_number":1377,"context_line":"        duser \u003d self.user_manager.get(user_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAADH%2F%2F%2Fp8%3D","line":1374,"updated":"2011-12-29 18:49:45.000000000","message":"Trailing backslash is not needed.","commit_id":"6cac9a436135a40835bb1d747c0382cc42e2aca3"},{"author":{"_account_id":5,"name":"Ziad Sawalha","email":"ziad.sawalha@rackspace.com","username":"ziad-sawalha"},"change_message_id":"d876c9f2fb89e1b3f288ab9abde880b56ef3e55f","unresolved":false,"context_lines":[{"line_number":1371,"context_line":"        if duser.password:"},{"line_number":1372,"context_line":"            raise fault.BadRequestFault("},{"line_number":1373,"context_line":"                \"Password credentials already available.\")"},{"line_number":1374,"context_line":"        values \u003d {\u0027id\u0027: user_id, \u0027password\u0027: password_credentials.password, \\"},{"line_number":1375,"context_line":"            \u0027name\u0027: password_credentials.user_name}"},{"line_number":1376,"context_line":"        self.user_manager.update(values)"},{"line_number":1377,"context_line":"        duser \u003d self.user_manager.get(user_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAADH%2F%2F%2Fk4%3D","line":1374,"in_reply_to":"AAAADH%2F%2F%2Fp8%3D","updated":"2011-12-29 21:11:12.000000000","message":"Done","commit_id":"6cac9a436135a40835bb1d747c0382cc42e2aca3"}],"keystone/managers/user.py":[{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"7f92d8033923b53ea3194f8127395b337f02886c","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        return self.driver.users_get_by_tenant_get_page("},{"line_number":62,"context_line":"            tenant_id, role_id, marker, limit)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def users_get_by_tenant_get_page_markers(self,"},{"line_number":65,"context_line":"                                             tenant_id,"},{"line_number":66,"context_line":"                                             role_id,"},{"line_number":67,"context_line":"                                             marker, limit):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAADH%2F%2F%2Fp0%3D","line":64,"updated":"2011-12-29 18:49:45.000000000","message":"None of the other methods in this script use this stilted style of parameter list. It should be changed to the same direct list of params as the other methods.","commit_id":"6cac9a436135a40835bb1d747c0382cc42e2aca3"},{"author":{"_account_id":5,"name":"Ziad Sawalha","email":"ziad.sawalha@rackspace.com","username":"ziad-sawalha"},"change_message_id":"d876c9f2fb89e1b3f288ab9abde880b56ef3e55f","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        return self.driver.users_get_by_tenant_get_page("},{"line_number":62,"context_line":"            tenant_id, role_id, marker, limit)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def users_get_by_tenant_get_page_markers(self,"},{"line_number":65,"context_line":"                                             tenant_id,"},{"line_number":66,"context_line":"                                             role_id,"},{"line_number":67,"context_line":"                                             marker, limit):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAADH%2F%2F%2Fk0%3D","line":64,"in_reply_to":"AAAADH%2F%2F%2Fp0%3D","updated":"2011-12-29 21:11:12.000000000","message":"Done","commit_id":"6cac9a436135a40835bb1d747c0382cc42e2aca3"}],"keystone/models.py":[{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"7f92d8033923b53ea3194f8127395b337f02886c","unresolved":false,"context_lines":[{"line_number":217,"context_line":"                rename \u003d maps.values()"},{"line_number":218,"context_line":"        for name, value in dict_object.iteritems():"},{"line_number":219,"context_line":"            if name in rename:"},{"line_number":220,"context_line":"                name \u003d maps.keys()[rename.index(name)]"},{"line_number":221,"context_line":"            if isinstance(value, dict):"},{"line_number":222,"context_line":"                element \u003d etree.SubElement(xml, name)"},{"line_number":223,"context_line":"                Resource.write_dict_to_xml(value, element)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAADH%2F%2F%2Fpw%3D","line":220,"updated":"2011-12-29 18:49:45.000000000","message":"Is it possible that \u0027maps\u0027 and \u0027rename\u0027 may not be defined at this point? I.e., if \u0027hints\u0027 is None or doesn\u0027t have the key \u0027maps\u0027, neither maps nor rename will be defined.","commit_id":"6cac9a436135a40835bb1d747c0382cc42e2aca3"},{"author":{"_account_id":5,"name":"Ziad Sawalha","email":"ziad.sawalha@rackspace.com","username":"ziad-sawalha"},"change_message_id":"d876c9f2fb89e1b3f288ab9abde880b56ef3e55f","unresolved":false,"context_lines":[{"line_number":217,"context_line":"                rename \u003d maps.values()"},{"line_number":218,"context_line":"        for name, value in dict_object.iteritems():"},{"line_number":219,"context_line":"            if name in rename:"},{"line_number":220,"context_line":"                name \u003d maps.keys()[rename.index(name)]"},{"line_number":221,"context_line":"            if isinstance(value, dict):"},{"line_number":222,"context_line":"                element \u003d etree.SubElement(xml, name)"},{"line_number":223,"context_line":"                Resource.write_dict_to_xml(value, element)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAADH%2F%2F%2Fkw%3D","line":220,"in_reply_to":"AAAADH%2F%2F%2Fpw%3D","updated":"2011-12-29 21:11:12.000000000","message":"rename not, because we initialize it above. I added a line to initialize maps to {}","commit_id":"6cac9a436135a40835bb1d747c0382cc42e2aca3"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"7f92d8033923b53ea3194f8127395b337f02886c","unresolved":false,"context_lines":[{"line_number":272,"context_line":"                        target[name] \u003d target[name][0]"},{"line_number":273,"context_line":"                elif type is bool:"},{"line_number":274,"context_line":"                    target[name] \u003d bool(str(target[name]).lower() not in [\u00270\u0027,"},{"line_number":275,"context_line":"                                                                    \u0027false\u0027])"},{"line_number":276,"context_line":"                else:"},{"line_number":277,"context_line":"                    raise NotImplementedError(\"Model type mappings cannot \\"},{"line_number":278,"context_line":"                                handle \u0027%s\u0027 types\" % type.__name__)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAADH%2F%2F%2Fps%3D","line":275,"updated":"2011-12-29 18:49:45.000000000","message":"The bool() is not needed; the result of a \u0027not in\u0027 is already a bool.","commit_id":"6cac9a436135a40835bb1d747c0382cc42e2aca3"},{"author":{"_account_id":5,"name":"Ziad Sawalha","email":"ziad.sawalha@rackspace.com","username":"ziad-sawalha"},"change_message_id":"d876c9f2fb89e1b3f288ab9abde880b56ef3e55f","unresolved":false,"context_lines":[{"line_number":272,"context_line":"                        target[name] \u003d target[name][0]"},{"line_number":273,"context_line":"                elif type is bool:"},{"line_number":274,"context_line":"                    target[name] \u003d bool(str(target[name]).lower() not in [\u00270\u0027,"},{"line_number":275,"context_line":"                                                                    \u0027false\u0027])"},{"line_number":276,"context_line":"                else:"},{"line_number":277,"context_line":"                    raise NotImplementedError(\"Model type mappings cannot \\"},{"line_number":278,"context_line":"                                handle \u0027%s\u0027 types\" % type.__name__)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAADH%2F%2F%2Fks%3D","line":275,"in_reply_to":"AAAADH%2F%2F%2Fps%3D","updated":"2011-12-29 21:11:12.000000000","message":"Done","commit_id":"6cac9a436135a40835bb1d747c0382cc42e2aca3"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"7f92d8033923b53ea3194f8127395b337f02886c","unresolved":false,"context_lines":[{"line_number":458,"context_line":"            return result"},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"        # Check that fields are valid"},{"line_number":461,"context_line":"        invalid \u003d [key for key in result if key not in\\"},{"line_number":462,"context_line":"                   [\u0027id\u0027, \u0027name\u0027, \u0027type\u0027, \u0027description\u0027]]"},{"line_number":463,"context_line":"        if invalid !\u003d []:"},{"line_number":464,"context_line":"            result.append((fault.BadRequestFault, \"Invalid attribute(s): %s\""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAADH%2F%2F%2Fpk%3D","line":461,"updated":"2011-12-29 18:49:45.000000000","message":"Trailing backslash is not needed.","commit_id":"6cac9a436135a40835bb1d747c0382cc42e2aca3"},{"author":{"_account_id":5,"name":"Ziad Sawalha","email":"ziad.sawalha@rackspace.com","username":"ziad-sawalha"},"change_message_id":"d876c9f2fb89e1b3f288ab9abde880b56ef3e55f","unresolved":false,"context_lines":[{"line_number":458,"context_line":"            return result"},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"        # Check that fields are valid"},{"line_number":461,"context_line":"        invalid \u003d [key for key in result if key not in\\"},{"line_number":462,"context_line":"                   [\u0027id\u0027, \u0027name\u0027, \u0027type\u0027, \u0027description\u0027]]"},{"line_number":463,"context_line":"        if invalid !\u003d []:"},{"line_number":464,"context_line":"            result.append((fault.BadRequestFault, \"Invalid attribute(s): %s\""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAADH%2F%2F%2Fko%3D","line":461,"in_reply_to":"AAAADH%2F%2F%2Fpk%3D","updated":"2011-12-29 21:11:12.000000000","message":"Done","commit_id":"6cac9a436135a40835bb1d747c0382cc42e2aca3"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"7f92d8033923b53ea3194f8127395b337f02886c","unresolved":false,"context_lines":[{"line_number":460,"context_line":"        # Check that fields are valid"},{"line_number":461,"context_line":"        invalid \u003d [key for key in result if key not in\\"},{"line_number":462,"context_line":"                   [\u0027id\u0027, \u0027name\u0027, \u0027type\u0027, \u0027description\u0027]]"},{"line_number":463,"context_line":"        if invalid !\u003d []:"},{"line_number":464,"context_line":"            result.append((fault.BadRequestFault, \"Invalid attribute(s): %s\""},{"line_number":465,"context_line":"                                        % invalid))"},{"line_number":466,"context_line":"            if fail_fast:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAADH%2F%2F%2Fpg%3D","line":463,"updated":"2011-12-29 18:49:45.000000000","message":"Simpler:\n\nif not invalid:","commit_id":"6cac9a436135a40835bb1d747c0382cc42e2aca3"},{"author":{"_account_id":5,"name":"Ziad Sawalha","email":"ziad.sawalha@rackspace.com","username":"ziad-sawalha"},"change_message_id":"d876c9f2fb89e1b3f288ab9abde880b56ef3e55f","unresolved":false,"context_lines":[{"line_number":460,"context_line":"        # Check that fields are valid"},{"line_number":461,"context_line":"        invalid \u003d [key for key in result if key not in\\"},{"line_number":462,"context_line":"                   [\u0027id\u0027, \u0027name\u0027, \u0027type\u0027, \u0027description\u0027]]"},{"line_number":463,"context_line":"        if invalid !\u003d []:"},{"line_number":464,"context_line":"            result.append((fault.BadRequestFault, \"Invalid attribute(s): %s\""},{"line_number":465,"context_line":"                                        % invalid))"},{"line_number":466,"context_line":"            if fail_fast:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAADH%2F%2F%2Fkk%3D","line":463,"in_reply_to":"AAAADH%2F%2F%2Fpg%3D","updated":"2011-12-29 21:11:12.000000000","message":"Done","commit_id":"6cac9a436135a40835bb1d747c0382cc42e2aca3"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"7f92d8033923b53ea3194f8127395b337f02886c","unresolved":false,"context_lines":[{"line_number":654,"context_line":"        if \"role\" in role:"},{"line_number":655,"context_line":"            role \u003d role[\"role\"]"},{"line_number":656,"context_line":""},{"line_number":657,"context_line":"        invalid \u003d [key for key in role if key not in\\"},{"line_number":658,"context_line":"                   [\u0027id\u0027, \u0027name\u0027, \u0027description\u0027, \u0027serviceId\u0027]]"},{"line_number":659,"context_line":"        if invalid !\u003d []:"},{"line_number":660,"context_line":"            raise fault.BadRequestFault(\"Invalid attribute(s): %s\""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAADH%2F%2F%2FpQ%3D","line":657,"updated":"2011-12-29 18:49:45.000000000","message":"Trailing backslash is not needed.","commit_id":"6cac9a436135a40835bb1d747c0382cc42e2aca3"},{"author":{"_account_id":5,"name":"Ziad Sawalha","email":"ziad.sawalha@rackspace.com","username":"ziad-sawalha"},"change_message_id":"d876c9f2fb89e1b3f288ab9abde880b56ef3e55f","unresolved":false,"context_lines":[{"line_number":654,"context_line":"        if \"role\" in role:"},{"line_number":655,"context_line":"            role \u003d role[\"role\"]"},{"line_number":656,"context_line":""},{"line_number":657,"context_line":"        invalid \u003d [key for key in role if key not in\\"},{"line_number":658,"context_line":"                   [\u0027id\u0027, \u0027name\u0027, \u0027description\u0027, \u0027serviceId\u0027]]"},{"line_number":659,"context_line":"        if invalid !\u003d []:"},{"line_number":660,"context_line":"            raise fault.BadRequestFault(\"Invalid attribute(s): %s\""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAADH%2F%2F%2Fkg%3D","line":657,"in_reply_to":"AAAADH%2F%2F%2FpQ%3D","updated":"2011-12-29 21:11:12.000000000","message":"Done","commit_id":"6cac9a436135a40835bb1d747c0382cc42e2aca3"}],"keystone/test/unit/test_models.py":[{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"7f92d8033923b53ea3194f8127395b337f02886c","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        json_str \u003d resource.to_json(hints\u003d{\"maps\": {\"refId\": \"ref_id\", }})"},{"line_number":56,"context_line":"        d1 \u003d json.loads(json_str)"},{"line_number":57,"context_line":"        d2 \u003d json.loads(\u0027{\"resource\": {\"name\": \"the resource\", \"id\": 1,\\"},{"line_number":58,"context_line":"\"refId\": 12}}\u0027)"},{"line_number":59,"context_line":"        self.assertDictEqual(d1, d2)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def test_resource_json_serialization_types(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAADH%2F%2F%2FpM%3D","line":58,"updated":"2011-12-29 18:49:45.000000000","message":"Trailing backslash is not needed. Continued line should be indented two levels from the main line.\n\nSame comment applies to line 66","commit_id":"6cac9a436135a40835bb1d747c0382cc42e2aca3"},{"author":{"_account_id":5,"name":"Ziad Sawalha","email":"ziad.sawalha@rackspace.com","username":"ziad-sawalha"},"change_message_id":"d876c9f2fb89e1b3f288ab9abde880b56ef3e55f","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        json_str \u003d resource.to_json(hints\u003d{\"maps\": {\"refId\": \"ref_id\", }})"},{"line_number":56,"context_line":"        d1 \u003d json.loads(json_str)"},{"line_number":57,"context_line":"        d2 \u003d json.loads(\u0027{\"resource\": {\"name\": \"the resource\", \"id\": 1,\\"},{"line_number":58,"context_line":"\"refId\": 12}}\u0027)"},{"line_number":59,"context_line":"        self.assertDictEqual(d1, d2)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def test_resource_json_serialization_types(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAADH%2F%2F%2Fkc%3D","line":58,"in_reply_to":"AAAADH%2F%2F%2FpM%3D","updated":"2011-12-29 21:11:12.000000000","message":"Done","commit_id":"6cac9a436135a40835bb1d747c0382cc42e2aca3"}],"keystone/test/unit/test_models_Role.py":[{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"7f92d8033923b53ea3194f8127395b337f02886c","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        role[\"dynamic\"] \u003d \"test\""},{"line_number":42,"context_line":"        json_str \u003d role.to_json()"},{"line_number":43,"context_line":"        d1 \u003d json.loads(json_str)"},{"line_number":44,"context_line":"        d2 \u003d json.loads(\u0027{\"role\": {\"name\": \"the role\", \\"},{"line_number":45,"context_line":"                          \"id\": 1, \"dynamic\": \"test\"}}\u0027)"},{"line_number":46,"context_line":"        self.assertEquals(d1, d2)"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAADH%2F%2F%2FpI%3D","side":"PARENT","line":44,"updated":"2011-12-29 18:49:45.000000000","message":"Trailing backslash is not needed.","commit_id":"3f2b53586ca804115d8cf91e43f63ec7a300e82c"},{"author":{"_account_id":5,"name":"Ziad Sawalha","email":"ziad.sawalha@rackspace.com","username":"ziad-sawalha"},"change_message_id":"d876c9f2fb89e1b3f288ab9abde880b56ef3e55f","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        role[\"dynamic\"] \u003d \"test\""},{"line_number":42,"context_line":"        json_str \u003d role.to_json()"},{"line_number":43,"context_line":"        d1 \u003d json.loads(json_str)"},{"line_number":44,"context_line":"        d2 \u003d json.loads(\u0027{\"role\": {\"name\": \"the role\", \\"},{"line_number":45,"context_line":"                          \"id\": 1, \"dynamic\": \"test\"}}\u0027)"},{"line_number":46,"context_line":"        self.assertEquals(d1, d2)"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAADH%2F%2F%2FkU%3D","side":"PARENT","line":44,"in_reply_to":"AAAADH%2F%2F%2FpI%3D","updated":"2011-12-29 21:11:12.000000000","message":"Done","commit_id":"3f2b53586ca804115d8cf91e43f63ec7a300e82c"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"7f92d8033923b53ea3194f8127395b337f02886c","unresolved":false,"context_lines":[{"line_number":47,"context_line":"                    tenant_id\u003d\"t1\")"},{"line_number":48,"context_line":"        json_str \u003d role.to_json()"},{"line_number":49,"context_line":"        d1 \u003d json.loads(json_str)"},{"line_number":50,"context_line":"        d2 \u003d json.loads(\u0027{\"role\": {\"name\": \"the role\", \\"},{"line_number":51,"context_line":"                          \"id\": \"1\", \"serviceId\": \"s1\", \"tenantId\": \"t1\"}}\u0027)"},{"line_number":52,"context_line":"        self.assertDictEqual(d1, d2)"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAADH%2F%2F%2FpE%3D","line":50,"updated":"2011-12-29 18:49:45.000000000","message":"Trailing backslash is not needed.","commit_id":"6cac9a436135a40835bb1d747c0382cc42e2aca3"},{"author":{"_account_id":5,"name":"Ziad Sawalha","email":"ziad.sawalha@rackspace.com","username":"ziad-sawalha"},"change_message_id":"d876c9f2fb89e1b3f288ab9abde880b56ef3e55f","unresolved":false,"context_lines":[{"line_number":47,"context_line":"                    tenant_id\u003d\"t1\")"},{"line_number":48,"context_line":"        json_str \u003d role.to_json()"},{"line_number":49,"context_line":"        d1 \u003d json.loads(json_str)"},{"line_number":50,"context_line":"        d2 \u003d json.loads(\u0027{\"role\": {\"name\": \"the role\", \\"},{"line_number":51,"context_line":"                          \"id\": \"1\", \"serviceId\": \"s1\", \"tenantId\": \"t1\"}}\u0027)"},{"line_number":52,"context_line":"        self.assertDictEqual(d1, d2)"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAADH%2F%2F%2FkY%3D","line":50,"in_reply_to":"AAAADH%2F%2F%2FpE%3D","updated":"2011-12-29 21:11:12.000000000","message":"Done","commit_id":"6cac9a436135a40835bb1d747c0382cc42e2aca3"}],"keystone/test/unit/test_models_Service.py":[{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"7f92d8033923b53ea3194f8127395b337f02886c","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        self.assertTrue(testutils.XMLTools.xmlEqual(xml_str,"},{"line_number":46,"context_line":"                    \u0027\u003cservice \\"},{"line_number":47,"context_line":"            xmlns\u003d\"http://docs.openstack.org/identity/api/ext/OS-KSADM/v1.0\" \\"},{"line_number":48,"context_line":"            id\u003d\"1\" name\u003d\"the service\" type\u003d\"compute\"/\u003e\u0027))"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def test_service_json_deserialization(self):"},{"line_number":51,"context_line":"        service \u003d Service.from_json(\u0027{\"name\": \"the service\", \"id\": 1,\\"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAADH%2F%2F%2Fo0%3D","line":48,"updated":"2011-12-29 18:49:45.000000000","message":"As written, the above string evaluates to (using \u0027+\u0027 for spaces, since space runs don\u0027t show in HTML):\n\u0027\u003cservice+++++++++++xmlns\u003d\"http://docs.openstack.org/identity/api/ext/OS-KSADM/v1.0\"+++++++++++id\u003d\"1\"+name\u003d\"the+service\"+type\u003d\"compute\"/\u003e\u0027\n\nDid you want it to be one long line with those two long runs of 12 spaces?\n\nSame comment applies to the test_service_validation_from_xml() method below.","commit_id":"6cac9a436135a40835bb1d747c0382cc42e2aca3"},{"author":{"_account_id":5,"name":"Ziad Sawalha","email":"ziad.sawalha@rackspace.com","username":"ziad-sawalha"},"change_message_id":"d876c9f2fb89e1b3f288ab9abde880b56ef3e55f","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        self.assertTrue(testutils.XMLTools.xmlEqual(xml_str,"},{"line_number":46,"context_line":"                    \u0027\u003cservice \\"},{"line_number":47,"context_line":"            xmlns\u003d\"http://docs.openstack.org/identity/api/ext/OS-KSADM/v1.0\" \\"},{"line_number":48,"context_line":"            id\u003d\"1\" name\u003d\"the service\" type\u003d\"compute\"/\u003e\u0027))"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def test_service_json_deserialization(self):"},{"line_number":51,"context_line":"        service \u003d Service.from_json(\u0027{\"name\": \"the service\", \"id\": 1,\\"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAADH%2F%2F%2FkQ%3D","line":48,"in_reply_to":"AAAADH%2F%2F%2Fo0%3D","updated":"2011-12-29 21:11:12.000000000","message":"I don\u0027t care about the spaces (since XML doesn\u0027t). How would you format this nicely in python?","commit_id":"6cac9a436135a40835bb1d747c0382cc42e2aca3"}],"keystone/test/unit/test_models_Tenant.py":[{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"7f92d8033923b53ea3194f8127395b337f02886c","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        tenant \u003d Tenant(id\u003d1, name\u003d\"the tenant\", ref_id\u003d12)"},{"line_number":70,"context_line":"        json_str \u003d tenant.to_json(hints\u003d{\"maps\": {\"refId\": \"ref_id\",}})"},{"line_number":71,"context_line":"        d1 \u003d json.loads(json_str)"},{"line_number":72,"context_line":"        d2 \u003d json.loads(\u0027{\"tenant\": {\"name\": \"the tenant\", \"id\": \"1\",\\"},{"line_number":73,"context_line":"\"refId\": 12}}\u0027)"},{"line_number":74,"context_line":"        self.assertDictEqual(d1, d2)"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAADH%2F%2F%2FoM%3D","line":72,"updated":"2011-12-29 18:49:45.000000000","message":"Trailing backslash is not needed. Continued line should be indented two levels from the main line.\n\nSame comment applies to line 82.","commit_id":"6cac9a436135a40835bb1d747c0382cc42e2aca3"},{"author":{"_account_id":5,"name":"Ziad Sawalha","email":"ziad.sawalha@rackspace.com","username":"ziad-sawalha"},"change_message_id":"d876c9f2fb89e1b3f288ab9abde880b56ef3e55f","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        tenant \u003d Tenant(id\u003d1, name\u003d\"the tenant\", ref_id\u003d12)"},{"line_number":70,"context_line":"        json_str \u003d tenant.to_json(hints\u003d{\"maps\": {\"refId\": \"ref_id\",}})"},{"line_number":71,"context_line":"        d1 \u003d json.loads(json_str)"},{"line_number":72,"context_line":"        d2 \u003d json.loads(\u0027{\"tenant\": {\"name\": \"the tenant\", \"id\": \"1\",\\"},{"line_number":73,"context_line":"\"refId\": 12}}\u0027)"},{"line_number":74,"context_line":"        self.assertDictEqual(d1, d2)"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAADH%2F%2F%2FkM%3D","line":72,"in_reply_to":"AAAADH%2F%2F%2FoM%3D","updated":"2011-12-29 21:11:12.000000000","message":"Done","commit_id":"6cac9a436135a40835bb1d747c0382cc42e2aca3"}]}
