)]}'
{"keystone/common/models.py":[{"author":{"_account_id":708,"name":"Yuriy Taraday","email":"yuriy@taraday.nl","username":"yorik-sar"},"change_message_id":"29d5ea15940a306d7ce75f0b57461b39a092e92d","unresolved":false,"context_lines":[{"line_number":115,"context_line":"    \"\"\""},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    required_keys \u003d (\u0027id\u0027, \u0027name\u0027, \u0027domain_id\u0027)"},{"line_number":118,"context_line":"    optional_keys \u003d tuple(\u0027description\u0027)"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"class Project(Model):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2BlKw%3D","line":118,"updated":"2013-02-26 20:26:59.000000000","message":"(\u0027description\u0027,)","commit_id":"185be48b7d574676285a1a5df6bce71028362524"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"f7f6e01bf487f05584f5bbf4e094df999aa0c7b7","unresolved":false,"context_lines":[{"line_number":115,"context_line":"    \"\"\""},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    required_keys \u003d (\u0027id\u0027, \u0027name\u0027, \u0027domain_id\u0027)"},{"line_number":118,"context_line":"    optional_keys \u003d tuple(\u0027description\u0027)"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"class Project(Model):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAN3%2F%2F%2B9k%3D","line":118,"updated":"2013-03-04 17:57:01.000000000","message":"nice catch","commit_id":"b28bd117f2aa6139652450a24a13176d32257ad6"},{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"f436ab487c139991cda1ff440ee45e20967c3b74","unresolved":false,"context_lines":[{"line_number":164,"context_line":"    \"\"\""},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    required_keys \u003d (\u0027id\u0027, \u0027name\u0027)"},{"line_number":167,"context_line":"    optional_keys \u003d (\u0027description\u0027, \u0027enabled\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAN3%2F%2F8Hw%3D","line":167,"updated":"2013-03-05 20:33:58.000000000","message":"Interesting, so domains have an enabled option but the projects model  above does not have this option?","commit_id":"cc9567bad48526e567d9dc9e5681465575c13a61"}],"keystone/config.py":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"94f5cbb17b4e54d4314bceacc8ae62bd3c123cd5","unresolved":false,"context_lines":[{"line_number":320,"context_line":"register_str(\u0027domain_name_attribute\u0027, group\u003d\u0027ldap\u0027, default\u003d\u0027ou\u0027)"},{"line_number":321,"context_line":"register_str(\u0027domain_member_attribute\u0027, group\u003d\u0027ldap\u0027, default\u003d\u0027member\u0027)"},{"line_number":322,"context_line":"register_str(\u0027domain_desc_attribute\u0027, group\u003d\u0027ldap\u0027, default\u003d\u0027description\u0027)"},{"line_number":323,"context_line":"register_str(\u0027tenant_enabled_attribute\u0027, group\u003d\u0027ldap\u0027, default\u003d\u0027enabled\u0027)"},{"line_number":324,"context_line":"register_list(\u0027domain_attribute_ignore\u0027, group\u003d\u0027ldap\u0027, default\u003d\u0027\u0027)"},{"line_number":325,"context_line":"register_bool(\u0027domain_allow_create\u0027, group\u003d\u0027ldap\u0027, default\u003dTrue)"},{"line_number":326,"context_line":"register_bool(\u0027domain_allow_update\u0027, group\u003d\u0027ldap\u0027, default\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAN3%2F%2F8Oo%3D","line":323,"updated":"2013-03-05 19:00:25.000000000","message":"I think you mean domain here","commit_id":"cc9567bad48526e567d9dc9e5681465575c13a61"}],"keystone/identity/backends/ldap/core.py":[{"author":{"_account_id":708,"name":"Yuriy Taraday","email":"yuriy@taraday.nl","username":"yorik-sar"},"change_message_id":"29d5ea15940a306d7ce75f0b57461b39a092e92d","unresolved":false,"context_lines":[{"line_number":273,"context_line":"        self.group.remove_user(user_id, group_id)"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"    def list_groups_for_user(self, user_id):"},{"line_number":276,"context_line":"        return self.group.get_user_groups(user_id)"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"    def list_groups(self):"},{"line_number":279,"context_line":"        return self.group.get_all()"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2BlKI%3D","line":276,"updated":"2013-02-26 20:26:59.000000000","message":"Check if user exists","commit_id":"185be48b7d574676285a1a5df6bce71028362524"},{"author":{"_account_id":708,"name":"Yuriy Taraday","email":"yuriy@taraday.nl","username":"yorik-sar"},"change_message_id":"29d5ea15940a306d7ce75f0b57461b39a092e92d","unresolved":false,"context_lines":[{"line_number":418,"context_line":"        if group_id is not None:"},{"line_number":419,"context_line":"            self.group_api.add_user(values[\u0027group_id\u0027], values[\u0027id\u0027])"},{"line_number":420,"context_line":"        else:"},{"line_number":421,"context_line":"            tenant_id \u003d values.get(\u0027tenant_id\u0027)"},{"line_number":422,"context_line":"            if tenant_id is not None:"},{"line_number":423,"context_line":"                self.project_api.add_user(values[\u0027tenant_id\u0027], values[\u0027id\u0027])"},{"line_number":424,"context_line":"        return values"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2BlKE%3D","line":421,"updated":"2013-02-26 20:26:59.000000000","message":"If we keep it, it shouldn\u0027t be hidden in else: branch.","commit_id":"185be48b7d574676285a1a5df6bce71028362524"},{"author":{"_account_id":708,"name":"Yuriy Taraday","email":"yuriy@taraday.nl","username":"yorik-sar"},"change_message_id":"29d5ea15940a306d7ce75f0b57461b39a092e92d","unresolved":false,"context_lines":[{"line_number":1015,"context_line":"                [(ldap.MOD_ADD,"},{"line_number":1016,"context_line":"                  self.member_attribute,"},{"line_number":1017,"context_line":"                  self.user_api._id_to_dn(user_id))])"},{"line_number":1018,"context_line":"        except ldap.TYPE_OR_VALUE_EXISTS:"},{"line_number":1019,"context_line":"            pass"},{"line_number":1020,"context_line":""},{"line_number":1021,"context_line":"    def remove_user(self, user_id, group_id):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2BlM8%3D","line":1018,"updated":"2013-02-26 20:26:59.000000000","message":"We should raise Conflict like in RoleApi.add_user","commit_id":"185be48b7d574676285a1a5df6bce71028362524"},{"author":{"_account_id":708,"name":"Yuriy Taraday","email":"yuriy@taraday.nl","username":"yorik-sar"},"change_message_id":"29d5ea15940a306d7ce75f0b57461b39a092e92d","unresolved":false,"context_lines":[{"line_number":1026,"context_line":"                [(ldap.MOD_DELETE,"},{"line_number":1027,"context_line":"                  self.member_attribute,"},{"line_number":1028,"context_line":"                  self.user_api._id_to_dn(user_id))])"},{"line_number":1029,"context_line":"        except ldap.TYPE_OR_VALUE_EXISTS:"},{"line_number":1030,"context_line":"            pass"},{"line_number":1031,"context_line":""},{"line_number":1032,"context_line":"    def get_user_groups(self, user_id):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2BlMw%3D","line":1029,"updated":"2013-02-26 20:26:59.000000000","message":"Wrong exception is caught. We should raise exception here as well (don\u0027t look at RoleApi.delete_user, except: branch is broken there)","commit_id":"185be48b7d574676285a1a5df6bce71028362524"},{"author":{"_account_id":708,"name":"Yuriy Taraday","email":"yuriy@taraday.nl","username":"yorik-sar"},"change_message_id":"29d5ea15940a306d7ce75f0b57461b39a092e92d","unresolved":false,"context_lines":[{"line_number":1039,"context_line":"    def get_users_in_group(self, group_id):"},{"line_number":1040,"context_line":"        \"\"\"Return a list of users belongs to a group\"\"\""},{"line_number":1041,"context_line":"        group_dn \u003d self._id_to_dn(group_id)"},{"line_number":1042,"context_line":"        query \u003d (\u0027(%s\u003d%s)\u0027 % (self.attribute_mapping[\u0027groupId\u0027], group_id))"},{"line_number":1043,"context_line":"        attrs \u003d [\u0027member\u0027]"},{"line_number":1044,"context_line":"        conn \u003d self.get_connection()"},{"line_number":1045,"context_line":"        if group_id is not None:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2BlLY%3D","line":1042,"updated":"2013-02-26 20:26:59.000000000","message":"Use self.id_attr","commit_id":"185be48b7d574676285a1a5df6bce71028362524"},{"author":{"_account_id":708,"name":"Yuriy Taraday","email":"yuriy@taraday.nl","username":"yorik-sar"},"change_message_id":"29d5ea15940a306d7ce75f0b57461b39a092e92d","unresolved":false,"context_lines":[{"line_number":1040,"context_line":"        \"\"\"Return a list of users belongs to a group\"\"\""},{"line_number":1041,"context_line":"        group_dn \u003d self._id_to_dn(group_id)"},{"line_number":1042,"context_line":"        query \u003d (\u0027(%s\u003d%s)\u0027 % (self.attribute_mapping[\u0027groupId\u0027], group_id))"},{"line_number":1043,"context_line":"        attrs \u003d [\u0027member\u0027]"},{"line_number":1044,"context_line":"        conn \u003d self.get_connection()"},{"line_number":1045,"context_line":"        if group_id is not None:"},{"line_number":1046,"context_line":"            group_dn \u003d self._id_to_dn(group_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2BlMM%3D","line":1043,"updated":"2013-02-26 20:26:59.000000000","message":"Inline this","commit_id":"185be48b7d574676285a1a5df6bce71028362524"},{"author":{"_account_id":708,"name":"Yuriy Taraday","email":"yuriy@taraday.nl","username":"yorik-sar"},"change_message_id":"29d5ea15940a306d7ce75f0b57461b39a092e92d","unresolved":false,"context_lines":[{"line_number":1042,"context_line":"        query \u003d (\u0027(%s\u003d%s)\u0027 % (self.attribute_mapping[\u0027groupId\u0027], group_id))"},{"line_number":1043,"context_line":"        attrs \u003d [\u0027member\u0027]"},{"line_number":1044,"context_line":"        conn \u003d self.get_connection()"},{"line_number":1045,"context_line":"        if group_id is not None:"},{"line_number":1046,"context_line":"            group_dn \u003d self._id_to_dn(group_id)"},{"line_number":1047,"context_line":"            try:"},{"line_number":1048,"context_line":"                members \u003d conn.search_s(self.tree_dn,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2BlMI%3D","line":1045,"updated":"2013-02-26 20:26:59.000000000","message":"If it is None, we\u0027ll get fail later (at \u0027in members\u0027). I don\u0027t think this check is appropriate.","commit_id":"185be48b7d574676285a1a5df6bce71028362524"},{"author":{"_account_id":708,"name":"Yuriy Taraday","email":"yuriy@taraday.nl","username":"yorik-sar"},"change_message_id":"29d5ea15940a306d7ce75f0b57461b39a092e92d","unresolved":false,"context_lines":[{"line_number":1045,"context_line":"        if group_id is not None:"},{"line_number":1046,"context_line":"            group_dn \u003d self._id_to_dn(group_id)"},{"line_number":1047,"context_line":"            try:"},{"line_number":1048,"context_line":"                members \u003d conn.search_s(self.tree_dn,"},{"line_number":1049,"context_line":"                                        ldap.SCOPE_ONELEVEL,"},{"line_number":1050,"context_line":"                                        query, attrs)"},{"line_number":1051,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2BlLo%3D","line":1048,"updated":"2013-02-26 20:26:59.000000000","message":"Search at specific DN with SCOPE_BASE","commit_id":"185be48b7d574676285a1a5df6bce71028362524"},{"author":{"_account_id":708,"name":"Yuriy Taraday","email":"yuriy@taraday.nl","username":"yorik-sar"},"change_message_id":"29d5ea15940a306d7ce75f0b57461b39a092e92d","unresolved":false,"context_lines":[{"line_number":1048,"context_line":"                members \u003d conn.search_s(self.tree_dn,"},{"line_number":1049,"context_line":"                                        ldap.SCOPE_ONELEVEL,"},{"line_number":1050,"context_line":"                                        query, attrs)"},{"line_number":1051,"context_line":""},{"line_number":1052,"context_line":"            except ldap.NO_SUCH_OBJECT:"},{"line_number":1053,"context_line":"                return []"},{"line_number":1054,"context_line":"        users \u003d []"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2BlMY%3D","line":1051,"updated":"2013-02-26 20:26:59.000000000","message":"extra blank line","commit_id":"185be48b7d574676285a1a5df6bce71028362524"},{"author":{"_account_id":708,"name":"Yuriy Taraday","email":"yuriy@taraday.nl","username":"yorik-sar"},"change_message_id":"29d5ea15940a306d7ce75f0b57461b39a092e92d","unresolved":false,"context_lines":[{"line_number":1052,"context_line":"            except ldap.NO_SUCH_OBJECT:"},{"line_number":1053,"context_line":"                return []"},{"line_number":1054,"context_line":"        users \u003d []"},{"line_number":1055,"context_line":"        for groupdn, member in members:"},{"line_number":1056,"context_line":"            user_dns \u003d member[self.member_attribute]"},{"line_number":1057,"context_line":"            for user_dn in user_dns:"},{"line_number":1058,"context_line":"                if self.use_dumb_member and user_dn \u003d\u003d self.dumb_member:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2BlLU%3D","line":1055,"updated":"2013-02-26 20:26:59.000000000","message":"Dict of attributes is named \u0027attrs\u0027 everywhere in the backend.","commit_id":"185be48b7d574676285a1a5df6bce71028362524"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"f7f6e01bf487f05584f5bbf4e094df999aa0c7b7","unresolved":false,"context_lines":[{"line_number":27,"context_line":"from keystone import config"},{"line_number":28,"context_line":"from keystone import exception"},{"line_number":29,"context_line":"from keystone import identity"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"CONF \u003d config.CONF"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAN3%2F%2F%2B9c%3D","side":"PARENT","line":30,"updated":"2013-03-04 17:57:01.000000000","message":"this blank line should be restored","commit_id":"2f916c6d547b22046dae4946389e545cee26deea"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"f7f6e01bf487f05584f5bbf4e094df999aa0c7b7","unresolved":false,"context_lines":[{"line_number":425,"context_line":"        values \u003d super(UserApi, self).create(values)"},{"line_number":426,"context_line":"        group_id \u003d values.get(\u0027group_id\u0027)"},{"line_number":427,"context_line":"        if group_id is not None:"},{"line_number":428,"context_line":"            self.group_api.add_user(values[\u0027group_id\u0027], values[\u0027id\u0027])"},{"line_number":429,"context_line":"        tenant_id \u003d values.get(\u0027tenant_id\u0027)"},{"line_number":430,"context_line":"        if tenant_id is not None:"},{"line_number":431,"context_line":"            self.project_api.add_user(values[\u0027tenant_id\u0027], values[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAN3%2F%2F%2B8o%3D","line":428,"updated":"2013-03-04 17:57:01.000000000","message":"-2; user.create() should absolutely not be able to add a user to a group","commit_id":"b28bd117f2aa6139652450a24a13176d32257ad6"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"a48804aab848245be4fe40c48c5a70ff8b0a5510","unresolved":false,"context_lines":[{"line_number":1036,"context_line":"                  self.member_attribute,"},{"line_number":1037,"context_line":"                  self.user_api._id_to_dn(user_id))])"},{"line_number":1038,"context_line":"        except ldap.NO_SUCH_ATTRIBUTE:"},{"line_number":1039,"context_line":"            raise exception.NotFound(user_id)"},{"line_number":1040,"context_line":""},{"line_number":1041,"context_line":"    def get_user_groups(self, user_id):"},{"line_number":1042,"context_line":"        \"\"\"Return a list of groups a user has access to\"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAN3%2F%2F%2B7I%3D","line":1039,"updated":"2013-03-04 18:06:45.000000000","message":"raise exception.UserNotFound(user_id\u003duser_id)","commit_id":"b28bd117f2aa6139652450a24a13176d32257ad6"},{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"f436ab487c139991cda1ff440ee45e20967c3b74","unresolved":false,"context_lines":[{"line_number":965,"context_line":"            pass"},{"line_number":966,"context_line":"        super(RoleApi, self).delete(id)"},{"line_number":967,"context_line":""},{"line_number":968,"context_line":"    def roles_delete_subtree_by_group(self, group_id):"},{"line_number":969,"context_line":"        conn \u003d self.get_connection()"},{"line_number":970,"context_line":"        query \u003d \u0027(objectClass\u003d%s)\u0027 % self.object_class"},{"line_number":971,"context_line":"        group_dn \u003d self.group_api._id_to_dn(group_id)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAN3%2F%2F8Fg%3D","line":968,"updated":"2013-03-05 20:33:58.000000000","message":"Looks good!","commit_id":"cc9567bad48526e567d9dc9e5681465575c13a61"},{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"f436ab487c139991cda1ff440ee45e20967c3b74","unresolved":false,"context_lines":[{"line_number":1087,"context_line":"            raise exception.UserNotFound(user_id\u003duser_id)"},{"line_number":1088,"context_line":""},{"line_number":1089,"context_line":"    def get_user_groups(self, user_id):"},{"line_number":1090,"context_line":"        \"\"\"Return a list of groups a user has access to\"\"\""},{"line_number":1091,"context_line":"        user_dn \u003d self.user_api._id_to_dn(user_id)"},{"line_number":1092,"context_line":"        query \u003d \u0027(%s\u003d%s)\u0027 % (self.member_attribute, user_dn)"},{"line_number":1093,"context_line":"        memberships \u003d self.get_all(query)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAN3%2F%2F8Dc%3D","line":1090,"updated":"2013-03-05 20:33:58.000000000","message":"Typo: Return should be Returns","commit_id":"cc9567bad48526e567d9dc9e5681465575c13a61"},{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"f436ab487c139991cda1ff440ee45e20967c3b74","unresolved":false,"context_lines":[{"line_number":1094,"context_line":"        return memberships"},{"line_number":1095,"context_line":""},{"line_number":1096,"context_line":"    def get_users_in_group(self, group_id):"},{"line_number":1097,"context_line":"        \"\"\"Return a list of users belongs to a group\"\"\""},{"line_number":1098,"context_line":"        group_dn \u003d self._id_to_dn(group_id)"},{"line_number":1099,"context_line":"        query \u003d \u0027(objectClass\u003d%s)\u0027 % self.object_class"},{"line_number":1100,"context_line":"        conn \u003d self.get_connection()"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAN3%2F%2F8D4%3D","line":1097,"updated":"2013-03-05 20:33:58.000000000","message":"typo: should be Returns a list of users that belong to a group","commit_id":"cc9567bad48526e567d9dc9e5681465575c13a61"},{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"f436ab487c139991cda1ff440ee45e20967c3b74","unresolved":false,"context_lines":[{"line_number":1106,"context_line":"        except ldap.NO_SUCH_OBJECT:"},{"line_number":1107,"context_line":"            return []"},{"line_number":1108,"context_line":"        users \u003d []"},{"line_number":1109,"context_line":"        for groupdn, member in attrs:"},{"line_number":1110,"context_line":"            user_dns \u003d member[self.member_attribute]"},{"line_number":1111,"context_line":"            for user_dn in user_dns:"},{"line_number":1112,"context_line":"                if self.use_dumb_member and user_dn \u003d\u003d self.dumb_member:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAN3%2F%2F8Bc%3D","line":1109,"updated":"2013-03-05 20:33:58.000000000","message":"Can groupdn be an _ here? It doesn\u0027t look like you use it.","commit_id":"cc9567bad48526e567d9dc9e5681465575c13a61"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6f83ebf0fce3205ca0843fa202af3ba3b8219fe8","unresolved":false,"context_lines":[{"line_number":1086,"context_line":"        except ldap.NO_SUCH_ATTRIBUTE:"},{"line_number":1087,"context_line":"            raise exception.UserNotFound(user_id\u003duser_id)"},{"line_number":1088,"context_line":""},{"line_number":1089,"context_line":"    def get_user_groups(self, user_id):"},{"line_number":1090,"context_line":"        \"\"\"Returns a list of groups a user has access to\"\"\""},{"line_number":1091,"context_line":"        user_dn \u003d self.user_api._id_to_dn(user_id)"},{"line_number":1092,"context_line":"        query \u003d \u0027(%s\u003d%s)\u0027 % (self.member_attribute, user_dn)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAN3%2F%2F7oo%3D","line":1089,"updated":"2013-03-06 00:16:46.000000000","message":"Is there a reason we don\u0027t call this list_user_groups?","commit_id":"88b33c30a7b318c7a78ad616bd0d9ce5ea2d528f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6f83ebf0fce3205ca0843fa202af3ba3b8219fe8","unresolved":false,"context_lines":[{"line_number":1093,"context_line":"        memberships \u003d self.get_all(query)"},{"line_number":1094,"context_line":"        return memberships"},{"line_number":1095,"context_line":""},{"line_number":1096,"context_line":"    def get_users_in_group(self, group_id):"},{"line_number":1097,"context_line":"        \"\"\"Returns a list of users belongs to a group\"\"\""},{"line_number":1098,"context_line":"        query \u003d \u0027(objectClass\u003d%s)\u0027 % self.object_class"},{"line_number":1099,"context_line":"        conn \u003d self.get_connection()"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAN3%2F%2F7ok%3D","line":1096,"updated":"2013-03-06 00:16:46.000000000","message":"Is there a reason we don\u0027t call this list_users_in_group?","commit_id":"88b33c30a7b318c7a78ad616bd0d9ce5ea2d528f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6f83ebf0fce3205ca0843fa202af3ba3b8219fe8","unresolved":false,"context_lines":[{"line_number":1094,"context_line":"        return memberships"},{"line_number":1095,"context_line":""},{"line_number":1096,"context_line":"    def get_users_in_group(self, group_id):"},{"line_number":1097,"context_line":"        \"\"\"Returns a list of users belongs to a group\"\"\""},{"line_number":1098,"context_line":"        query \u003d \u0027(objectClass\u003d%s)\u0027 % self.object_class"},{"line_number":1099,"context_line":"        conn \u003d self.get_connection()"},{"line_number":1100,"context_line":"        group_dn \u003d self._id_to_dn(group_id)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAN3%2F%2F7pA%3D","line":1097,"updated":"2013-03-06 00:16:46.000000000","message":"Returns a list of users that belong to a group?","commit_id":"88b33c30a7b318c7a78ad616bd0d9ce5ea2d528f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"51aafd97746be1aaf510e532424158c3e0862e31","unresolved":false,"context_lines":[{"line_number":259,"context_line":"        user_refs \u003d self.list_users_in_group(group_id)"},{"line_number":260,"context_line":"        found \u003d False"},{"line_number":261,"context_line":"        for x in user_refs:"},{"line_number":262,"context_line":"            if (x[\u0027id\u0027] \u003d\u003d user_id):"},{"line_number":263,"context_line":"                found \u003d True"},{"line_number":264,"context_line":"        return found"},{"line_number":265,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAN3%2F%2F3Ig%3D","line":262,"updated":"2013-03-08 16:23:39.000000000","message":"remove ()","commit_id":"7609a9070314b66e38b14a911b237f753002c9c4"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"51aafd97746be1aaf510e532424158c3e0862e31","unresolved":false,"context_lines":[{"line_number":260,"context_line":"        found \u003d False"},{"line_number":261,"context_line":"        for x in user_refs:"},{"line_number":262,"context_line":"            if (x[\u0027id\u0027] \u003d\u003d user_id):"},{"line_number":263,"context_line":"                found \u003d True"},{"line_number":264,"context_line":"        return found"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"    def create_domain(self, domain_id, domain):"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAN3%2F%2F3IY%3D","line":263,"updated":"2013-03-08 16:23:39.000000000","message":"could break or return here.","commit_id":"7609a9070314b66e38b14a911b237f753002c9c4"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"51aafd97746be1aaf510e532424158c3e0862e31","unresolved":false,"context_lines":[{"line_number":800,"context_line":"        query \u003d \u0027(objectClass\u003d%s)\u0027 % self.object_class"},{"line_number":801,"context_line":"        group_dn \u003d self.group_api._id_to_dn(group_id)"},{"line_number":802,"context_line":"        try:"},{"line_number":803,"context_line":"            roles \u003d conn.search_s(group_dn, ldap.SCOPE_ONELEVEL, query)"},{"line_number":804,"context_line":"            for role_dn, _ in roles:"},{"line_number":805,"context_line":"                try:"},{"line_number":806,"context_line":"                    conn.delete_s(role_dn)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAN3%2F%2F3Hk%3D","line":803,"updated":"2013-03-08 16:23:39.000000000","message":"since you only care about the dn, should indicate to server to not return any attribues (use 1.1).","commit_id":"7609a9070314b66e38b14a911b237f753002c9c4"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"51aafd97746be1aaf510e532424158c3e0862e31","unresolved":false,"context_lines":[{"line_number":805,"context_line":"                try:"},{"line_number":806,"context_line":"                    conn.delete_s(role_dn)"},{"line_number":807,"context_line":"                except Exception as inst:"},{"line_number":808,"context_line":"                    raise inst"},{"line_number":809,"context_line":"        except ldap.NO_SUCH_OBJECT:"},{"line_number":810,"context_line":"            pass"},{"line_number":811,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAN3%2F%2F3H8%3D","line":808,"updated":"2013-03-08 16:23:39.000000000","message":"why catch an exception just to re-raise it?","commit_id":"7609a9070314b66e38b14a911b237f753002c9c4"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"51aafd97746be1aaf510e532424158c3e0862e31","unresolved":false,"context_lines":[{"line_number":814,"context_line":"        query \u003d \u0027(objectClass\u003d%s)\u0027 % self.object_class"},{"line_number":815,"context_line":"        domain_dn \u003d self.domain_api._id_to_dn(domain_id)"},{"line_number":816,"context_line":"        try:"},{"line_number":817,"context_line":"            roles \u003d conn.search_s(domain_dn, ldap.SCOPE_ONELEVEL, query)"},{"line_number":818,"context_line":"            for role_dn, _ in roles:"},{"line_number":819,"context_line":"                try:"},{"line_number":820,"context_line":"                    conn.delete_s(role_dn)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAN3%2F%2F3Hg%3D","line":817,"updated":"2013-03-08 16:23:39.000000000","message":"since you only care about the dn, should indicate to server to not return any attribues (use 1.1).","commit_id":"7609a9070314b66e38b14a911b237f753002c9c4"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"51aafd97746be1aaf510e532424158c3e0862e31","unresolved":false,"context_lines":[{"line_number":819,"context_line":"                try:"},{"line_number":820,"context_line":"                    conn.delete_s(role_dn)"},{"line_number":821,"context_line":"                except Exception as inst:"},{"line_number":822,"context_line":"                    raise inst"},{"line_number":823,"context_line":"        except ldap.NO_SUCH_OBJECT:"},{"line_number":824,"context_line":"            pass"},{"line_number":825,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAN3%2F%2F3H4%3D","line":822,"updated":"2013-03-08 16:23:39.000000000","message":"why catch an exception just to re-raise it?","commit_id":"7609a9070314b66e38b14a911b237f753002c9c4"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"51aafd97746be1aaf510e532424158c3e0862e31","unresolved":false,"context_lines":[{"line_number":821,"context_line":"                except Exception as inst:"},{"line_number":822,"context_line":"                    raise inst"},{"line_number":823,"context_line":"        except ldap.NO_SUCH_OBJECT:"},{"line_number":824,"context_line":"            pass"},{"line_number":825,"context_line":""},{"line_number":826,"context_line":""},{"line_number":827,"context_line":"# TODO (henry-nash) This is a placeholder for the full LDPA implementation"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAN3%2F%2F3HY%3D","line":824,"updated":"2013-03-08 16:23:39.000000000","message":"since this code is copied from roles_delete_subtree_by_group, should share by moving into a function.","commit_id":"7609a9070314b66e38b14a911b237f753002c9c4"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"51aafd97746be1aaf510e532424158c3e0862e31","unresolved":false,"context_lines":[{"line_number":883,"context_line":"                  self.member_attribute,"},{"line_number":884,"context_line":"                  self.user_api._id_to_dn(user_id))])"},{"line_number":885,"context_line":"        except ldap.TYPE_OR_VALUE_EXISTS:"},{"line_number":886,"context_line":"            msg \u003d (\u0027User %s is already a member of group %s\u0027"},{"line_number":887,"context_line":"                   % (user_id, group_id))"},{"line_number":888,"context_line":"            raise exception.Conflict(msg)"},{"line_number":889,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAN3%2F%2F3HU%3D","line":886,"updated":"2013-03-08 16:23:39.000000000","message":"wrap in _() for translation. Also, need names for substitution variables for translation.","commit_id":"7609a9070314b66e38b14a911b237f753002c9c4"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"51aafd97746be1aaf510e532424158c3e0862e31","unresolved":false,"context_lines":[{"line_number":962,"context_line":"    def get_by_name(self, name, filter\u003dNone):"},{"line_number":963,"context_line":"        query \u003d (\u0027(%s\u003d%s)\u0027 % (self.attribute_mapping[\u0027name\u0027],"},{"line_number":964,"context_line":"                              ldap_filter.escape_filter_chars(name)))"},{"line_number":965,"context_line":"        domains \u003d self.get_all(query)"},{"line_number":966,"context_line":"        try:"},{"line_number":967,"context_line":"            return domains[0]"},{"line_number":968,"context_line":"        except IndexError:"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAN3%2F%2F3As%3D","line":965,"updated":"2013-03-08 16:23:39.000000000","message":"note to self: verify that the filter also includes the objectclass.","commit_id":"7609a9070314b66e38b14a911b237f753002c9c4"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"51aafd97746be1aaf510e532424158c3e0862e31","unresolved":false,"context_lines":[{"line_number":963,"context_line":"        query \u003d (\u0027(%s\u003d%s)\u0027 % (self.attribute_mapping[\u0027name\u0027],"},{"line_number":964,"context_line":"                              ldap_filter.escape_filter_chars(name)))"},{"line_number":965,"context_line":"        domains \u003d self.get_all(query)"},{"line_number":966,"context_line":"        try:"},{"line_number":967,"context_line":"            return domains[0]"},{"line_number":968,"context_line":"        except IndexError:"},{"line_number":969,"context_line":"            raise exception.DomainNotFound(domain_id\u003dname)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAN3%2F%2F3A4%3D","line":966,"updated":"2013-03-08 16:23:39.000000000","message":"should fail if there\u0027s more than 1 match.","commit_id":"7609a9070314b66e38b14a911b237f753002c9c4"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"cffa8265dc074a378cb958a5e01260e595c05d6a","unresolved":false,"context_lines":[{"line_number":236,"context_line":"        return self.group.update(group_id, group)"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    def delete_group(self, group_id):"},{"line_number":239,"context_line":"        return self.group.delete(group_id)"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    def add_user_to_group(self, user_id, group_id):"},{"line_number":242,"context_line":"        self.get_user(user_id)"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAOH%2F%2F8yg%3D","line":239,"updated":"2013-03-19 19:54:21.000000000","message":"delete_domain catches NO_SUCH_OBJECT, should delete_group do the same?","commit_id":"e259fc0db4e178cb39f7822987c74495b0aa9311"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"cffa8265dc074a378cb958a5e01260e595c05d6a","unresolved":false,"context_lines":[{"line_number":277,"context_line":"    def get_domain(self, domain_id):"},{"line_number":278,"context_line":"        try:"},{"line_number":279,"context_line":"            return self.domain.get(domain_id)"},{"line_number":280,"context_line":"        except exception.NotFound:"},{"line_number":281,"context_line":"            raise exception.DomainNotFound(domain_id\u003ddomain_id)"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"    def update_domain(self, domain_id, domain):"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAOH%2F%2F8zM%3D","line":280,"updated":"2013-03-19 19:54:21.000000000","message":"DomainApi already raises DomainNotFound, so don\u0027t need to catch and re-raise.","commit_id":"e259fc0db4e178cb39f7822987c74495b0aa9311"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"cffa8265dc074a378cb958a5e01260e595c05d6a","unresolved":false,"context_lines":[{"line_number":815,"context_line":"        if dn:"},{"line_number":816,"context_line":"            try:"},{"line_number":817,"context_line":"                roles \u003d conn.search_s(dn, ldap.SCOPE_ONELEVEL,"},{"line_number":818,"context_line":"                                      query, [\u0027%s\u0027 % \u00271.1\u0027])"},{"line_number":819,"context_line":"                for role_dn, _ in roles:"},{"line_number":820,"context_line":"                    try:"},{"line_number":821,"context_line":"                        conn.delete_s(role_dn)"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAOH%2F%2F8x4%3D","line":818,"updated":"2013-03-19 19:54:21.000000000","message":"isn\u0027t \"\u0027%s\u0027 % \u00271.1\u0027\" just a more complicated way to write \u00271.1\u0027? change to \u00271.1\u0027","commit_id":"e259fc0db4e178cb39f7822987c74495b0aa9311"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"cffa8265dc074a378cb958a5e01260e595c05d6a","unresolved":false,"context_lines":[{"line_number":820,"context_line":"                    try:"},{"line_number":821,"context_line":"                        conn.delete_s(role_dn)"},{"line_number":822,"context_line":"                    except:"},{"line_number":823,"context_line":"                        raise Exception"},{"line_number":824,"context_line":"            except ldap.NO_SUCH_OBJECT:"},{"line_number":825,"context_line":"                pass"},{"line_number":826,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAOH%2F%2F8xk%3D","line":823,"updated":"2013-03-19 19:54:21.000000000","message":"why eating the exception here?","commit_id":"e259fc0db4e178cb39f7822987c74495b0aa9311"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"cffa8265dc074a378cb958a5e01260e595c05d6a","unresolved":false,"context_lines":[{"line_number":822,"context_line":"                    except:"},{"line_number":823,"context_line":"                        raise Exception"},{"line_number":824,"context_line":"            except ldap.NO_SUCH_OBJECT:"},{"line_number":825,"context_line":"                pass"},{"line_number":826,"context_line":""},{"line_number":827,"context_line":""},{"line_number":828,"context_line":"class GroupApi(common_ldap.BaseLdap, ApiShimMixin):"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAOH%2F%2F8xU%3D","line":825,"updated":"2013-03-19 19:54:21.000000000","message":"what if dn is False? should be a comment.","commit_id":"e259fc0db4e178cb39f7822987c74495b0aa9311"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"cffa8265dc074a378cb958a5e01260e595c05d6a","unresolved":false,"context_lines":[{"line_number":883,"context_line":"                  self.user_api._id_to_dn(user_id))])"},{"line_number":884,"context_line":"        except ldap.TYPE_OR_VALUE_EXISTS:"},{"line_number":885,"context_line":"            msg \u003d _(\u0027User %s is already a member of group %s\u0027"},{"line_number":886,"context_line":"                    % (user_id, group_id))"},{"line_number":887,"context_line":"            raise exception.Conflict(msg)"},{"line_number":888,"context_line":""},{"line_number":889,"context_line":"    def remove_user(self, user_id, group_id):"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAOH%2F%2F8xA%3D","line":886,"updated":"2013-03-19 19:54:21.000000000","message":"2 problems here:\n\n1) translators might have to change the order of the substitution variables, so need to use named variables.\n\n2) The % (user_id, group_id) needs to be outside _().","commit_id":"e259fc0db4e178cb39f7822987c74495b0aa9311"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"cffa8265dc074a378cb958a5e01260e595c05d6a","unresolved":false,"context_lines":[{"line_number":900,"context_line":"    def list_user_groups(self, user_id):"},{"line_number":901,"context_line":"        \"\"\"Returns a list of groups a user has access to\"\"\""},{"line_number":902,"context_line":"        user_dn \u003d self.user_api._id_to_dn(user_id)"},{"line_number":903,"context_line":"        query \u003d \u0027(%s\u003d%s)\u0027 % (self.member_attribute, user_dn)"},{"line_number":904,"context_line":"        memberships \u003d self.get_all(query)"},{"line_number":905,"context_line":"        return memberships"},{"line_number":906,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAOH%2F%2F8wo%3D","line":903,"updated":"2013-03-19 19:54:21.000000000","message":"user_dn needs to be properly escaped for LDAP filters.","commit_id":"e259fc0db4e178cb39f7822987c74495b0aa9311"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"cffa8265dc074a378cb958a5e01260e595c05d6a","unresolved":false,"context_lines":[{"line_number":912,"context_line":"        try:"},{"line_number":913,"context_line":"            attrs \u003d conn.search_s(group_dn,"},{"line_number":914,"context_line":"                                  ldap.SCOPE_BASE,"},{"line_number":915,"context_line":"                                  query, [\u0027%s\u0027 % self.member_attribute])"},{"line_number":916,"context_line":"        except ldap.NO_SUCH_OBJECT:"},{"line_number":917,"context_line":"            return []"},{"line_number":918,"context_line":"        users \u003d []"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAOH%2F%2F8ww%3D","line":915,"updated":"2013-03-19 19:54:21.000000000","message":"\"\u0027%s\u0027 % self.member_attribute\" looks like a complicated way to write \"self.member_attribute\". suggest change to just \"self.member_attribute\"","commit_id":"e259fc0db4e178cb39f7822987c74495b0aa9311"}],"keystone/identity/core.py":[{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"f436ab487c139991cda1ff440ee45e20967c3b74","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        user_ref.pop(\u0027password\u0027, None)"},{"line_number":42,"context_line":"        user_ref.pop(\u0027tenants\u0027, None)"},{"line_number":43,"context_line":"        user_ref.pop(\u0027groups\u0027, None)"},{"line_number":44,"context_line":"        user_ref.pop(\u0027domains\u0027, None)"},{"line_number":45,"context_line":"        try:"},{"line_number":46,"context_line":"            user_ref[\u0027extra\u0027].pop(\u0027password\u0027, None)"},{"line_number":47,"context_line":"            user_ref[\u0027extra\u0027].pop(\u0027tenants\u0027, None)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAN3%2F%2F8IQ%3D","line":44,"updated":"2013-03-05 20:33:58.000000000","message":"good catch!","commit_id":"cc9567bad48526e567d9dc9e5681465575c13a61"}],"keystone/test.py":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"d19f37ca7c1fae8d6bb5de75f213bea64026f4d4","unresolved":false,"context_lines":[{"line_number":238,"context_line":"                rv \u003d self.identity_api.create_project(tenant[\u0027id\u0027], tenant)"},{"line_number":239,"context_line":"                setattr(self, \u0027tenant_%s\u0027 % tenant[\u0027id\u0027], rv)"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"            for group in fixtures.GROUPS:"},{"line_number":242,"context_line":"                rv \u003d self.identity_api.create_group(group[\u0027id\u0027], group)"},{"line_number":243,"context_line":"                setattr(self, \u0027group_%s\u0027 % group[\u0027id\u0027], rv)"},{"line_number":244,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2Bpwc%3D","line":241,"updated":"2013-02-22 18:52:44.000000000","message":"remove - let\u0027s not create any more of these.","commit_id":"6fd3929ae81823ca0433639668c6bda2ec364aba"}],"tests/default_fixtures.py":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"d19f37ca7c1fae8d6bb5de75f213bea64026f4d4","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        \u0027name\u0027: \u0027Other\u0027,"},{"line_number":112,"context_line":"    }"},{"line_number":113,"context_line":"]"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"GROUPS \u003d ["},{"line_number":116,"context_line":"    {"},{"line_number":117,"context_line":"        \u0027id\u0027: \u0027gbar\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2BpxA%3D","line":114,"updated":"2013-02-22 18:52:44.000000000","message":"We\u0027re trying not to add any more fixtures to this...since it slows done every test.  Just create the groups manually as part of your test, using random hex strings wherever possible.  Take a look at other tests in test_backend.py","commit_id":"6fd3929ae81823ca0433639668c6bda2ec364aba"}],"tests/test_backend.py":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"aff35647d94e181e4c397767b21257cc51a27ca7","unresolved":false,"context_lines":[{"line_number":1599,"context_line":"    def test_add_user_to_group(self):"},{"line_number":1600,"context_line":"        domain \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":1601,"context_line":"        #TODO (spzala) do it once Domain CRUD is implemented - bug 1101276"},{"line_number":1602,"context_line":"        #self.identity_api.create_domain(domain[\u0027id\u0027], domain)"},{"line_number":1603,"context_line":"        new_group \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027domain_id\u0027: uuid.uuid4().hex,"},{"line_number":1604,"context_line":"                     \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":1605,"context_line":"        self.identity_api.create_group(new_group[\u0027id\u0027], new_group)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2BmTk%3D","line":1602,"updated":"2013-02-26 08:00:10.000000000","message":"Although I know this is marked as WIP, but it is not good form to have this code commented out in code that is posted up - since you are removing this test from all other backends...so there is not way this would be allowed in...unless you plan on fixing bug 1101276 as well!  Better to comment this code out locally whenever you are testing","commit_id":"185be48b7d574676285a1a5df6bce71028362524"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"a48804aab848245be4fe40c48c5a70ff8b0a5510","unresolved":false,"context_lines":[{"line_number":1599,"context_line":"    def test_add_user_to_group(self):"},{"line_number":1600,"context_line":"        domain \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":1601,"context_line":"        #TODO (spzala) do it once Domain CRUD is implemented - bug 1101276"},{"line_number":1602,"context_line":"        #self.identity_api.create_domain(domain[\u0027id\u0027], domain)"},{"line_number":1603,"context_line":"        new_group \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027domain_id\u0027: uuid.uuid4().hex,"},{"line_number":1604,"context_line":"                     \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":1605,"context_line":"        self.identity_api.create_group(new_group[\u0027id\u0027], new_group)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAN3%2F%2F%2B5U%3D","line":1602,"updated":"2013-03-04 18:06:45.000000000","message":"This shouldn\u0027t be removed for all backends -- in fact, this *should* break tests against non-LDAP. I\u0027d suggest raising SkipTest citing the bug referenced above in test_backend_ldap (overriding these tests)","commit_id":"b28bd117f2aa6139652450a24a13176d32257ad6"}],"tests/test_backend_ldap.py":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"d19f37ca7c1fae8d6bb5de75f213bea64026f4d4","unresolved":false,"context_lines":[{"line_number":359,"context_line":"# TODO (henry-nash) These need to be removed when the full LDAP implementation"},{"line_number":360,"context_line":"# is submitted - see Bugs 1092187, 1101287, 1101276, 1101289"},{"line_number":361,"context_line":"    def test_group_crud(self):"},{"line_number":362,"context_line":"        group \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027domain_id\u0027: uuid.uuid4().hex,"},{"line_number":363,"context_line":"                 \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":364,"context_line":"        #group \u003d {\u0027id\u0027: \u0027testgroup1\u0027, \u0027domain_id\u0027: \u0027\u0027,"},{"line_number":365,"context_line":"                  #\u0027name\u0027: \u0027testGroup1\u0027}"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2Bpwg%3D","line":362,"updated":"2013-02-22 18:52:44.000000000","message":"you shouldn\u0027t to write this here....if you think group support is now sufficient, then just remove test_group_crud from this file and the version if the parent class (in test_backend) will get run against the ldap backend","commit_id":"6fd3929ae81823ca0433639668c6bda2ec364aba"},{"author":{"_account_id":708,"name":"Yuriy Taraday","email":"yuriy@taraday.nl","username":"yorik-sar"},"change_message_id":"29d5ea15940a306d7ce75f0b57461b39a092e92d","unresolved":false,"context_lines":[{"line_number":365,"context_line":"        #raise nose.exc.SkipTest(\u0027Blocked by bug 1092187\u0027)"},{"line_number":366,"context_line":""},{"line_number":367,"context_line":"    #def test_add_user_to_group_404(self):"},{"line_number":368,"context_line":"        #raise nose.exc.SkipTest(\u0027Blocked by bug 1092187\u0027)"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"    def test_check_user_in_group(self):"},{"line_number":371,"context_line":"        raise nose.exc.SkipTest(\u0027Blocked by bug 1092187\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2BlJY%3D","line":368,"updated":"2013-02-26 20:26:59.000000000","message":"Don\u0027t comment out - just delete.","commit_id":"185be48b7d574676285a1a5df6bce71028362524"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"a48804aab848245be4fe40c48c5a70ff8b0a5510","unresolved":false,"context_lines":[{"line_number":360,"context_line":"# is submitted - see Bugs 1092187, 1101287, 1101276, 1101289"},{"line_number":361,"context_line":"    #(spzala) group update is skipped for now. Remove this test when update"},{"line_number":362,"context_line":"    # is implemented - see bug 1136403"},{"line_number":363,"context_line":"    def test_group_crud(self):"},{"line_number":364,"context_line":"        group \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027domain_id\u0027: uuid.uuid4().hex,"},{"line_number":365,"context_line":"                 \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":366,"context_line":"        self.identity_api.create_group(group[\u0027id\u0027], group)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAN3%2F%2F%2B5I%3D","line":363,"updated":"2013-03-04 18:06:45.000000000","message":"why is this written here and not in test_backend?","commit_id":"b28bd117f2aa6139652450a24a13176d32257ad6"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"fb2b66a2c9a244d4aececff0af13f403ea2d683b","unresolved":false,"context_lines":[{"line_number":382,"context_line":"        self.identity_api.delete_domain(domain[\u0027id\u0027])"},{"line_number":383,"context_line":"        self.assertRaises(exception.DomainNotFound,"},{"line_number":384,"context_line":"                          self.identity_api.get_domain,"},{"line_number":385,"context_line":"                          domain[\u0027id\u0027])"},{"line_number":386,"context_line":""},{"line_number":387,"context_line":"    def test_get_role_grant_by_user_and_project(self):"},{"line_number":388,"context_line":"        raise nose.exc.SkipTest(\u0027Blocked by bug 1101287\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAN3%2F%2F8Rg%3D","line":385,"updated":"2013-03-05 18:46:19.000000000","message":"Still not sure why these tests are here - are they not already in test_backend.py ?","commit_id":"cc9567bad48526e567d9dc9e5681465575c13a61"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6f83ebf0fce3205ca0843fa202af3ba3b8219fe8","unresolved":false,"context_lines":[{"line_number":359,"context_line":"# TODO (henry-nash) These need to be removed when the full LDAP implementation"},{"line_number":360,"context_line":"# is submitted - see Bugs 1092187, 1101287, 1101276, 1101289"},{"line_number":361,"context_line":"    #(spzala) group update is skipped for now. Remove this test when update"},{"line_number":362,"context_line":"    # is implemented - see bug 1136403"},{"line_number":363,"context_line":"    def test_group_crud(self):"},{"line_number":364,"context_line":"        group \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027domain_id\u0027: uuid.uuid4().hex,"},{"line_number":365,"context_line":"                 \u0027name\u0027: uuid.uuid4().hex}"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAN3%2F%2F7nQ%3D","line":362,"updated":"2013-03-06 00:16:46.000000000","message":"Ok, so probably worth making this comment a bit clearer..i.e. something like:\n\n\"The domain and group crud tests here override the standard ones in test_backend.py so that we can exclude the update name test, since we do not yet support the update of either group of domain names with LDAP.  Remove these LDAP specific tests....\".\n\nIt might be good to add an update test the changed some other attribute of a group/domain (e.g. description?) here - so at least we do a check on update...in fact you could add that to test_backend as well.","commit_id":"88b33c30a7b318c7a78ad616bd0d9ce5ea2d528f"}]}
