)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"b70193e8ccb2c12c081744062fcc1f3eab31e876","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Surya Seetharaman \u003csuryaseetharaman.9@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2018-10-04 10:33:06 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Modify get_by_cell_and_project() to get_not_qfd_by_cell_and_project()"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"InstanceMappingList.get_by_cell_and_project() is being changed to"},{"line_number":10,"context_line":"get_not_qfd_by_cell_and_project() by which we change the method to"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3f79a3b5_a88cc3d8","line":7,"range":{"start_line":7,"start_character":44,"end_line":7,"end_character":47},"updated":"2018-10-04 18:15:09.000000000","message":"No longer accurate (sorry :P)","commit_id":"db1cae32f14183c3d0dbba4e459ccc0be0562fe4"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"3528af9b33097402eee2714e501892f5ad880225","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Surya Seetharaman \u003csuryaseetharaman.9@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2018-10-04 10:33:06 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Modify get_by_cell_and_project() to get_not_qfd_by_cell_and_project()"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"InstanceMappingList.get_by_cell_and_project() is being changed to"},{"line_number":10,"context_line":"get_not_qfd_by_cell_and_project() by which we change the method to"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3f79a3b5_e96713b8","line":7,"range":{"start_line":7,"start_character":44,"end_line":7,"end_character":47},"in_reply_to":"3f79a3b5_a88cc3d8","updated":"2018-10-05 08:32:15.000000000","message":"Done","commit_id":"db1cae32f14183c3d0dbba4e459ccc0be0562fe4"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"9ae13eef382d2b5357ca6397b6e7bb65511a4dee","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"InstanceMappingList.get_by_cell_and_project() is being changed to"},{"line_number":10,"context_line":"get_not_deleted_by_cell_and_project() by which we change the method to"},{"line_number":11,"context_line":"filter out not queued_for_delete instance_mappings and also for"},{"line_number":12,"context_line":"the method to accept cell_uuid as the input instead of the cell_id."},{"line_number":13,"context_line":"This is more useful than the ealier approach since it would increase"},{"line_number":14,"context_line":"the performance slightly by not having to query for the cell_mappings"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3f79a3b5_b23945f2","line":11,"range":{"start_line":11,"start_character":0,"end_line":11,"end_character":50},"updated":"2018-10-09 07:00:02.000000000","message":"Maybe I always get the wrong, but does \u0027filter out\u0027 means \u0027have queued_for_delete\u003dFalse as the result\u0027 or \u0027don\u0027t include queued_for_delete\u003dFalse in the result\u0027 ? In my understanding it is the latter one, and your code does the first one.","commit_id":"847b237731bb1f2c35a4f4222d8f0544a6a018dc"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"565f25acd8be64069466f4a49dff3f9dd2486319","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"InstanceMappingList.get_by_cell_and_project() is being changed to"},{"line_number":10,"context_line":"get_not_deleted_by_cell_and_project() by which we change the method to"},{"line_number":11,"context_line":"filter out not queued_for_delete instance_mappings and also for"},{"line_number":12,"context_line":"the method to accept cell_uuid as the input instead of the cell_id."},{"line_number":13,"context_line":"This is more useful than the ealier approach since it would increase"},{"line_number":14,"context_line":"the performance slightly by not having to query for the cell_mappings"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3f79a3b5_35c6756b","line":11,"range":{"start_line":11,"start_character":0,"end_line":11,"end_character":50},"in_reply_to":"3f79a3b5_b23945f2","updated":"2018-10-09 14:20:55.000000000","message":"yea filter out \u0027not\u0027 queued_for_delete means give out objects where queued_for_delete\u003dFalse. We basically don\u0027t want instance mappings that are already queued_for_deletion.","commit_id":"847b237731bb1f2c35a4f4222d8f0544a6a018dc"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"153d3b8f38be919677035d2080a44687a09df56f","unresolved":false,"context_lines":[{"line_number":9,"context_line":"InstanceMappingList.get_by_cell_and_project() is being changed to"},{"line_number":10,"context_line":"get_not_deleted_by_cell_and_projects() by which we change the method to"},{"line_number":11,"context_line":"filter out not queued_for_delete instance_mappings and also for"},{"line_number":12,"context_line":"the method to accept cell_uuid as the input instead of the cell_id."},{"line_number":13,"context_line":"This also takes a list of project_ids instead of just one."},{"line_number":14,"context_line":"This is more useful than the ealier approach since it would increase"},{"line_number":15,"context_line":"the performance slightly by not having to query for the cell_mappings"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"3f79a3b5_58708b73","line":12,"updated":"2018-10-26 19:28:18.000000000","message":"nit: could also mention the limit filter","commit_id":"972d0aefdee45eb2092e3e824f866c6630bf3138"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9227b35c303bb8032d806c58d663268d7a4b0cf7","unresolved":false,"context_lines":[{"line_number":10,"context_line":"get_not_deleted_by_cell_and_projects() by which we change the method to"},{"line_number":11,"context_line":"filter out not queued_for_delete instance_mappings and also for"},{"line_number":12,"context_line":"the method to accept cell_uuid as the input instead of the cell_id."},{"line_number":13,"context_line":"This also takes a list of project_ids instead of just one."},{"line_number":14,"context_line":"This is more useful than the ealier approach since it would increase"},{"line_number":15,"context_line":"the performance slightly by not having to query for the cell_mappings"},{"line_number":16,"context_line":"explicitly to get the cell ids from the cell uuids obtained from"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"3f79a3b5_d886db16","line":13,"range":{"start_line":13,"start_character":0,"end_line":13,"end_character":58},"updated":"2018-10-26 19:35:09.000000000","message":"I guess I should ask here, why is this needed? See my comments in the change on top of this in the series, but I don\u0027t think the API allows you to pass something like this:\n\nGET /servers?all_tenants\u003d1\u0026project_id\u003d1\u0026project_id\u003d2\n\nI mean, you can pass that I think, but I don\u0027t think we honor it, we\u0027ll just take the last specified project_id.","commit_id":"972d0aefdee45eb2092e3e824f866c6630bf3138"}],"nova/objects/instance_mapping.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"3d05b2abb37a55c960f2eee8c89cdc9ce8e4d5d6","unresolved":false,"context_lines":[{"line_number":264,"context_line":"                .all())"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"    @classmethod"},{"line_number":267,"context_line":"    def get_not_qfd_by_cell_and_project(cls, context, cell_uuid, project_id):"},{"line_number":268,"context_line":"        db_mappings \u003d cls._get_not_qfd_by_cell_and_project_from_db(context,"},{"line_number":269,"context_line":"                                                                   cell_uuid,"},{"line_number":270,"context_line":"                                                                   project_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_5a3b8e99","line":267,"range":{"start_line":267,"start_character":16,"end_line":267,"end_character":19},"updated":"2018-10-03 18:57:49.000000000","message":"This is maybe too obscure for some people, and at least deserves a docstring I think. Maybe just s/qfd/deleted/ even though it\u0027s really just queued? It\u0027s basically the same thing.","commit_id":"c8c3469cb48c53b1643e6c655911e086b218d718"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"ea173088dac89123f3c8e7776a4c2c35d2de903d","unresolved":false,"context_lines":[{"line_number":264,"context_line":"                .all())"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"    @classmethod"},{"line_number":267,"context_line":"    def get_not_qfd_by_cell_and_project(cls, context, cell_uuid, project_id):"},{"line_number":268,"context_line":"        db_mappings \u003d cls._get_not_qfd_by_cell_and_project_from_db(context,"},{"line_number":269,"context_line":"                                                                   cell_uuid,"},{"line_number":270,"context_line":"                                                                   project_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_3167cc26","line":267,"range":{"start_line":267,"start_character":16,"end_line":267,"end_character":19},"in_reply_to":"3f79a3b5_5a3b8e99","updated":"2018-10-04 08:22:28.000000000","message":"cool, yea qfd might not be a \"at a first glance I understood type of function name\". I am okay with \"deleted\".","commit_id":"c8c3469cb48c53b1643e6c655911e086b218d718"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cec7b0b34e16fc044de8caf69290a28503948f37","unresolved":false,"context_lines":[{"line_number":264,"context_line":"                .all())"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"    @classmethod"},{"line_number":267,"context_line":"    def get_not_deleted_by_cell_and_project(cls, context, cell_uuid,"},{"line_number":268,"context_line":"                                            project_id):"},{"line_number":269,"context_line":"        db_mappings \u003d cls._get_not_deleted_by_cell_and_project_from_db("},{"line_number":270,"context_line":"            context, cell_uuid, project_id)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_a946fb55","line":267,"range":{"start_line":267,"start_character":8,"end_line":267,"end_character":43},"updated":"2018-10-17 17:11:34.000000000","message":"Hmm, I guess this is OK since it\u0027s not versioned?","commit_id":"847b237731bb1f2c35a4f4222d8f0544a6a018dc"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"9afbbd71d523c473d212e8fe2269ad7d8dee75ab","unresolved":false,"context_lines":[{"line_number":264,"context_line":"                .all())"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"    @classmethod"},{"line_number":267,"context_line":"    def get_not_deleted_by_cell_and_project(cls, context, cell_uuid,"},{"line_number":268,"context_line":"                                            project_id):"},{"line_number":269,"context_line":"        db_mappings \u003d cls._get_not_deleted_by_cell_and_project_from_db("},{"line_number":270,"context_line":"            context, cell_uuid, project_id)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_ae558454","line":267,"range":{"start_line":267,"start_character":8,"end_line":267,"end_character":43},"in_reply_to":"3f79a3b5_a946fb55","updated":"2018-10-18 18:13:16.000000000","message":"Yup. In general all of the api objects shouldn\u0027t really have/need remotable methods anyway.","commit_id":"847b237731bb1f2c35a4f4222d8f0544a6a018dc"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2021d416150e5ba2275ac84bd5b278b0a10bfd32","unresolved":false,"context_lines":[{"line_number":254,"context_line":"    @staticmethod"},{"line_number":255,"context_line":"    @db_api.api_context_manager.reader"},{"line_number":256,"context_line":"    def _get_not_deleted_by_cell_and_projects_from_db(context, cell_uuid,"},{"line_number":257,"context_line":"                                                     project_ids):"},{"line_number":258,"context_line":"        return (context.session.query(api_models.InstanceMapping)"},{"line_number":259,"context_line":"                .filter(api_models.InstanceMapping.project_id.in_(project_ids))"},{"line_number":260,"context_line":"                .filter_by(queued_for_delete\u003dfalse())"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_c6137559","line":257,"updated":"2018-10-25 20:45:21.000000000","message":"nit: alignment","commit_id":"1acf9ae3965b005c1af05e485f3e872222b21acc"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2021d416150e5ba2275ac84bd5b278b0a10bfd32","unresolved":false,"context_lines":[{"line_number":259,"context_line":"                .filter(api_models.InstanceMapping.project_id.in_(project_ids))"},{"line_number":260,"context_line":"                .filter_by(queued_for_delete\u003dfalse())"},{"line_number":261,"context_line":"                .join(\u0027cell_mapping\u0027)"},{"line_number":262,"context_line":"                .options(joinedload(\u0027cell_mapping\u0027))"},{"line_number":263,"context_line":"                .filter(api_models.CellMapping.uuid \u003d\u003d cell_uuid)"},{"line_number":264,"context_line":"                .all())"},{"line_number":265,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_c6413539","line":262,"range":{"start_line":262,"start_character":16,"end_line":262,"end_character":52},"updated":"2018-10-25 20:45:21.000000000","message":"I\u0027m not smart enough in the ways of the sqla here, but do we need this if we have the join above? Or is joinedload just about loading the attribute and join is about the query?","commit_id":"1acf9ae3965b005c1af05e485f3e872222b21acc"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"9addb113754aa020c69717e980c32f5552f272f5","unresolved":false,"context_lines":[{"line_number":259,"context_line":"                .filter(api_models.InstanceMapping.project_id.in_(project_ids))"},{"line_number":260,"context_line":"                .filter_by(queued_for_delete\u003dfalse())"},{"line_number":261,"context_line":"                .join(\u0027cell_mapping\u0027)"},{"line_number":262,"context_line":"                .options(joinedload(\u0027cell_mapping\u0027))"},{"line_number":263,"context_line":"                .filter(api_models.CellMapping.uuid \u003d\u003d cell_uuid)"},{"line_number":264,"context_line":"                .all())"},{"line_number":265,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_e7721ab0","line":262,"range":{"start_line":262,"start_character":16,"end_line":262,"end_character":52},"in_reply_to":"3f79a3b5_c6413539","updated":"2018-10-26 16:42:32.000000000","message":"Yep, both are required, but I\u0027m not sure why. Without the join, the filter won\u0027t work properly, and without the joinedload, the cell_mapping doesn\u0027t get populated.","commit_id":"1acf9ae3965b005c1af05e485f3e872222b21acc"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2021d416150e5ba2275ac84bd5b278b0a10bfd32","unresolved":false,"context_lines":[{"line_number":265,"context_line":""},{"line_number":266,"context_line":"    @classmethod"},{"line_number":267,"context_line":"    def get_not_deleted_by_cell_and_projects(cls, context, cell_uuid,"},{"line_number":268,"context_line":"                                            project_ids):"},{"line_number":269,"context_line":"        db_mappings \u003d cls._get_not_deleted_by_cell_and_projects_from_db("},{"line_number":270,"context_line":"            context, cell_uuid, project_ids)"},{"line_number":271,"context_line":"        return base.obj_make_list(context, cls(), objects.InstanceMapping,"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_86233daa","line":268,"updated":"2018-10-25 20:45:21.000000000","message":"nit: same","commit_id":"1acf9ae3965b005c1af05e485f3e872222b21acc"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"16bb5d3c8249f206dd7e4449ce58d00f2441f486","unresolved":false,"context_lines":[{"line_number":257,"context_line":"                                                      project_ids, limit):"},{"line_number":258,"context_line":"        query \u003d ("},{"line_number":259,"context_line":"            context.session.query(api_models.InstanceMapping)"},{"line_number":260,"context_line":"            .filter(api_models.InstanceMapping.project_id.in_(project_ids))"},{"line_number":261,"context_line":"            .filter_by(queued_for_delete\u003dfalse())"},{"line_number":262,"context_line":"            .join(\u0027cell_mapping\u0027)"},{"line_number":263,"context_line":"            .options(joinedload(\u0027cell_mapping\u0027))"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_214f578d","line":260,"range":{"start_line":260,"start_character":58,"end_line":260,"end_character":74},"updated":"2018-10-31 13:29:03.000000000","message":"This doesn\u0027t need to be plural - you can\u0027t filter on multiple projects in the API when listing servers.","commit_id":"18c93e743ba0ec66e16947bf7c8b884dddb38963"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"ee56b8f8caa3f88924fc59a78bd6aa433540c683","unresolved":false,"context_lines":[{"line_number":257,"context_line":"                                                      project_ids, limit):"},{"line_number":258,"context_line":"        query \u003d ("},{"line_number":259,"context_line":"            context.session.query(api_models.InstanceMapping)"},{"line_number":260,"context_line":"            .filter(api_models.InstanceMapping.project_id.in_(project_ids))"},{"line_number":261,"context_line":"            .filter_by(queued_for_delete\u003dfalse())"},{"line_number":262,"context_line":"            .join(\u0027cell_mapping\u0027)"},{"line_number":263,"context_line":"            .options(joinedload(\u0027cell_mapping\u0027))"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_72019b03","line":260,"range":{"start_line":260,"start_character":58,"end_line":260,"end_character":74},"in_reply_to":"3f79a3b5_214f578d","updated":"2018-10-31 14:28:32.000000000","message":"Done","commit_id":"18c93e743ba0ec66e16947bf7c8b884dddb38963"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"a001ded8e8e6e5d9a781484c183ee154347e85f2","unresolved":false,"context_lines":[{"line_number":259,"context_line":"            context.session.query(api_models.InstanceMapping)"},{"line_number":260,"context_line":"            .filter(api_models.InstanceMapping.project_id.in_(project_ids))"},{"line_number":261,"context_line":"            .filter_by(queued_for_delete\u003dfalse())"},{"line_number":262,"context_line":"            .join(\u0027cell_mapping\u0027)"},{"line_number":263,"context_line":"            .options(joinedload(\u0027cell_mapping\u0027))"},{"line_number":264,"context_line":"            .filter(api_models.CellMapping.uuid \u003d\u003d cell_uuid))"},{"line_number":265,"context_line":"        if limit is not None:"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_6848162a","line":262,"range":{"start_line":262,"start_character":12,"end_line":262,"end_character":33},"updated":"2018-10-26 22:27:33.000000000","message":"What does this do if we already joinedload(\u0027cell_mapping\u0027)?","commit_id":"18c93e743ba0ec66e16947bf7c8b884dddb38963"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"3425511daeb05790b670034689ae0ed35bf93228","unresolved":false,"context_lines":[{"line_number":259,"context_line":"            context.session.query(api_models.InstanceMapping)"},{"line_number":260,"context_line":"            .filter(api_models.InstanceMapping.project_id.in_(project_ids))"},{"line_number":261,"context_line":"            .filter_by(queued_for_delete\u003dfalse())"},{"line_number":262,"context_line":"            .join(\u0027cell_mapping\u0027)"},{"line_number":263,"context_line":"            .options(joinedload(\u0027cell_mapping\u0027))"},{"line_number":264,"context_line":"            .filter(api_models.CellMapping.uuid \u003d\u003d cell_uuid))"},{"line_number":265,"context_line":"        if limit is not None:"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_2e767b94","line":262,"range":{"start_line":262,"start_character":12,"end_line":262,"end_character":33},"in_reply_to":"3f79a3b5_3a81d9fb","updated":"2018-10-30 15:46:05.000000000","message":"ah okay, thanks for the info","commit_id":"18c93e743ba0ec66e16947bf7c8b884dddb38963"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"e27bd3db31bae54ce48f5f880bc6c181200f4316","unresolved":false,"context_lines":[{"line_number":259,"context_line":"            context.session.query(api_models.InstanceMapping)"},{"line_number":260,"context_line":"            .filter(api_models.InstanceMapping.project_id.in_(project_ids))"},{"line_number":261,"context_line":"            .filter_by(queued_for_delete\u003dfalse())"},{"line_number":262,"context_line":"            .join(\u0027cell_mapping\u0027)"},{"line_number":263,"context_line":"            .options(joinedload(\u0027cell_mapping\u0027))"},{"line_number":264,"context_line":"            .filter(api_models.CellMapping.uuid \u003d\u003d cell_uuid))"},{"line_number":265,"context_line":"        if limit is not None:"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_d71f5eb7","line":262,"range":{"start_line":262,"start_character":12,"end_line":262,"end_character":33},"in_reply_to":"3f79a3b5_6848162a","updated":"2018-10-30 12:30:46.000000000","message":"joinedload is getting the CellMapping table objects while \"join\" is needed for filtering them based on the cell_uuid. It doesn\u0027t work otherwise.","commit_id":"18c93e743ba0ec66e16947bf7c8b884dddb38963"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"1c804f2033a08782e4f78c7461fc0e0c13eac496","unresolved":false,"context_lines":[{"line_number":259,"context_line":"            context.session.query(api_models.InstanceMapping)"},{"line_number":260,"context_line":"            .filter(api_models.InstanceMapping.project_id.in_(project_ids))"},{"line_number":261,"context_line":"            .filter_by(queued_for_delete\u003dfalse())"},{"line_number":262,"context_line":"            .join(\u0027cell_mapping\u0027)"},{"line_number":263,"context_line":"            .options(joinedload(\u0027cell_mapping\u0027))"},{"line_number":264,"context_line":"            .filter(api_models.CellMapping.uuid \u003d\u003d cell_uuid))"},{"line_number":265,"context_line":"        if limit is not None:"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_3a81d9fb","line":262,"range":{"start_line":262,"start_character":12,"end_line":262,"end_character":33},"in_reply_to":"3f79a3b5_d71f5eb7","updated":"2018-10-30 13:00:49.000000000","message":"It will, if lazy load would be enabled :) In oslo.db it\u0027s set o False by default.","commit_id":"18c93e743ba0ec66e16947bf7c8b884dddb38963"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"a001ded8e8e6e5d9a781484c183ee154347e85f2","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        return query.all()"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"    @classmethod"},{"line_number":270,"context_line":"    def get_not_deleted_by_cell_and_projects(cls, context, cell_uuid,"},{"line_number":271,"context_line":"                                             project_ids, limit\u003dNone):"},{"line_number":272,"context_line":"        db_mappings \u003d cls._get_not_deleted_by_cell_and_projects_from_db("},{"line_number":273,"context_line":"            context, cell_uuid, project_ids, limit)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_a5c3b738","line":270,"range":{"start_line":270,"start_character":8,"end_line":270,"end_character":44},"updated":"2018-10-26 22:27:33.000000000","message":"I don\u0027t know the history behind this method name change but usually none of the \"get\" database methods return soft deleted items anyway. That is, I\u0027m not sure why we need to name this \"get_not_deleted_*\"\n\nMaybe can we instead make it get_by_cell_and_project and add queued_for_delete as a kwarg that defaults to False? That way it\u0027s possible to use this method to get \"deleted\" ones too? I just find \"get_not_deleted\" really confusion inducing and others might too.","commit_id":"18c93e743ba0ec66e16947bf7c8b884dddb38963"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3416d30e0c9e09fdc4179ea42400330e2ae639e9","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        return query.all()"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"    @classmethod"},{"line_number":270,"context_line":"    def get_not_deleted_by_cell_and_projects(cls, context, cell_uuid,"},{"line_number":271,"context_line":"                                             project_ids, limit\u003dNone):"},{"line_number":272,"context_line":"        db_mappings \u003d cls._get_not_deleted_by_cell_and_projects_from_db("},{"line_number":273,"context_line":"            context, cell_uuid, project_ids, limit)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_dbd9c4f1","line":270,"range":{"start_line":270,"start_character":8,"end_line":270,"end_character":44},"in_reply_to":"3f79a3b5_57234e13","updated":"2018-10-30 16:52:41.000000000","message":"There are no soft deleted instance mappings, it doesn\u0027t use the SoftDeleteMixin.","commit_id":"18c93e743ba0ec66e16947bf7c8b884dddb38963"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"a83d90800e26e4b740229579f696ae9bed4b2c73","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        return query.all()"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"    @classmethod"},{"line_number":270,"context_line":"    def get_not_deleted_by_cell_and_projects(cls, context, cell_uuid,"},{"line_number":271,"context_line":"                                             project_ids, limit\u003dNone):"},{"line_number":272,"context_line":"        db_mappings \u003d cls._get_not_deleted_by_cell_and_projects_from_db("},{"line_number":273,"context_line":"            context, cell_uuid, project_ids, limit)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_8a7c5475","line":270,"range":{"start_line":270,"start_character":8,"end_line":270,"end_character":44},"in_reply_to":"3f79a3b5_6f11ca5c","updated":"2018-10-30 20:06:44.000000000","message":"OK, I see where it\u0027s coming from then. I wasn\u0027t thinking about it in relation to what it used to do, perhaps because I knew it\u0027s not been used yet (from the commit message). Other methods generally don\u0027t return deleted (qfd in this case) items by default. And before this change, there was no concept of qfd.\n\nI\u0027ll defer to you because I\u0027m the one lacking in context here. Thanks for explaining all this.","commit_id":"18c93e743ba0ec66e16947bf7c8b884dddb38963"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"3893e0da85763fef98e0a97b7182a7951f637116","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        return query.all()"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"    @classmethod"},{"line_number":270,"context_line":"    def get_not_deleted_by_cell_and_projects(cls, context, cell_uuid,"},{"line_number":271,"context_line":"                                             project_ids, limit\u003dNone):"},{"line_number":272,"context_line":"        db_mappings \u003d cls._get_not_deleted_by_cell_and_projects_from_db("},{"line_number":273,"context_line":"            context, cell_uuid, project_ids, limit)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_aab590d1","line":270,"range":{"start_line":270,"start_character":8,"end_line":270,"end_character":44},"in_reply_to":"3f79a3b5_8a7c5475","updated":"2018-10-30 20:26:54.000000000","message":"I\u0027m not talking about what this method used to do under its old name. I\u0027m talking about the behavior of all the other query methods for instance mapping. None of the stuff in the api db had a deleted flag. Now we kinda have one for this, but we ignore it in all cases except for this new method. I think we should be explicit that this one is different, or make it the same and add the override argument now.","commit_id":"18c93e743ba0ec66e16947bf7c8b884dddb38963"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"dd78174e04df4c3aa580d4163b52824292183b07","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        return query.all()"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"    @classmethod"},{"line_number":270,"context_line":"    def get_not_deleted_by_cell_and_projects(cls, context, cell_uuid,"},{"line_number":271,"context_line":"                                             project_ids, limit\u003dNone):"},{"line_number":272,"context_line":"        db_mappings \u003d cls._get_not_deleted_by_cell_and_projects_from_db("},{"line_number":273,"context_line":"            context, cell_uuid, project_ids, limit)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_be139602","line":270,"range":{"start_line":270,"start_character":8,"end_line":270,"end_character":44},"in_reply_to":"3f79a3b5_9e2b3a31","updated":"2018-10-30 17:18:49.000000000","message":"Like, is there any advantage to naming this \"get_not_deleted_by_cell_and_projects\"? It makes the code harder to understand, for me. If everyone else thinks this makes more sense and I\u0027m the only outlier, then just leave it as-is.","commit_id":"18c93e743ba0ec66e16947bf7c8b884dddb38963"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"e27bd3db31bae54ce48f5f880bc6c181200f4316","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        return query.all()"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"    @classmethod"},{"line_number":270,"context_line":"    def get_not_deleted_by_cell_and_projects(cls, context, cell_uuid,"},{"line_number":271,"context_line":"                                             project_ids, limit\u003dNone):"},{"line_number":272,"context_line":"        db_mappings \u003d cls._get_not_deleted_by_cell_and_projects_from_db("},{"line_number":273,"context_line":"            context, cell_uuid, project_ids, limit)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_57234e13","line":270,"range":{"start_line":270,"start_character":8,"end_line":270,"end_character":44},"in_reply_to":"3f79a3b5_a5c3b738","updated":"2018-10-30 12:30:46.000000000","message":"\u003e \n \u003e Maybe can we instead make it get_by_cell_and_project and add\n \u003e queued_for_delete as a kwarg that defaults to False? That way it\u0027s\n \u003e possible to use this method to get \"deleted\" ones too? I just find\n \u003e \"get_not_deleted\" really confusion inducing and others might too.\n\nSure, we can do it that way as well.","commit_id":"18c93e743ba0ec66e16947bf7c8b884dddb38963"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"7144d2589367cab09c143a1936485fcc1c2c0071","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        return query.all()"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"    @classmethod"},{"line_number":270,"context_line":"    def get_not_deleted_by_cell_and_projects(cls, context, cell_uuid,"},{"line_number":271,"context_line":"                                             project_ids, limit\u003dNone):"},{"line_number":272,"context_line":"        db_mappings \u003d cls._get_not_deleted_by_cell_and_projects_from_db("},{"line_number":273,"context_line":"            context, cell_uuid, project_ids, limit)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_6f11ca5c","line":270,"range":{"start_line":270,"start_character":8,"end_line":270,"end_character":44},"in_reply_to":"3f79a3b5_be139602","updated":"2018-10-30 20:00:02.000000000","message":"I argued for \"deleted\u0027 instead of \"queued for delete\" in an earlier set. Since there is no actual deleted notion, and since up to this point you would always get all of them, I felt that it was important to have it in the name. Otherwise this looks like all the other query methods which always return everything (and always have). I think \"queued_for_delete\" is too many words, but I\u0027d rather it be obvious. If we really need to take that out of the name, then I think we should just make this return everything by default, and add the kwarg right now (and always use it). Otherwise it\u0027s going to be confusing in a year when we forget this one is the only special query method for mappings.","commit_id":"18c93e743ba0ec66e16947bf7c8b884dddb38963"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"0849ee7eadeeb6ee668bc28f4e1ced8c30e82f75","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        return query.all()"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"    @classmethod"},{"line_number":270,"context_line":"    def get_not_deleted_by_cell_and_projects(cls, context, cell_uuid,"},{"line_number":271,"context_line":"                                             project_ids, limit\u003dNone):"},{"line_number":272,"context_line":"        db_mappings \u003d cls._get_not_deleted_by_cell_and_projects_from_db("},{"line_number":273,"context_line":"            context, cell_uuid, project_ids, limit)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_dedbf277","line":270,"range":{"start_line":270,"start_character":8,"end_line":270,"end_character":44},"in_reply_to":"3f79a3b5_dbd9c4f1","updated":"2018-10-30 17:10:49.000000000","message":"sure, I think that is what melwitt is also saying, but is it better to change this to making qfd as a kwarg for future purposes?","commit_id":"18c93e743ba0ec66e16947bf7c8b884dddb38963"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"f9d75d9a065f885928d81cd0c5fb9eadef5ce1c7","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        return query.all()"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"    @classmethod"},{"line_number":270,"context_line":"    def get_not_deleted_by_cell_and_projects(cls, context, cell_uuid,"},{"line_number":271,"context_line":"                                             project_ids, limit\u003dNone):"},{"line_number":272,"context_line":"        db_mappings \u003d cls._get_not_deleted_by_cell_and_projects_from_db("},{"line_number":273,"context_line":"            context, cell_uuid, project_ids, limit)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_9e2b3a31","line":270,"range":{"start_line":270,"start_character":8,"end_line":270,"end_character":44},"in_reply_to":"3f79a3b5_dedbf277","updated":"2018-10-30 17:17:18.000000000","message":"Yeah, I put the word \"deleted\" in quotes because they\u0027re not really deleted, they\u0027re \"queued for delete\". I don\u0027t know if we\u0027ll ever need to pull queued_for_delete mappings. So another option would be to just rename this get_by_cell_and_projects and leave the kwarg for when/if we actually need it.","commit_id":"18c93e743ba0ec66e16947bf7c8b884dddb38963"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"ee56b8f8caa3f88924fc59a78bd6aa433540c683","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        return query.all()"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"    @classmethod"},{"line_number":270,"context_line":"    def get_not_deleted_by_cell_and_project(cls, context, cell_uuid,"},{"line_number":271,"context_line":"                                            project_id, limit\u003dNone):"},{"line_number":272,"context_line":"        \"\"\"Return a limit restricted list of InstanceMapping objects which are"},{"line_number":273,"context_line":"        mapped to the specified cell_uuid, belong to the specified"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_f7ffdd00","line":270,"range":{"start_line":270,"start_character":8,"end_line":270,"end_character":43},"updated":"2018-10-31 14:28:32.000000000","message":"@melwitt: so I haven\u0027t removed the \"not_deleted\" from the name because I feel since we don\u0027t have a concept of soft-delete in the API level, \"queued_for_delete\" should just be treated like other property columns for this object. Making qfd a kwarg kind of goes against how the other queries are in the sense none of the other queries consider it (since it didn\u0027t exist before of course), but I have added a docstring below to point this out explicitly. Hope it helps.","commit_id":"7c0daae582ca65f195510693586aa8bfbd7432e4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"50e54729d21d41b1ca116f97c18b78dfe7b019d1","unresolved":false,"context_lines":[{"line_number":271,"context_line":"                                            project_id, limit\u003dNone):"},{"line_number":272,"context_line":"        \"\"\"Return a limit restricted list of InstanceMapping objects which are"},{"line_number":273,"context_line":"        mapped to the specified cell_uuid, belong to the specified"},{"line_number":274,"context_line":"        project_id and are not queued for deletion (Note that unlike the other"},{"line_number":275,"context_line":"        InstanceMappingList query methods which return all mappings"},{"line_number":276,"context_line":"        irrespective of whether they are queued for deletion this methods"},{"line_number":277,"context_line":"        explicitly queries only for those mappings that are queued for deletion"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_e73e4889","line":274,"range":{"start_line":274,"start_character":52,"end_line":274,"end_character":56},"updated":"2018-10-31 18:32:20.000000000","message":"note","commit_id":"7c0daae582ca65f195510693586aa8bfbd7432e4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f3a001776b038c463eba6398c6f7efc552367753","unresolved":false,"context_lines":[{"line_number":271,"context_line":"                                            project_id, limit\u003dNone):"},{"line_number":272,"context_line":"        \"\"\"Return a limit restricted list of InstanceMapping objects which are"},{"line_number":273,"context_line":"        mapped to the specified cell_uuid, belong to the specified"},{"line_number":274,"context_line":"        project_id and are not queued for deletion (Note that unlike the other"},{"line_number":275,"context_line":"        InstanceMappingList query methods which return all mappings"},{"line_number":276,"context_line":"        irrespective of whether they are queued for deletion this methods"},{"line_number":277,"context_line":"        explicitly queries only for those mappings that are queued for deletion"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_32747c9b","line":274,"range":{"start_line":274,"start_character":52,"end_line":274,"end_character":56},"in_reply_to":"3f79a3b5_e73e4889","updated":"2018-10-31 19:00:33.000000000","message":"Done","commit_id":"7c0daae582ca65f195510693586aa8bfbd7432e4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"50e54729d21d41b1ca116f97c18b78dfe7b019d1","unresolved":false,"context_lines":[{"line_number":273,"context_line":"        mapped to the specified cell_uuid, belong to the specified"},{"line_number":274,"context_line":"        project_id and are not queued for deletion (Note that unlike the other"},{"line_number":275,"context_line":"        InstanceMappingList query methods which return all mappings"},{"line_number":276,"context_line":"        irrespective of whether they are queued for deletion this methods"},{"line_number":277,"context_line":"        explicitly queries only for those mappings that are queued for deletion"},{"line_number":278,"context_line":"        as is evident from the naming of the method)."},{"line_number":279,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_073024b7","line":276,"range":{"start_line":276,"start_character":66,"end_line":276,"end_character":73},"updated":"2018-10-31 18:32:20.000000000","message":"method","commit_id":"7c0daae582ca65f195510693586aa8bfbd7432e4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f3a001776b038c463eba6398c6f7efc552367753","unresolved":false,"context_lines":[{"line_number":273,"context_line":"        mapped to the specified cell_uuid, belong to the specified"},{"line_number":274,"context_line":"        project_id and are not queued for deletion (Note that unlike the other"},{"line_number":275,"context_line":"        InstanceMappingList query methods which return all mappings"},{"line_number":276,"context_line":"        irrespective of whether they are queued for deletion this methods"},{"line_number":277,"context_line":"        explicitly queries only for those mappings that are queued for deletion"},{"line_number":278,"context_line":"        as is evident from the naming of the method)."},{"line_number":279,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_d268a8bd","line":276,"range":{"start_line":276,"start_character":66,"end_line":276,"end_character":73},"in_reply_to":"3f79a3b5_073024b7","updated":"2018-10-31 19:00:33.000000000","message":"Done","commit_id":"7c0daae582ca65f195510693586aa8bfbd7432e4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"50e54729d21d41b1ca116f97c18b78dfe7b019d1","unresolved":false,"context_lines":[{"line_number":274,"context_line":"        project_id and are not queued for deletion (Note that unlike the other"},{"line_number":275,"context_line":"        InstanceMappingList query methods which return all mappings"},{"line_number":276,"context_line":"        irrespective of whether they are queued for deletion this methods"},{"line_number":277,"context_line":"        explicitly queries only for those mappings that are queued for deletion"},{"line_number":278,"context_line":"        as is evident from the naming of the method)."},{"line_number":279,"context_line":"        \"\"\""},{"line_number":280,"context_line":"        db_mappings \u003d cls._get_not_deleted_by_cell_and_project_from_db("}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_474dbc3a","line":277,"range":{"start_line":277,"start_character":56,"end_line":277,"end_character":59},"updated":"2018-10-31 18:32:20.000000000","message":"are not","commit_id":"7c0daae582ca65f195510693586aa8bfbd7432e4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f3a001776b038c463eba6398c6f7efc552367753","unresolved":false,"context_lines":[{"line_number":274,"context_line":"        project_id and are not queued for deletion (Note that unlike the other"},{"line_number":275,"context_line":"        InstanceMappingList query methods which return all mappings"},{"line_number":276,"context_line":"        irrespective of whether they are queued for deletion this methods"},{"line_number":277,"context_line":"        explicitly queries only for those mappings that are queued for deletion"},{"line_number":278,"context_line":"        as is evident from the naming of the method)."},{"line_number":279,"context_line":"        \"\"\""},{"line_number":280,"context_line":"        db_mappings \u003d cls._get_not_deleted_by_cell_and_project_from_db("}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_f26da4cb","line":277,"range":{"start_line":277,"start_character":56,"end_line":277,"end_character":59},"in_reply_to":"3f79a3b5_474dbc3a","updated":"2018-10-31 19:00:33.000000000","message":"Done","commit_id":"7c0daae582ca65f195510693586aa8bfbd7432e4"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"35eed9ca7c9488466094665fda194bf3760b0bb6","unresolved":false,"context_lines":[{"line_number":258,"context_line":"        query \u003d ("},{"line_number":259,"context_line":"            context.session.query(api_models.InstanceMapping)"},{"line_number":260,"context_line":"            .filter_by(project_id\u003dproject_id)"},{"line_number":261,"context_line":"            .filter_by(queued_for_delete\u003dfalse())"},{"line_number":262,"context_line":"            .join(\u0027cell_mapping\u0027)"},{"line_number":263,"context_line":"            .options(joinedload(\u0027cell_mapping\u0027))"},{"line_number":264,"context_line":"            .filter(api_models.CellMapping.uuid \u003d\u003d cell_uuid))"}],"source_content_type":"text/x-python","patch_set":14,"id":"9fdfeff1_42680486","line":261,"range":{"start_line":261,"start_character":41,"end_line":261,"end_character":48},"updated":"2019-01-26 14:00:15.000000000","message":"just realized this filter should be queued_for_delete.in_(None, false()) because of https://review.openstack.org/#/c/584504/. Changing this to comparison using true in the final patch series: https://review.openstack.org/#/c/591657/","commit_id":"d4f804011743d040640acf429d20288f415f36f2"}],"nova/tests/functional/db/test_instance_mapping.py":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"a001ded8e8e6e5d9a781484c183ee154347e85f2","unresolved":false,"context_lines":[{"line_number":308,"context_line":"               get_not_deleted_by_cell_and_projects("},{"line_number":309,"context_line":"               self.context, cells[0].uuid, [\u0027fake-project-3\u0027]))"},{"line_number":310,"context_line":"        # none in fake-project-3, so nothing returned"},{"line_number":311,"context_line":"        self.assertEqual([], sorted([m.instance_uuid for m in ims]))"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"    def test_get_not_deleted_by_cell_and_projects_limit(self):"},{"line_number":314,"context_line":"        cm \u003d cell_mapping.CellMapping(context\u003dself.context,"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_2860dea3","line":311,"updated":"2018-10-26 22:27:33.000000000","message":"OMG, this test is really hard to parse (even before this patch).","commit_id":"18c93e743ba0ec66e16947bf7c8b884dddb38963"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"9d891d79a9210744b099cc2d28f7bf034651c0b2","unresolved":false,"context_lines":[{"line_number":308,"context_line":"               get_not_deleted_by_cell_and_projects("},{"line_number":309,"context_line":"               self.context, cells[0].uuid, [\u0027fake-project-3\u0027]))"},{"line_number":310,"context_line":"        # none in fake-project-3, so nothing returned"},{"line_number":311,"context_line":"        self.assertEqual([], sorted([m.instance_uuid for m in ims]))"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"    def test_get_not_deleted_by_cell_and_projects_limit(self):"},{"line_number":314,"context_line":"        cm \u003d cell_mapping.CellMapping(context\u003dself.context,"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_378012bf","line":311,"in_reply_to":"3f79a3b5_2860dea3","updated":"2018-10-30 12:31:32.000000000","message":"I will add more comments to make it more understandable.","commit_id":"18c93e743ba0ec66e16947bf7c8b884dddb38963"}]}
