)]}'
{"keystone/assignment/backends/sql.py":[{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"c33ae9182d109ca3bc2e55c0510b6318e64fc09f","unresolved":false,"context_lines":[{"line_number":260,"context_line":"            q \u003d session.query(RoleAssignment)"},{"line_number":261,"context_line":"            q \u003d q.filter_by(target_id\u003dproject_id)"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"            if assignment_type \u003d\u003d AssignmentType.USER_PROJECT or \\"},{"line_number":264,"context_line":"                    assignment_type \u003d\u003d AssignmentType.GROUP_PROJECT:"},{"line_number":265,"context_line":"                q \u003d q.filter_by(type\u003dassignment_type)"},{"line_number":266,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5a5ae5dd_cf55d51d","line":263,"range":{"start_line":263,"start_character":65,"end_line":263,"end_character":66},"updated":"2016-02-03 14:40:32.000000000","message":"using \u0027\\\u0027 is frowned upon try wrapping this in parenthesis.","commit_id":"4d5ab8bd33f3b2f85d7a696f4d7b328757e307d8"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"4707fa932dfd03b9aa8cc5cd2787885d39beace8","unresolved":false,"context_lines":[{"line_number":258,"context_line":"                                   assignment_type\u003dNone):"},{"line_number":259,"context_line":"        with sql.transaction() as session:"},{"line_number":260,"context_line":"            q \u003d session.query(RoleAssignment)"},{"line_number":261,"context_line":"            q \u003d q.filter_by(target_id\u003dproject_id)"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"            if (assignment_type \u003d\u003d AssignmentType.USER_PROJECT or"},{"line_number":264,"context_line":"                    assignment_type \u003d\u003d AssignmentType.GROUP_PROJECT):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a5ae5dd_37c5d68d","line":261,"updated":"2016-02-03 18:02:02.000000000","message":"You just need to add a filter here to check the type is one of AssignmentType.USER_PROJECT or AssignmentType.GROUP_PROJECT. Something like a filter using:\n\n    RoleAssignment.type.in_((AssignmentType.USER_PROJECT, AssignmentType.GROUP_PROJECT))","commit_id":"e41e5ff047d80116d5e6b7a5cdb6e5602eb5d41c"},{"author":{"_account_id":20259,"name":"Clenimar Filemon","email":"clenimar@lsd.ufcg.edu.br","username":"clenimar"},"change_message_id":"9116df51f7b29d6e826868629d2840bf14068aa7","unresolved":false,"context_lines":[{"line_number":258,"context_line":"                                   assignment_type\u003dNone):"},{"line_number":259,"context_line":"        with sql.transaction() as session:"},{"line_number":260,"context_line":"            q \u003d session.query(RoleAssignment)"},{"line_number":261,"context_line":"            q \u003d q.filter_by(target_id\u003dproject_id)"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"            if (assignment_type \u003d\u003d AssignmentType.USER_PROJECT or"},{"line_number":264,"context_line":"                    assignment_type \u003d\u003d AssignmentType.GROUP_PROJECT):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a5ae5dd_c239b5a5","line":261,"in_reply_to":"5a5ae5dd_37c5d68d","updated":"2016-02-05 13:50:39.000000000","message":"That\u0027s true (and way more simple). Thanks, Samuel. A new patchset is on the way.","commit_id":"e41e5ff047d80116d5e6b7a5cdb6e5602eb5d41c"}],"keystone/assignment/core.py":[{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"c33ae9182d109ca3bc2e55c0510b6318e64fc09f","unresolved":false,"context_lines":[{"line_number":1121,"context_line":"        raise exception.NotImplemented()  # pragma: no cover"},{"line_number":1122,"context_line":""},{"line_number":1123,"context_line":"    @abc.abstractmethod"},{"line_number":1124,"context_line":"    def delete_project_assignments(self, project_id):"},{"line_number":1125,"context_line":"        \"\"\"Deletes all assignments for a project."},{"line_number":1126,"context_line":""},{"line_number":1127,"context_line":"        :raises keystone.exception.ProjectNotFound: If the project doesn\u0027t"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a5ae5dd_9252a612","line":1124,"range":{"start_line":1124,"start_character":8,"end_line":1124,"end_character":34},"updated":"2016-02-03 14:40:32.000000000","message":"shouldn\u0027t this be moved to AssignmentDriverV8?","commit_id":"4d5ab8bd33f3b2f85d7a696f4d7b328757e307d8"},{"author":{"_account_id":20259,"name":"Clenimar Filemon","email":"clenimar@lsd.ufcg.edu.br","username":"clenimar"},"change_message_id":"0331fcbc01e7d939fd07499e93b78ef0dd593b1c","unresolved":false,"context_lines":[{"line_number":1121,"context_line":"        raise exception.NotImplemented()  # pragma: no cover"},{"line_number":1122,"context_line":""},{"line_number":1123,"context_line":"    @abc.abstractmethod"},{"line_number":1124,"context_line":"    def delete_project_assignments(self, project_id):"},{"line_number":1125,"context_line":"        \"\"\"Deletes all assignments for a project."},{"line_number":1126,"context_line":""},{"line_number":1127,"context_line":"        :raises keystone.exception.ProjectNotFound: If the project doesn\u0027t"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a5ae5dd_8876ee3c","line":1124,"range":{"start_line":1124,"start_character":8,"end_line":1124,"end_character":34},"in_reply_to":"5a5ae5dd_9252a612","updated":"2016-02-03 17:34:32.000000000","message":"Yes, you\u0027re right. Thank you! :)","commit_id":"4d5ab8bd33f3b2f85d7a696f4d7b328757e307d8"}],"keystone/tests/unit/test_backend.py":[{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"c33ae9182d109ca3bc2e55c0510b6318e64fc09f","unresolved":false,"context_lines":[{"line_number":4348,"context_line":"            include_names\u003dFalse)"},{"line_number":4349,"context_line":"        assert_does_not_contain_names(role_assign_without_names)"},{"line_number":4350,"context_line":""},{"line_number":4351,"context_line":"    def test_delete_project_assignments_filter_by_type(self):"},{"line_number":4352,"context_line":"        \"\"\"Test deleting project assignments passing assignment_type as"},{"line_number":4353,"context_line":"        an argument."},{"line_number":4354,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5a5ae5dd_d2c57e5b","line":4351,"range":{"start_line":4351,"start_character":8,"end_line":4351,"end_character":54},"updated":"2016-02-03 14:40:32.000000000","message":"should this test be in test_v3_assignment()?  Great test btw, this looks awesome!","commit_id":"4d5ab8bd33f3b2f85d7a696f4d7b328757e307d8"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"c33ae9182d109ca3bc2e55c0510b6318e64fc09f","unresolved":false,"context_lines":[{"line_number":4359,"context_line":"        * Delete project assignments passing assignment_type\u003dUSER_PROJECT;"},{"line_number":4360,"context_line":"        * Delete project assignments passing assignment_type\u003dGROUP_PROJECT;"},{"line_number":4361,"context_line":"        \"\"\""},{"line_number":4362,"context_line":"        # create project:"},{"line_number":4363,"context_line":"        project \u003d unit.new_project_ref(domain_id\u003dDEFAULT_DOMAIN_ID)"},{"line_number":4364,"context_line":"        project \u003d self.resource_api.create_project(project[\u0027id\u0027], project)"},{"line_number":4365,"context_line":"        # create group:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a5ae5dd_d2557e1d","line":4362,"range":{"start_line":4362,"start_character":10,"end_line":4362,"end_character":11},"updated":"2016-02-03 14:40:32.000000000","message":"nit: Capitalize the first letter of the comment","commit_id":"4d5ab8bd33f3b2f85d7a696f4d7b328757e307d8"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"a3b92abb93291b583d6f9b125d1e99458ba9b11d","unresolved":false,"context_lines":[{"line_number":4351,"context_line":"    def test_delete_project_assignments_same_id_as_domain(self):"},{"line_number":4352,"context_line":"        \"\"\"Test deleting project assignments in a scenario that"},{"line_number":4353,"context_line":"        project and domain have the same id. Only project assignments must"},{"line_number":4354,"context_line":"        be deleted (i.e USER_PROJECT or GROUP_PROJECT). See bug #1440107."},{"line_number":4355,"context_line":""},{"line_number":4356,"context_line":"        Test plan:"},{"line_number":4357,"context_line":"        * Create a project and a domain with the same id;"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a5ae5dd_546c3a36","line":4354,"range":{"start_line":4354,"start_character":56,"end_line":4354,"end_character":73},"updated":"2016-02-09 00:17:20.000000000","message":"we try to avoid mentioning the bug in the comment, we can already track the history using git and the commit message. otherwise the tests will be littered with these references","commit_id":"14b055514d21c4a096fdcd2f94a14a0f7c5b68a9"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ddd4f1568aed2ea2033e20b6dd541a24b5947c88","unresolved":false,"context_lines":[{"line_number":4380,"context_line":"        group \u003d self.identity_api.driver.create_group(group[\u0027id\u0027], group)"},{"line_number":4381,"context_line":"        # Create four roles"},{"line_number":4382,"context_line":"        roles \u003d []"},{"line_number":4383,"context_line":"        for _ in xrange(4):"},{"line_number":4384,"context_line":"            role \u003d unit.new_role_ref()"},{"line_number":4385,"context_line":"            roles.append(self.role_api.create_role(role[\u0027id\u0027], role))"},{"line_number":4386,"context_line":"        # Assign roles on domain"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a5ae5dd_311f4bb9","line":4383,"range":{"start_line":4383,"start_character":8,"end_line":4383,"end_character":27},"updated":"2016-02-09 01:34:26.000000000","message":"xrange doesn\u0027t work in py3","commit_id":"14b055514d21c4a096fdcd2f94a14a0f7c5b68a9"},{"author":{"_account_id":20259,"name":"Clenimar Filemon","email":"clenimar@lsd.ufcg.edu.br","username":"clenimar"},"change_message_id":"73ddb83d74b4c1b5011c4c9dae1000cd0ab3fbe7","unresolved":false,"context_lines":[{"line_number":4380,"context_line":"        group \u003d self.identity_api.driver.create_group(group[\u0027id\u0027], group)"},{"line_number":4381,"context_line":"        # Create four roles"},{"line_number":4382,"context_line":"        roles \u003d []"},{"line_number":4383,"context_line":"        for _ in xrange(4):"},{"line_number":4384,"context_line":"            role \u003d unit.new_role_ref()"},{"line_number":4385,"context_line":"            roles.append(self.role_api.create_role(role[\u0027id\u0027], role))"},{"line_number":4386,"context_line":"        # Assign roles on domain"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a5ae5dd_11356ff6","line":4383,"range":{"start_line":4383,"start_character":8,"end_line":4383,"end_character":27},"in_reply_to":"5a5ae5dd_311f4bb9","updated":"2016-02-09 01:42:58.000000000","message":"whops. thanks, Steve.","commit_id":"14b055514d21c4a096fdcd2f94a14a0f7c5b68a9"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"4ca13b9d29e8f5a23105e27643e01c7904d8390f","unresolved":false,"context_lines":[{"line_number":4365,"context_line":"        common_id \u003d uuid.uuid4().hex"},{"line_number":4366,"context_line":"        # Create a domain"},{"line_number":4367,"context_line":"        domain \u003d unit.new_domain_ref(id\u003dcommon_id)"},{"line_number":4368,"context_line":"        domain \u003d self.resource_api.driver.create_domain(common_id, domain)"},{"line_number":4369,"context_line":"        self.assertEqual(common_id, domain[\u0027id\u0027])"},{"line_number":4370,"context_line":"        # Create a project"},{"line_number":4371,"context_line":"        project \u003d unit.new_project_ref(id\u003dcommon_id,"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a5ae5dd_88a28199","line":4368,"range":{"start_line":4368,"start_character":35,"end_line":4368,"end_character":41},"updated":"2016-02-09 08:07:55.000000000","message":"Sorry - I gave you wrong info - the resource manger does not set the ID for projects/domains (unlike user/groups when the manager does). Hence you don\u0027t need to call the driver directly. This should be true for all calls in this test.","commit_id":"dfb21ee039abe3717bf0a460bdbe4e9efcdde1b0"},{"author":{"_account_id":20259,"name":"Clenimar Filemon","email":"clenimar@lsd.ufcg.edu.br","username":"clenimar"},"change_message_id":"10fb51292c96c9184bc1df2e8c478252c2d646ad","unresolved":false,"context_lines":[{"line_number":4365,"context_line":"        common_id \u003d uuid.uuid4().hex"},{"line_number":4366,"context_line":"        # Create a domain"},{"line_number":4367,"context_line":"        domain \u003d unit.new_domain_ref(id\u003dcommon_id)"},{"line_number":4368,"context_line":"        domain \u003d self.resource_api.driver.create_domain(common_id, domain)"},{"line_number":4369,"context_line":"        self.assertEqual(common_id, domain[\u0027id\u0027])"},{"line_number":4370,"context_line":"        # Create a project"},{"line_number":4371,"context_line":"        project \u003d unit.new_project_ref(id\u003dcommon_id,"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a57f1b5_04e77641","line":4368,"range":{"start_line":4368,"start_character":35,"end_line":4368,"end_character":41},"in_reply_to":"5a5ae5dd_88a28199","updated":"2016-02-09 17:26:55.000000000","message":"I think this bypass is needed in order to avoid some constraints the managers try to hold along the way. When I call them instead of the drivers, they throw exceptions such as Forbidden and DomainNotFound.","commit_id":"dfb21ee039abe3717bf0a460bdbe4e9efcdde1b0"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"3cbb60fcbab1602a1d0d0e164285320d62953998","unresolved":false,"context_lines":[{"line_number":4350,"context_line":""},{"line_number":4351,"context_line":"    def test_delete_project_assignments_same_id_as_domain(self):"},{"line_number":4352,"context_line":"        \"\"\"Test deleting project assignments in a scenario that"},{"line_number":4353,"context_line":"        project and domain have the same id. Only project assignments must"},{"line_number":4354,"context_line":"        be deleted (i.e USER_PROJECT or GROUP_PROJECT)."},{"line_number":4355,"context_line":""},{"line_number":4356,"context_line":"        Test plan:"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a57f1b5_703a0bce","line":4353,"range":{"start_line":4353,"start_character":41,"end_line":4353,"end_character":43},"updated":"2016-02-12 02:39:21.000000000","message":"(nit) ID","commit_id":"75610f81f31c24ef0e83e54de6226e98619378ca"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"3cbb60fcbab1602a1d0d0e164285320d62953998","unresolved":false,"context_lines":[{"line_number":4354,"context_line":"        be deleted (i.e USER_PROJECT or GROUP_PROJECT)."},{"line_number":4355,"context_line":""},{"line_number":4356,"context_line":"        Test plan:"},{"line_number":4357,"context_line":"        * Create a project and a domain with the same id;"},{"line_number":4358,"context_line":"        * Create an user, a group and four roles;"},{"line_number":4359,"context_line":"        * Grant one role to user and one to group on project;"},{"line_number":4360,"context_line":"        * Grant one role to user and one to group on domain;"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a57f1b5_303013e8","line":4357,"range":{"start_line":4357,"start_character":54,"end_line":4357,"end_character":56},"updated":"2016-02-12 02:39:21.000000000","message":"ID","commit_id":"75610f81f31c24ef0e83e54de6226e98619378ca"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"3cbb60fcbab1602a1d0d0e164285320d62953998","unresolved":false,"context_lines":[{"line_number":4415,"context_line":"        self.assertThat(project_roles, matchers.HasLength(0))"},{"line_number":4416,"context_line":"        domain_roles \u003d self.assignment_api.list_role_assignments("},{"line_number":4417,"context_line":"            domain_id\u003ddomain[\u0027id\u0027])"},{"line_number":4418,"context_line":"        self.assertThat(domain_roles, matchers.HasLength(2))"},{"line_number":4419,"context_line":""},{"line_number":4420,"context_line":""},{"line_number":4421,"context_line":"class TokenTests(object):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a57f1b5_d09dffbc","line":4418,"updated":"2016-02-12 02:39:21.000000000","message":"Please check the roles that remained","commit_id":"75610f81f31c24ef0e83e54de6226e98619378ca"}],"releasenotes/notes/allow_deleting_by_project_assignment_type-baf72cf6df2d9c87.yaml":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"0044f266aa65f70eb84479367797b8b2a03b2a6a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"    [`bug 1440107 \u003chttps://bugs.launchpad.net/keystone/+bug/1440107\u003e`_]"},{"line_number":4,"context_line":"    Assignment type (USER_PROJECT or GROUP_PROJECT) has been added as a"},{"line_number":5,"context_line":"    parameter when deleting project assignments through"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"5a5ae5dd_60413d0b","line":2,"range":{"start_line":2,"start_character":0,"end_line":2,"end_character":9},"updated":"2016-02-03 21:08:46.000000000","message":"use the \"fixes\" topic, also this will fail the gate due to improper syntax. use:\n\n  fixes:\n    - \u003e\n    [`bug 1440107 \u003chttps://bugs.launchpad.net/keystone/+bug/1440107\u003e`_]","commit_id":"e41e5ff047d80116d5e6b7a5cdb6e5602eb5d41c"}]}
