)]}'
{"tempest/cmd/cleanup.py":[{"author":{"_account_id":23625,"name":"Nicolas Helgeson","email":"nh202b@att.com","username":"nhelgeson"},"change_message_id":"fed50e26226c1640a84f0ac76e90c8d74187da30","unresolved":false,"context_lines":[{"line_number":87,"context_line":"from tempest import config"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"SAVED_STATE_JSON \u003d \"saved_state.json\""},{"line_number":90,"context_line":"BLACK_LIST_JSON \u003d \"black_list.json\""},{"line_number":91,"context_line":"DRY_RUN_JSON \u003d \"dry_run.json\""},{"line_number":92,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":93,"context_line":"CONF \u003d config.CONF"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_3f82ce01","line":90,"range":{"start_line":90,"start_character":0,"end_line":90,"end_character":15},"updated":"2018-08-31 17:39:22.000000000","message":"Thoughts on black_list naming?\nTo my understanding a blacklist is excluded whereas a whitelist is included.\nThis can be seen from two angles:\nBlacklist: Everything is allowed except specified ids\nWhitelist: Only specified ids are deleted","commit_id":"166ff2765ec7a43cee5b55b701dc6708ce39b3b0"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"484539e5a53db2c1753d815a6358094705a440ae","unresolved":false,"context_lines":[{"line_number":152,"context_line":"                  \u0027black_list_json\u0027: self.black_list_json_data,"},{"line_number":153,"context_line":"                  \u0027is_preserve\u0027: False,"},{"line_number":154,"context_line":"                  \u0027is_save_state\u0027: is_save_state,"},{"line_number":155,"context_line":"                  \u0027has_black_list\u0027: has_black_list}"},{"line_number":156,"context_line":"        project_service \u003d cleanup_service.ProjectService(admin_mgr, **kwargs)"},{"line_number":157,"context_line":"        projects \u003d project_service.list()"},{"line_number":158,"context_line":"        print(\"Process %s projects\" % len(projects))"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_36a1b096","line":155,"range":{"start_line":155,"start_character":18,"end_line":155,"end_character":50},"updated":"2018-08-30 21:45:41.000000000","message":"Can\u0027t this be computed dynamically based off the value of self.black_list_json_data? Example:\n\n    black_listed_ids \u003d self.black_list_json.get(\u0027flavors\u0027)\n    if black_listed_ids:\n        # do something","commit_id":"166ff2765ec7a43cee5b55b701dc6708ce39b3b0"},{"author":{"_account_id":23625,"name":"Nicolas Helgeson","email":"nh202b@att.com","username":"nhelgeson"},"change_message_id":"fed50e26226c1640a84f0ac76e90c8d74187da30","unresolved":false,"context_lines":[{"line_number":152,"context_line":"                  \u0027black_list_json\u0027: self.black_list_json_data,"},{"line_number":153,"context_line":"                  \u0027is_preserve\u0027: False,"},{"line_number":154,"context_line":"                  \u0027is_save_state\u0027: is_save_state,"},{"line_number":155,"context_line":"                  \u0027has_black_list\u0027: has_black_list}"},{"line_number":156,"context_line":"        project_service \u003d cleanup_service.ProjectService(admin_mgr, **kwargs)"},{"line_number":157,"context_line":"        projects \u003d project_service.list()"},{"line_number":158,"context_line":"        print(\"Process %s projects\" % len(projects))"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_df2e3a8b","line":155,"range":{"start_line":155,"start_character":18,"end_line":155,"end_character":50},"in_reply_to":"3f79a3b5_36a1b096","updated":"2018-08-31 17:39:22.000000000","message":"What would be the purpose of this approach? My approach mimics the save_state method. Basically it does everything save state does, but limits items to be deleted to what is present rather than what isn\u0027t.","commit_id":"166ff2765ec7a43cee5b55b701dc6708ce39b3b0"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"c674e1e258fcfdf13262bebd2cd161ede349b4bd","unresolved":false,"context_lines":[{"line_number":152,"context_line":"                  \u0027black_list_json\u0027: self.black_list_json_data,"},{"line_number":153,"context_line":"                  \u0027is_preserve\u0027: False,"},{"line_number":154,"context_line":"                  \u0027is_save_state\u0027: is_save_state,"},{"line_number":155,"context_line":"                  \u0027has_black_list\u0027: has_black_list}"},{"line_number":156,"context_line":"        project_service \u003d cleanup_service.ProjectService(admin_mgr, **kwargs)"},{"line_number":157,"context_line":"        projects \u003d project_service.list()"},{"line_number":158,"context_line":"        print(\"Process %s projects\" % len(projects))"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_6033c614","line":155,"range":{"start_line":155,"start_character":18,"end_line":155,"end_character":50},"in_reply_to":"3f79a3b5_df2e3a8b","updated":"2018-08-31 19:38:13.000000000","message":"I think the purpose is to limit the number of kwargs.","commit_id":"166ff2765ec7a43cee5b55b701dc6708ce39b3b0"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"484539e5a53db2c1753d815a6358094705a440ae","unresolved":false,"context_lines":[{"line_number":169,"context_line":"                  \u0027black_list_json\u0027: self.black_list_json_data,"},{"line_number":170,"context_line":"                  \u0027is_preserve\u0027: is_preserve,"},{"line_number":171,"context_line":"                  \u0027is_save_state\u0027: is_save_state,"},{"line_number":172,"context_line":"                  \u0027has_black_list\u0027: has_black_list}"},{"line_number":173,"context_line":"        for service in self.global_services:"},{"line_number":174,"context_line":"            svc \u003d service(admin_mgr, **kwargs)"},{"line_number":175,"context_line":"            svc.run()"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_b6b620dc","line":172,"updated":"2018-08-30 21:45:41.000000000","message":"Ditto","commit_id":"166ff2765ec7a43cee5b55b701dc6708ce39b3b0"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"9c1800051440ce09f4e2229db7f7ead53743d8e0","unresolved":false,"context_lines":[{"line_number":259,"context_line":"                            \", that reports the objects that would have \""},{"line_number":260,"context_line":"                            \"been deleted had a full cleanup been run.\")"},{"line_number":261,"context_line":"        parser.add_argument(\u0027--black-list\u0027, action\u003d\"store_true\","},{"line_number":262,"context_line":"                            dest\u003d\u0027black_list\u0027, default\u003dFalse,"},{"line_number":263,"context_line":"                            help\u003d\"Use a JSON file to delete specified\""},{"line_number":264,"context_line":"                            \" resources. Can be combined with --dry-run.\")"},{"line_number":265,"context_line":"        return parser"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_8b888c22","line":262,"range":{"start_line":262,"start_character":28,"end_line":262,"end_character":61},"updated":"2018-08-31 15:46:06.000000000","message":"nit\nI see dry_run has the same args provided but, you can remove dest and default options because the values you provided are the defaults for the add_argument method.\n\n\u003e\u003e\u003e parser \u003d argparse.ArgumentParser()\n\u003e\u003e\u003e parser.add_argument(\u0027--black-list\u0027, action\u003d\"store_true\")\n_StoreTrueAction(option_strings\u003d[\u0027--black-list\u0027], dest\u003d\u0027black_list\u0027, nargs\u003d0, const\u003dTrue, default\u003dFalse, type\u003dNone, choices\u003dNone, help\u003dNone, metavar\u003dNone)\n\u003e\u003e\u003e parser.parse_args()\nNamespace(black_list\u003dFalse)","commit_id":"166ff2765ec7a43cee5b55b701dc6708ce39b3b0"},{"author":{"_account_id":23625,"name":"Nicolas Helgeson","email":"nh202b@att.com","username":"nhelgeson"},"change_message_id":"fed50e26226c1640a84f0ac76e90c8d74187da30","unresolved":false,"context_lines":[{"line_number":259,"context_line":"                            \", that reports the objects that would have \""},{"line_number":260,"context_line":"                            \"been deleted had a full cleanup been run.\")"},{"line_number":261,"context_line":"        parser.add_argument(\u0027--black-list\u0027, action\u003d\"store_true\","},{"line_number":262,"context_line":"                            dest\u003d\u0027black_list\u0027, default\u003dFalse,"},{"line_number":263,"context_line":"                            help\u003d\"Use a JSON file to delete specified\""},{"line_number":264,"context_line":"                            \" resources. Can be combined with --dry-run.\")"},{"line_number":265,"context_line":"        return parser"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_bfaa5e6e","line":262,"range":{"start_line":262,"start_character":28,"end_line":262,"end_character":61},"in_reply_to":"3f79a3b5_8b888c22","updated":"2018-08-31 17:39:22.000000000","message":"All of the above arguments specify their action, dest, default, and help. I was following the apparent standard. I also think that it improves readability","commit_id":"166ff2765ec7a43cee5b55b701dc6708ce39b3b0"},{"author":{"_account_id":17887,"name":"Doug Schveninger","email":"ds6901@att.com","username":"Doug.Schveninger"},"change_message_id":"6550a8cc0ca0a8ceb55e0ca3c74b31887d5b1466","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"3f79a3b5_d0a77d4f","updated":"2018-09-08 02:17:12.000000000","message":"missing supporting doc string to describe this change. Also need to describe the json file","commit_id":"dfffbfead7666db53626d3826ffa5c9fb17c868f"},{"author":{"_account_id":23625,"name":"Nicolas Helgeson","email":"nh202b@att.com","username":"nhelgeson"},"change_message_id":"d5ef235d02a7cdbc1d6483c9eb3e714356d7bbd6","unresolved":false,"context_lines":[{"line_number":87,"context_line":"from tempest import config"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"SAVED_STATE_JSON \u003d \"saved_state.json\""},{"line_number":90,"context_line":"BLACK_LIST_JSON \u003d \"black_list.json\""},{"line_number":91,"context_line":"DRY_RUN_JSON \u003d \"dry_run.json\""},{"line_number":92,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":93,"context_line":"CONF \u003d config.CONF"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_af28e996","line":90,"range":{"start_line":90,"start_character":0,"end_line":90,"end_character":15},"updated":"2018-08-31 22:44:52.000000000","message":"Thoughts on black_list naming?\nTo my understanding a blacklist is excluded whereas a whitelist is included.\nThis can be seen from two angles:\nBlacklist: Everything is allowed except specified ids\nWhitelist: Only specified ids are deleted","commit_id":"dfffbfead7666db53626d3826ffa5c9fb17c868f"},{"author":{"_account_id":17887,"name":"Doug Schveninger","email":"ds6901@att.com","username":"Doug.Schveninger"},"change_message_id":"a6eade87af1ebbd6310c8eee27f10d7487e9347e","unresolved":false,"context_lines":[{"line_number":86,"context_line":"from tempest.common import identity"},{"line_number":87,"context_line":"from tempest import config"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"SAVED_STATE_JSON \u003d \"saved_state.json\""},{"line_number":90,"context_line":"BLACK_LIST_JSON \u003d \"black_list.json\""},{"line_number":91,"context_line":"DRY_RUN_JSON \u003d \"dry_run.json\""},{"line_number":92,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":93,"context_line":"CONF \u003d config.CONF"},{"line_number":94,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_abd2965a","line":91,"range":{"start_line":89,"start_character":0,"end_line":91,"end_character":13},"updated":"2018-09-08 04:01:01.000000000","message":"SAVED_STATE_JSON contains a list of global resource ID that were collect when tempest cleanup --save-state\nDRY_RUN_JSON contains a list of all resources ID that would of be deleted if dry-run was not turned on tempest cleanup \n\nHere is the current logic\nfor global id in environment that do not exist in SAVED_STATE_JSON clean them up. For project walk through all the resources in the project project and delete then or report them for dry-run\n\ninstead of using whitelist and black list what about keeping the\nSAVE_STATE_JSON and call the other\nDELETE_STATE_JSON","commit_id":"dfffbfead7666db53626d3826ffa5c9fb17c868f"},{"author":{"_account_id":23625,"name":"Nicolas Helgeson","email":"nh202b@att.com","username":"nhelgeson"},"change_message_id":"d5ef235d02a7cdbc1d6483c9eb3e714356d7bbd6","unresolved":false,"context_lines":[{"line_number":152,"context_line":"                  \u0027black_list_json\u0027: self.black_list_json_data,"},{"line_number":153,"context_line":"                  \u0027is_preserve\u0027: False,"},{"line_number":154,"context_line":"                  \u0027is_save_state\u0027: is_save_state,"},{"line_number":155,"context_line":"                  \u0027has_black_list\u0027: has_black_list}"},{"line_number":156,"context_line":"        project_service \u003d cleanup_service.ProjectService(admin_mgr, **kwargs)"},{"line_number":157,"context_line":"        projects \u003d project_service.list()"},{"line_number":158,"context_line":"        print(\"Process %s projects\" % len(projects))"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_2f161957","line":155,"range":{"start_line":155,"start_character":19,"end_line":155,"end_character":33},"updated":"2018-08-31 22:44:52.000000000","message":"I could remove \u0027has_black_list\u0027 from the kwargs and in cleanup_services have \u0027if black_list_json\u0027 rather than \u0027if has_black_list\u0027. Is that preferable? See example: line 757 in cleanup_services.py","commit_id":"dfffbfead7666db53626d3826ffa5c9fb17c868f"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"685d20a054c5c3523d9f73a5c3b34558339dd7d2","unresolved":false,"context_lines":[{"line_number":152,"context_line":"                  \u0027black_list_json\u0027: self.black_list_json_data,"},{"line_number":153,"context_line":"                  \u0027is_preserve\u0027: False,"},{"line_number":154,"context_line":"                  \u0027is_save_state\u0027: is_save_state,"},{"line_number":155,"context_line":"                  \u0027has_black_list\u0027: has_black_list}"},{"line_number":156,"context_line":"        project_service \u003d cleanup_service.ProjectService(admin_mgr, **kwargs)"},{"line_number":157,"context_line":"        projects \u003d project_service.list()"},{"line_number":158,"context_line":"        print(\"Process %s projects\" % len(projects))"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_d003fd0e","line":155,"range":{"start_line":155,"start_character":19,"end_line":155,"end_character":33},"in_reply_to":"3f79a3b5_2f161957","updated":"2018-09-08 02:26:33.000000000","message":"Yes, this doesn\u0027t need to be explicitly defined. Can just use `if black_list_json_data:` instead as empty dict (default val) will evaluate to false, which is the intended behavior.","commit_id":"dfffbfead7666db53626d3826ffa5c9fb17c868f"},{"author":{"_account_id":17887,"name":"Doug Schveninger","email":"ds6901@att.com","username":"Doug.Schveninger"},"change_message_id":"6550a8cc0ca0a8ceb55e0ca3c74b31887d5b1466","unresolved":false,"context_lines":[{"line_number":162,"context_line":"            self._add_admin(project[\u0027id\u0027])"},{"line_number":163,"context_line":"            self._clean_project(project)"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        print(\"Begin resouce cleanup\")"},{"line_number":166,"context_line":"        kwargs \u003d {\u0027data\u0027: self.dry_run_data,"},{"line_number":167,"context_line":"                  \u0027is_dry_run\u0027: is_dry_run,"},{"line_number":168,"context_line":"                  \u0027saved_state_json\u0027: self.json_data,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_90bee562","line":165,"range":{"start_line":165,"start_character":8,"end_line":165,"end_character":13},"updated":"2018-09-08 02:17:12.000000000","message":"use logging not print command","commit_id":"dfffbfead7666db53626d3826ffa5c9fb17c868f"},{"author":{"_account_id":23625,"name":"Nicolas Helgeson","email":"nh202b@att.com","username":"nhelgeson"},"change_message_id":"fdcbea68e62ab20f32e2b37193216daeabbab529","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        for service in self.project_services:"},{"line_number":215,"context_line":"            svc \u003d service(mgr, **kwargs)"},{"line_number":216,"context_line":"            svc.run()"},{"line_number":217,"context_line":"        print(\"Done cleaning projects\")"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    def _init_admin_ids(self):"},{"line_number":220,"context_line":"        pr_cl \u003d self.admin_mgr.projects_client"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_8a9b1b15","line":217,"range":{"start_line":217,"start_character":29,"end_line":217,"end_character":37},"updated":"2018-09-07 20:11:34.000000000","message":"change to %s % project_name","commit_id":"dfffbfead7666db53626d3826ffa5c9fb17c868f"},{"author":{"_account_id":17887,"name":"Doug Schveninger","email":"ds6901@att.com","username":"Doug.Schveninger"},"change_message_id":"6550a8cc0ca0a8ceb55e0ca3c74b31887d5b1466","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        for service in self.project_services:"},{"line_number":215,"context_line":"            svc \u003d service(mgr, **kwargs)"},{"line_number":216,"context_line":"            svc.run()"},{"line_number":217,"context_line":"        print(\"Done cleaning projects\")"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    def _init_admin_ids(self):"},{"line_number":220,"context_line":"        pr_cl \u003d self.admin_mgr.projects_client"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_50b4cd81","line":217,"range":{"start_line":217,"start_character":8,"end_line":217,"end_character":38},"updated":"2018-09-08 02:17:12.000000000","message":"use log not print","commit_id":"dfffbfead7666db53626d3826ffa5c9fb17c868f"},{"author":{"_account_id":17887,"name":"Doug Schveninger","email":"ds6901@att.com","username":"Doug.Schveninger"},"change_message_id":"a6eade87af1ebbd6310c8eee27f10d7487e9347e","unresolved":false,"context_lines":[{"line_number":258,"context_line":"                            help\u003d\"Generate JSON file:\" + DRY_RUN_JSON +"},{"line_number":259,"context_line":"                            \", that reports the objects that would have \""},{"line_number":260,"context_line":"                            \"been deleted had a full cleanup been run.\")"},{"line_number":261,"context_line":"        parser.add_argument(\u0027--black-list\u0027, action\u003d\"store_true\","},{"line_number":262,"context_line":"                            dest\u003d\u0027black_list\u0027, default\u003dFalse,"},{"line_number":263,"context_line":"                            help\u003d\"Use a JSON file to delete specified\""},{"line_number":264,"context_line":"                            \" resources. Can be combined with --dry-run.\")"},{"line_number":265,"context_line":"        return parser"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"    def get_description(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_6bd9de53","line":264,"range":{"start_line":261,"start_character":8,"end_line":264,"end_character":74},"updated":"2018-09-08 04:01:01.000000000","message":"should you add parser.add_mutually_exclusive_group \nso --black-list and --save-sate can not be used together.\nif so you can save the same could be use on save-state and dry-run","commit_id":"dfffbfead7666db53626d3826ffa5c9fb17c868f"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"a357cc2a9eae8909f5481ddb5b50647379f89f68","unresolved":false,"context_lines":[{"line_number":141,"context_line":"            self._load_purge_state_json()"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    def _cleanup(self):"},{"line_number":144,"context_line":"        LOG.info(\"Begin cleanup\")"},{"line_number":145,"context_line":"        is_dry_run \u003d self.options.dry_run"},{"line_number":146,"context_line":"        is_preserve \u003d not self.options.delete_tempest_conf_objects"},{"line_number":147,"context_line":"        is_save_state \u003d False"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_369d37bb","line":144,"updated":"2018-09-12 17:16:32.000000000","message":"Why do we need to change here?\nCurrent commit message doesn\u0027t explain it, and this can be out of scope from this patch for easy implementing and reviewing.","commit_id":"ea2265d4038882465cc68f61a6e911d194c9ef9a"},{"author":{"_account_id":23625,"name":"Nicolas Helgeson","email":"nh202b@att.com","username":"nhelgeson"},"change_message_id":"1796c0689fbcb4b6921ebfc8cf4ff28129d91cd8","unresolved":false,"context_lines":[{"line_number":141,"context_line":"            self._load_purge_state_json()"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    def _cleanup(self):"},{"line_number":144,"context_line":"        LOG.info(\"Begin cleanup\")"},{"line_number":145,"context_line":"        is_dry_run \u003d self.options.dry_run"},{"line_number":146,"context_line":"        is_preserve \u003d not self.options.delete_tempest_conf_objects"},{"line_number":147,"context_line":"        is_save_state \u003d False"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_b62147ff","line":144,"in_reply_to":"3f79a3b5_369d37bb","updated":"2018-09-12 17:38:22.000000000","message":"If you look at previous comments, print seems to be frowned upon. Since I added print/log messages I figured it would be a good opportunity to make everything uniform.","commit_id":"ea2265d4038882465cc68f61a6e911d194c9ef9a"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"a357cc2a9eae8909f5481ddb5b50647379f89f68","unresolved":false,"context_lines":[{"line_number":160,"context_line":"                  \u0027is_save_state\u0027: is_save_state}"},{"line_number":161,"context_line":"        project_service \u003d cleanup_service.ProjectService(admin_mgr, **kwargs)"},{"line_number":162,"context_line":"        projects \u003d project_service.list()"},{"line_number":163,"context_line":"        LOG.info(\"Process %s projects\", len(projects))"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        # Loop through list of projects and clean them up."},{"line_number":166,"context_line":"        for project in projects:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_96abebd5","line":163,"updated":"2018-09-12 17:16:32.000000000","message":"ditto","commit_id":"ea2265d4038882465cc68f61a6e911d194c9ef9a"},{"author":{"_account_id":23625,"name":"Nicolas Helgeson","email":"nh202b@att.com","username":"nhelgeson"},"change_message_id":"1796c0689fbcb4b6921ebfc8cf4ff28129d91cd8","unresolved":false,"context_lines":[{"line_number":167,"context_line":"            self._add_admin(project[\u0027id\u0027])"},{"line_number":168,"context_line":"            self._clean_project(project)"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"            LOG.info(\"Begin resource cleanup\")"},{"line_number":171,"context_line":"        kwargs \u003d {\u0027data\u0027: self.dry_run_data,"},{"line_number":172,"context_line":"                  \u0027is_dry_run\u0027: is_dry_run,"},{"line_number":173,"context_line":"                  \u0027saved_state_json\u0027: self.json_data,"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_d6cde330","line":170,"range":{"start_line":170,"start_character":12,"end_line":170,"end_character":46},"updated":"2018-09-12 17:38:22.000000000","message":"Would it be better to make this print in order to stay in line with old code, or is it better to change old code to be in line with new code, or would is it preferred that I leave the old code alone and just not use print for new code - then make a separate request to fix the old?","commit_id":"ea2265d4038882465cc68f61a6e911d194c9ef9a"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"a357cc2a9eae8909f5481ddb5b50647379f89f68","unresolved":false,"context_lines":[{"line_number":193,"context_line":"            self._remove_admin_role(project_id)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    def _clean_project(self, project):"},{"line_number":196,"context_line":"        LOG.info(\"Cleaning project:  %s \", project[\u0027name\u0027])"},{"line_number":197,"context_line":"        is_dry_run \u003d self.options.dry_run"},{"line_number":198,"context_line":"        dry_run_data \u003d self.dry_run_data"},{"line_number":199,"context_line":"        is_preserve \u003d not self.options.delete_tempest_conf_objects"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_56b55331","line":196,"updated":"2018-09-12 17:16:32.000000000","message":"ditto","commit_id":"ea2265d4038882465cc68f61a6e911d194c9ef9a"}],"tempest/cmd/cleanup_service.py":[{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"c674e1e258fcfdf13262bebd2cd161ede349b4bd","unresolved":false,"context_lines":[{"line_number":100,"context_line":"            setattr(self, key, value)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        self.tenant_filter \u003d {}"},{"line_number":103,"context_line":"        if hasattr(self, \u0027tenant_id\u0027):"},{"line_number":104,"context_line":"            self.tenant_filter[\u0027tenant_id\u0027] \u003d self.tenant_id"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def _filter_by_tenant_id(self, item_list):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_83ab8c73","line":103,"range":{"start_line":103,"start_character":26,"end_line":103,"end_character":32},"updated":"2018-08-31 19:38:13.000000000","message":"we may have to change this to project and other tenant_id references, to reflect the change on line 329","commit_id":"166ff2765ec7a43cee5b55b701dc6708ce39b3b0"},{"author":{"_account_id":23625,"name":"Nicolas Helgeson","email":"nh202b@att.com","username":"nhelgeson"},"change_message_id":"d920c79b3067dccbef9d965991198846c053d338","unresolved":false,"context_lines":[{"line_number":100,"context_line":"            setattr(self, key, value)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        self.tenant_filter \u003d {}"},{"line_number":103,"context_line":"        if hasattr(self, \u0027tenant_id\u0027):"},{"line_number":104,"context_line":"            self.tenant_filter[\u0027tenant_id\u0027] \u003d self.tenant_id"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def _filter_by_tenant_id(self, item_list):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_29029970","line":103,"range":{"start_line":103,"start_character":26,"end_line":103,"end_character":32},"in_reply_to":"3f79a3b5_83ab8c73","updated":"2018-08-31 21:02:16.000000000","message":"see comment on line 329","commit_id":"166ff2765ec7a43cee5b55b701dc6708ce39b3b0"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"c674e1e258fcfdf13262bebd2cd161ede349b4bd","unresolved":false,"context_lines":[{"line_number":326,"context_line":""},{"line_number":327,"context_line":"    def dry_run(self):"},{"line_number":328,"context_line":"        quotas \u003d self.client.show_quota_set("},{"line_number":329,"context_line":"            self.project_id, params\u003d{\u0027usage\u0027: True})[\u0027quota_set\u0027]"},{"line_number":330,"context_line":"        self.data[\u0027volume_quotas\u0027] \u003d quotas"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_c3a18497","line":329,"range":{"start_line":329,"start_character":17,"end_line":329,"end_character":24},"updated":"2018-08-31 19:38:13.000000000","message":"I think tenant_id is consumed in the base class. I think we should save this change for another patch.","commit_id":"166ff2765ec7a43cee5b55b701dc6708ce39b3b0"},{"author":{"_account_id":23625,"name":"Nicolas Helgeson","email":"nh202b@att.com","username":"nhelgeson"},"change_message_id":"d920c79b3067dccbef9d965991198846c053d338","unresolved":false,"context_lines":[{"line_number":326,"context_line":""},{"line_number":327,"context_line":"    def dry_run(self):"},{"line_number":328,"context_line":"        quotas \u003d self.client.show_quota_set("},{"line_number":329,"context_line":"            self.project_id, params\u003d{\u0027usage\u0027: True})[\u0027quota_set\u0027]"},{"line_number":330,"context_line":"        self.data[\u0027volume_quotas\u0027] \u003d quotas"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_29dff93a","line":329,"range":{"start_line":329,"start_character":17,"end_line":329,"end_character":24},"in_reply_to":"3f79a3b5_c3a18497","updated":"2018-08-31 21:02:16.000000000","message":"woops, yes this was in response to an error that --dry-run throws and should be addressed as a bug elsewhere. I meant to take this out of this patch and I have not gotten around to reporting that bug.","commit_id":"166ff2765ec7a43cee5b55b701dc6708ce39b3b0"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"9c1800051440ce09f4e2229db7f7ead53743d8e0","unresolved":false,"context_lines":[{"line_number":689,"context_line":"        if self.has_black_list:"},{"line_number":690,"context_line":"            black_listed_ids \u003d self.black_list_json[\u0027flavors\u0027]"},{"line_number":691,"context_line":"            if self.is_dry_run:"},{"line_number":692,"context_line":"                white_listed_ids \u003d self.saved_state_json[\u0027flavors\u0027]"},{"line_number":693,"context_line":"                missing \u003d [flavor"},{"line_number":694,"context_line":"                           for flavor in flavors"},{"line_number":695,"context_line":"                           if (flavor[\u0027id\u0027] not in white_listed_ids and"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_38666c57","line":692,"range":{"start_line":692,"start_character":16,"end_line":692,"end_character":32},"updated":"2018-08-31 15:46:06.000000000","message":"I think this is also considered a black list. You can join the lists together to cleanup the code a bit.\n\nif self.has_black_list:\n    black_listed_ids \u003d self.black_list_json + self.saved_state_json[\u0027flavors\u0027] if self.is_dry_run else self.black_list_json[\u0027flavors\u0027]\n\n    flavors \u003d [flavor\n               for flavor in flavors\n               if (flavor[\u0027id\u0027] in black_listed_ids)]\n    if len(flavors) is not 0:\n        print(\"Warning: Possible resource leak in Flavors\")\n        for item in flavors:\n            print(item[\u0027name\u0027] + \" is not present in \" +\n                  \"saved_state or in black_list.\")","commit_id":"166ff2765ec7a43cee5b55b701dc6708ce39b3b0"},{"author":{"_account_id":23625,"name":"Nicolas Helgeson","email":"nh202b@att.com","username":"nhelgeson"},"change_message_id":"fed50e26226c1640a84f0ac76e90c8d74187da30","unresolved":false,"context_lines":[{"line_number":689,"context_line":"        if self.has_black_list:"},{"line_number":690,"context_line":"            black_listed_ids \u003d self.black_list_json[\u0027flavors\u0027]"},{"line_number":691,"context_line":"            if self.is_dry_run:"},{"line_number":692,"context_line":"                white_listed_ids \u003d self.saved_state_json[\u0027flavors\u0027]"},{"line_number":693,"context_line":"                missing \u003d [flavor"},{"line_number":694,"context_line":"                           for flavor in flavors"},{"line_number":695,"context_line":"                           if (flavor[\u0027id\u0027] not in white_listed_ids and"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_3f6baef1","line":692,"range":{"start_line":692,"start_character":16,"end_line":692,"end_character":32},"in_reply_to":"3f79a3b5_38666c57","updated":"2018-08-31 17:39:22.000000000","message":"I separated them because I didn\u0027t want saved_state ids bleeding into the blacklist sorted flavors.","commit_id":"166ff2765ec7a43cee5b55b701dc6708ce39b3b0"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"c674e1e258fcfdf13262bebd2cd161ede349b4bd","unresolved":false,"context_lines":[{"line_number":689,"context_line":"        if self.has_black_list:"},{"line_number":690,"context_line":"            black_listed_ids \u003d self.black_list_json[\u0027flavors\u0027]"},{"line_number":691,"context_line":"            if self.is_dry_run:"},{"line_number":692,"context_line":"                white_listed_ids \u003d self.saved_state_json[\u0027flavors\u0027]"},{"line_number":693,"context_line":"                missing \u003d [flavor"},{"line_number":694,"context_line":"                           for flavor in flavors"},{"line_number":695,"context_line":"                           if (flavor[\u0027id\u0027] not in white_listed_ids and"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_40bb2ae4","line":692,"range":{"start_line":692,"start_character":16,"end_line":692,"end_character":32},"in_reply_to":"3f79a3b5_3f6baef1","updated":"2018-08-31 19:38:13.000000000","message":"They\u0027re already separated for you in self.black_list_json[\u0027flavors\u0027] and self.saved_state_json[\u0027flavors\u0027].\n\nAnd I got the whitelist vs blacklist naming confused with the preserve_state \u003d True flag, sorry. If we were intending to NOT delete saved_state_json then it should be a blacklist but we DO want to delete saved_state_json so its a whitelist.","commit_id":"166ff2765ec7a43cee5b55b701dc6708ce39b3b0"},{"author":{"_account_id":23625,"name":"Nicolas Helgeson","email":"nh202b@att.com","username":"nhelgeson"},"change_message_id":"d920c79b3067dccbef9d965991198846c053d338","unresolved":false,"context_lines":[{"line_number":689,"context_line":"        if self.has_black_list:"},{"line_number":690,"context_line":"            black_listed_ids \u003d self.black_list_json[\u0027flavors\u0027]"},{"line_number":691,"context_line":"            if self.is_dry_run:"},{"line_number":692,"context_line":"                white_listed_ids \u003d self.saved_state_json[\u0027flavors\u0027]"},{"line_number":693,"context_line":"                missing \u003d [flavor"},{"line_number":694,"context_line":"                           for flavor in flavors"},{"line_number":695,"context_line":"                           if (flavor[\u0027id\u0027] not in white_listed_ids and"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_698c1135","line":692,"range":{"start_line":692,"start_character":16,"end_line":692,"end_character":32},"in_reply_to":"3f79a3b5_40bb2ae4","updated":"2018-08-31 21:02:16.000000000","message":"white_list items from saved_state are exempt from anything black_list does. Which reminds me that I should probably add a warning in the case where the blacklisted id is present in the saved_state...","commit_id":"166ff2765ec7a43cee5b55b701dc6708ce39b3b0"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"c674e1e258fcfdf13262bebd2cd161ede349b4bd","unresolved":false,"context_lines":[{"line_number":695,"context_line":"                           if (flavor[\u0027id\u0027] not in white_listed_ids and"},{"line_number":696,"context_line":"                               flavor[\u0027id\u0027] not in black_listed_ids)]"},{"line_number":697,"context_line":"                if len(missing) is not 0:"},{"line_number":698,"context_line":"                    print(\"Warning: Possible resource leak in Flavors\")"},{"line_number":699,"context_line":"                    for item in missing:"},{"line_number":700,"context_line":"                        print(item[\u0027name\u0027] + \" is not present in \" +"},{"line_number":701,"context_line":"                              \"saved_state or in black_list.\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_a0a6beaa","line":698,"updated":"2018-08-31 19:38:13.000000000","message":"so looking at this again, if a resource is present after init_saved_state was called, it could also mean someone else on the cloud is running tests or creating resources after that snapshot was taken.","commit_id":"166ff2765ec7a43cee5b55b701dc6708ce39b3b0"},{"author":{"_account_id":23625,"name":"Nicolas Helgeson","email":"nh202b@att.com","username":"nhelgeson"},"change_message_id":"d920c79b3067dccbef9d965991198846c053d338","unresolved":false,"context_lines":[{"line_number":695,"context_line":"                           if (flavor[\u0027id\u0027] not in white_listed_ids and"},{"line_number":696,"context_line":"                               flavor[\u0027id\u0027] not in black_listed_ids)]"},{"line_number":697,"context_line":"                if len(missing) is not 0:"},{"line_number":698,"context_line":"                    print(\"Warning: Possible resource leak in Flavors\")"},{"line_number":699,"context_line":"                    for item in missing:"},{"line_number":700,"context_line":"                        print(item[\u0027name\u0027] + \" is not present in \" +"},{"line_number":701,"context_line":"                              \"saved_state or in black_list.\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_c9a1a597","line":698,"in_reply_to":"3f79a3b5_a0a6beaa","updated":"2018-08-31 21:02:16.000000000","message":"there could be any number of reasons for it to exist outside of both lists. This function just alerts the user that they are present and unaccounted for.","commit_id":"166ff2765ec7a43cee5b55b701dc6708ce39b3b0"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"9c1800051440ce09f4e2229db7f7ead53743d8e0","unresolved":false,"context_lines":[{"line_number":701,"context_line":"                              \"saved_state or in black_list.\")"},{"line_number":702,"context_line":"            flavors \u003d [flavor"},{"line_number":703,"context_line":"                       for flavor in flavors"},{"line_number":704,"context_line":"                       if (flavor[\u0027id\u0027] in black_listed_ids)]"},{"line_number":705,"context_line":""},{"line_number":706,"context_line":"        if not self.is_save_state and not self.has_black_list:"},{"line_number":707,"context_line":"            # recreate list removing saved flavors"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_d8573826","line":704,"updated":"2018-08-31 15:46:06.000000000","message":"why do we print the warning only if it\u0027s a dry_run?","commit_id":"166ff2765ec7a43cee5b55b701dc6708ce39b3b0"},{"author":{"_account_id":23625,"name":"Nicolas Helgeson","email":"nh202b@att.com","username":"nhelgeson"},"change_message_id":"fed50e26226c1640a84f0ac76e90c8d74187da30","unresolved":false,"context_lines":[{"line_number":701,"context_line":"                              \"saved_state or in black_list.\")"},{"line_number":702,"context_line":"            flavors \u003d [flavor"},{"line_number":703,"context_line":"                       for flavor in flavors"},{"line_number":704,"context_line":"                       if (flavor[\u0027id\u0027] in black_listed_ids)]"},{"line_number":705,"context_line":""},{"line_number":706,"context_line":"        if not self.is_save_state and not self.has_black_list:"},{"line_number":707,"context_line":"            # recreate list removing saved flavors"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_9f644223","line":704,"in_reply_to":"3f79a3b5_d8573826","updated":"2018-08-31 17:39:22.000000000","message":"The primary purpose of using --black_list is to delete specified resources, not to alert the user of resource leaks. The purpose of dry-run is to alert the user of what will happen if they run the cleanup command. So I thought if an alert were to be given, it would be best given during a dry-run.","commit_id":"166ff2765ec7a43cee5b55b701dc6708ce39b3b0"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"484539e5a53db2c1753d815a6358094705a440ae","unresolved":false,"context_lines":[{"line_number":742,"context_line":"    def list(self):"},{"line_number":743,"context_line":"        client \u003d self.client"},{"line_number":744,"context_line":"        images \u003d client.list_images({\"all_tenants\": True})[\u0027images\u0027]"},{"line_number":745,"context_line":"        if self.has_black_list:"},{"line_number":746,"context_line":"            black_listed_ids \u003d self.black_list_json[\u0027images\u0027]"},{"line_number":747,"context_line":"            if self.is_dry_run:"},{"line_number":748,"context_line":"                white_listed_ids \u003d self.saved_state_json[\u0027images\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_16bfd4aa","line":745,"updated":"2018-08-30 21:45:41.000000000","message":"This block of code is almost identical below as well. Consider adding a common helper for this.","commit_id":"166ff2765ec7a43cee5b55b701dc6708ce39b3b0"},{"author":{"_account_id":23625,"name":"Nicolas Helgeson","email":"nh202b@att.com","username":"nhelgeson"},"change_message_id":"fed50e26226c1640a84f0ac76e90c8d74187da30","unresolved":false,"context_lines":[{"line_number":742,"context_line":"    def list(self):"},{"line_number":743,"context_line":"        client \u003d self.client"},{"line_number":744,"context_line":"        images \u003d client.list_images({\"all_tenants\": True})[\u0027images\u0027]"},{"line_number":745,"context_line":"        if self.has_black_list:"},{"line_number":746,"context_line":"            black_listed_ids \u003d self.black_list_json[\u0027images\u0027]"},{"line_number":747,"context_line":"            if self.is_dry_run:"},{"line_number":748,"context_line":"                white_listed_ids \u003d self.saved_state_json[\u0027images\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_df795ac5","line":745,"in_reply_to":"3f79a3b5_16bfd4aa","updated":"2018-08-31 17:39:22.000000000","message":"+1","commit_id":"166ff2765ec7a43cee5b55b701dc6708ce39b3b0"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"484539e5a53db2c1753d815a6358094705a440ae","unresolved":false,"context_lines":[{"line_number":750,"context_line":"                           for image in images"},{"line_number":751,"context_line":"                           if (image[\u0027id\u0027] not in white_listed_ids and"},{"line_number":752,"context_line":"                               image[\u0027id\u0027] not in black_listed_ids)]"},{"line_number":753,"context_line":"                if len(missing) is not 0:"},{"line_number":754,"context_line":"                    print(\"Warning: Possible resource leak in Images\")"},{"line_number":755,"context_line":"                    for item in missing:"},{"line_number":756,"context_line":"                        print(item[\u0027name\u0027] + \" is not present in \" +"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_b604e07f","line":753,"range":{"start_line":753,"start_character":16,"end_line":753,"end_character":41},"updated":"2018-08-30 21:45:41.000000000","message":"Pythonic way to do this is:\n\n    if missing:","commit_id":"166ff2765ec7a43cee5b55b701dc6708ce39b3b0"},{"author":{"_account_id":23625,"name":"Nicolas Helgeson","email":"nh202b@att.com","username":"nhelgeson"},"change_message_id":"fed50e26226c1640a84f0ac76e90c8d74187da30","unresolved":false,"context_lines":[{"line_number":750,"context_line":"                           for image in images"},{"line_number":751,"context_line":"                           if (image[\u0027id\u0027] not in white_listed_ids and"},{"line_number":752,"context_line":"                               image[\u0027id\u0027] not in black_listed_ids)]"},{"line_number":753,"context_line":"                if len(missing) is not 0:"},{"line_number":754,"context_line":"                    print(\"Warning: Possible resource leak in Images\")"},{"line_number":755,"context_line":"                    for item in missing:"},{"line_number":756,"context_line":"                        print(item[\u0027name\u0027] + \" is not present in \" +"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_7f4a8683","line":753,"range":{"start_line":753,"start_character":16,"end_line":753,"end_character":41},"in_reply_to":"3f79a3b5_b604e07f","updated":"2018-08-31 17:39:22.000000000","message":"+1","commit_id":"166ff2765ec7a43cee5b55b701dc6708ce39b3b0"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"9c1800051440ce09f4e2229db7f7ead53743d8e0","unresolved":false,"context_lines":[{"line_number":814,"context_line":"                if len(missing) is not 0:"},{"line_number":815,"context_line":"                    print(\"Warning: Possible resource leak in Users\")"},{"line_number":816,"context_line":"                    for item in missing:"},{"line_number":817,"context_line":"                        print(item[\u0027name\u0027] + \" is not present in \" +"},{"line_number":818,"context_line":"                              \"saved_state or in black_list.\")"},{"line_number":819,"context_line":"            users \u003d [user"},{"line_number":820,"context_line":"                     for user in users"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_2b91389b","line":817,"range":{"start_line":817,"start_character":30,"end_line":817,"end_character":61},"updated":"2018-08-31 15:46:06.000000000","message":"the name will not be in the blacklist if the blacklist is made up of ids. If I see a message, \u0027UserA\u0027 is not present in saved_state or in black_list, I would have to make another step to verify UserA\u0027s id is indeed the id that is in the blacklist to be sure. Can we print item[\u0027id\u0027] here as well?","commit_id":"166ff2765ec7a43cee5b55b701dc6708ce39b3b0"},{"author":{"_account_id":23625,"name":"Nicolas Helgeson","email":"nh202b@att.com","username":"nhelgeson"},"change_message_id":"fed50e26226c1640a84f0ac76e90c8d74187da30","unresolved":false,"context_lines":[{"line_number":814,"context_line":"                if len(missing) is not 0:"},{"line_number":815,"context_line":"                    print(\"Warning: Possible resource leak in Users\")"},{"line_number":816,"context_line":"                    for item in missing:"},{"line_number":817,"context_line":"                        print(item[\u0027name\u0027] + \" is not present in \" +"},{"line_number":818,"context_line":"                              \"saved_state or in black_list.\")"},{"line_number":819,"context_line":"            users \u003d [user"},{"line_number":820,"context_line":"                     for user in users"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_fa39c4d7","line":817,"range":{"start_line":817,"start_character":30,"end_line":817,"end_character":61},"in_reply_to":"3f79a3b5_2b91389b","updated":"2018-08-31 17:39:22.000000000","message":"I chose to print the name for security reasons, but if printing the ID is not a security concern then it is easy to change.","commit_id":"166ff2765ec7a43cee5b55b701dc6708ce39b3b0"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"c674e1e258fcfdf13262bebd2cd161ede349b4bd","unresolved":false,"context_lines":[{"line_number":818,"context_line":"                              \"saved_state or in black_list.\")"},{"line_number":819,"context_line":"            users \u003d [user"},{"line_number":820,"context_line":"                     for user in users"},{"line_number":821,"context_line":"                     if (user[\u0027id\u0027] in black_listed_ids)]"},{"line_number":822,"context_line":""},{"line_number":823,"context_line":"        if not self.is_save_state and not self.has_black_list:"},{"line_number":824,"context_line":"            users \u003d [user for user in users if user[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_83014cb2","line":821,"updated":"2018-08-31 19:38:13.000000000","message":"Should we add the following condition?\n\nand user[\u0027name\u0027] !\u003d CONF.auth.admin_user_name","commit_id":"166ff2765ec7a43cee5b55b701dc6708ce39b3b0"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"c674e1e258fcfdf13262bebd2cd161ede349b4bd","unresolved":false,"context_lines":[{"line_number":879,"context_line":"                                  \"saved_state or in black_list.\")"},{"line_number":880,"context_line":"                roles \u003d [role"},{"line_number":881,"context_line":"                         for role in roles"},{"line_number":882,"context_line":"                         if (role[\u0027id\u0027] in black_listed_ids)]"},{"line_number":883,"context_line":""},{"line_number":884,"context_line":"            if not self.is_save_state and not self.has_black_list:"},{"line_number":885,"context_line":"                roles \u003d [role for role in roles if"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_23115805","line":882,"updated":"2018-08-31 19:38:13.000000000","message":"Should we add the following condition?\n\nand role[\u0027name\u0027] !\u003d CONF.identity.admin_role","commit_id":"166ff2765ec7a43cee5b55b701dc6708ce39b3b0"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"9c1800051440ce09f4e2229db7f7ead53743d8e0","unresolved":false,"context_lines":[{"line_number":937,"context_line":"                        if (project[\u0027id\u0027] in black_listed_ids and"},{"line_number":938,"context_line":"                            project[\u0027name\u0027] !\u003d CONF.auth.admin_project_name)]"},{"line_number":939,"context_line":"            if len(projects) \u003d\u003d 0 and len(black_listed_ids) \u003e 0:"},{"line_number":940,"context_line":"                print(\"The projects in this black list \" +"},{"line_number":941,"context_line":"                      \"have already been cleaned up\")"},{"line_number":942,"context_line":""},{"line_number":943,"context_line":"        if not self.is_save_state and not self.has_black_list:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_4e7cc271","line":940,"range":{"start_line":940,"start_character":16,"end_line":940,"end_character":21},"updated":"2018-08-31 15:46:06.000000000","message":"why do we only provide this message for ProjectService?","commit_id":"166ff2765ec7a43cee5b55b701dc6708ce39b3b0"},{"author":{"_account_id":23625,"name":"Nicolas Helgeson","email":"nh202b@att.com","username":"nhelgeson"},"change_message_id":"fed50e26226c1640a84f0ac76e90c8d74187da30","unresolved":false,"context_lines":[{"line_number":937,"context_line":"                        if (project[\u0027id\u0027] in black_listed_ids and"},{"line_number":938,"context_line":"                            project[\u0027name\u0027] !\u003d CONF.auth.admin_project_name)]"},{"line_number":939,"context_line":"            if len(projects) \u003d\u003d 0 and len(black_listed_ids) \u003e 0:"},{"line_number":940,"context_line":"                print(\"The projects in this black list \" +"},{"line_number":941,"context_line":"                      \"have already been cleaned up\")"},{"line_number":942,"context_line":""},{"line_number":943,"context_line":"        if not self.is_save_state and not self.has_black_list:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_7a74d49c","line":940,"range":{"start_line":940,"start_character":16,"end_line":940,"end_character":21},"in_reply_to":"3f79a3b5_4e7cc271","updated":"2018-08-31 17:39:22.000000000","message":"There is an emphasis on cleaning projects and their associated resources. I figured projects could benefit from a little extra attention. If this is something that you think should be included in other resources, let me know.","commit_id":"166ff2765ec7a43cee5b55b701dc6708ce39b3b0"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"c674e1e258fcfdf13262bebd2cd161ede349b4bd","unresolved":false,"context_lines":[{"line_number":937,"context_line":"                        if (project[\u0027id\u0027] in black_listed_ids and"},{"line_number":938,"context_line":"                            project[\u0027name\u0027] !\u003d CONF.auth.admin_project_name)]"},{"line_number":939,"context_line":"            if len(projects) \u003d\u003d 0 and len(black_listed_ids) \u003e 0:"},{"line_number":940,"context_line":"                print(\"The projects in this black list \" +"},{"line_number":941,"context_line":"                      \"have already been cleaned up\")"},{"line_number":942,"context_line":""},{"line_number":943,"context_line":"        if not self.is_save_state and not self.has_black_list:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_63019004","line":940,"range":{"start_line":940,"start_character":16,"end_line":940,"end_character":21},"in_reply_to":"3f79a3b5_7a74d49c","updated":"2018-08-31 19:38:13.000000000","message":"If there is something about the blacklisting that is tailored towards projects, that should be communicated somehow, then extra logging on projects would be expected.\n\nWe should try to have the same user facing messages with every service.","commit_id":"166ff2765ec7a43cee5b55b701dc6708ce39b3b0"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"c674e1e258fcfdf13262bebd2cd161ede349b4bd","unresolved":false,"context_lines":[{"line_number":999,"context_line":"            domains \u003d [domain"},{"line_number":1000,"context_line":"                       for domain in domains"},{"line_number":1001,"context_line":"                       if (domain[\u0027id\u0027] in black_listed_ids and"},{"line_number":1002,"context_line":"                           domain[\u0027name\u0027] !\u003d CONF.auth.admin_project_name)]"},{"line_number":1003,"context_line":""},{"line_number":1004,"context_line":"        if not self.is_save_state and not self.has_black_list:"},{"line_number":1005,"context_line":"            domains \u003d [domain for domain in domains if domain[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_0359bcfc","line":1002,"range":{"start_line":1002,"start_character":55,"end_line":1002,"end_character":73},"updated":"2018-08-31 19:38:13.000000000","message":"admin_domain_name ?","commit_id":"166ff2765ec7a43cee5b55b701dc6708ce39b3b0"},{"author":{"_account_id":23625,"name":"Nicolas Helgeson","email":"nh202b@att.com","username":"nhelgeson"},"change_message_id":"d920c79b3067dccbef9d965991198846c053d338","unresolved":false,"context_lines":[{"line_number":999,"context_line":"            domains \u003d [domain"},{"line_number":1000,"context_line":"                       for domain in domains"},{"line_number":1001,"context_line":"                       if (domain[\u0027id\u0027] in black_listed_ids and"},{"line_number":1002,"context_line":"                           domain[\u0027name\u0027] !\u003d CONF.auth.admin_project_name)]"},{"line_number":1003,"context_line":""},{"line_number":1004,"context_line":"        if not self.is_save_state and not self.has_black_list:"},{"line_number":1005,"context_line":"            domains \u003d [domain for domain in domains if domain[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_89d96d23","line":1002,"range":{"start_line":1002,"start_character":55,"end_line":1002,"end_character":73},"in_reply_to":"3f79a3b5_0359bcfc","updated":"2018-08-31 21:02:16.000000000","message":"this should just be taken out, domain does not have a conf object.","commit_id":"166ff2765ec7a43cee5b55b701dc6708ce39b3b0"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"685d20a054c5c3523d9f73a5c3b34558339dd7d2","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        white_listed_ids \u003d self.saved_state_json[service]"},{"line_number":120,"context_line":"        for service_id in black_listed_ids:"},{"line_number":121,"context_line":"            if service_id in white_listed_ids:"},{"line_number":122,"context_line":"                raise Exception(service_id + \" is present in \""},{"line_number":123,"context_line":"                                \"both black_list and saved_state. \""},{"line_number":124,"context_line":"                                \"Nothing will be deleted until it \""},{"line_number":125,"context_line":"                                \"is removed from one of the lists.\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_d02a1d8f","line":122,"range":{"start_line":122,"start_character":16,"end_line":122,"end_character":31},"updated":"2018-09-08 02:26:33.000000000","message":"1) Should avoid raising a generic Exception generally speaking. A subclass of Exception should always be used.\n2) I don\u0027t think it\u0027s desirable to raise an Exception during cleanup. It would be better to LOG a warning and returning early.","commit_id":"dfffbfead7666db53626d3826ffa5c9fb17c868f"},{"author":{"_account_id":17887,"name":"Doug Schveninger","email":"ds6901@att.com","username":"Doug.Schveninger"},"change_message_id":"a6eade87af1ebbd6310c8eee27f10d7487e9347e","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        white_listed_ids \u003d self.saved_state_json[service]"},{"line_number":120,"context_line":"        for service_id in black_listed_ids:"},{"line_number":121,"context_line":"            if service_id in white_listed_ids:"},{"line_number":122,"context_line":"                raise Exception(service_id + \" is present in \""},{"line_number":123,"context_line":"                                \"both black_list and saved_state. \""},{"line_number":124,"context_line":"                                \"Nothing will be deleted until it \""},{"line_number":125,"context_line":"                                \"is removed from one of the lists.\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_ab05b6c3","line":122,"range":{"start_line":122,"start_character":16,"end_line":122,"end_character":31},"in_reply_to":"3f79a3b5_d02a1d8f","updated":"2018-09-08 04:01:01.000000000","message":"I agree that you should just log a warn that an item in the blacklist will not be deleted since it is in the save list","commit_id":"dfffbfead7666db53626d3826ffa5c9fb17c868f"},{"author":{"_account_id":23625,"name":"Nicolas Helgeson","email":"nh202b@att.com","username":"nhelgeson"},"change_message_id":"fdcbea68e62ab20f32e2b37193216daeabbab529","unresolved":false,"context_lines":[{"line_number":129,"context_line":"                       if (resource[\u0027id\u0027] not in white_listed_ids and"},{"line_number":130,"context_line":"                           resource[\u0027id\u0027] not in black_listed_ids)]"},{"line_number":131,"context_line":"            if missing:"},{"line_number":132,"context_line":"                print(\"Warning: Possible resource leak in \" + service)"},{"line_number":133,"context_line":"                for item in missing:"},{"line_number":134,"context_line":"                    print(item[\u0027id\u0027] + \" is not present in \" +"},{"line_number":135,"context_line":"                          \"saved_state or in black_list.\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_ca4cb39f","line":132,"range":{"start_line":132,"start_character":16,"end_line":132,"end_character":21},"updated":"2018-09-07 20:11:34.000000000","message":"add this to self.data[\u0027missing_resources\u0027] so that it can be added to dry_run.json","commit_id":"dfffbfead7666db53626d3826ffa5c9fb17c868f"},{"author":{"_account_id":17887,"name":"Doug Schveninger","email":"ds6901@att.com","username":"Doug.Schveninger"},"change_message_id":"6550a8cc0ca0a8ceb55e0ca3c74b31887d5b1466","unresolved":false,"context_lines":[{"line_number":129,"context_line":"                       if (resource[\u0027id\u0027] not in white_listed_ids and"},{"line_number":130,"context_line":"                           resource[\u0027id\u0027] not in black_listed_ids)]"},{"line_number":131,"context_line":"            if missing:"},{"line_number":132,"context_line":"                print(\"Warning: Possible resource leak in \" + service)"},{"line_number":133,"context_line":"                for item in missing:"},{"line_number":134,"context_line":"                    print(item[\u0027id\u0027] + \" is not present in \" +"},{"line_number":135,"context_line":"                          \"saved_state or in black_list.\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_307271e4","line":132,"range":{"start_line":132,"start_character":16,"end_line":132,"end_character":21},"updated":"2018-09-08 02:17:12.000000000","message":"log not print","commit_id":"dfffbfead7666db53626d3826ffa5c9fb17c868f"},{"author":{"_account_id":17887,"name":"Doug Schveninger","email":"ds6901@att.com","username":"Doug.Schveninger"},"change_message_id":"a6eade87af1ebbd6310c8eee27f10d7487e9347e","unresolved":false,"context_lines":[{"line_number":123,"context_line":"                                \"both black_list and saved_state. \""},{"line_number":124,"context_line":"                                \"Nothing will be deleted until it \""},{"line_number":125,"context_line":"                                \"is removed from one of the lists.\")"},{"line_number":126,"context_line":"        if self.is_dry_run:"},{"line_number":127,"context_line":"            missing \u003d [resource"},{"line_number":128,"context_line":"                       for resource in resource_list"},{"line_number":129,"context_line":"                       if (resource[\u0027id\u0027] not in white_listed_ids and"},{"line_number":130,"context_line":"                           resource[\u0027id\u0027] not in black_listed_ids)]"},{"line_number":131,"context_line":"            if missing:"},{"line_number":132,"context_line":"                print(\"Warning: Possible resource leak in \" + service)"},{"line_number":133,"context_line":"                for item in missing:"},{"line_number":134,"context_line":"                    print(item[\u0027id\u0027] + \" is not present in \" +"},{"line_number":135,"context_line":"                          \"saved_state or in black_list.\")"},{"line_number":136,"context_line":"        resource_list \u003d [resource for resource in resource_list"},{"line_number":137,"context_line":"                         if (resource[\u0027id\u0027] in black_listed_ids)]"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_2b220653","line":134,"range":{"start_line":126,"start_character":8,"end_line":134,"end_character":62},"updated":"2018-09-08 04:01:01.000000000","message":"I am not sure I agree with this logic possible resource leak.\n\nThis logic only runs on global resources, with that said:\nResources not in save_state are possible resource leaks.\nResources in black list are resources that should not exits since they were used by the test execution and we want them to be clean up.\nAny Resources that are left over are most likely resources created outside of the testing process.","commit_id":"dfffbfead7666db53626d3826ffa5c9fb17c868f"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"685d20a054c5c3523d9f73a5c3b34558339dd7d2","unresolved":false,"context_lines":[{"line_number":131,"context_line":"            if missing:"},{"line_number":132,"context_line":"                print(\"Warning: Possible resource leak in \" + service)"},{"line_number":133,"context_line":"                for item in missing:"},{"line_number":134,"context_line":"                    print(item[\u0027id\u0027] + \" is not present in \" +"},{"line_number":135,"context_line":"                          \"saved_state or in black_list.\")"},{"line_number":136,"context_line":"        resource_list \u003d [resource for resource in resource_list"},{"line_number":137,"context_line":"                         if (resource[\u0027id\u0027] in black_listed_ids)]"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_f025d9bf","line":134,"range":{"start_line":134,"start_character":26,"end_line":134,"end_character":41},"updated":"2018-09-08 02:26:33.000000000","message":"It\u0027s preferable to perform string substitution, as it\u0027s cleaner. Example:\n\n\"%s is not present in saved_state or in black_list\" % item[\u0027id\u0027]","commit_id":"dfffbfead7666db53626d3826ffa5c9fb17c868f"},{"author":{"_account_id":17887,"name":"Doug Schveninger","email":"ds6901@att.com","username":"Doug.Schveninger"},"change_message_id":"a6eade87af1ebbd6310c8eee27f10d7487e9347e","unresolved":false,"context_lines":[{"line_number":131,"context_line":"            if missing:"},{"line_number":132,"context_line":"                print(\"Warning: Possible resource leak in \" + service)"},{"line_number":133,"context_line":"                for item in missing:"},{"line_number":134,"context_line":"                    print(item[\u0027id\u0027] + \" is not present in \" +"},{"line_number":135,"context_line":"                          \"saved_state or in black_list.\")"},{"line_number":136,"context_line":"        resource_list \u003d [resource for resource in resource_list"},{"line_number":137,"context_line":"                         if (resource[\u0027id\u0027] in black_listed_ids)]"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_302031b0","line":134,"range":{"start_line":134,"start_character":20,"end_line":134,"end_character":25},"updated":"2018-09-08 04:01:01.000000000","message":"log  not print","commit_id":"dfffbfead7666db53626d3826ffa5c9fb17c868f"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"685d20a054c5c3523d9f73a5c3b34558339dd7d2","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        resource_list \u003d [resource for resource in resource_list"},{"line_number":137,"context_line":"                         if (resource[\u0027id\u0027] in black_listed_ids)]"},{"line_number":138,"context_line":"        if not resource_list and black_listed_ids:"},{"line_number":139,"context_line":"            print(\"The \" + service + \" in this black list \" +"},{"line_number":140,"context_line":"                  \"have already been cleaned up\")"},{"line_number":141,"context_line":"        return resource_list"},{"line_number":142,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_b01d2174","line":139,"range":{"start_line":139,"start_character":18,"end_line":139,"end_character":39},"updated":"2018-09-08 02:26:33.000000000","message":"Ditto","commit_id":"dfffbfead7666db53626d3826ffa5c9fb17c868f"},{"author":{"_account_id":17887,"name":"Doug Schveninger","email":"ds6901@att.com","username":"Doug.Schveninger"},"change_message_id":"a6eade87af1ebbd6310c8eee27f10d7487e9347e","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        resource_list \u003d [resource for resource in resource_list"},{"line_number":137,"context_line":"                         if (resource[\u0027id\u0027] in black_listed_ids)]"},{"line_number":138,"context_line":"        if not resource_list and black_listed_ids:"},{"line_number":139,"context_line":"            print(\"The \" + service + \" in this black list \" +"},{"line_number":140,"context_line":"                  \"have already been cleaned up\")"},{"line_number":141,"context_line":"        return resource_list"},{"line_number":142,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_8b0ebae1","line":139,"range":{"start_line":139,"start_character":12,"end_line":139,"end_character":17},"updated":"2018-09-08 04:01:01.000000000","message":"ditto","commit_id":"dfffbfead7666db53626d3826ffa5c9fb17c868f"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"685d20a054c5c3523d9f73a5c3b34558339dd7d2","unresolved":false,"context_lines":[{"line_number":137,"context_line":"                         if (resource[\u0027id\u0027] in black_listed_ids)]"},{"line_number":138,"context_line":"        if not resource_list and black_listed_ids:"},{"line_number":139,"context_line":"            print(\"The \" + service + \" in this black list \" +"},{"line_number":140,"context_line":"                  \"have already been cleaned up\")"},{"line_number":141,"context_line":"        return resource_list"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    def list(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_50104d59","line":140,"range":{"start_line":140,"start_character":19,"end_line":140,"end_character":23},"updated":"2018-09-08 02:26:33.000000000","message":"has","commit_id":"dfffbfead7666db53626d3826ffa5c9fb17c868f"},{"author":{"_account_id":17887,"name":"Doug Schveninger","email":"ds6901@att.com","username":"Doug.Schveninger"},"change_message_id":"a6eade87af1ebbd6310c8eee27f10d7487e9347e","unresolved":false,"context_lines":[{"line_number":712,"context_line":"    def list(self):"},{"line_number":713,"context_line":"        client \u003d self.client"},{"line_number":714,"context_line":"        flavors \u003d client.list_flavors({\"is_public\": None})[\u0027flavors\u0027]"},{"line_number":715,"context_line":"        if self.has_black_list:"},{"line_number":716,"context_line":"            flavors \u003d self._black_list_filter(\u0027flavors\u0027, flavors)"},{"line_number":717,"context_line":""},{"line_number":718,"context_line":"        if not self.is_save_state and not self.has_black_list:"},{"line_number":719,"context_line":"            # recreate list removing saved flavors"},{"line_number":720,"context_line":"            flavors \u003d [flavor for flavor in flavors if flavor[\u0027id\u0027]"},{"line_number":721,"context_line":"                       not in self.saved_state_json[\u0027flavors\u0027].keys()]"},{"line_number":722,"context_line":""},{"line_number":723,"context_line":"        if self.is_preserve:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_cbd6f227","line":720,"range":{"start_line":715,"start_character":5,"end_line":720,"end_character":67},"updated":"2018-09-08 04:01:01.000000000","message":"if not self.is_save_state:\n    if self.has_black_list:\n            flavors \u003d self._black_list_filter(\u0027flavors\u0027, flavors)\n    else\n        # recreate list removing saved flavors\n        flavors \u003d [flavor for flavor in flavors if flavor[\u0027id\u0027]","commit_id":"dfffbfead7666db53626d3826ffa5c9fb17c868f"},{"author":{"_account_id":23625,"name":"Nicolas Helgeson","email":"nh202b@att.com","username":"nhelgeson"},"change_message_id":"d5ef235d02a7cdbc1d6483c9eb3e714356d7bbd6","unresolved":false,"context_lines":[{"line_number":754,"context_line":"    def list(self):"},{"line_number":755,"context_line":"        client \u003d self.client"},{"line_number":756,"context_line":"        images \u003d client.list_images({\"all_tenants\": True})[\u0027images\u0027]"},{"line_number":757,"context_line":"        if self.has_black_list:"},{"line_number":758,"context_line":"            images \u003d self._black_list_filter(\u0027images\u0027, images)"},{"line_number":759,"context_line":""},{"line_number":760,"context_line":"        if not self.is_save_state and not self.has_black_list:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_da3ac1cb","line":757,"range":{"start_line":757,"start_character":16,"end_line":757,"end_character":30},"updated":"2018-08-31 22:44:52.000000000","message":"could be \u0027if self.black_list_json\u0027 to reduce kwargs ref line 155 in cleanup.py","commit_id":"dfffbfead7666db53626d3826ffa5c9fb17c868f"}]}
