)]}'
{"keystone/assignment/backends/ldap.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"685f71898ae971b257d0b6ab9871d1e708a42524","unresolved":false,"context_lines":[{"line_number":194,"context_line":"                                  inherited\u003dFalse):"},{"line_number":195,"context_line":"        # TODO(henry-nash): The ldap driver does not support inherited"},{"line_number":196,"context_line":"        # assignments, so the inherited parameter is unused."},{"line_number":197,"context_line":"        # See defect #1404273."},{"line_number":198,"context_line":"        user_dn \u003d self.user._id_to_dn(user_id)"},{"line_number":199,"context_line":"        associations \u003d (self.role.list_project_roles_for_user"},{"line_number":200,"context_line":"                        (user_dn, self.project.tree_dn))"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_a819ef23","line":197,"updated":"2015-01-02 17:38:16.000000000","message":"s/defect/bug/\n\nbug seems to be used consistently throughout the rest of the patch","commit_id":"b2a03c77d1e5e83f8c201e97cd47fef87833b080"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"369a10788109d2b2e3620d7e12ae60ea50a8f5c1","unresolved":false,"context_lines":[{"line_number":194,"context_line":"                                  inherited\u003dFalse):"},{"line_number":195,"context_line":"        # TODO(henry-nash): The ldap driver does not support inherited"},{"line_number":196,"context_line":"        # assignments, so the inherited parameter is unused."},{"line_number":197,"context_line":"        # See defect #1404273."},{"line_number":198,"context_line":"        user_dn \u003d self.user._id_to_dn(user_id)"},{"line_number":199,"context_line":"        associations \u003d (self.role.list_project_roles_for_user"},{"line_number":200,"context_line":"                        (user_dn, self.project.tree_dn))"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_5c5be9f5","line":197,"in_reply_to":"3a961159_a819ef23","updated":"2015-01-03 03:12:34.000000000","message":"Done","commit_id":"b2a03c77d1e5e83f8c201e97cd47fef87833b080"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"070b2bb8d3a2d40046664df5598a29dd9cf343da","unresolved":false,"context_lines":[{"line_number":206,"context_line":"                associations.append(group_role)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"        return list(set("},{"line_number":209,"context_line":"            [self.project._dn_to_id(x.project_dn) for x in associations]))"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    def list_role_ids_for_groups_on_domain(self, group_ids, domain_id):"},{"line_number":212,"context_line":"        raise exception.NotImplemented()"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_a802cfb1","line":209,"updated":"2015-01-02 17:36:36.000000000","message":"is this a list in a set in a list? Do we usually do this?","commit_id":"b2a03c77d1e5e83f8c201e97cd47fef87833b080"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"369a10788109d2b2e3620d7e12ae60ea50a8f5c1","unresolved":false,"context_lines":[{"line_number":206,"context_line":"                associations.append(group_role)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"        return list(set("},{"line_number":209,"context_line":"            [self.project._dn_to_id(x.project_dn) for x in associations]))"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    def list_role_ids_for_groups_on_domain(self, group_ids, domain_id):"},{"line_number":212,"context_line":"        raise exception.NotImplemented()"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_9c6c719f","line":209,"in_reply_to":"3a961159_a802cfb1","updated":"2015-01-03 03:12:34.000000000","message":"we do it to remove duplicates....the old code did this by using a set buried down in the project ldap class...","commit_id":"b2a03c77d1e5e83f8c201e97cd47fef87833b080"}],"keystone/assignment/backends/sql.py":[{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"f3482048c1a50aec81650d82892f0ca4598d77c9","unresolved":false,"context_lines":[{"line_number":213,"context_line":"            with sql.transaction() as session:"},{"line_number":214,"context_line":"                query \u003d session.query(Project.id)"},{"line_number":215,"context_line":"                query \u003d ("},{"line_number":216,"context_line":"                    query.filter(Project.domain_id.in_(domain_ids)).distinct())"},{"line_number":217,"context_line":"                return [x.id for x in query.all()]"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    def list_projects_in_domain(self, domain_id):"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_3e394ef2","line":216,"updated":"2015-01-07 20:09:56.000000000","message":"I\u0027m not sure we need distinct() here, since each project only belongs to a single domain.","commit_id":"2dd8118f64c49ebcac61886909550a8d2bf296b1"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"65e95d5c4507633c73856d60a7616921d67097d3","unresolved":false,"context_lines":[{"line_number":213,"context_line":"            with sql.transaction() as session:"},{"line_number":214,"context_line":"                query \u003d session.query(Project.id)"},{"line_number":215,"context_line":"                query \u003d ("},{"line_number":216,"context_line":"                    query.filter(Project.domain_id.in_(domain_ids)).distinct())"},{"line_number":217,"context_line":"                return [x.id for x in query.all()]"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    def list_projects_in_domain(self, domain_id):"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_5442790f","line":216,"in_reply_to":"3a961159_3e394ef2","updated":"2015-01-07 20:33:12.000000000","message":"Yep, you\u0027re correct.  I\u0027ll remove.","commit_id":"2dd8118f64c49ebcac61886909550a8d2bf296b1"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"f3482048c1a50aec81650d82892f0ca4598d77c9","unresolved":false,"context_lines":[{"line_number":264,"context_line":"                    RoleAssignment.type \u003d\u003d AssignmentType.USER_DOMAIN)"},{"line_number":265,"context_line":"                filters.append(sql_constraints)"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"            if group_ids:"},{"line_number":268,"context_line":"                sql_constraints \u003d sqlalchemy.and_("},{"line_number":269,"context_line":"                    RoleAssignment.actor_id.in_(group_ids),"},{"line_number":270,"context_line":"                    RoleAssignment.inherited \u003d\u003d inherited,"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_d1b11b45","line":267,"updated":"2015-01-07 20:09:56.000000000","message":"Why not reuse the method list_domain_ids_for_groups(..) here?","commit_id":"2dd8118f64c49ebcac61886909550a8d2bf296b1"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"65e95d5c4507633c73856d60a7616921d67097d3","unresolved":false,"context_lines":[{"line_number":264,"context_line":"                    RoleAssignment.type \u003d\u003d AssignmentType.USER_DOMAIN)"},{"line_number":265,"context_line":"                filters.append(sql_constraints)"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"            if group_ids:"},{"line_number":268,"context_line":"                sql_constraints \u003d sqlalchemy.and_("},{"line_number":269,"context_line":"                    RoleAssignment.actor_id.in_(group_ids),"},{"line_number":270,"context_line":"                    RoleAssignment.inherited \u003d\u003d inherited,"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_14bb91c4","line":267,"in_reply_to":"3a961159_d1b11b45","updated":"2015-01-07 20:33:12.000000000","message":"we could, I agree, just trying to minimise changes - sounds like a good idea for a follow on clean up.","commit_id":"2dd8118f64c49ebcac61886909550a8d2bf296b1"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"f3482048c1a50aec81650d82892f0ca4598d77c9","unresolved":false,"context_lines":[{"line_number":377,"context_line":"                    sqlalchemy.and_("},{"line_number":378,"context_line":"                        RoleAssignment.type \u003d\u003d AssignmentType.GROUP_PROJECT,"},{"line_number":379,"context_line":"                        RoleAssignment.inherited,"},{"line_number":380,"context_line":"                        RoleAssignment.target_id.in_(project_parents)))"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"        sql_constraints \u003d sqlalchemy.and_("},{"line_number":383,"context_line":"            sql_constraints, RoleAssignment.actor_id.in_(group_ids))"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_51844bd2","line":380,"updated":"2015-01-07 20:09:56.000000000","message":"I don\u0027t agree that drivers need to support OS-INHERIT this way.\nThey shouldn\u0027t know about project parents, etc. They should *only* know what are the *entities* they need to CRUD and their *attributes*.\n\nIn this case, the driver needs to know that if parent_projects are provided, we have to query for inherited role assignments in this context. For me, this is part of business logic, and bussiness logic have to be on the Manager.\n\nI know this is unrelated to this patch, but I need to check if you agree with me on this point. If so, we need to report a bug.","commit_id":"2dd8118f64c49ebcac61886909550a8d2bf296b1"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"65e95d5c4507633c73856d60a7616921d67097d3","unresolved":false,"context_lines":[{"line_number":377,"context_line":"                    sqlalchemy.and_("},{"line_number":378,"context_line":"                        RoleAssignment.type \u003d\u003d AssignmentType.GROUP_PROJECT,"},{"line_number":379,"context_line":"                        RoleAssignment.inherited,"},{"line_number":380,"context_line":"                        RoleAssignment.target_id.in_(project_parents)))"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"        sql_constraints \u003d sqlalchemy.and_("},{"line_number":383,"context_line":"            sql_constraints, RoleAssignment.actor_id.in_(group_ids))"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_14bf11d1","line":380,"in_reply_to":"3a961159_51844bd2","updated":"2015-01-07 20:33:12.000000000","message":"So I do agree....I think there are LOTS of scope for rationalisation of many of the methods here - that\u0027s one of the reasons to do this split so that we can simplify the true assignment methods.  Passing in a list of project_ids into this methods rather than having a separate list of parent projects would be a good thing.\n\nAs you say, not part of this patch, but a good thing to do.","commit_id":"2dd8118f64c49ebcac61886909550a8d2bf296b1"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"a25cf4657967bf973a0763cbf63d15f2db194957","unresolved":false,"context_lines":[{"line_number":360,"context_line":"            RoleAssignment.type \u003d\u003d AssignmentType.GROUP_PROJECT,"},{"line_number":361,"context_line":"            RoleAssignment.inherited \u003d\u003d false(),"},{"line_number":362,"context_line":"            RoleAssignment.target_id \u003d\u003d project_id)"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"        if CONF.os_inherit.enabled:"},{"line_number":365,"context_line":"            # Inherited roles from domains"},{"line_number":366,"context_line":"            sql_constraints \u003d sqlalchemy.or_("}],"source_content_type":"text/x-python","patch_set":13,"id":"1a930d6b_4ba7e64f","line":363,"updated":"2015-01-21 16:03:48.000000000","message":"unrelated whitespace change?","commit_id":"5b7d65b7a8b0b0e54cd2cdd3d9db7b6f77c8091c"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"56eb153c77f1786f80b82b16c0f903bbbdae4ab3","unresolved":false,"context_lines":[{"line_number":360,"context_line":"            RoleAssignment.type \u003d\u003d AssignmentType.GROUP_PROJECT,"},{"line_number":361,"context_line":"            RoleAssignment.inherited \u003d\u003d false(),"},{"line_number":362,"context_line":"            RoleAssignment.target_id \u003d\u003d project_id)"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"        if CONF.os_inherit.enabled:"},{"line_number":365,"context_line":"            # Inherited roles from domains"},{"line_number":366,"context_line":"            sql_constraints \u003d sqlalchemy.or_("}],"source_content_type":"text/x-python","patch_set":13,"id":"1a930d6b_32f84a7c","line":363,"in_reply_to":"1a930d6b_4ba7e64f","updated":"2015-01-21 16:14:04.000000000","message":"agreed","commit_id":"5b7d65b7a8b0b0e54cd2cdd3d9db7b6f77c8091c"}],"keystone/assignment/core.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"685f71898ae971b257d0b6ab9871d1e708a42524","unresolved":false,"context_lines":[{"line_number":581,"context_line":"        # TODO(henry-nash): Although the controller will ensure deletion of         "},{"line_number":582,"context_line":"        # all users \u0026 groups within the domain (which will cause all         "},{"line_number":583,"context_line":"        # assignments for those users/groups to also be deleted), there         "},{"line_number":584,"context_line":"        # could still be assignments on this domain for users/groups in         "},{"line_number":585,"context_line":"        # other domains - so we should delete these here by making a call"},{"line_number":586,"context_line":"        # to the backend to delete all assignments for this"},{"line_number":587,"context_line":"        # domain. (see Bug #1277847)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_681f070a","line":584,"updated":"2015-01-02 17:38:16.000000000","message":"whitespace","commit_id":"b2a03c77d1e5e83f8c201e97cd47fef87833b080"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"369a10788109d2b2e3620d7e12ae60ea50a8f5c1","unresolved":false,"context_lines":[{"line_number":581,"context_line":"        # TODO(henry-nash): Although the controller will ensure deletion of         "},{"line_number":582,"context_line":"        # all users \u0026 groups within the domain (which will cause all         "},{"line_number":583,"context_line":"        # assignments for those users/groups to also be deleted), there         "},{"line_number":584,"context_line":"        # could still be assignments on this domain for users/groups in         "},{"line_number":585,"context_line":"        # other domains - so we should delete these here by making a call"},{"line_number":586,"context_line":"        # to the backend to delete all assignments for this"},{"line_number":587,"context_line":"        # domain. (see Bug #1277847)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_dc66f9ba","line":584,"in_reply_to":"3a961159_681f070a","updated":"2015-01-03 03:12:34.000000000","message":"Done","commit_id":"b2a03c77d1e5e83f8c201e97cd47fef87833b080"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"f3482048c1a50aec81650d82892f0ca4598d77c9","unresolved":false,"context_lines":[{"line_number":260,"context_line":"        This includes roles directly assigned to the user on the"},{"line_number":261,"context_line":"        project, as well as those by virtue of group membership. If"},{"line_number":262,"context_line":"        the OS-INHERIT extension is enabled, then this will also"},{"line_number":263,"context_line":"        include roles inherited from the domain."},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"        :returns: a list of role ids."},{"line_number":266,"context_line":"        :raises: keystone.exception.UserNotFound,"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_f138d7a1","line":263,"updated":"2015-01-07 20:09:56.000000000","message":"Maybe we need to add something to this sentence to say it also includes roles inherited parent projects.\nHowever, it looks like it is unrelated to this patch.","commit_id":"2dd8118f64c49ebcac61886909550a8d2bf296b1"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"65e95d5c4507633c73856d60a7616921d67097d3","unresolved":false,"context_lines":[{"line_number":260,"context_line":"        This includes roles directly assigned to the user on the"},{"line_number":261,"context_line":"        project, as well as those by virtue of group membership. If"},{"line_number":262,"context_line":"        the OS-INHERIT extension is enabled, then this will also"},{"line_number":263,"context_line":"        include roles inherited from the domain."},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"        :returns: a list of role ids."},{"line_number":266,"context_line":"        :raises: keystone.exception.UserNotFound,"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_34816dc3","line":263,"in_reply_to":"3a961159_f138d7a1","updated":"2015-01-07 20:33:12.000000000","message":"agreed.","commit_id":"2dd8118f64c49ebcac61886909550a8d2bf296b1"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"f3482048c1a50aec81650d82892f0ca4598d77c9","unresolved":false,"context_lines":[{"line_number":1153,"context_line":"        a set of project ids given a list of domain ids."},{"line_number":1154,"context_line":""},{"line_number":1155,"context_line":"        \"\"\""},{"line_number":1156,"context_line":"        raise exception.NotImplemented()  # pragma: no cover     577"},{"line_number":1157,"context_line":""},{"line_number":1158,"context_line":"    @abc.abstractmethod"},{"line_number":1159,"context_line":"    def list_projects_in_domain(self, domain_id):"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_11a643c1","line":1156,"updated":"2015-01-07 20:09:56.000000000","message":"typo: please remove \u0027     577\u0027","commit_id":"2dd8118f64c49ebcac61886909550a8d2bf296b1"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"65e95d5c4507633c73856d60a7616921d67097d3","unresolved":false,"context_lines":[{"line_number":1153,"context_line":"        a set of project ids given a list of domain ids."},{"line_number":1154,"context_line":""},{"line_number":1155,"context_line":"        \"\"\""},{"line_number":1156,"context_line":"        raise exception.NotImplemented()  # pragma: no cover     577"},{"line_number":1157,"context_line":""},{"line_number":1158,"context_line":"    @abc.abstractmethod"},{"line_number":1159,"context_line":"    def list_projects_in_domain(self, domain_id):"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_b4747dfe","line":1156,"in_reply_to":"3a961159_11a643c1","updated":"2015-01-07 20:33:12.000000000","message":"oops!","commit_id":"2dd8118f64c49ebcac61886909550a8d2bf296b1"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"a25cf4657967bf973a0763cbf63d15f2db194957","unresolved":false,"context_lines":[{"line_number":248,"context_line":"        return ret"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"    def _list_parent_ids_of_project(self, project_id):"},{"line_number":251,"context_line":"        if CONF.os_inherit.enabled:"},{"line_number":252,"context_line":"            return [x[\u0027id\u0027] for x in ("},{"line_number":253,"context_line":"                self.driver.list_project_parents(project_id))]"},{"line_number":254,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a930d6b_cff3e171","line":251,"updated":"2015-01-21 16:03:48.000000000","message":"nit: We could pull this out into it\u0027s own variable. This could be done in a follow on patch.","commit_id":"5b7d65b7a8b0b0e54cd2cdd3d9db7b6f77c8091c"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"56eb153c77f1786f80b82b16c0f903bbbdae4ab3","unresolved":false,"context_lines":[{"line_number":248,"context_line":"        return ret"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"    def _list_parent_ids_of_project(self, project_id):"},{"line_number":251,"context_line":"        if CONF.os_inherit.enabled:"},{"line_number":252,"context_line":"            return [x[\u0027id\u0027] for x in ("},{"line_number":253,"context_line":"                self.driver.list_project_parents(project_id))]"},{"line_number":254,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a930d6b_f2d162ce","line":251,"in_reply_to":"1a930d6b_cff3e171","updated":"2015-01-21 16:14:04.000000000","message":"agreed, we could do that - I\u0027m happy to consider that for a follow on patch","commit_id":"5b7d65b7a8b0b0e54cd2cdd3d9db7b6f77c8091c"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"a25cf4657967bf973a0763cbf63d15f2db194957","unresolved":false,"context_lines":[{"line_number":438,"context_line":"        project_ids \u003d self.driver.list_project_ids_for_user("},{"line_number":439,"context_line":"            user_id, group_ids, hints or driver_hints.Hints())"},{"line_number":440,"context_line":""},{"line_number":441,"context_line":"        if not CONF.os_inherit.enabled:"},{"line_number":442,"context_line":"            return self.driver.list_projects_from_ids(project_ids)"},{"line_number":443,"context_line":""},{"line_number":444,"context_line":"        # Inherited roles are enabled, so check to see if this user has any"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a930d6b_cf9a0114","line":441,"updated":"2015-01-21 16:03:48.000000000","message":"Same comment as above.","commit_id":"5b7d65b7a8b0b0e54cd2cdd3d9db7b6f77c8091c"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"a25cf4657967bf973a0763cbf63d15f2db194957","unresolved":false,"context_lines":[{"line_number":682,"context_line":"        project_ids \u003d ("},{"line_number":683,"context_line":"            self.driver.list_project_ids_for_groups(group_ids,"},{"line_number":684,"context_line":"                                                    driver_hints.Hints()))"},{"line_number":685,"context_line":"        if not CONF.os_inherit.enabled:"},{"line_number":686,"context_line":"            return self.driver.list_projects_from_ids(project_ids)"},{"line_number":687,"context_line":""},{"line_number":688,"context_line":"        # Inherited roles are enabled, so check to see if these groups have any"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a930d6b_ef9fbd01","line":685,"updated":"2015-01-21 16:03:48.000000000","message":"Same comment as above.","commit_id":"5b7d65b7a8b0b0e54cd2cdd3d9db7b6f77c8091c"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"a25cf4657967bf973a0763cbf63d15f2db194957","unresolved":false,"context_lines":[{"line_number":737,"context_line":"                     inherited_to_projects\u003dFalse, context\u003dNone):"},{"line_number":738,"context_line":"        self.role_api.get_role(role_id)"},{"line_number":739,"context_line":"        if domain_id:"},{"line_number":740,"context_line":"            self.driver.get_domain(domain_id)"},{"line_number":741,"context_line":"        if project_id:"},{"line_number":742,"context_line":"            self.driver.get_project(project_id)"},{"line_number":743,"context_line":"        self.driver.create_grant(role_id, user_id, group_id, domain_id,"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a930d6b_8f7e39ad","line":740,"updated":"2015-01-21 16:03:48.000000000","message":"do we need to assign these to anything? \n\n    if domain_id:\n        domain_ref \u003d self.driver.get_domain(domain_id)\n\nor are we just ensuring these are actually valid before calling to the driver?","commit_id":"5b7d65b7a8b0b0e54cd2cdd3d9db7b6f77c8091c"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"56eb153c77f1786f80b82b16c0f903bbbdae4ab3","unresolved":false,"context_lines":[{"line_number":737,"context_line":"                     inherited_to_projects\u003dFalse, context\u003dNone):"},{"line_number":738,"context_line":"        self.role_api.get_role(role_id)"},{"line_number":739,"context_line":"        if domain_id:"},{"line_number":740,"context_line":"            self.driver.get_domain(domain_id)"},{"line_number":741,"context_line":"        if project_id:"},{"line_number":742,"context_line":"            self.driver.get_project(project_id)"},{"line_number":743,"context_line":"        self.driver.create_grant(role_id, user_id, group_id, domain_id,"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a930d6b_b260ba36","line":740,"in_reply_to":"1a930d6b_8f7e39ad","updated":"2015-01-21 16:14:04.000000000","message":"we\u0027re just checking they exist - this used to be done in the driver, but since this is in preparation for moving the project/domain methods into their own backend, we don\u0027t want the assignment driver calling the resource driver.","commit_id":"5b7d65b7a8b0b0e54cd2cdd3d9db7b6f77c8091c"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"a25cf4657967bf973a0763cbf63d15f2db194957","unresolved":false,"context_lines":[{"line_number":750,"context_line":"        if domain_id:"},{"line_number":751,"context_line":"            self.driver.get_domain(domain_id)"},{"line_number":752,"context_line":"        if project_id:"},{"line_number":753,"context_line":"            self.driver.get_project(project_id)"},{"line_number":754,"context_line":"        self.driver.check_grant_role_id("},{"line_number":755,"context_line":"            role_id, user_id, group_id, domain_id, project_id,"},{"line_number":756,"context_line":"            inherited_to_projects)"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a930d6b_af31350d","line":753,"updated":"2015-01-21 16:03:48.000000000","message":"same comments apply to domain and project here.","commit_id":"5b7d65b7a8b0b0e54cd2cdd3d9db7b6f77c8091c"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"56eb153c77f1786f80b82b16c0f903bbbdae4ab3","unresolved":false,"context_lines":[{"line_number":750,"context_line":"        if domain_id:"},{"line_number":751,"context_line":"            self.driver.get_domain(domain_id)"},{"line_number":752,"context_line":"        if project_id:"},{"line_number":753,"context_line":"            self.driver.get_project(project_id)"},{"line_number":754,"context_line":"        self.driver.check_grant_role_id("},{"line_number":755,"context_line":"            role_id, user_id, group_id, domain_id, project_id,"},{"line_number":756,"context_line":"            inherited_to_projects)"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a930d6b_1260ae31","line":753,"in_reply_to":"1a930d6b_af31350d","updated":"2015-01-21 16:14:04.000000000","message":"as above","commit_id":"5b7d65b7a8b0b0e54cd2cdd3d9db7b6f77c8091c"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"a25cf4657967bf973a0763cbf63d15f2db194957","unresolved":false,"context_lines":[{"line_number":762,"context_line":"        if domain_id:"},{"line_number":763,"context_line":"            self.driver.get_domain(domain_id)"},{"line_number":764,"context_line":"        if project_id:"},{"line_number":765,"context_line":"            self.driver.get_project(project_id)"},{"line_number":766,"context_line":"        grant_ids \u003d self.driver.list_grant_role_ids("},{"line_number":767,"context_line":"            user_id, group_id, domain_id, project_id, inherited_to_projects)"},{"line_number":768,"context_line":"        return self.role_api.list_roles_from_ids(grant_ids)"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a930d6b_2f2545c2","line":765,"updated":"2015-01-21 16:03:48.000000000","message":"same comment here.","commit_id":"5b7d65b7a8b0b0e54cd2cdd3d9db7b6f77c8091c"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"56eb153c77f1786f80b82b16c0f903bbbdae4ab3","unresolved":false,"context_lines":[{"line_number":762,"context_line":"        if domain_id:"},{"line_number":763,"context_line":"            self.driver.get_domain(domain_id)"},{"line_number":764,"context_line":"        if project_id:"},{"line_number":765,"context_line":"            self.driver.get_project(project_id)"},{"line_number":766,"context_line":"        grant_ids \u003d self.driver.list_grant_role_ids("},{"line_number":767,"context_line":"            user_id, group_id, domain_id, project_id, inherited_to_projects)"},{"line_number":768,"context_line":"        return self.role_api.list_roles_from_ids(grant_ids)"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a930d6b_924bbeaf","line":765,"in_reply_to":"1a930d6b_2f2545c2","updated":"2015-01-21 16:14:04.000000000","message":"as above","commit_id":"5b7d65b7a8b0b0e54cd2cdd3d9db7b6f77c8091c"}]}
