)]}'
{"keystone/resource/backends/ldap.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"e1a12b4e491efd36358b72c0c42532cea941b794","unresolved":false,"context_lines":[{"line_number":165,"context_line":"            # role assignments, so we just have to delete the project itself."},{"line_number":166,"context_line":"            self.project.delete(tenant_id)"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    def delete_projects_list(self, projects_ids):"},{"line_number":169,"context_line":"        for project_id in projects_ids:"},{"line_number":170,"context_line":"            self.delete_project(project_id)"},{"line_number":171,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ba8a016a_36463924","line":168,"updated":"2015-11-16 22:19:39.000000000","message":"what about calling it \u0027delete_projects_from_ids\u0027, since we already have \u0027list_projects_from_ids\u0027","commit_id":"18a7f06bf870f6a281f288fae4a51849bd2a5eae"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"2a88d916a35e694bad8071d3e81155c607d7855b","unresolved":false,"context_lines":[{"line_number":165,"context_line":"            # role assignments, so we just have to delete the project itself."},{"line_number":166,"context_line":"            self.project.delete(tenant_id)"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    def delete_projects_list(self, projects_ids):"},{"line_number":169,"context_line":"        for project_id in projects_ids:"},{"line_number":170,"context_line":"            self.delete_project(project_id)"},{"line_number":171,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ba8a016a_ab5850fb","line":168,"in_reply_to":"ba8a016a_36463924","updated":"2015-11-17 18:28:23.000000000","message":"cool. I\u0027ll do that","commit_id":"18a7f06bf870f6a281f288fae4a51849bd2a5eae"},{"author":{"_account_id":15742,"name":"Paulo Ewerton Gomes Fragoso","email":"pauloewerton@lsd.ufcg.edu.br","username":"pauloewerton"},"change_message_id":"7052eb529514502929f1f1d7136cc2f6280ef6a6","unresolved":false,"context_lines":[{"line_number":170,"context_line":"            try:"},{"line_number":171,"context_line":"                self.delete_project(project_id)"},{"line_number":172,"context_line":"            except exception.ProjectNotFound:"},{"line_number":173,"context_line":"                LOG.warn(\u0027Project %s does not exist and was not deleted.\u0027"},{"line_number":174,"context_line":"                         % project_id)"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    def create_domain(self, domain_id, domain):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a8ffd7b_fbe86818","line":173,"updated":"2015-12-01 19:25:45.000000000","message":"this message should be translatable","commit_id":"430794069262f05c9ac7202bb6a15232678b2f1e"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"e7116c2c0d2d9c8b16854a97c24349b1221d6720","unresolved":false,"context_lines":[{"line_number":170,"context_line":"            try:"},{"line_number":171,"context_line":"                self.delete_project(project_id)"},{"line_number":172,"context_line":"            except exception.ProjectNotFound:"},{"line_number":173,"context_line":"                LOG.warn(\u0027Project %s does not exist and was not deleted.\u0027"},{"line_number":174,"context_line":"                         % project_id)"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    def create_domain(self, domain_id, domain):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a8ffd7b_008ee2cf","line":173,"in_reply_to":"9a8ffd7b_fbe86818","updated":"2015-12-02 16:34:59.000000000","message":"Done","commit_id":"430794069262f05c9ac7202bb6a15232678b2f1e"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"f00595b67e559362fb8db538f264e77ac8017e09","unresolved":false,"context_lines":[{"line_number":165,"context_line":"            # role assignments, so we just have to delete the project itself."},{"line_number":166,"context_line":"            self.project.delete(tenant_id)"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    def delete_projects_from_ids(self, projects_ids):"},{"line_number":169,"context_line":"        for project_id in projects_ids:"},{"line_number":170,"context_line":"            try:"},{"line_number":171,"context_line":"                self.delete_project(project_id)"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_0146957a","line":168,"updated":"2015-12-09 00:29:56.000000000","message":"this change is not necessary since we are removing this backend, but doesn\u0027t matter.","commit_id":"4bfdfac9999fa0eca0ac008105f19fbb47362628"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"be8aea51b3035b4b1511b402d135177329ac21f9","unresolved":false,"context_lines":[{"line_number":170,"context_line":"            try:"},{"line_number":171,"context_line":"                self.delete_project(project_id)"},{"line_number":172,"context_line":"            except exception.ProjectNotFound:"},{"line_number":173,"context_line":"                LOG.warn(_(\u0027Project %s does not exist and was not deleted.\u0027)"},{"line_number":174,"context_line":"                         % project_id)"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    def create_domain(self, domain_id, domain):"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a740942_06f8ae7b","line":173,"updated":"2015-12-09 22:38:19.000000000","message":"include _LW here","commit_id":"af7c0c0e13228260121434c344b78d23523fb354"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"7e78234e3bee2f10391ebddd98335643039c930d","unresolved":false,"context_lines":[{"line_number":170,"context_line":"            try:"},{"line_number":171,"context_line":"                self.delete_project(project_id)"},{"line_number":172,"context_line":"            except exception.ProjectNotFound:"},{"line_number":173,"context_line":"                LOG.warn(_(\u0027Project %s does not exist and was not deleted.\u0027)"},{"line_number":174,"context_line":"                         % project_id)"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    def create_domain(self, domain_id, domain):"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a740942_4711d05c","line":173,"in_reply_to":"7a740942_06f8ae7b","updated":"2015-12-10 00:16:19.000000000","message":"Done","commit_id":"af7c0c0e13228260121434c344b78d23523fb354"},{"author":{"_account_id":16523,"name":"ZhangLei","display_name":"ZhangLei","email":"zhang.lei@99cloud.net","username":"zhang.lei"},"change_message_id":"62a38a047d0b315f07835fdf47cedfe6c711e3f1","unresolved":false,"context_lines":[{"line_number":171,"context_line":"                self.delete_project(project_id)"},{"line_number":172,"context_line":"            except exception.ProjectNotFound:"},{"line_number":173,"context_line":"                LOG.warn(_LW(\u0027Project %s does not exist and was not deleted.\u0027)"},{"line_number":174,"context_line":"                         % project_id)"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    def create_domain(self, domain_id, domain):"},{"line_number":177,"context_line":"        if domain_id \u003d\u003d CONF.identity.default_domain_id:"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa69d971_b2d3afd4","line":174,"updated":"2016-01-11 08:27:32.000000000","message":"https://docs.python.org/3/library/logging.html#logging.warning\nhttps://bugs.launchpad.net/keystone/+bug/1508442\n\ns/LOG.warn/LOG.warning","commit_id":"3572539d11310418c89cbf30c44156a26f75679a"}],"keystone/resource/backends/sql.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"f00595b67e559362fb8db538f264e77ac8017e09","unresolved":false,"context_lines":[{"line_number":171,"context_line":"    def delete_projects_from_ids(self, projects_ids):"},{"line_number":172,"context_line":"        with sql.transaction() as session:"},{"line_number":173,"context_line":"            (session.query(Project).filter(Project.id.in_(projects_ids))."},{"line_number":174,"context_line":"                delete(synchronize_session\u003d\u0027fetch\u0027))"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    # domain crud"},{"line_number":177,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_a4446f49","line":174,"updated":"2015-12-09 00:29:56.000000000","message":"is there anyway to determine if one of the project_ids was not found and we can log that? similar to how you did for the ldap backend?","commit_id":"4bfdfac9999fa0eca0ac008105f19fbb47362628"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"f82f7d4bef5834ca9fc994a24501470a8e6c6320","unresolved":false,"context_lines":[{"line_number":171,"context_line":"    def delete_projects_from_ids(self, projects_ids):"},{"line_number":172,"context_line":"        with sql.transaction() as session:"},{"line_number":173,"context_line":"            (session.query(Project).filter(Project.id.in_(projects_ids))."},{"line_number":174,"context_line":"                delete(synchronize_session\u003d\u0027fetch\u0027))"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    # domain crud"},{"line_number":177,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_eb58ff32","line":174,"in_reply_to":"7a740942_a4446f49","updated":"2015-12-09 05:33:15.000000000","message":"++ I think raise ProjectNotFound is better like what we did for other entities.","commit_id":"4bfdfac9999fa0eca0ac008105f19fbb47362628"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"dbeafd9806795474e733209bcefd1efb4125b6df","unresolved":false,"context_lines":[{"line_number":171,"context_line":"    def delete_projects_from_ids(self, projects_ids):"},{"line_number":172,"context_line":"        with sql.transaction() as session:"},{"line_number":173,"context_line":"            (session.query(Project).filter(Project.id.in_(projects_ids))."},{"line_number":174,"context_line":"                delete(synchronize_session\u003d\u0027fetch\u0027))"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    # domain crud"},{"line_number":177,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_1213130f","line":174,"in_reply_to":"7a740942_a4446f49","updated":"2015-12-09 20:05:00.000000000","message":"Just logged it like in LDAP","commit_id":"4bfdfac9999fa0eca0ac008105f19fbb47362628"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"be8aea51b3035b4b1511b402d135177329ac21f9","unresolved":false,"context_lines":[{"line_number":175,"context_line":"            project_refs \u003d query.all()"},{"line_number":176,"context_line":"            for project in project_refs:"},{"line_number":177,"context_line":"                if project[\u0027id\u0027] not in projects_ids:"},{"line_number":178,"context_line":"                    LOG.warn(_(\u0027Project %s does not exist and was not \u0027"},{"line_number":179,"context_line":"                               \u0027deleted.\u0027) % project[\u0027id\u0027])"},{"line_number":180,"context_line":"            query.delete(synchronize_session\u003d\u0027fetch\u0027)"},{"line_number":181,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7a740942_6602d271","line":178,"updated":"2015-12-09 22:38:19.000000000","message":"include _LW here","commit_id":"af7c0c0e13228260121434c344b78d23523fb354"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"7e78234e3bee2f10391ebddd98335643039c930d","unresolved":false,"context_lines":[{"line_number":175,"context_line":"            project_refs \u003d query.all()"},{"line_number":176,"context_line":"            for project in project_refs:"},{"line_number":177,"context_line":"                if project[\u0027id\u0027] not in projects_ids:"},{"line_number":178,"context_line":"                    LOG.warn(_(\u0027Project %s does not exist and was not \u0027"},{"line_number":179,"context_line":"                               \u0027deleted.\u0027) % project[\u0027id\u0027])"},{"line_number":180,"context_line":"            query.delete(synchronize_session\u003d\u0027fetch\u0027)"},{"line_number":181,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7a740942_c72e20a5","line":178,"in_reply_to":"7a740942_6602d271","updated":"2015-12-10 00:16:19.000000000","message":"Done","commit_id":"af7c0c0e13228260121434c344b78d23523fb354"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"ae6809af5bdd39034f7c2bf44dea58604056545d","unresolved":false,"context_lines":[{"line_number":174,"context_line":"                projects_ids))"},{"line_number":175,"context_line":"            project_refs \u003d query.all()"},{"line_number":176,"context_line":"            for project in project_refs:"},{"line_number":177,"context_line":"                if project[\u0027id\u0027] not in projects_ids:"},{"line_number":178,"context_line":"                    LOG.warn(_LW(\u0027Project %s does not exist and was not \u0027"},{"line_number":179,"context_line":"                                 \u0027deleted.\u0027) % project[\u0027id\u0027])"},{"line_number":180,"context_line":"            query.delete(synchronize_session\u003d\u0027fetch\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_a3b8a12b","line":177,"updated":"2015-12-10 03:40:29.000000000","message":"If you pass a non-existed project_ids list, you will never get here, and the log will be never be logged, the logic here is wrong.\n\n -\u003e for project in project_refs:\n (Pdb) p project_refs\n []\n (Pdb) p projects_ids\n [\u0027a130fc6511da4630acb25d8b65e95d21\u0027]\n (Pdb) n\n \u003e   /opt/stack/keystone/keystone/resource/backends/sql.py(182)delete_project s_from_ids()\n -\u003e query.delete(synchronize_session\u003d\u0027fetch\u0027)\n\n\nThe problem is that you are using query in L173 filter by the project_ids, and the project you get if there is must be in project_ids.\n\nDon\u0027t query the Project table by the project_ids should be fine.","commit_id":"c3842d2a63df06692872e50e2d6252f87e2a1f40"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"22d4727ef2fb3c9975bed218c9e90884998b57ab","unresolved":false,"context_lines":[{"line_number":174,"context_line":"                projects_ids))"},{"line_number":175,"context_line":"            project_refs \u003d query.all()"},{"line_number":176,"context_line":"            for project in project_refs:"},{"line_number":177,"context_line":"                if project[\u0027id\u0027] not in projects_ids:"},{"line_number":178,"context_line":"                    LOG.warn(_LW(\u0027Project %s does not exist and was not \u0027"},{"line_number":179,"context_line":"                                 \u0027deleted.\u0027) % project[\u0027id\u0027])"},{"line_number":180,"context_line":"            query.delete(synchronize_session\u003d\u0027fetch\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_15d0b652","line":177,"in_reply_to":"7a740942_a3b8a12b","updated":"2015-12-10 12:25:51.000000000","message":"Done","commit_id":"c3842d2a63df06692872e50e2d6252f87e2a1f40"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"e455bcb4774e6b063cdd0bcdd1873fae0d43d929","unresolved":false,"context_lines":[{"line_number":173,"context_line":"        with sql.transaction() as session:"},{"line_number":174,"context_line":"            query \u003d session.query(Project).filter(Project.id.in_("},{"line_number":175,"context_line":"                projects_ids))"},{"line_number":176,"context_line":"            project_ids_from_bd \u003d [p[\u0027id\u0027] for p in query.all()]"},{"line_number":177,"context_line":"            for project_id in projects_ids:"},{"line_number":178,"context_line":"                if project_id not in project_ids_from_bd:"},{"line_number":179,"context_line":"                    LOG.warn(_LW(\u0027Project %s does not exist and was not \u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa69d971_ad72570f","line":176,"updated":"2016-01-05 21:16:40.000000000","message":"bd? is this suppose to be: \n\n    project_ids_from_db\n\n?","commit_id":"c82d09b4e876cfde1bd8f6b8558009b4b20a6069"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"c16ece0bda7f6e16286f9ed77d89e8cfd6c72022","unresolved":false,"context_lines":[{"line_number":173,"context_line":"        with sql.transaction() as session:"},{"line_number":174,"context_line":"            query \u003d session.query(Project).filter(Project.id.in_("},{"line_number":175,"context_line":"                projects_ids))"},{"line_number":176,"context_line":"            project_ids_from_bd \u003d [p[\u0027id\u0027] for p in query.all()]"},{"line_number":177,"context_line":"            for project_id in projects_ids:"},{"line_number":178,"context_line":"                if project_id not in project_ids_from_bd:"},{"line_number":179,"context_line":"                    LOG.warn(_LW(\u0027Project %s does not exist and was not \u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa69d971_ec03c674","line":176,"in_reply_to":"fa69d971_ad72570f","updated":"2016-01-08 13:17:14.000000000","message":"yes, just mixed english and portuguese here... hehe. Done","commit_id":"c82d09b4e876cfde1bd8f6b8558009b4b20a6069"},{"author":{"_account_id":16523,"name":"ZhangLei","display_name":"ZhangLei","email":"zhang.lei@99cloud.net","username":"zhang.lei"},"change_message_id":"62a38a047d0b315f07835fdf47cedfe6c711e3f1","unresolved":false,"context_lines":[{"line_number":177,"context_line":"            for project_id in projects_ids:"},{"line_number":178,"context_line":"                if project_id not in project_ids_from_db:"},{"line_number":179,"context_line":"                    LOG.warn(_LW(\u0027Project %s does not exist and was not \u0027"},{"line_number":180,"context_line":"                                 \u0027deleted.\u0027) % project_id)"},{"line_number":181,"context_line":"            query.delete(synchronize_session\u003d\u0027fetch\u0027)"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    # domain crud"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa69d971_72da17ea","line":180,"updated":"2016-01-11 08:27:32.000000000","message":"ditto","commit_id":"3572539d11310418c89cbf30c44156a26f75679a"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"e1893b3574c7360442a150689d98242f9bdf01db","unresolved":false,"context_lines":[{"line_number":176,"context_line":"            project_ids_from_bd \u003d [p[\u0027id\u0027] for p in query.all()]"},{"line_number":177,"context_line":"            for project_id in projects_ids:"},{"line_number":178,"context_line":"                if project_id not in project_ids_from_bd:"},{"line_number":179,"context_line":"                    LOG.warning(_LW(\u0027Project %s does not exist and was not \u0027"},{"line_number":180,"context_line":"                                    \u0027deleted.\u0027) % project_id)"},{"line_number":181,"context_line":"            query.delete(synchronize_session\u003d\u0027fetch\u0027)"},{"line_number":182,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"7a5de9d1_6bc0237d","line":179,"range":{"start_line":179,"start_character":24,"end_line":179,"end_character":31},"updated":"2016-01-28 16:58:37.000000000","message":"I guess this should be log error, as it is for circular references in a project hierarchy. See L124 as an example","commit_id":"1d0d4e458f88598200b28cbbc5f8dafeab592e3c"},{"author":{"_account_id":15742,"name":"Paulo Ewerton Gomes Fragoso","email":"pauloewerton@lsd.ufcg.edu.br","username":"pauloewerton"},"change_message_id":"c5dbc0b67c017ba75200c3003951ce49ea9431c6","unresolved":false,"context_lines":[{"line_number":176,"context_line":"            project_ids_from_bd \u003d [p[\u0027id\u0027] for p in query.all()]"},{"line_number":177,"context_line":"            for project_id in projects_ids:"},{"line_number":178,"context_line":"                if project_id not in project_ids_from_bd:"},{"line_number":179,"context_line":"                    LOG.warning(_LW(\u0027Project %s does not exist and was not \u0027"},{"line_number":180,"context_line":"                                    \u0027deleted.\u0027) % project_id)"},{"line_number":181,"context_line":"            query.delete(synchronize_session\u003d\u0027fetch\u0027)"},{"line_number":182,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"7a5de9d1_19ba26c1","line":179,"range":{"start_line":179,"start_character":24,"end_line":179,"end_character":31},"in_reply_to":"7a5de9d1_6bc0237d","updated":"2016-01-28 18:42:49.000000000","message":"actually, the code execution flow is not interrupted when the project_id is not found, so I don\u0027t see why this should be logged as an error.","commit_id":"1d0d4e458f88598200b28cbbc5f8dafeab592e3c"},{"author":{"_account_id":11428,"name":"Ajaya Agrawal","email":"ajku.agr@gmail.com","username":"ajayaa"},"change_message_id":"c60490b095d4d65f7ac404403eb1bc6bd561526b","unresolved":false,"context_lines":[{"line_number":173,"context_line":"        with sql.transaction() as session:"},{"line_number":174,"context_line":"            query \u003d session.query(Project).filter(Project.id.in_("},{"line_number":175,"context_line":"                projects_ids))"},{"line_number":176,"context_line":"            project_ids_from_bd \u003d [p[\u0027id\u0027] for p in query.all()]"},{"line_number":177,"context_line":"            for project_id in projects_ids:"},{"line_number":178,"context_line":"                if project_id not in project_ids_from_bd:"},{"line_number":179,"context_line":"                    LOG.warning(_LW(\u0027Project %s does not exist and was not \u0027"}],"source_content_type":"text/x-python","patch_set":21,"id":"7a5de9d1_db3df48f","line":176,"range":{"start_line":176,"start_character":12,"end_line":176,"end_character":31},"updated":"2016-02-01 11:30:38.000000000","message":"This line will throw an exception of no project exists with ids given in project_ids.\n\nWhy do we need handle_conflicts decorator here? If I remember correctly there is a bug report in which the task is to get rid of conflict decorator in deletes.","commit_id":"09c6d8199a32f70822c4c06642c696d2d8538706"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"981bd12b342f78efde41b2c22cd4a9a7abe39f76","unresolved":false,"context_lines":[{"line_number":173,"context_line":"        with sql.transaction() as session:"},{"line_number":174,"context_line":"            query \u003d session.query(Project).filter(Project.id.in_("},{"line_number":175,"context_line":"                projects_ids))"},{"line_number":176,"context_line":"            project_ids_from_bd \u003d [p[\u0027id\u0027] for p in query.all()]"},{"line_number":177,"context_line":"            for project_id in projects_ids:"},{"line_number":178,"context_line":"                if project_id not in project_ids_from_bd:"},{"line_number":179,"context_line":"                    LOG.warning(_LW(\u0027Project %s does not exist and was not \u0027"}],"source_content_type":"text/x-python","patch_set":21,"id":"7a5de9d1_22f7258c","line":176,"range":{"start_line":176,"start_character":12,"end_line":176,"end_character":31},"in_reply_to":"7a5de9d1_db3df48f","updated":"2016-02-01 16:47:54.000000000","message":"this line does not throw any exception. See the test case for it. The test case creates an \"in\" clause.\n\nAbout the handle_conflicts, as the common delete_project uses, I don\u0027t see a reason why not to use this. Do you have the bug link?","commit_id":"09c6d8199a32f70822c4c06642c696d2d8538706"},{"author":{"_account_id":11428,"name":"Ajaya Agrawal","email":"ajku.agr@gmail.com","username":"ajayaa"},"change_message_id":"c60490b095d4d65f7ac404403eb1bc6bd561526b","unresolved":false,"context_lines":[{"line_number":178,"context_line":"                if project_id not in project_ids_from_bd:"},{"line_number":179,"context_line":"                    LOG.warning(_LW(\u0027Project %s does not exist and was not \u0027"},{"line_number":180,"context_line":"                                    \u0027deleted.\u0027) % project_id)"},{"line_number":181,"context_line":"            query.delete(synchronize_session\u003d\u0027fetch\u0027)"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    # domain crud"},{"line_number":184,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"7a5de9d1_dbc2d4e8","line":181,"range":{"start_line":181,"start_character":25,"end_line":181,"end_character":44},"updated":"2016-02-01 11:30:38.000000000","message":"Since this will do a select before deleting every time. Why not try to delete and if there is an exception catch it and retry it. In a normal scenario this will be more efficient, I think.","commit_id":"09c6d8199a32f70822c4c06642c696d2d8538706"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"981bd12b342f78efde41b2c22cd4a9a7abe39f76","unresolved":false,"context_lines":[{"line_number":178,"context_line":"                if project_id not in project_ids_from_bd:"},{"line_number":179,"context_line":"                    LOG.warning(_LW(\u0027Project %s does not exist and was not \u0027"},{"line_number":180,"context_line":"                                    \u0027deleted.\u0027) % project_id)"},{"line_number":181,"context_line":"            query.delete(synchronize_session\u003d\u0027fetch\u0027)"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    # domain crud"},{"line_number":184,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"7a5de9d1_420b417d","line":181,"range":{"start_line":181,"start_character":25,"end_line":181,"end_character":44},"in_reply_to":"7a5de9d1_dbc2d4e8","updated":"2016-02-01 16:47:54.000000000","message":"we only did it this way to make the delete an atomic operation, so we don\u0027t need to go several ways in the db. there is no point in making one request per time","commit_id":"09c6d8199a32f70822c4c06642c696d2d8538706"},{"author":{"_account_id":11428,"name":"Ajaya Agrawal","email":"ajku.agr@gmail.com","username":"ajayaa"},"change_message_id":"57d6ac906ca0c22c8d0d7161f4930c3a3a80fea8","unresolved":false,"context_lines":[{"line_number":168,"context_line":"            project_ref \u003d self._get_project(session, project_id)"},{"line_number":169,"context_line":"            session.delete(project_ref)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    @sql.handle_conflicts(conflict_type\u003d\u0027project\u0027)"},{"line_number":172,"context_line":"    def delete_projects_from_ids(self, projects_ids):"},{"line_number":173,"context_line":"        with sql.transaction() as session:"},{"line_number":174,"context_line":"            query \u003d session.query(Project).filter(Project.id.in_("}],"source_content_type":"text/x-python","patch_set":22,"id":"7a5de9d1_8c99647b","line":171,"range":{"start_line":171,"start_character":9,"end_line":171,"end_character":25},"updated":"2016-02-01 21:09:50.000000000","message":"https://bugs.launchpad.net/keystone/+bug/1410029","commit_id":"2af56327d5c97feb5289d746e37a2c45da1fc428"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"6d978176d2582eca7c69828afc3409e9c51fa312","unresolved":false,"context_lines":[{"line_number":168,"context_line":"            project_ref \u003d self._get_project(session, project_id)"},{"line_number":169,"context_line":"            session.delete(project_ref)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    @sql.handle_conflicts(conflict_type\u003d\u0027project\u0027)"},{"line_number":172,"context_line":"    def delete_projects_from_ids(self, projects_ids):"},{"line_number":173,"context_line":"        with sql.transaction() as session:"},{"line_number":174,"context_line":"            query \u003d session.query(Project).filter(Project.id.in_("}],"source_content_type":"text/x-python","patch_set":22,"id":"5a5ae5dd_658602bb","line":171,"range":{"start_line":171,"start_character":9,"end_line":171,"end_character":25},"in_reply_to":"7a5de9d1_8c99647b","updated":"2016-02-04 16:42:44.000000000","message":"nice. I remember it now. The bug doesn\u0027t seem to have great acceptance so far. I think we should keep this until some agreement is made on the bug.","commit_id":"2af56327d5c97feb5289d746e37a2c45da1fc428"},{"author":{"_account_id":11428,"name":"Ajaya Agrawal","email":"ajku.agr@gmail.com","username":"ajayaa"},"change_message_id":"57d6ac906ca0c22c8d0d7161f4930c3a3a80fea8","unresolved":false,"context_lines":[{"line_number":169,"context_line":"            session.delete(project_ref)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    @sql.handle_conflicts(conflict_type\u003d\u0027project\u0027)"},{"line_number":172,"context_line":"    def delete_projects_from_ids(self, projects_ids):"},{"line_number":173,"context_line":"        with sql.transaction() as session:"},{"line_number":174,"context_line":"            query \u003d session.query(Project).filter(Project.id.in_("},{"line_number":175,"context_line":"                projects_ids))"}],"source_content_type":"text/x-python","patch_set":22,"id":"7a5de9d1_2c0870d9","line":172,"range":{"start_line":172,"start_character":33,"end_line":172,"end_character":37},"updated":"2016-02-01 21:09:50.000000000","message":"What happens if project_ids is an empty list. Please write a test case for that.","commit_id":"2af56327d5c97feb5289d746e37a2c45da1fc428"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"6d978176d2582eca7c69828afc3409e9c51fa312","unresolved":false,"context_lines":[{"line_number":169,"context_line":"            session.delete(project_ref)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    @sql.handle_conflicts(conflict_type\u003d\u0027project\u0027)"},{"line_number":172,"context_line":"    def delete_projects_from_ids(self, projects_ids):"},{"line_number":173,"context_line":"        with sql.transaction() as session:"},{"line_number":174,"context_line":"            query \u003d session.query(Project).filter(Project.id.in_("},{"line_number":175,"context_line":"                projects_ids))"}],"source_content_type":"text/x-python","patch_set":22,"id":"5a5ae5dd_0064dce1","line":172,"range":{"start_line":172,"start_character":33,"end_line":172,"end_character":37},"in_reply_to":"7a5de9d1_2c0870d9","updated":"2016-02-04 16:42:44.000000000","message":"Done","commit_id":"2af56327d5c97feb5289d746e37a2c45da1fc428"},{"author":{"_account_id":11428,"name":"Ajaya Agrawal","email":"ajku.agr@gmail.com","username":"ajayaa"},"change_message_id":"57d6ac906ca0c22c8d0d7161f4930c3a3a80fea8","unresolved":false,"context_lines":[{"line_number":178,"context_line":"                if project_id not in project_ids_from_bd:"},{"line_number":179,"context_line":"                    LOG.warning(_LW(\u0027Project %s does not exist and was not \u0027"},{"line_number":180,"context_line":"                                    \u0027deleted.\u0027) % project_id)"},{"line_number":181,"context_line":"            query.delete(synchronize_session\u003d\u0027fetch\u0027)"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    # domain crud"},{"line_number":184,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"7a5de9d1_eca9f890","line":181,"range":{"start_line":181,"start_character":18,"end_line":181,"end_character":24},"updated":"2016-02-01 21:09:50.000000000","message":"I agree that we should delete everything atomically. I am against using synchronize_session\u003d\u0027fetch\u0027 because it will do a select for every row before deleting. I am saying let\u0027s delete without using this and catch exception if any and then remove the rows pertaining to the exception and retry.\n\nreference:\nhttp://docs.sqlalchemy.org/en/latest/orm/query.html#sqlalchemy.orm.query.Query.delete","commit_id":"2af56327d5c97feb5289d746e37a2c45da1fc428"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"6d978176d2582eca7c69828afc3409e9c51fa312","unresolved":false,"context_lines":[{"line_number":178,"context_line":"                if project_id not in project_ids_from_bd:"},{"line_number":179,"context_line":"                    LOG.warning(_LW(\u0027Project %s does not exist and was not \u0027"},{"line_number":180,"context_line":"                                    \u0027deleted.\u0027) % project_id)"},{"line_number":181,"context_line":"            query.delete(synchronize_session\u003d\u0027fetch\u0027)"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    # domain crud"},{"line_number":184,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"5a5ae5dd_406ad4b4","line":181,"range":{"start_line":181,"start_character":18,"end_line":181,"end_character":24},"in_reply_to":"7a5de9d1_eca9f890","updated":"2016-02-04 16:42:44.000000000","message":"doesn\u0027t look like it does a select for each row. AFAIK, it does one bulk query and bulk deletes the result. I\u0027ve search the code, and saw that the use of synchronize_session\u003dFalse is more common, so I\u0027m changing it, as we no longer use the session","commit_id":"2af56327d5c97feb5289d746e37a2c45da1fc428"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"54e92c7c6f65d8525941191e122f52b507da7640","unresolved":false,"context_lines":[{"line_number":168,"context_line":"            project_ref \u003d self._get_project(session, project_id)"},{"line_number":169,"context_line":"            session.delete(project_ref)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    @sql.handle_conflicts(conflict_type\u003d\u0027project\u0027)"},{"line_number":172,"context_line":"    def delete_projects_from_ids(self, projects_ids):"},{"line_number":173,"context_line":"        if not projects_ids:"},{"line_number":174,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":23,"id":"5a5ae5dd_23dbf9ed","line":171,"range":{"start_line":171,"start_character":4,"end_line":171,"end_character":50},"updated":"2016-02-05 09:46:19.000000000","message":"Do we really need this for delete? Both `DBDuplicateEntry` and `IntegrityError` from this decorator are for creating (store). It state clearly from the exception message.","commit_id":"7f2af0676ebd86a2cecc4b9b16644137d3390d1d"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"62592f3eb2ca3613f8ce0537d3589e83f4cd99ed","unresolved":false,"context_lines":[{"line_number":168,"context_line":"            project_ref \u003d self._get_project(session, project_id)"},{"line_number":169,"context_line":"            session.delete(project_ref)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    @sql.handle_conflicts(conflict_type\u003d\u0027project\u0027)"},{"line_number":172,"context_line":"    def delete_projects_from_ids(self, projects_ids):"},{"line_number":173,"context_line":"        if not projects_ids:"},{"line_number":174,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":23,"id":"5a5ae5dd_00c34539","line":171,"range":{"start_line":171,"start_character":4,"end_line":171,"end_character":50},"in_reply_to":"5a5ae5dd_23dbf9ed","updated":"2016-02-05 14:37:44.000000000","message":"Hi Dave, look at my answer for this in the previous patchset","commit_id":"7f2af0676ebd86a2cecc4b9b16644137d3390d1d"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"232cab0b4abd2ca4353e7559593bb30099a5f33d","unresolved":false,"context_lines":[{"line_number":169,"context_line":"            session.delete(project_ref)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    @sql.handle_conflicts(conflict_type\u003d\u0027project\u0027)"},{"line_number":172,"context_line":"    def delete_projects_from_ids(self, projects_ids):"},{"line_number":173,"context_line":"        if not projects_ids:"},{"line_number":174,"context_line":"            return"},{"line_number":175,"context_line":"        with sql.transaction() as session:"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a5ae5dd_d137334b","line":172,"range":{"start_line":172,"start_character":39,"end_line":172,"end_character":51},"updated":"2016-02-05 21:16:16.000000000","message":"Following the pattern in assignment SQL, this should be project_ids\n\nSee a method name and parameters as reference:\n\nhttps://github.com/openstack/keystone/blob/9f99a0b/keystone/assignment/backends/sql.py#L74\n\nhttps://github.com/openstack/keystone/blob/9f99a0b/keystone/assignment/backends/sql.py#L198-L201\n\nAnd actually it is project_ids in the driver signature, this would make the manager fail if it called the driver with a named argument","commit_id":"bb869f1e274f9d952dcc268b8ab3b913a3e31aa4"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"2a733f1edd2d78a5e191e9bb1cfa228459ec7649","unresolved":false,"context_lines":[{"line_number":169,"context_line":"            session.delete(project_ref)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    @sql.handle_conflicts(conflict_type\u003d\u0027project\u0027)"},{"line_number":172,"context_line":"    def delete_projects_from_ids(self, projects_ids):"},{"line_number":173,"context_line":"        if not projects_ids:"},{"line_number":174,"context_line":"            return"},{"line_number":175,"context_line":"        with sql.transaction() as session:"}],"source_content_type":"text/x-python","patch_set":24,"id":"3a57f1b5_00163e55","line":172,"range":{"start_line":172,"start_character":39,"end_line":172,"end_character":51},"in_reply_to":"5a5ae5dd_16e8fc15","updated":"2016-02-10 19:14:04.000000000","message":"Done","commit_id":"bb869f1e274f9d952dcc268b8ab3b913a3e31aa4"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"d08dacfd8ec2d928686161981f6d5a2d27f37560","unresolved":false,"context_lines":[{"line_number":169,"context_line":"            session.delete(project_ref)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    @sql.handle_conflicts(conflict_type\u003d\u0027project\u0027)"},{"line_number":172,"context_line":"    def delete_projects_from_ids(self, projects_ids):"},{"line_number":173,"context_line":"        if not projects_ids:"},{"line_number":174,"context_line":"            return"},{"line_number":175,"context_line":"        with sql.transaction() as session:"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a5ae5dd_16e8fc15","line":172,"range":{"start_line":172,"start_character":39,"end_line":172,"end_character":51},"in_reply_to":"5a5ae5dd_d137334b","updated":"2016-02-09 04:32:42.000000000","message":"++","commit_id":"bb869f1e274f9d952dcc268b8ab3b913a3e31aa4"}],"keystone/resource/core.py":[{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"bfc5538c4975845c1882f62106b736252dd3c136","unresolved":false,"context_lines":[{"line_number":730,"context_line":"        raise exception.NotImplemented()  # pragma: no cover"},{"line_number":731,"context_line":""},{"line_number":732,"context_line":"    @abc.abstractmethod"},{"line_number":733,"context_line":"    def delete_projects_from_ids(self, project_id):"},{"line_number":734,"context_line":"        \"\"\"Deletes a list of projects."},{"line_number":735,"context_line":""},{"line_number":736,"context_line":"        :raises keystone.exception.ProjectNotFound: if project_id does not"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_0d5029d3","line":733,"updated":"2015-11-19 12:58:03.000000000","message":"s/project_id/project_ids","commit_id":"bb48ec7ed7e027fe1720619f52fec3d8787ec4f9"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"bfc5538c4975845c1882f62106b736252dd3c136","unresolved":false,"context_lines":[{"line_number":733,"context_line":"    def delete_projects_from_ids(self, project_id):"},{"line_number":734,"context_line":"        \"\"\"Deletes a list of projects."},{"line_number":735,"context_line":""},{"line_number":736,"context_line":"        :raises keystone.exception.ProjectNotFound: if project_id does not"},{"line_number":737,"context_line":"                                                    exist"},{"line_number":738,"context_line":""},{"line_number":739,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_6d5775ca","line":736,"updated":"2015-11-19 12:58:03.000000000","message":"if one of the project_ids don\u0027t exist, right?","commit_id":"bb48ec7ed7e027fe1720619f52fec3d8787ec4f9"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"f82f7d4bef5834ca9fc994a24501470a8e6c6320","unresolved":false,"context_lines":[{"line_number":817,"context_line":""},{"line_number":818,"context_line":"    @abc.abstractmethod"},{"line_number":819,"context_line":"    def delete_projects_from_ids(self, project_ids):"},{"line_number":820,"context_line":"        \"\"\"Deletes a list of projects.\"\"\""},{"line_number":821,"context_line":"        raise exception.NotImplemented()  # pragma: no cover"},{"line_number":822,"context_line":""},{"line_number":823,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_6b9e5264","line":820,"updated":"2015-12-09 05:33:15.000000000","message":"update the docstring per what you did in the ldap backend and what will be updated in the SQL backend. :)\n\n :raises keystone.exception.ProjectNotFound: if project_id does not\n                                             exist","commit_id":"4bfdfac9999fa0eca0ac008105f19fbb47362628"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"dbeafd9806795474e733209bcefd1efb4125b6df","unresolved":false,"context_lines":[{"line_number":817,"context_line":""},{"line_number":818,"context_line":"    @abc.abstractmethod"},{"line_number":819,"context_line":"    def delete_projects_from_ids(self, project_ids):"},{"line_number":820,"context_line":"        \"\"\"Deletes a list of projects.\"\"\""},{"line_number":821,"context_line":"        raise exception.NotImplemented()  # pragma: no cover"},{"line_number":822,"context_line":""},{"line_number":823,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_b91f8a08","line":820,"in_reply_to":"7a740942_6b9e5264","updated":"2015-12-09 20:05:00.000000000","message":"actually, this is the correct and. We don\u0027t raise any exception. I\u0027m just emiting a warn in case it does not exist in the LDAP and will do in the SQL","commit_id":"4bfdfac9999fa0eca0ac008105f19fbb47362628"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"54e92c7c6f65d8525941191e122f52b507da7640","unresolved":false,"context_lines":[{"line_number":694,"context_line":"    def _get_list_limit(self):"},{"line_number":695,"context_line":"        return CONF.resource.list_limit or CONF.list_limit"},{"line_number":696,"context_line":""},{"line_number":697,"context_line":"    @abc.abstractmethod"},{"line_number":698,"context_line":"    def get_project_by_name(self, tenant_name, domain_id):"},{"line_number":699,"context_line":"        \"\"\"Get a tenant by name."},{"line_number":700,"context_line":""},{"line_number":701,"context_line":"        :returns: tenant_ref"},{"line_number":702,"context_line":"        :raises keystone.exception.ProjectNotFound: if a project with the"},{"line_number":703,"context_line":"                             tenant_name does not exist within the domain"},{"line_number":704,"context_line":""},{"line_number":705,"context_line":"        \"\"\""},{"line_number":706,"context_line":"        raise exception.NotImplemented()  # pragma: no cover"},{"line_number":707,"context_line":""},{"line_number":708,"context_line":"    # domain crud"},{"line_number":709,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":23,"id":"5a5ae5dd_08285a99","line":706,"range":{"start_line":697,"start_character":0,"end_line":706,"end_character":60},"updated":"2016-02-05 09:46:19.000000000","message":"what\u0027s the point of this change? pls remove this method from here since it has been removed from V8 driver.","commit_id":"7f2af0676ebd86a2cecc4b9b16644137d3390d1d"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"62592f3eb2ca3613f8ce0537d3589e83f4cd99ed","unresolved":false,"context_lines":[{"line_number":694,"context_line":"    def _get_list_limit(self):"},{"line_number":695,"context_line":"        return CONF.resource.list_limit or CONF.list_limit"},{"line_number":696,"context_line":""},{"line_number":697,"context_line":"    @abc.abstractmethod"},{"line_number":698,"context_line":"    def get_project_by_name(self, tenant_name, domain_id):"},{"line_number":699,"context_line":"        \"\"\"Get a tenant by name."},{"line_number":700,"context_line":""},{"line_number":701,"context_line":"        :returns: tenant_ref"},{"line_number":702,"context_line":"        :raises keystone.exception.ProjectNotFound: if a project with the"},{"line_number":703,"context_line":"                             tenant_name does not exist within the domain"},{"line_number":704,"context_line":""},{"line_number":705,"context_line":"        \"\"\""},{"line_number":706,"context_line":"        raise exception.NotImplemented()  # pragma: no cover"},{"line_number":707,"context_line":""},{"line_number":708,"context_line":"    # domain crud"},{"line_number":709,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":23,"id":"5a5ae5dd_60f8f97b","line":706,"range":{"start_line":697,"start_character":0,"end_line":706,"end_character":60},"in_reply_to":"5a5ae5dd_08285a99","updated":"2016-02-05 14:37:44.000000000","message":"you\u0027re right. this should be some rebase problem","commit_id":"7f2af0676ebd86a2cecc4b9b16644137d3390d1d"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"d08dacfd8ec2d928686161981f6d5a2d27f37560","unresolved":false,"context_lines":[{"line_number":986,"context_line":"    def delete_projects_from_ids(self, project_ids):"},{"line_number":987,"context_line":"        \"\"\"Deletes a given list of projects."},{"line_number":988,"context_line":""},{"line_number":989,"context_line":"        Deletes a list of projects. Ensures no project on the list exists"},{"line_number":990,"context_line":"        after it is succesfully called. If an empty list is provided,"},{"line_number":991,"context_line":"        the it is silently ignored."},{"line_number":992,"context_line":"        \"\"\""},{"line_number":993,"context_line":"        raise exception.NotImplemented()  # pragma: no cover"},{"line_number":994,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"5a5ae5dd_16c6bc16","line":991,"range":{"start_line":989,"start_character":8,"end_line":991,"end_character":35},"updated":"2016-02-09 04:32:42.000000000","message":"you can also mention that project IDs that are not found, then no exception is raised, but rather logged.\n\n\"If a project ID in the list of project_ids is not found in the backend, no exception is raised, but a message is logged.\"","commit_id":"bb869f1e274f9d952dcc268b8ab3b913a3e31aa4"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"2a733f1edd2d78a5e191e9bb1cfa228459ec7649","unresolved":false,"context_lines":[{"line_number":986,"context_line":"    def delete_projects_from_ids(self, project_ids):"},{"line_number":987,"context_line":"        \"\"\"Deletes a given list of projects."},{"line_number":988,"context_line":""},{"line_number":989,"context_line":"        Deletes a list of projects. Ensures no project on the list exists"},{"line_number":990,"context_line":"        after it is succesfully called. If an empty list is provided,"},{"line_number":991,"context_line":"        the it is silently ignored."},{"line_number":992,"context_line":"        \"\"\""},{"line_number":993,"context_line":"        raise exception.NotImplemented()  # pragma: no cover"},{"line_number":994,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"3a57f1b5_bb367be5","line":991,"range":{"start_line":989,"start_character":8,"end_line":991,"end_character":35},"in_reply_to":"5a5ae5dd_16c6bc16","updated":"2016-02-10 19:14:04.000000000","message":"Done","commit_id":"bb869f1e274f9d952dcc268b8ab3b913a3e31aa4"}],"keystone/tests/unit/backend/legacy_drivers/resource/V8/sql.py":[{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"e1893b3574c7360442a150689d98242f9bdf01db","unresolved":false,"context_lines":[{"line_number":30,"context_line":"            \u0027keystone.resource\u0027, \u0027backends\u0027, \u0027V8_\u0027)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def test_delete_projects_from_ids(self):"},{"line_number":33,"context_line":"        pass"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def test_delete_projects_from_ids_with_no_existing_project_id(self):"},{"line_number":36,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a5de9d1_cb827752","line":33,"updated":"2016-01-28 16:58:37.000000000","message":"Please use skiptest and add a reason why doing so","commit_id":"1d0d4e458f88598200b28cbbc5f8dafeab592e3c"},{"author":{"_account_id":15742,"name":"Paulo Ewerton Gomes Fragoso","email":"pauloewerton@lsd.ufcg.edu.br","username":"pauloewerton"},"change_message_id":"c5dbc0b67c017ba75200c3003951ce49ea9431c6","unresolved":false,"context_lines":[{"line_number":30,"context_line":"            \u0027keystone.resource\u0027, \u0027backends\u0027, \u0027V8_\u0027)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def test_delete_projects_from_ids(self):"},{"line_number":33,"context_line":"        pass"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def test_delete_projects_from_ids_with_no_existing_project_id(self):"},{"line_number":36,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a5de9d1_b96d1206","line":33,"in_reply_to":"7a5de9d1_cb827752","updated":"2016-01-28 18:42:49.000000000","message":"Done","commit_id":"1d0d4e458f88598200b28cbbc5f8dafeab592e3c"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"e1893b3574c7360442a150689d98242f9bdf01db","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        pass"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def test_delete_projects_from_ids_with_no_existing_project_id(self):"},{"line_number":36,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a5de9d1_eb3ad397","line":36,"updated":"2016-01-28 16:58:37.000000000","message":"ditto","commit_id":"1d0d4e458f88598200b28cbbc5f8dafeab592e3c"},{"author":{"_account_id":15742,"name":"Paulo Ewerton Gomes Fragoso","email":"pauloewerton@lsd.ufcg.edu.br","username":"pauloewerton"},"change_message_id":"c5dbc0b67c017ba75200c3003951ce49ea9431c6","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        pass"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def test_delete_projects_from_ids_with_no_existing_project_id(self):"},{"line_number":36,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a5de9d1_d9700edf","line":36,"in_reply_to":"7a5de9d1_eb3ad397","updated":"2016-01-28 18:42:49.000000000","message":"Done","commit_id":"1d0d4e458f88598200b28cbbc5f8dafeab592e3c"}],"keystone/tests/unit/test_backend.py":[{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"bfc5538c4975845c1882f62106b736252dd3c136","unresolved":false,"context_lines":[{"line_number":3439,"context_line":"            self.assertRaises(exception.ProjectNotFound,"},{"line_number":3440,"context_line":"                              self.resource_api.driver.get_project,"},{"line_number":3441,"context_line":"                              project[\u0027id\u0027])"},{"line_number":3442,"context_line":""},{"line_number":3443,"context_line":"    def test_hierarchical_projects_crud(self):"},{"line_number":3444,"context_line":"        # create a hierarchy with just a root project (which is a leaf as well)"},{"line_number":3445,"context_line":"        projects_hierarchy \u003d self._create_projects_hierarchy(hierarchy_size\u003d1)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_4d1f1108","line":3442,"updated":"2015-11-19 12:58:03.000000000","message":"needs a test for the case where one of the projects in the list doesn\u0027t exist","commit_id":"bb48ec7ed7e027fe1720619f52fec3d8787ec4f9"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"f00595b67e559362fb8db538f264e77ac8017e09","unresolved":false,"context_lines":[{"line_number":3183,"context_line":"                          leaf_project[\u0027id\u0027])"},{"line_number":3184,"context_line":""},{"line_number":3185,"context_line":"    def test_delete_projects_list(self):"},{"line_number":3186,"context_line":"        # Tests the resource backend call delete_projects_list"},{"line_number":3187,"context_line":"        project1_ref \u003d unit.new_project_ref(domain_id\u003dDEFAULT_DOMAIN_ID)"},{"line_number":3188,"context_line":"        project2_ref \u003d unit.new_project_ref(domain_id\u003dDEFAULT_DOMAIN_ID)"},{"line_number":3189,"context_line":"        projects \u003d (project1_ref, project2_ref)"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_a161c106","line":3186,"updated":"2015-12-09 00:29:56.000000000","message":"actually this calls: delete_projects_from_ids\n\nuse docstrings instead of comments to describe a test","commit_id":"4bfdfac9999fa0eca0ac008105f19fbb47362628"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"dbeafd9806795474e733209bcefd1efb4125b6df","unresolved":false,"context_lines":[{"line_number":3183,"context_line":"                          leaf_project[\u0027id\u0027])"},{"line_number":3184,"context_line":""},{"line_number":3185,"context_line":"    def test_delete_projects_list(self):"},{"line_number":3186,"context_line":"        # Tests the resource backend call delete_projects_list"},{"line_number":3187,"context_line":"        project1_ref \u003d unit.new_project_ref(domain_id\u003dDEFAULT_DOMAIN_ID)"},{"line_number":3188,"context_line":"        project2_ref \u003d unit.new_project_ref(domain_id\u003dDEFAULT_DOMAIN_ID)"},{"line_number":3189,"context_line":"        projects \u003d (project1_ref, project2_ref)"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_b9946a44","line":3186,"in_reply_to":"7a740942_a161c106","updated":"2015-12-09 20:05:00.000000000","message":"Done","commit_id":"4bfdfac9999fa0eca0ac008105f19fbb47362628"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"f82f7d4bef5834ca9fc994a24501470a8e6c6320","unresolved":false,"context_lines":[{"line_number":3192,"context_line":""},{"line_number":3193,"context_line":"        # Setting up the id\u0027s list"},{"line_number":3194,"context_line":"        projects_ids \u003d [p[\u0027id\u0027] for p in projects]"},{"line_number":3195,"context_line":"        self.resource_api.driver.delete_projects_from_ids(projects_ids)"},{"line_number":3196,"context_line":""},{"line_number":3197,"context_line":"        # Ensuring projects no longer exist at backend level"},{"line_number":3198,"context_line":"        for project in projects:"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_eb58028c","line":3195,"updated":"2015-12-09 05:33:15.000000000","message":"you can just `self.resource_api.delete_projects_from_ids(projects_ids)` since you have added the interface there and this will cover your change about that.","commit_id":"4bfdfac9999fa0eca0ac008105f19fbb47362628"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"dbeafd9806795474e733209bcefd1efb4125b6df","unresolved":false,"context_lines":[{"line_number":3192,"context_line":""},{"line_number":3193,"context_line":"        # Setting up the id\u0027s list"},{"line_number":3194,"context_line":"        projects_ids \u003d [p[\u0027id\u0027] for p in projects]"},{"line_number":3195,"context_line":"        self.resource_api.driver.delete_projects_from_ids(projects_ids)"},{"line_number":3196,"context_line":""},{"line_number":3197,"context_line":"        # Ensuring projects no longer exist at backend level"},{"line_number":3198,"context_line":"        for project in projects:"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_f9975238","line":3195,"in_reply_to":"7a740942_eb58028c","updated":"2015-12-09 20:05:00.000000000","message":"Done","commit_id":"4bfdfac9999fa0eca0ac008105f19fbb47362628"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"f82f7d4bef5834ca9fc994a24501470a8e6c6320","unresolved":false,"context_lines":[{"line_number":3202,"context_line":""},{"line_number":3203,"context_line":"    def test_delete_projects_list_with_no_existing_project_id(self):"},{"line_number":3204,"context_line":"        # Tests the resource backend call delete_projects_list passing non"},{"line_number":3205,"context_line":"        # existing project_ids, which are silently ignored by the backend."},{"line_number":3206,"context_line":"        project_ref \u003d unit.new_project_ref(domain_id\u003dDEFAULT_DOMAIN_ID)"},{"line_number":3207,"context_line":"        self.resource_api.create_project(project_ref[\u0027id\u0027], project_ref)"},{"line_number":3208,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_ab119753","line":3205,"updated":"2015-12-09 05:33:15.000000000","message":"why silent? looks like you do it intentionally. does log something better?","commit_id":"4bfdfac9999fa0eca0ac008105f19fbb47362628"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"dbeafd9806795474e733209bcefd1efb4125b6df","unresolved":false,"context_lines":[{"line_number":3202,"context_line":""},{"line_number":3203,"context_line":"    def test_delete_projects_list_with_no_existing_project_id(self):"},{"line_number":3204,"context_line":"        # Tests the resource backend call delete_projects_list passing non"},{"line_number":3205,"context_line":"        # existing project_ids, which are silently ignored by the backend."},{"line_number":3206,"context_line":"        project_ref \u003d unit.new_project_ref(domain_id\u003dDEFAULT_DOMAIN_ID)"},{"line_number":3207,"context_line":"        self.resource_api.create_project(project_ref[\u0027id\u0027], project_ref)"},{"line_number":3208,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_99a96e7e","line":3205,"in_reply_to":"7a740942_ab119753","updated":"2015-12-09 20:05:00.000000000","message":"I\u0027m now logging it in sql too. thanks.","commit_id":"4bfdfac9999fa0eca0ac008105f19fbb47362628"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"be8aea51b3035b4b1511b402d135177329ac21f9","unresolved":false,"context_lines":[{"line_number":3183,"context_line":"                          leaf_project[\u0027id\u0027])"},{"line_number":3184,"context_line":""},{"line_number":3185,"context_line":"    def test_delete_projects_from_ids(self):"},{"line_number":3186,"context_line":"        \u0027\u0027\u0027Tests the resource backend call delete_projects_from_ids\u0027\u0027\u0027"},{"line_number":3187,"context_line":"        project1_ref \u003d unit.new_project_ref(domain_id\u003dDEFAULT_DOMAIN_ID)"},{"line_number":3188,"context_line":"        project2_ref \u003d unit.new_project_ref(domain_id\u003dDEFAULT_DOMAIN_ID)"},{"line_number":3189,"context_line":"        projects \u003d (project1_ref, project2_ref)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a740942_86033e76","line":3186,"updated":"2015-12-09 22:38:19.000000000","message":"normally we use \"\"\" instead of \u0027\u0027\u0027","commit_id":"af7c0c0e13228260121434c344b78d23523fb354"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"7e78234e3bee2f10391ebddd98335643039c930d","unresolved":false,"context_lines":[{"line_number":3183,"context_line":"                          leaf_project[\u0027id\u0027])"},{"line_number":3184,"context_line":""},{"line_number":3185,"context_line":"    def test_delete_projects_from_ids(self):"},{"line_number":3186,"context_line":"        \u0027\u0027\u0027Tests the resource backend call delete_projects_from_ids\u0027\u0027\u0027"},{"line_number":3187,"context_line":"        project1_ref \u003d unit.new_project_ref(domain_id\u003dDEFAULT_DOMAIN_ID)"},{"line_number":3188,"context_line":"        project2_ref \u003d unit.new_project_ref(domain_id\u003dDEFAULT_DOMAIN_ID)"},{"line_number":3189,"context_line":"        projects \u003d (project1_ref, project2_ref)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a740942_a71c3478","line":3186,"in_reply_to":"7a740942_86033e76","updated":"2015-12-10 00:16:19.000000000","message":"Done","commit_id":"af7c0c0e13228260121434c344b78d23523fb354"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"ae6809af5bdd39034f7c2bf44dea58604056545d","unresolved":false,"context_lines":[{"line_number":3201,"context_line":"                              project[\u0027id\u0027])"},{"line_number":3202,"context_line":""},{"line_number":3203,"context_line":"    def test_delete_projects_from_ids_with_no_existing_project_id(self):"},{"line_number":3204,"context_line":"        \"\"\"Tests the resource backend call delete_projects_from_ids"},{"line_number":3205,"context_line":""},{"line_number":3206,"context_line":"        Tests the resource backend call delete_projects_from_ids passing non"},{"line_number":3207,"context_line":"        existing project_ids, which are logged and ignored by the backend."}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_e86c4838","line":3204,"updated":"2015-12-10 03:40:29.000000000","message":"\"resource backend delete non-existing project ids issue warning.\" to differ the docstring with the first testcase.","commit_id":"c3842d2a63df06692872e50e2d6252f87e2a1f40"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"22d4727ef2fb3c9975bed218c9e90884998b57ab","unresolved":false,"context_lines":[{"line_number":3201,"context_line":"                              project[\u0027id\u0027])"},{"line_number":3202,"context_line":""},{"line_number":3203,"context_line":"    def test_delete_projects_from_ids_with_no_existing_project_id(self):"},{"line_number":3204,"context_line":"        \"\"\"Tests the resource backend call delete_projects_from_ids"},{"line_number":3205,"context_line":""},{"line_number":3206,"context_line":"        Tests the resource backend call delete_projects_from_ids passing non"},{"line_number":3207,"context_line":"        existing project_ids, which are logged and ignored by the backend."}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_b5bf62fb","line":3204,"in_reply_to":"7a740942_e86c4838","updated":"2015-12-10 12:25:51.000000000","message":"Done","commit_id":"c3842d2a63df06692872e50e2d6252f87e2a1f40"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"ae6809af5bdd39034f7c2bf44dea58604056545d","unresolved":false,"context_lines":[{"line_number":3218,"context_line":"                          project_ref[\u0027id\u0027])"},{"line_number":3219,"context_line":""},{"line_number":3220,"context_line":"        # Even if we only have one project, and it does not exist, it returns"},{"line_number":3221,"context_line":"        # no error."},{"line_number":3222,"context_line":"        self.resource_api.driver.delete_projects_from_ids([uuid.uuid4().hex])"},{"line_number":3223,"context_line":""},{"line_number":3224,"context_line":"    def test_hierarchical_projects_crud(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_e8f7688a","line":3221,"updated":"2015-12-10 03:40:29.000000000","message":"i think it\u0027s possible to verify that the warning is logged, nice to see this scenario is covered in the testcase.","commit_id":"c3842d2a63df06692872e50e2d6252f87e2a1f40"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"22d4727ef2fb3c9975bed218c9e90884998b57ab","unresolved":false,"context_lines":[{"line_number":3218,"context_line":"                          project_ref[\u0027id\u0027])"},{"line_number":3219,"context_line":""},{"line_number":3220,"context_line":"        # Even if we only have one project, and it does not exist, it returns"},{"line_number":3221,"context_line":"        # no error."},{"line_number":3222,"context_line":"        self.resource_api.driver.delete_projects_from_ids([uuid.uuid4().hex])"},{"line_number":3223,"context_line":""},{"line_number":3224,"context_line":"    def test_hierarchical_projects_crud(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_353a9299","line":3221,"in_reply_to":"7a740942_e8f7688a","updated":"2015-12-10 12:25:51.000000000","message":"Done","commit_id":"c3842d2a63df06692872e50e2d6252f87e2a1f40"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"e455bcb4774e6b063cdd0bcdd1873fae0d43d929","unresolved":false,"context_lines":[{"line_number":3183,"context_line":"                          leaf_project[\u0027id\u0027])"},{"line_number":3184,"context_line":""},{"line_number":3185,"context_line":"    def test_delete_projects_from_ids(self):"},{"line_number":3186,"context_line":"        \"\"\"Tests the resource backend call delete_projects_from_ids\"\"\""},{"line_number":3187,"context_line":"        project1_ref \u003d unit.new_project_ref(domain_id\u003dDEFAULT_DOMAIN_ID)"},{"line_number":3188,"context_line":"        project2_ref \u003d unit.new_project_ref(domain_id\u003dDEFAULT_DOMAIN_ID)"},{"line_number":3189,"context_line":"        projects \u003d (project1_ref, project2_ref)"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa69d971_b815b740","line":3186,"updated":"2016-01-05 21:16:40.000000000","message":"nit: end the comment with a period.","commit_id":"c82d09b4e876cfde1bd8f6b8558009b4b20a6069"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"c16ece0bda7f6e16286f9ed77d89e8cfd6c72022","unresolved":false,"context_lines":[{"line_number":3183,"context_line":"                          leaf_project[\u0027id\u0027])"},{"line_number":3184,"context_line":""},{"line_number":3185,"context_line":"    def test_delete_projects_from_ids(self):"},{"line_number":3186,"context_line":"        \"\"\"Tests the resource backend call delete_projects_from_ids\"\"\""},{"line_number":3187,"context_line":"        project1_ref \u003d unit.new_project_ref(domain_id\u003dDEFAULT_DOMAIN_ID)"},{"line_number":3188,"context_line":"        project2_ref \u003d unit.new_project_ref(domain_id\u003dDEFAULT_DOMAIN_ID)"},{"line_number":3189,"context_line":"        projects \u003d (project1_ref, project2_ref)"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa69d971_2c4ebec1","line":3186,"in_reply_to":"fa69d971_b815b740","updated":"2016-01-08 13:17:14.000000000","message":"Done","commit_id":"c82d09b4e876cfde1bd8f6b8558009b4b20a6069"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"e455bcb4774e6b063cdd0bcdd1873fae0d43d929","unresolved":false,"context_lines":[{"line_number":3201,"context_line":"                              project[\u0027id\u0027])"},{"line_number":3202,"context_line":""},{"line_number":3203,"context_line":"    def test_delete_projects_from_ids_with_no_existing_project_id(self):"},{"line_number":3204,"context_line":"        \"\"\"Tests delete_projects_from_ids issues warning if not found"},{"line_number":3205,"context_line":""},{"line_number":3206,"context_line":"        Tests the resource backend call delete_projects_from_ids passing non"},{"line_number":3207,"context_line":"        existing project_ids, which are logged and ignored by the backend."}],"source_content_type":"text/x-python","patch_set":10,"id":"fa69d971_185ac32a","line":3204,"updated":"2016-01-05 21:16:40.000000000","message":"same comment as above.","commit_id":"c82d09b4e876cfde1bd8f6b8558009b4b20a6069"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"c16ece0bda7f6e16286f9ed77d89e8cfd6c72022","unresolved":false,"context_lines":[{"line_number":3201,"context_line":"                              project[\u0027id\u0027])"},{"line_number":3202,"context_line":""},{"line_number":3203,"context_line":"    def test_delete_projects_from_ids_with_no_existing_project_id(self):"},{"line_number":3204,"context_line":"        \"\"\"Tests delete_projects_from_ids issues warning if not found"},{"line_number":3205,"context_line":""},{"line_number":3206,"context_line":"        Tests the resource backend call delete_projects_from_ids passing non"},{"line_number":3207,"context_line":"        existing project_ids, which are logged and ignored by the backend."}],"source_content_type":"text/x-python","patch_set":10,"id":"fa69d971_8c4faabd","line":3204,"in_reply_to":"fa69d971_185ac32a","updated":"2016-01-08 13:17:14.000000000","message":"Done","commit_id":"c82d09b4e876cfde1bd8f6b8558009b4b20a6069"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"e455bcb4774e6b063cdd0bcdd1873fae0d43d929","unresolved":false,"context_lines":[{"line_number":3221,"context_line":""},{"line_number":3222,"context_line":"        # Even if we only have one project, and it does not exist, it returns"},{"line_number":3223,"context_line":"        # no error."},{"line_number":3224,"context_line":"        self.resource_api.driver.delete_projects_from_ids([uuid.uuid4().hex])"},{"line_number":3225,"context_line":""},{"line_number":3226,"context_line":"    def test_hierarchical_projects_crud(self):"},{"line_number":3227,"context_line":"        # create a hierarchy with just a root project (which is a leaf as well)"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa69d971_b86a97b1","line":3224,"updated":"2016-01-05 21:16:40.000000000","message":"So we don\u0027t actually tell the user that the project didn\u0027t get deleted because it doesn\u0027t exist? They have to check the logs for that information?","commit_id":"c82d09b4e876cfde1bd8f6b8558009b4b20a6069"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"c16ece0bda7f6e16286f9ed77d89e8cfd6c72022","unresolved":false,"context_lines":[{"line_number":3221,"context_line":""},{"line_number":3222,"context_line":"        # Even if we only have one project, and it does not exist, it returns"},{"line_number":3223,"context_line":"        # no error."},{"line_number":3224,"context_line":"        self.resource_api.driver.delete_projects_from_ids([uuid.uuid4().hex])"},{"line_number":3225,"context_line":""},{"line_number":3226,"context_line":"    def test_hierarchical_projects_crud(self):"},{"line_number":3227,"context_line":"        # create a hierarchy with just a root project (which is a leaf as well)"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa69d971_cc5cc27f","line":3224,"in_reply_to":"fa69d971_b86a97b1","updated":"2016-01-08 13:17:14.000000000","message":"no, we use the premise that after this method is called, no project with these ids will exist in db. That\u0027s pretty much the convention in delete list methods around","commit_id":"c82d09b4e876cfde1bd8f6b8558009b4b20a6069"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"e1893b3574c7360442a150689d98242f9bdf01db","unresolved":false,"context_lines":[{"line_number":3223,"context_line":"        self.resource_api.driver.delete_projects_from_ids(projects_ids)"},{"line_number":3224,"context_line":""},{"line_number":3225,"context_line":"        # Ensuring projects no longer exist at backend level"},{"line_number":3226,"context_line":"        for project in projects:"},{"line_number":3227,"context_line":"            self.assertRaises(exception.ProjectNotFound,"},{"line_number":3228,"context_line":"                              self.resource_api.driver.get_project,"},{"line_number":3229,"context_line":"                              project[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a5de9d1_8b0f9fe0","line":3226,"range":{"start_line":3226,"start_character":23,"end_line":3226,"end_character":31},"updated":"2016-01-28 16:58:37.000000000","message":"why not use project_ids instead ?","commit_id":"1d0d4e458f88598200b28cbbc5f8dafeab592e3c"},{"author":{"_account_id":15742,"name":"Paulo Ewerton Gomes Fragoso","email":"pauloewerton@lsd.ufcg.edu.br","username":"pauloewerton"},"change_message_id":"c5dbc0b67c017ba75200c3003951ce49ea9431c6","unresolved":false,"context_lines":[{"line_number":3223,"context_line":"        self.resource_api.driver.delete_projects_from_ids(projects_ids)"},{"line_number":3224,"context_line":""},{"line_number":3225,"context_line":"        # Ensuring projects no longer exist at backend level"},{"line_number":3226,"context_line":"        for project in projects:"},{"line_number":3227,"context_line":"            self.assertRaises(exception.ProjectNotFound,"},{"line_number":3228,"context_line":"                              self.resource_api.driver.get_project,"},{"line_number":3229,"context_line":"                              project[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a5de9d1_7978fac4","line":3226,"range":{"start_line":3226,"start_character":23,"end_line":3226,"end_character":31},"in_reply_to":"7a5de9d1_8b0f9fe0","updated":"2016-01-28 18:42:49.000000000","message":"Done","commit_id":"1d0d4e458f88598200b28cbbc5f8dafeab592e3c"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"e1893b3574c7360442a150689d98242f9bdf01db","unresolved":false,"context_lines":[{"line_number":3241,"context_line":"        projects_ids \u003d (project_ref[\u0027id\u0027], uuid.uuid4().hex)"},{"line_number":3242,"context_line":"        with mock.patch(\u0027keystone.resource.backends.sql.LOG\u0027) as mock_log:"},{"line_number":3243,"context_line":"            self.resource_api.delete_projects_from_ids(projects_ids)"},{"line_number":3244,"context_line":"            self.assertTrue(mock_log.warning.called)"},{"line_number":3245,"context_line":"        # The existing project was deleted."},{"line_number":3246,"context_line":"        self.assertRaises(exception.ProjectNotFound,"},{"line_number":3247,"context_line":"                          self.resource_api.driver.get_project,"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a5de9d1_cba117ab","line":3244,"range":{"start_line":3244,"start_character":37,"end_line":3244,"end_character":44},"updated":"2016-01-28 16:58:37.000000000","message":"What warning is this ? Would it be useful to check something on the message too ?","commit_id":"1d0d4e458f88598200b28cbbc5f8dafeab592e3c"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"66ffbb396e1b2abb2ecc3b9af8c2155d5e226dce","unresolved":false,"context_lines":[{"line_number":3241,"context_line":"        projects_ids \u003d (project_ref[\u0027id\u0027], uuid.uuid4().hex)"},{"line_number":3242,"context_line":"        with mock.patch(\u0027keystone.resource.backends.sql.LOG\u0027) as mock_log:"},{"line_number":3243,"context_line":"            self.resource_api.delete_projects_from_ids(projects_ids)"},{"line_number":3244,"context_line":"            self.assertTrue(mock_log.warning.called)"},{"line_number":3245,"context_line":"        # The existing project was deleted."},{"line_number":3246,"context_line":"        self.assertRaises(exception.ProjectNotFound,"},{"line_number":3247,"context_line":"                          self.resource_api.driver.get_project,"}],"source_content_type":"text/x-python","patch_set":17,"id":"5a5ae5dd_31c6c768","line":3244,"range":{"start_line":3244,"start_character":37,"end_line":3244,"end_character":44},"in_reply_to":"7a5de9d1_57ff05aa","updated":"2016-02-05 21:04:57.000000000","message":"Yes it is, but how do we know the expected warning was thrown (and not an arbitrary one) ?","commit_id":"1d0d4e458f88598200b28cbbc5f8dafeab592e3c"},{"author":{"_account_id":15742,"name":"Paulo Ewerton Gomes Fragoso","email":"pauloewerton@lsd.ufcg.edu.br","username":"pauloewerton"},"change_message_id":"c5dbc0b67c017ba75200c3003951ce49ea9431c6","unresolved":false,"context_lines":[{"line_number":3241,"context_line":"        projects_ids \u003d (project_ref[\u0027id\u0027], uuid.uuid4().hex)"},{"line_number":3242,"context_line":"        with mock.patch(\u0027keystone.resource.backends.sql.LOG\u0027) as mock_log:"},{"line_number":3243,"context_line":"            self.resource_api.delete_projects_from_ids(projects_ids)"},{"line_number":3244,"context_line":"            self.assertTrue(mock_log.warning.called)"},{"line_number":3245,"context_line":"        # The existing project was deleted."},{"line_number":3246,"context_line":"        self.assertRaises(exception.ProjectNotFound,"},{"line_number":3247,"context_line":"                          self.resource_api.driver.get_project,"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a5de9d1_57ff05aa","line":3244,"range":{"start_line":3244,"start_character":37,"end_line":3244,"end_character":44},"in_reply_to":"7a5de9d1_cba117ab","updated":"2016-01-28 18:42:49.000000000","message":"I guess the test docstring suffices to identify the issued warning. what do you think?","commit_id":"1d0d4e458f88598200b28cbbc5f8dafeab592e3c"},{"author":{"_account_id":11428,"name":"Ajaya Agrawal","email":"ajku.agr@gmail.com","username":"ajayaa"},"change_message_id":"57d6ac906ca0c22c8d0d7161f4930c3a3a80fea8","unresolved":false,"context_lines":[{"line_number":3238,"context_line":"        self.resource_api.create_project(project_ref[\u0027id\u0027], project_ref)"},{"line_number":3239,"context_line":""},{"line_number":3240,"context_line":"        # Setting up the id\u0027s list"},{"line_number":3241,"context_line":"        projects_ids \u003d (project_ref[\u0027id\u0027], uuid.uuid4().hex)"},{"line_number":3242,"context_line":"        with mock.patch(\u0027keystone.resource.backends.sql.LOG\u0027) as mock_log:"},{"line_number":3243,"context_line":"            self.resource_api.delete_projects_from_ids(projects_ids)"},{"line_number":3244,"context_line":"            self.assertTrue(mock_log.warning.called)"}],"source_content_type":"text/x-python","patch_set":22,"id":"7a5de9d1_ac4ea038","line":3241,"range":{"start_line":3241,"start_character":24,"end_line":3241,"end_character":35},"updated":"2016-02-01 21:09:50.000000000","message":"Should this be a list in stead of a tuple?","commit_id":"2af56327d5c97feb5289d746e37a2c45da1fc428"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"6d978176d2582eca7c69828afc3409e9c51fa312","unresolved":false,"context_lines":[{"line_number":3238,"context_line":"        self.resource_api.create_project(project_ref[\u0027id\u0027], project_ref)"},{"line_number":3239,"context_line":""},{"line_number":3240,"context_line":"        # Setting up the id\u0027s list"},{"line_number":3241,"context_line":"        projects_ids \u003d (project_ref[\u0027id\u0027], uuid.uuid4().hex)"},{"line_number":3242,"context_line":"        with mock.patch(\u0027keystone.resource.backends.sql.LOG\u0027) as mock_log:"},{"line_number":3243,"context_line":"            self.resource_api.delete_projects_from_ids(projects_ids)"},{"line_number":3244,"context_line":"            self.assertTrue(mock_log.warning.called)"}],"source_content_type":"text/x-python","patch_set":22,"id":"5a5ae5dd_9847ee1c","line":3241,"range":{"start_line":3241,"start_character":24,"end_line":3241,"end_character":35},"in_reply_to":"7a5de9d1_ac4ea038","updated":"2016-02-04 16:42:44.000000000","message":"it doesn\u0027t actually make difference, as long as we\u0027re passing an iterable","commit_id":"2af56327d5c97feb5289d746e37a2c45da1fc428"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"54e92c7c6f65d8525941191e122f52b507da7640","unresolved":false,"context_lines":[{"line_number":3211,"context_line":"                          leaf_project[\u0027id\u0027])"},{"line_number":3212,"context_line":""},{"line_number":3213,"context_line":"    def test_delete_projects_from_ids(self):"},{"line_number":3214,"context_line":"        \"\"\"Tests the resource backend call delete_projects_from_ids\"\"\""},{"line_number":3215,"context_line":"        project1_ref \u003d unit.new_project_ref(domain_id\u003dDEFAULT_DOMAIN_ID)"},{"line_number":3216,"context_line":"        project2_ref \u003d unit.new_project_ref(domain_id\u003dDEFAULT_DOMAIN_ID)"},{"line_number":3217,"context_line":"        projects \u003d (project1_ref, project2_ref)"}],"source_content_type":"text/x-python","patch_set":23,"id":"5a5ae5dd_83918d49","line":3214,"range":{"start_line":3214,"start_character":38,"end_line":3214,"end_character":67},"updated":"2016-02-05 09:46:19.000000000","message":"better to say what the expected result instead of just say the method is called.","commit_id":"7f2af0676ebd86a2cecc4b9b16644137d3390d1d"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"62592f3eb2ca3613f8ce0537d3589e83f4cd99ed","unresolved":false,"context_lines":[{"line_number":3211,"context_line":"                          leaf_project[\u0027id\u0027])"},{"line_number":3212,"context_line":""},{"line_number":3213,"context_line":"    def test_delete_projects_from_ids(self):"},{"line_number":3214,"context_line":"        \"\"\"Tests the resource backend call delete_projects_from_ids\"\"\""},{"line_number":3215,"context_line":"        project1_ref \u003d unit.new_project_ref(domain_id\u003dDEFAULT_DOMAIN_ID)"},{"line_number":3216,"context_line":"        project2_ref \u003d unit.new_project_ref(domain_id\u003dDEFAULT_DOMAIN_ID)"},{"line_number":3217,"context_line":"        projects \u003d (project1_ref, project2_ref)"}],"source_content_type":"text/x-python","patch_set":23,"id":"5a5ae5dd_80cf3528","line":3214,"range":{"start_line":3214,"start_character":38,"end_line":3214,"end_character":67},"in_reply_to":"5a5ae5dd_83918d49","updated":"2016-02-05 14:37:44.000000000","message":"ok. will do","commit_id":"7f2af0676ebd86a2cecc4b9b16644137d3390d1d"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"54e92c7c6f65d8525941191e122f52b507da7640","unresolved":false,"context_lines":[{"line_number":3229,"context_line":"                              project_id)"},{"line_number":3230,"context_line":""},{"line_number":3231,"context_line":"        # Passing an empty list is silently ignored"},{"line_number":3232,"context_line":"        self.resource_api.driver.delete_projects_from_ids([])"},{"line_number":3233,"context_line":""},{"line_number":3234,"context_line":"    def test_delete_projects_from_ids_with_no_existing_project_id(self):"},{"line_number":3235,"context_line":"        \"\"\"Tests delete_projects_from_ids issues warning if not found."}],"source_content_type":"text/x-python","patch_set":23,"id":"5a5ae5dd_e3bf21a8","line":3232,"range":{"start_line":3232,"start_character":8,"end_line":3232,"end_character":61},"updated":"2016-02-05 09:46:19.000000000","message":"Does this could be fell into \"no_existing_project_id\" in the following testcase?","commit_id":"7f2af0676ebd86a2cecc4b9b16644137d3390d1d"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"62592f3eb2ca3613f8ce0537d3589e83f4cd99ed","unresolved":false,"context_lines":[{"line_number":3229,"context_line":"                              project_id)"},{"line_number":3230,"context_line":""},{"line_number":3231,"context_line":"        # Passing an empty list is silently ignored"},{"line_number":3232,"context_line":"        self.resource_api.driver.delete_projects_from_ids([])"},{"line_number":3233,"context_line":""},{"line_number":3234,"context_line":"    def test_delete_projects_from_ids_with_no_existing_project_id(self):"},{"line_number":3235,"context_line":"        \"\"\"Tests delete_projects_from_ids issues warning if not found."}],"source_content_type":"text/x-python","patch_set":23,"id":"5a5ae5dd_60547952","line":3232,"range":{"start_line":3232,"start_character":8,"end_line":3232,"end_character":61},"in_reply_to":"5a5ae5dd_e3bf21a8","updated":"2016-02-05 14:37:44.000000000","message":"actually, I think it makes more sense staying here, since this has no error. both of them make sense, though","commit_id":"7f2af0676ebd86a2cecc4b9b16644137d3390d1d"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"232cab0b4abd2ca4353e7559593bb30099a5f33d","unresolved":false,"context_lines":[{"line_number":3222,"context_line":"        for project in projects:"},{"line_number":3223,"context_line":"            self.resource_api.create_project(project[\u0027id\u0027], project)"},{"line_number":3224,"context_line":""},{"line_number":3225,"context_line":"        # Setting up the id\u0027s list"},{"line_number":3226,"context_line":"        projects_ids \u003d [p[\u0027id\u0027] for p in projects]"},{"line_number":3227,"context_line":"        self.resource_api.driver.delete_projects_from_ids(projects_ids)"},{"line_number":3228,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"5a5ae5dd_f1134fb6","line":3225,"range":{"start_line":3225,"start_character":25,"end_line":3225,"end_character":27},"updated":"2016-02-05 21:16:16.000000000","message":"(nit) ID","commit_id":"bb869f1e274f9d952dcc268b8ab3b913a3e31aa4"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"2a733f1edd2d78a5e191e9bb1cfa228459ec7649","unresolved":false,"context_lines":[{"line_number":3222,"context_line":"        for project in projects:"},{"line_number":3223,"context_line":"            self.resource_api.create_project(project[\u0027id\u0027], project)"},{"line_number":3224,"context_line":""},{"line_number":3225,"context_line":"        # Setting up the id\u0027s list"},{"line_number":3226,"context_line":"        projects_ids \u003d [p[\u0027id\u0027] for p in projects]"},{"line_number":3227,"context_line":"        self.resource_api.driver.delete_projects_from_ids(projects_ids)"},{"line_number":3228,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"3a57f1b5_1b4eaf6f","line":3225,"range":{"start_line":3225,"start_character":25,"end_line":3225,"end_character":27},"in_reply_to":"5a5ae5dd_f1134fb6","updated":"2016-02-10 19:14:04.000000000","message":"Done","commit_id":"bb869f1e274f9d952dcc268b8ab3b913a3e31aa4"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"232cab0b4abd2ca4353e7559593bb30099a5f33d","unresolved":false,"context_lines":[{"line_number":3238,"context_line":"    def test_delete_projects_from_ids_with_no_existing_project_id(self):"},{"line_number":3239,"context_line":"        \"\"\"Tests delete_projects_from_ids issues warning if not found."},{"line_number":3240,"context_line":""},{"line_number":3241,"context_line":"        Tests the resource backend call delete_projects_from_ids passing non"},{"line_number":3242,"context_line":"        existing project_ids, which are logged and ignored by the backend."},{"line_number":3243,"context_line":"        \"\"\""},{"line_number":3244,"context_line":"        project_ref \u003d unit.new_project_ref(domain_id\u003dDEFAULT_DOMAIN_ID)"},{"line_number":3245,"context_line":"        self.resource_api.create_project(project_ref[\u0027id\u0027], project_ref)"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a5ae5dd_314c87c7","line":3242,"range":{"start_line":3241,"start_character":65,"end_line":3242,"end_character":46},"updated":"2016-02-05 21:16:16.000000000","message":"(nit) \"a non existing ID in project_ids, which is logged\" sounds more accurate for you ?","commit_id":"bb869f1e274f9d952dcc268b8ab3b913a3e31aa4"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"2a733f1edd2d78a5e191e9bb1cfa228459ec7649","unresolved":false,"context_lines":[{"line_number":3238,"context_line":"    def test_delete_projects_from_ids_with_no_existing_project_id(self):"},{"line_number":3239,"context_line":"        \"\"\"Tests delete_projects_from_ids issues warning if not found."},{"line_number":3240,"context_line":""},{"line_number":3241,"context_line":"        Tests the resource backend call delete_projects_from_ids passing non"},{"line_number":3242,"context_line":"        existing project_ids, which are logged and ignored by the backend."},{"line_number":3243,"context_line":"        \"\"\""},{"line_number":3244,"context_line":"        project_ref \u003d unit.new_project_ref(domain_id\u003dDEFAULT_DOMAIN_ID)"},{"line_number":3245,"context_line":"        self.resource_api.create_project(project_ref[\u0027id\u0027], project_ref)"}],"source_content_type":"text/x-python","patch_set":24,"id":"3a57f1b5_3bd4cb45","line":3242,"range":{"start_line":3241,"start_character":65,"end_line":3242,"end_character":46},"in_reply_to":"5a5ae5dd_314c87c7","updated":"2016-02-10 19:14:04.000000000","message":"Done","commit_id":"bb869f1e274f9d952dcc268b8ab3b913a3e31aa4"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"232cab0b4abd2ca4353e7559593bb30099a5f33d","unresolved":false,"context_lines":[{"line_number":3244,"context_line":"        project_ref \u003d unit.new_project_ref(domain_id\u003dDEFAULT_DOMAIN_ID)"},{"line_number":3245,"context_line":"        self.resource_api.create_project(project_ref[\u0027id\u0027], project_ref)"},{"line_number":3246,"context_line":""},{"line_number":3247,"context_line":"        # Setting up the id\u0027s list"},{"line_number":3248,"context_line":"        projects_ids \u003d (project_ref[\u0027id\u0027], uuid.uuid4().hex)"},{"line_number":3249,"context_line":"        with mock.patch(\u0027keystone.resource.backends.sql.LOG\u0027) as mock_log:"},{"line_number":3250,"context_line":"            self.resource_api.delete_projects_from_ids(projects_ids)"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a5ae5dd_7128bfe2","line":3247,"range":{"start_line":3247,"start_character":25,"end_line":3247,"end_character":27},"updated":"2016-02-05 21:16:16.000000000","message":"(nit) ID","commit_id":"bb869f1e274f9d952dcc268b8ab3b913a3e31aa4"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"2a733f1edd2d78a5e191e9bb1cfa228459ec7649","unresolved":false,"context_lines":[{"line_number":3244,"context_line":"        project_ref \u003d unit.new_project_ref(domain_id\u003dDEFAULT_DOMAIN_ID)"},{"line_number":3245,"context_line":"        self.resource_api.create_project(project_ref[\u0027id\u0027], project_ref)"},{"line_number":3246,"context_line":""},{"line_number":3247,"context_line":"        # Setting up the id\u0027s list"},{"line_number":3248,"context_line":"        projects_ids \u003d (project_ref[\u0027id\u0027], uuid.uuid4().hex)"},{"line_number":3249,"context_line":"        with mock.patch(\u0027keystone.resource.backends.sql.LOG\u0027) as mock_log:"},{"line_number":3250,"context_line":"            self.resource_api.delete_projects_from_ids(projects_ids)"}],"source_content_type":"text/x-python","patch_set":24,"id":"3a57f1b5_fbf633f8","line":3247,"range":{"start_line":3247,"start_character":25,"end_line":3247,"end_character":27},"in_reply_to":"5a5ae5dd_7128bfe2","updated":"2016-02-10 19:14:04.000000000","message":"Done","commit_id":"bb869f1e274f9d952dcc268b8ab3b913a3e31aa4"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"232cab0b4abd2ca4353e7559593bb30099a5f33d","unresolved":false,"context_lines":[{"line_number":3248,"context_line":"        projects_ids \u003d (project_ref[\u0027id\u0027], uuid.uuid4().hex)"},{"line_number":3249,"context_line":"        with mock.patch(\u0027keystone.resource.backends.sql.LOG\u0027) as mock_log:"},{"line_number":3250,"context_line":"            self.resource_api.delete_projects_from_ids(projects_ids)"},{"line_number":3251,"context_line":"            self.assertTrue(mock_log.warning.called)"},{"line_number":3252,"context_line":"        # The existing project was deleted."},{"line_number":3253,"context_line":"        self.assertRaises(exception.ProjectNotFound,"},{"line_number":3254,"context_line":"                          self.resource_api.driver.get_project,"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a5ae5dd_514903b6","line":3251,"range":{"start_line":3251,"start_character":37,"end_line":3251,"end_character":44},"updated":"2016-02-05 21:16:16.000000000","message":"How do we know the expected warning was the one thrown here ?","commit_id":"bb869f1e274f9d952dcc268b8ab3b913a3e31aa4"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"2a733f1edd2d78a5e191e9bb1cfa228459ec7649","unresolved":false,"context_lines":[{"line_number":3248,"context_line":"        projects_ids \u003d (project_ref[\u0027id\u0027], uuid.uuid4().hex)"},{"line_number":3249,"context_line":"        with mock.patch(\u0027keystone.resource.backends.sql.LOG\u0027) as mock_log:"},{"line_number":3250,"context_line":"            self.resource_api.delete_projects_from_ids(projects_ids)"},{"line_number":3251,"context_line":"            self.assertTrue(mock_log.warning.called)"},{"line_number":3252,"context_line":"        # The existing project was deleted."},{"line_number":3253,"context_line":"        self.assertRaises(exception.ProjectNotFound,"},{"line_number":3254,"context_line":"                          self.resource_api.driver.get_project,"}],"source_content_type":"text/x-python","patch_set":24,"id":"3a57f1b5_3bedab25","line":3251,"range":{"start_line":3251,"start_character":37,"end_line":3251,"end_character":44},"in_reply_to":"5a5ae5dd_514903b6","updated":"2016-02-10 19:14:04.000000000","message":"we only know assert that the warning method was called, which is the common procedure for this type of logging check.","commit_id":"bb869f1e274f9d952dcc268b8ab3b913a3e31aa4"}],"keystone/tests/unit/test_backend_ldap.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"e455bcb4774e6b063cdd0bcdd1873fae0d43d929","unresolved":false,"context_lines":[{"line_number":1672,"context_line":"                          project[\u0027id\u0027], project)"},{"line_number":1673,"context_line":""},{"line_number":1674,"context_line":"    def test_delete_projects_from_ids_with_no_existing_project_id(self):"},{"line_number":1675,"context_line":"        \"\"\"Tests delete_projects_from_ids issues warning if not found"},{"line_number":1676,"context_line":""},{"line_number":1677,"context_line":"        Tests the resource backend call delete_projects_from_ids passing non"},{"line_number":1678,"context_line":"        existing project_ids, which are logged and ignored by the backend."}],"source_content_type":"text/x-python","patch_set":10,"id":"fa69d971_78b73f3a","line":1675,"updated":"2016-01-05 21:16:40.000000000","message":"same comment as previous.","commit_id":"c82d09b4e876cfde1bd8f6b8558009b4b20a6069"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"c16ece0bda7f6e16286f9ed77d89e8cfd6c72022","unresolved":false,"context_lines":[{"line_number":1672,"context_line":"                          project[\u0027id\u0027], project)"},{"line_number":1673,"context_line":""},{"line_number":1674,"context_line":"    def test_delete_projects_from_ids_with_no_existing_project_id(self):"},{"line_number":1675,"context_line":"        \"\"\"Tests delete_projects_from_ids issues warning if not found"},{"line_number":1676,"context_line":""},{"line_number":1677,"context_line":"        Tests the resource backend call delete_projects_from_ids passing non"},{"line_number":1678,"context_line":"        existing project_ids, which are logged and ignored by the backend."}],"source_content_type":"text/x-python","patch_set":10,"id":"fa69d971_8cd6cac1","line":1675,"in_reply_to":"fa69d971_78b73f3a","updated":"2016-01-08 13:17:14.000000000","message":"Done","commit_id":"c82d09b4e876cfde1bd8f6b8558009b4b20a6069"}]}
