)]}'
{"README.md":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"3693b32f02874b257352e76e4260010fd0aa5604","unresolved":false,"context_lines":[{"line_number":103,"context_line":" colors, etc."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"Bandit requires a config file which can be specified on the command line via"},{"line_number":106,"context_line":"-c/--configfile.  If this is not provided Bandit will search for a default "},{"line_number":107,"context_line":"config file (bandit.yaml) in the following preference order:"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"GNU/Linux:"}],"source_content_type":"text/x-gfm","patch_set":3,"id":"3a50d1a3_79b49281","line":106,"updated":"2015-07-31 00:20:32.000000000","message":"trailing space","commit_id":"f2e47a82cb0057ea874a111dac12557ffa936b44"},{"author":{"_account_id":979,"name":"Dave Walker","email":"email@daviey.com","username":"davewalker"},"change_message_id":"cca2104b0b689c69c323debce1e0c27d0dc4d2b1","unresolved":false,"context_lines":[{"line_number":103,"context_line":" colors, etc."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"Bandit requires a config file which can be specified on the command line via"},{"line_number":106,"context_line":"-c/--configfile.  If this is not provided Bandit will search for a default "},{"line_number":107,"context_line":"config file (bandit.yaml) in the following preference order:"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"GNU/Linux:"}],"source_content_type":"text/x-gfm","patch_set":3,"id":"3a50d1a3_5c6e6497","line":106,"in_reply_to":"3a50d1a3_79b49281","updated":"2015-07-31 00:53:25.000000000","message":"Done","commit_id":"f2e47a82cb0057ea874a111dac12557ffa936b44"},{"author":{"_account_id":11861,"name":"Travis McPeak","email":"tmcpeak@us.ibm.com","username":"travis-mcpeak"},"change_message_id":"1118615a544d1b5f69b97eead5e23428f43b39f2","unresolved":false,"context_lines":[{"line_number":116,"context_line":" - ./bandit.yaml"},{"line_number":117,"context_line":" - /Users/${USER}/Library/Application Support/bandit/bandit.yaml"},{"line_number":118,"context_line":" - /Library/Application Support/bandit/bandit.yaml"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"Exclusions"},{"line_number":122,"context_line":"----------"}],"source_content_type":"text/x-gfm","patch_set":11,"id":"1a4dcd0f_3d59f05a","line":119,"updated":"2015-08-04 23:03:37.000000000","message":"Update commit message to include \"other\" path ;)","commit_id":"05b7a482d70ff54cd6718fa3ca6ca2eacec5d2f0"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"5c2f24bded205b041828580594729e19f558efb8","unresolved":false,"context_lines":[{"line_number":108,"context_line":""},{"line_number":109,"context_line":"GNU/Linux:"},{"line_number":110,"context_line":" - ./bandit.yaml"},{"line_number":111,"context_line":" - /home/${USER}/.config/bandit/bandit.yaml"},{"line_number":112,"context_line":" - /etc/bandit/bandit.yaml"},{"line_number":113,"context_line":" - /usr/local/etc/bandit/bandit.yaml"},{"line_number":114,"context_line":""}],"source_content_type":"text/x-gfm","patch_set":13,"id":"1a4dcd0f_518a841c","line":111,"updated":"2015-08-05 14:01:59.000000000","message":"If I\u0027m the root user, this would also be /root/.config/bandit/bandit.yaml.  So probably better to state ~/.config/bandit/bandit.yaml","commit_id":"8bb007a364e0de920c8509e4a296ae6eb181b552"}],"bandit/bandit.py":[{"author":{"_account_id":11029,"name":"Jamie Finnigan","email":"jamiefinnigan@gmail.com","username":"jamiefinnigan"},"change_message_id":"8ccdb2e2fd96f1a69c0f53897ef252d0a4bcea73","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        config_dirs \u003d ([\u0027.\u0027] + [user_config_dir(\"bandit\")] +"},{"line_number":137,"context_line":"                       site_config_dir(\"bandit\", multipath\u003dTrue).split(\u0027:\u0027))"},{"line_number":138,"context_line":"        config_locations \u003d [s + DEFAULT_TEST_CONFIG for s in config_dirs]"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        for config_file in config_locations:"},{"line_number":141,"context_line":"            if os.path.isfile(config_file):"},{"line_number":142,"context_line":"                break  # Found a valid config"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a50d1a3_ae893c28","line":139,"updated":"2015-07-21 15:50:15.000000000","message":"Can we get a debug statement in here?  I like the occasional debug statement.. :)\n\nPerhaps...\n  logger.debug(\"looking for config file in paths: %s\", config_locations)\n\n...or some such?","commit_id":"bec9d30b2c58ae5075a29b663cf00f05c03c8156"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"3693b32f02874b257352e76e4260010fd0aa5604","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from bandit.core import manager as b_manager"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"BASE_CONFIG \u003d \u0027/bandit.yaml\u0027"},{"line_number":29,"context_line":"os.environ[\u0027XDG_CONFIG_DIRS\u0027] \u003d \u0027/etc:/usr/local/etc\u0027"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"def _init_logger(debug\u003dFalse, log_format\u003dNone):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_99707ede","line":29,"updated":"2015-07-31 00:20:32.000000000","message":"I\u0027d prefer it if no side-effects happened during import (move this into main())","commit_id":"f2e47a82cb0057ea874a111dac12557ffa936b44"},{"author":{"_account_id":979,"name":"Dave Walker","email":"email@daviey.com","username":"davewalker"},"change_message_id":"cca2104b0b689c69c323debce1e0c27d0dc4d2b1","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from bandit.core import manager as b_manager"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"BASE_CONFIG \u003d \u0027/bandit.yaml\u0027"},{"line_number":29,"context_line":"os.environ[\u0027XDG_CONFIG_DIRS\u0027] \u003d \u0027/etc:/usr/local/etc\u0027"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"def _init_logger(debug\u003dFalse, log_format\u003dNone):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_3cf838c4","line":29,"in_reply_to":"3a50d1a3_99707ede","updated":"2015-07-31 00:53:25.000000000","message":"Done","commit_id":"f2e47a82cb0057ea874a111dac12557ffa936b44"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"3693b32f02874b257352e76e4260010fd0aa5604","unresolved":false,"context_lines":[{"line_number":59,"context_line":"    return ext_loader.MANAGER"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"def _find_config(logger\u003dNone):"},{"line_number":63,"context_line":"    # prefer config file in the following order:"},{"line_number":64,"context_line":"    # 1) current directory, 2) user home directory, 3) bundled config"},{"line_number":65,"context_line":"    config_dirs \u003d ([\u0027.\u0027] + [user_config_dir(\"bandit\")] +"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_197d4eb1","line":62,"updated":"2015-07-31 00:20:32.000000000","message":"logger isn\u0027t used","commit_id":"f2e47a82cb0057ea874a111dac12557ffa936b44"},{"author":{"_account_id":979,"name":"Dave Walker","email":"email@daviey.com","username":"davewalker"},"change_message_id":"cca2104b0b689c69c323debce1e0c27d0dc4d2b1","unresolved":false,"context_lines":[{"line_number":59,"context_line":"    return ext_loader.MANAGER"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"def _find_config(logger\u003dNone):"},{"line_number":63,"context_line":"    # prefer config file in the following order:"},{"line_number":64,"context_line":"    # 1) current directory, 2) user home directory, 3) bundled config"},{"line_number":65,"context_line":"    config_dirs \u003d ([\u0027.\u0027] + [user_config_dir(\"bandit\")] +"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_fc6ad080","line":62,"in_reply_to":"3a50d1a3_197d4eb1","updated":"2015-07-31 00:53:25.000000000","message":"Done","commit_id":"f2e47a82cb0057ea874a111dac12557ffa936b44"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"3693b32f02874b257352e76e4260010fd0aa5604","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        if os.path.isfile(config_file):"},{"line_number":71,"context_line":"            break  # Found a valid config"},{"line_number":72,"context_line":"    else:"},{"line_number":73,"context_line":"        raise IOError(\"no config found - tried: \" +"},{"line_number":74,"context_line":"                      \u0027, \u0027.join(config_locations))"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    return config_file"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_f9566229","line":73,"updated":"2015-07-31 00:20:32.000000000","message":"why is IOError used here? Add a comment.","commit_id":"f2e47a82cb0057ea874a111dac12557ffa936b44"},{"author":{"_account_id":979,"name":"Dave Walker","email":"email@daviey.com","username":"davewalker"},"change_message_id":"cca2104b0b689c69c323debce1e0c27d0dc4d2b1","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        if os.path.isfile(config_file):"},{"line_number":71,"context_line":"            break  # Found a valid config"},{"line_number":72,"context_line":"    else:"},{"line_number":73,"context_line":"        raise IOError(\"no config found - tried: \" +"},{"line_number":74,"context_line":"                      \u0027, \u0027.join(config_locations))"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    return config_file"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_5cf504c9","line":73,"in_reply_to":"3a50d1a3_f9566229","updated":"2015-07-31 00:53:25.000000000","message":"Done","commit_id":"f2e47a82cb0057ea874a111dac12557ffa936b44"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"3693b32f02874b257352e76e4260010fd0aa5604","unresolved":false,"context_lines":[{"line_number":150,"context_line":"    if not config_file:"},{"line_number":151,"context_line":"        try:"},{"line_number":152,"context_line":"            config_file \u003d _find_config()"},{"line_number":153,"context_line":"        except IOError, e:"},{"line_number":154,"context_line":"            logger.error(e)"},{"line_number":155,"context_line":"            sys.exit(2)"},{"line_number":156,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_993e3ed9","line":153,"updated":"2015-07-31 00:20:32.000000000","message":"use \"IOError as e\"","commit_id":"f2e47a82cb0057ea874a111dac12557ffa936b44"},{"author":{"_account_id":979,"name":"Dave Walker","email":"email@daviey.com","username":"davewalker"},"change_message_id":"cca2104b0b689c69c323debce1e0c27d0dc4d2b1","unresolved":false,"context_lines":[{"line_number":150,"context_line":"    if not config_file:"},{"line_number":151,"context_line":"        try:"},{"line_number":152,"context_line":"            config_file \u003d _find_config()"},{"line_number":153,"context_line":"        except IOError, e:"},{"line_number":154,"context_line":"            logger.error(e)"},{"line_number":155,"context_line":"            sys.exit(2)"},{"line_number":156,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_fc0170b0","line":153,"in_reply_to":"3a50d1a3_993e3ed9","updated":"2015-07-31 00:53:25.000000000","message":"Doh! Done","commit_id":"f2e47a82cb0057ea874a111dac12557ffa936b44"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"2e7c3f847a905ef11e60d6382aeab81c078d37eb","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    for config_file in config_locations:"},{"line_number":69,"context_line":"        if os.path.isfile(config_file):"},{"line_number":70,"context_line":"            break  # Found a valid config"},{"line_number":71,"context_line":"    else:"},{"line_number":72,"context_line":"        # Failed to find any config, raise an error."},{"line_number":73,"context_line":"        raise IOError(\"no config found - tried: \" +"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_928613da","line":70,"updated":"2015-07-31 02:01:33.000000000","message":"could just return here and the rest of this method would be simpler. Readers wouldn\u0027t have to remember that config_file was defined in the loop initialization and happened to be the last value","commit_id":"832aea2a9b4d69c96178924ca6ad56f792e6a892"},{"author":{"_account_id":979,"name":"Dave Walker","email":"email@daviey.com","username":"davewalker"},"change_message_id":"fd3278f92da65317e1e159556e892225c9cbb87f","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    for config_file in config_locations:"},{"line_number":69,"context_line":"        if os.path.isfile(config_file):"},{"line_number":70,"context_line":"            break  # Found a valid config"},{"line_number":71,"context_line":"    else:"},{"line_number":72,"context_line":"        # Failed to find any config, raise an error."},{"line_number":73,"context_line":"        raise IOError(\"no config found - tried: \" +"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_67adf087","line":70,"in_reply_to":"3a50d1a3_928613da","updated":"2015-08-03 21:28:43.000000000","message":"Done","commit_id":"832aea2a9b4d69c96178924ca6ad56f792e6a892"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"2e7c3f847a905ef11e60d6382aeab81c078d37eb","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        if os.path.isfile(config_file):"},{"line_number":70,"context_line":"            break  # Found a valid config"},{"line_number":71,"context_line":"    else:"},{"line_number":72,"context_line":"        # Failed to find any config, raise an error."},{"line_number":73,"context_line":"        raise IOError(\"no config found - tried: \" +"},{"line_number":74,"context_line":"                      \u0027, \u0027.join(config_locations))"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_5222cb02","line":72,"updated":"2015-07-31 02:01:33.000000000","message":"the point of my previous comment is to explain why IOError was chosen over some other exception? I\u0027m fine with it, but I couldn\u0027t explain to someone why this exception was chosen since there\u0027s no I/O going on.\n\nBest practice would be to define an exception class for Bandit and raise that since then it wouldn\u0027t conflict with any exceptions raised by the python standard library.","commit_id":"832aea2a9b4d69c96178924ca6ad56f792e6a892"},{"author":{"_account_id":979,"name":"Dave Walker","email":"email@daviey.com","username":"davewalker"},"change_message_id":"fd3278f92da65317e1e159556e892225c9cbb87f","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        if os.path.isfile(config_file):"},{"line_number":70,"context_line":"            break  # Found a valid config"},{"line_number":71,"context_line":"    else:"},{"line_number":72,"context_line":"        # Failed to find any config, raise an error."},{"line_number":73,"context_line":"        raise IOError(\"no config found - tried: \" +"},{"line_number":74,"context_line":"                      \u0027, \u0027.join(config_locations))"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_c7a08493","line":72,"in_reply_to":"3a50d1a3_5222cb02","updated":"2015-08-03 21:28:43.000000000","message":"Done","commit_id":"832aea2a9b4d69c96178924ca6ad56f792e6a892"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"84169d6edd30da569597164f7f43eb1748b4c7b1","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from appdirs import user_config_dir"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"from bandit.core import manager as b_manager"},{"line_number":27,"context_line":"from bandit.core.utils import NoConfigFileFound"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"BASE_CONFIG \u003d \u0027/bandit.yaml\u0027"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_82b6ea3b","line":27,"updated":"2015-08-03 21:37:19.000000000","message":"openstack coding standard is to import modules not symbols.","commit_id":"9181a305df34fecb149b0b2d387b148180d2dc0d"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"84169d6edd30da569597164f7f43eb1748b4c7b1","unresolved":false,"context_lines":[{"line_number":72,"context_line":"    else:"},{"line_number":73,"context_line":"        # Failed to find any config, raise an error."},{"line_number":74,"context_line":"        raise NoConfigFileFound(\"no config found - tried: \" +"},{"line_number":75,"context_line":"                                \", \".join(config_locations))"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"def main():"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_c265d2e1","line":75,"updated":"2015-08-03 21:37:19.000000000","message":"suggest change NoConfigFileFound to take config_locations as an arg and build the string.","commit_id":"9181a305df34fecb149b0b2d387b148180d2dc0d"},{"author":{"_account_id":979,"name":"Dave Walker","email":"email@daviey.com","username":"davewalker"},"change_message_id":"ddcf7c6a08abf22fd73082f30b30013325e8344e","unresolved":false,"context_lines":[{"line_number":72,"context_line":"    else:"},{"line_number":73,"context_line":"        # Failed to find any config, raise an error."},{"line_number":74,"context_line":"        raise NoConfigFileFound(\"no config found - tried: \" +"},{"line_number":75,"context_line":"                                \", \".join(config_locations))"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"def main():"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_622f1ea2","line":75,"in_reply_to":"1a4dcd0f_c265d2e1","updated":"2015-08-03 22:04:51.000000000","message":"Done","commit_id":"9181a305df34fecb149b0b2d387b148180d2dc0d"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"84169d6edd30da569597164f7f43eb1748b4c7b1","unresolved":false,"context_lines":[{"line_number":79,"context_line":"    # bring our logging stuff up as early as possible"},{"line_number":80,"context_line":"    debug \u003d (\u0027-d\u0027 in sys.argv or \u0027--debug\u0027 in sys.argv)"},{"line_number":81,"context_line":"    logger \u003d _init_logger(debug)"},{"line_number":82,"context_line":"    os.environ[\u0027XDG_CONFIG_DIRS\u0027] \u003d \u0027/etc:/usr/local/etc\u0027"},{"line_number":83,"context_line":"    extension_mgr \u003d _init_extensions()"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    # now do normal startup"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_a2968692","line":82,"updated":"2015-08-03 21:37:19.000000000","message":"suggest add a comment why this is here.","commit_id":"9181a305df34fecb149b0b2d387b148180d2dc0d"},{"author":{"_account_id":979,"name":"Dave Walker","email":"email@daviey.com","username":"davewalker"},"change_message_id":"ddcf7c6a08abf22fd73082f30b30013325e8344e","unresolved":false,"context_lines":[{"line_number":79,"context_line":"    # bring our logging stuff up as early as possible"},{"line_number":80,"context_line":"    debug \u003d (\u0027-d\u0027 in sys.argv or \u0027--debug\u0027 in sys.argv)"},{"line_number":81,"context_line":"    logger \u003d _init_logger(debug)"},{"line_number":82,"context_line":"    os.environ[\u0027XDG_CONFIG_DIRS\u0027] \u003d \u0027/etc:/usr/local/etc\u0027"},{"line_number":83,"context_line":"    extension_mgr \u003d _init_extensions()"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    # now do normal startup"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_02173a52","line":82,"in_reply_to":"1a4dcd0f_a2968692","updated":"2015-08-03 22:04:51.000000000","message":"Done","commit_id":"9181a305df34fecb149b0b2d387b148180d2dc0d"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"cb58ff14095c6090a525176f7730d34875aa2215","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        try:"},{"line_number":154,"context_line":"            config_file \u003d _find_config()"},{"line_number":155,"context_line":"        except utils.NoConfigFileFound as e:"},{"line_number":156,"context_line":"            logger.error(e.message)"},{"line_number":157,"context_line":"            sys.exit(2)"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    b_mgr \u003d b_manager.BanditManager(config_file, args.agg_type,"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_36cf17b2","line":156,"updated":"2015-08-03 22:09:08.000000000","message":"logger.error(e) should still work. BaseException.message is deprecated.","commit_id":"0cb4074b1c79dd3877cc628519abf9c9f67bf72b"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"426e431b1857fd30cc21ed04ef2cc270033e6233","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        \u0027-c\u0027, \u0027--configfile\u0027, dest\u003d\u0027config_file\u0027,"},{"line_number":110,"context_line":"        action\u003d\u0027store\u0027, default\u003dNone, type\u003dstr,"},{"line_number":111,"context_line":"        help\u003d(\u0027if omitted default locations are checked. \u0027"},{"line_number":112,"context_line":"              \u0027 Check documentation for searched paths\u0027)"},{"line_number":113,"context_line":"    )"},{"line_number":114,"context_line":"    parser.add_argument("},{"line_number":115,"context_line":"        \u0027-p\u0027, \u0027--profile\u0027, dest\u003d\u0027profile\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a4dcd0f_19580cfa","line":112,"updated":"2015-08-03 22:43:08.000000000","message":"there\u0027s 2 spaces here, remove from beginning of line.","commit_id":"cbb567344e3a7ecc5a1f9c117bbce7edbc30ee41"},{"author":{"_account_id":979,"name":"Dave Walker","email":"email@daviey.com","username":"davewalker"},"change_message_id":"1c441217e5f417c6d9a79de90d33c03a192d61ed","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        \u0027-c\u0027, \u0027--configfile\u0027, dest\u003d\u0027config_file\u0027,"},{"line_number":110,"context_line":"        action\u003d\u0027store\u0027, default\u003dNone, type\u003dstr,"},{"line_number":111,"context_line":"        help\u003d(\u0027if omitted default locations are checked. \u0027"},{"line_number":112,"context_line":"              \u0027 Check documentation for searched paths\u0027)"},{"line_number":113,"context_line":"    )"},{"line_number":114,"context_line":"    parser.add_argument("},{"line_number":115,"context_line":"        \u0027-p\u0027, \u0027--profile\u0027, dest\u003d\u0027profile\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a4dcd0f_d9ce2483","line":112,"in_reply_to":"1a4dcd0f_19580cfa","updated":"2015-08-04 09:40:30.000000000","message":"Done","commit_id":"cbb567344e3a7ecc5a1f9c117bbce7edbc30ee41"}],"bandit/core/utils.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"cb58ff14095c6090a525176f7730d34875aa2215","unresolved":false,"context_lines":[{"line_number":184,"context_line":"class NoConfigFileFound(Exception):"},{"line_number":185,"context_line":"    def __init__(self, config_locations\u003dNone):"},{"line_number":186,"context_line":"        self.message \u003d (\"no config found - tried: \" +"},{"line_number":187,"context_line":"                        \", \".join(config_locations))"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"def get_module_qualname_from_path(path):"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_9655cbc7","line":187,"updated":"2015-08-03 22:09:08.000000000","message":"use super(NoConfigFileFound, self).__init__(\"no config found ...","commit_id":"0cb4074b1c79dd3877cc628519abf9c9f67bf72b"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"426e431b1857fd30cc21ed04ef2cc270033e6233","unresolved":false,"context_lines":[{"line_number":182,"context_line":""},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"class NoConfigFileFound(Exception):"},{"line_number":185,"context_line":"    def __init__(self, config_locations\u003dNone):"},{"line_number":186,"context_line":"        message \u003d (\"no config found - tried: \" +"},{"line_number":187,"context_line":"                   \", \".join(config_locations))"},{"line_number":188,"context_line":"        super(NoConfigFileFound, self).__init__(message)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a4dcd0f_f96f6090","line":185,"updated":"2015-08-03 22:43:08.000000000","message":"suggest remove \u003dNone since building message will fail if it is.","commit_id":"cbb567344e3a7ecc5a1f9c117bbce7edbc30ee41"},{"author":{"_account_id":979,"name":"Dave Walker","email":"email@daviey.com","username":"davewalker"},"change_message_id":"1c441217e5f417c6d9a79de90d33c03a192d61ed","unresolved":false,"context_lines":[{"line_number":182,"context_line":""},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"class NoConfigFileFound(Exception):"},{"line_number":185,"context_line":"    def __init__(self, config_locations\u003dNone):"},{"line_number":186,"context_line":"        message \u003d (\"no config found - tried: \" +"},{"line_number":187,"context_line":"                   \", \".join(config_locations))"},{"line_number":188,"context_line":"        super(NoConfigFileFound, self).__init__(message)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a4dcd0f_19ab2c8b","line":185,"in_reply_to":"1a4dcd0f_f96f6090","updated":"2015-08-04 09:40:30.000000000","message":"Yeah, I was going to return a generic error if config_locations was None - but TBH, this is a specific error and it seems reasonable to mandate it.","commit_id":"cbb567344e3a7ecc5a1f9c117bbce7edbc30ee41"}],"tests/test_config.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"3693b32f02874b257352e76e4260010fd0aa5604","unresolved":false,"context_lines":[{"line_number":6,"context_line":"from appdirs import site_config_dir"},{"line_number":7,"context_line":"from appdirs import user_config_dir"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"from bandit.bandit import _find_config as b_find_config"},{"line_number":10,"context_line":"from bandit.bandit import _init_logger as b_init_logger"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"BASE_CONFIG \u003d \u0027/bandit.yaml\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_9c714cab","line":9,"updated":"2015-07-31 00:20:32.000000000","message":"openstack standard is to import modules not symbols from modules.\n\n from bandit import bandit","commit_id":"f2e47a82cb0057ea874a111dac12557ffa936b44"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"3693b32f02874b257352e76e4260010fd0aa5604","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"class ConfigTests(unittest.TestCase):"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"    def side_effect(self, arg):"},{"line_number":21,"context_line":"        if arg \u003d\u003d self.current_config:"},{"line_number":22,"context_line":"            return True"},{"line_number":23,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_5c0f442e","line":20,"updated":"2015-07-31 00:20:32.000000000","message":"suggest rename to is_current_config","commit_id":"f2e47a82cb0057ea874a111dac12557ffa936b44"},{"author":{"_account_id":979,"name":"Dave Walker","email":"email@daviey.com","username":"davewalker"},"change_message_id":"cca2104b0b689c69c323debce1e0c27d0dc4d2b1","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"class ConfigTests(unittest.TestCase):"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"    def side_effect(self, arg):"},{"line_number":21,"context_line":"        if arg \u003d\u003d self.current_config:"},{"line_number":22,"context_line":"            return True"},{"line_number":23,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_5c1c2413","line":20,"in_reply_to":"3a50d1a3_5c0f442e","updated":"2015-07-31 00:53:25.000000000","message":"Done","commit_id":"f2e47a82cb0057ea874a111dac12557ffa936b44"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"3693b32f02874b257352e76e4260010fd0aa5604","unresolved":false,"context_lines":[{"line_number":21,"context_line":"        if arg \u003d\u003d self.current_config:"},{"line_number":22,"context_line":"            return True"},{"line_number":23,"context_line":"        else:"},{"line_number":24,"context_line":"            return False"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def setUp(self):"},{"line_number":27,"context_line":"        super(ConfigTests, self).setUp()"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_f9042219","line":24,"updated":"2015-07-31 00:20:32.000000000","message":"these 4 lines could be replaced by\n\n return arg \u003d\u003d self.current_config","commit_id":"f2e47a82cb0057ea874a111dac12557ffa936b44"},{"author":{"_account_id":979,"name":"Dave Walker","email":"email@daviey.com","username":"davewalker"},"change_message_id":"cca2104b0b689c69c323debce1e0c27d0dc4d2b1","unresolved":false,"context_lines":[{"line_number":21,"context_line":"        if arg \u003d\u003d self.current_config:"},{"line_number":22,"context_line":"            return True"},{"line_number":23,"context_line":"        else:"},{"line_number":24,"context_line":"            return False"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def setUp(self):"},{"line_number":27,"context_line":"        super(ConfigTests, self).setUp()"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_3c1fd80a","line":24,"in_reply_to":"3a50d1a3_f9042219","updated":"2015-07-31 00:53:25.000000000","message":"Done","commit_id":"f2e47a82cb0057ea874a111dac12557ffa936b44"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"3693b32f02874b257352e76e4260010fd0aa5604","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        super(ConfigTests, self).setUp()"},{"line_number":28,"context_line":"        # Mock os.path.isfile with one that selectively returns"},{"line_number":29,"context_line":"        # True if location being considered is the present one."},{"line_number":30,"context_line":"        patcher \u003d mock.patch(\u0027os.path.isfile\u0027)"},{"line_number":31,"context_line":"        mock_thing \u003d patcher.start()"},{"line_number":32,"context_line":"        mock_thing.side_effect \u003d self.side_effect"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_fc32d0f1","line":30,"updated":"2015-07-31 00:20:32.000000000","message":"suggest use a MockPatch fixture.","commit_id":"f2e47a82cb0057ea874a111dac12557ffa936b44"},{"author":{"_account_id":979,"name":"Dave Walker","email":"email@daviey.com","username":"davewalker"},"change_message_id":"cca2104b0b689c69c323debce1e0c27d0dc4d2b1","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        super(ConfigTests, self).setUp()"},{"line_number":28,"context_line":"        # Mock os.path.isfile with one that selectively returns"},{"line_number":29,"context_line":"        # True if location being considered is the present one."},{"line_number":30,"context_line":"        patcher \u003d mock.patch(\u0027os.path.isfile\u0027)"},{"line_number":31,"context_line":"        mock_thing \u003d patcher.start()"},{"line_number":32,"context_line":"        mock_thing.side_effect \u003d self.side_effect"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_bc868814","line":30,"in_reply_to":"3a50d1a3_fc32d0f1","updated":"2015-07-31 00:53:25.000000000","message":"Can you look at the latest change and tell me if you still think this?\n\nThanks","commit_id":"f2e47a82cb0057ea874a111dac12557ffa936b44"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"3693b32f02874b257352e76e4260010fd0aa5604","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        mock_thing \u003d patcher.start()"},{"line_number":32,"context_line":"        mock_thing.side_effect \u003d self.side_effect"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def tearDown(self):"},{"line_number":35,"context_line":"        pass"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def test_find_configs(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_bc4be85e","line":34,"updated":"2015-07-31 00:20:32.000000000","message":"remove this since it doesn\u0027t do anything","commit_id":"f2e47a82cb0057ea874a111dac12557ffa936b44"},{"author":{"_account_id":979,"name":"Dave Walker","email":"email@daviey.com","username":"davewalker"},"change_message_id":"cca2104b0b689c69c323debce1e0c27d0dc4d2b1","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        mock_thing \u003d patcher.start()"},{"line_number":32,"context_line":"        mock_thing.side_effect \u003d self.side_effect"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def tearDown(self):"},{"line_number":35,"context_line":"        pass"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def test_find_configs(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_9c294c3a","line":34,"in_reply_to":"3a50d1a3_bc4be85e","updated":"2015-07-31 00:53:25.000000000","message":"Hmm, actually I do need to tear it down to avoid polluting other tests.  Added teardown code.  Ta","commit_id":"f2e47a82cb0057ea874a111dac12557ffa936b44"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"3693b32f02874b257352e76e4260010fd0aa5604","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                       site_config_dir(\"bandit\", multipath\u003dTrue).split(\u0027:\u0027))"},{"line_number":40,"context_line":"        config_locations \u003d [s + BASE_CONFIG for s in config_dirs]"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        # check that at least \u003e3 locations were currated"},{"line_number":43,"context_line":"        self.assertLess(3, len(config_locations))"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        # Iterate through found locations"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_7c5560f8","line":42,"updated":"2015-07-31 00:20:32.000000000","message":"currated?","commit_id":"f2e47a82cb0057ea874a111dac12557ffa936b44"},{"author":{"_account_id":979,"name":"Dave Walker","email":"email@daviey.com","username":"davewalker"},"change_message_id":"cca2104b0b689c69c323debce1e0c27d0dc4d2b1","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                       site_config_dir(\"bandit\", multipath\u003dTrue).split(\u0027:\u0027))"},{"line_number":40,"context_line":"        config_locations \u003d [s + BASE_CONFIG for s in config_dirs]"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        # check that at least \u003e3 locations were currated"},{"line_number":43,"context_line":"        self.assertLess(3, len(config_locations))"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        # Iterate through found locations"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_7c24805f","line":42,"in_reply_to":"3a50d1a3_7c5560f8","updated":"2015-07-31 00:53:25.000000000","message":"define:\"select, organize, and look after the items in (a collection or exhibition).\"\n\nChanged it to \"..were generated\"","commit_id":"f2e47a82cb0057ea874a111dac12557ffa936b44"},{"author":{"_account_id":1528,"name":"Stanislaw Pitucha","email":"viraptor@gmail.com","username":"stanislaw-pitucha"},"change_message_id":"460a247cb35770cb4070da7f44d253ca8a56c284","unresolved":false,"context_lines":[{"line_number":9,"context_line":"from bandit import bandit"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"BASE_CONFIG \u003d \u0027/bandit.yaml\u0027"},{"line_number":12,"context_line":"os.environ[\u0027XDG_CONFIG_DIRS\u0027] \u003d \u0027/etc:/usr/local/etc\u0027"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"class ConfigTests(unittest.TestCase):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_3cafd82c","line":12,"updated":"2015-07-31 01:03:42.000000000","message":"Can this be mocked only when needed? Otherwise these tests affect behaviour permanently, which is a bad idea.","commit_id":"832aea2a9b4d69c96178924ca6ad56f792e6a892"},{"author":{"_account_id":979,"name":"Dave Walker","email":"email@daviey.com","username":"davewalker"},"change_message_id":"f330c5d67f2e3cca41c4e252524eaf8e64a5a0a4","unresolved":false,"context_lines":[{"line_number":9,"context_line":"from bandit import bandit"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"BASE_CONFIG \u003d \u0027/bandit.yaml\u0027"},{"line_number":12,"context_line":"os.environ[\u0027XDG_CONFIG_DIRS\u0027] \u003d \u0027/etc:/usr/local/etc\u0027"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"class ConfigTests(unittest.TestCase):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_cf9e38b8","line":12,"in_reply_to":"3a50d1a3_3cafd82c","updated":"2015-07-31 01:09:25.000000000","message":"This isn\u0027t mocked but required for appdirs.  If this isn\u0027t set then the search path is /etc/xdg/:/usr/local/xdg/ IIRC which isn\u0027t appropriate for us.  Is there any issue with having it here?","commit_id":"832aea2a9b4d69c96178924ca6ad56f792e6a892"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"2e7c3f847a905ef11e60d6382aeab81c078d37eb","unresolved":false,"context_lines":[{"line_number":9,"context_line":"from bandit import bandit"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"BASE_CONFIG \u003d \u0027/bandit.yaml\u0027"},{"line_number":12,"context_line":"os.environ[\u0027XDG_CONFIG_DIRS\u0027] \u003d \u0027/etc:/usr/local/etc\u0027"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"class ConfigTests(unittest.TestCase):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_d2633b40","line":12,"in_reply_to":"3a50d1a3_afd16c31","updated":"2015-07-31 02:01:33.000000000","message":"please set it in the setUp. There\u0027s a fixture for controlling environment variables -- https://pypi.python.org/pypi/fixtures EnvironmentVariable. You don\u0027t have to do everything yourself.","commit_id":"832aea2a9b4d69c96178924ca6ad56f792e6a892"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"fcdea739ae1379a96b9befa0f0a89dbc111a37be","unresolved":false,"context_lines":[{"line_number":9,"context_line":"from bandit import bandit"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"BASE_CONFIG \u003d \u0027/bandit.yaml\u0027"},{"line_number":12,"context_line":"os.environ[\u0027XDG_CONFIG_DIRS\u0027] \u003d \u0027/etc:/usr/local/etc\u0027"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"class ConfigTests(unittest.TestCase):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_afd16c31","line":12,"in_reply_to":"3a50d1a3_cf9e38b8","updated":"2015-07-31 01:17:28.000000000","message":"You could put do something like\n\n    class ConfigTests(unittest.TestCase):\n        def setUpClass(self):\n            self.xdg_config_dirs \u003d os.environ[\u0027XDG_CONFIG_DIRS\u0027]\n            os.environ[\u0027XDG_CONFIG_DIRS\u0027] \u003d \u0027/etc:/usr/local/etc\u0027\n\n        def tearDownClass(self):\n            os.environ[\u0027XDG_CONFIG_DIRS\u0027] \u003d self.xdg_config_dirs\n\nThat way the environment is preserved for the rest of the test suite. That said, I\n\nA) Don\u0027t think it\u0027s entirely necessary\n\nB) Think my example is terrible and should be rewritten to not error out the tests if we use it ;)","commit_id":"832aea2a9b4d69c96178924ca6ad56f792e6a892"},{"author":{"_account_id":979,"name":"Dave Walker","email":"email@daviey.com","username":"davewalker"},"change_message_id":"fd3278f92da65317e1e159556e892225c9cbb87f","unresolved":false,"context_lines":[{"line_number":9,"context_line":"from bandit import bandit"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"BASE_CONFIG \u003d \u0027/bandit.yaml\u0027"},{"line_number":12,"context_line":"os.environ[\u0027XDG_CONFIG_DIRS\u0027] \u003d \u0027/etc:/usr/local/etc\u0027"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"class ConfigTests(unittest.TestCase):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_bcad4b33","line":12,"in_reply_to":"3a50d1a3_d2633b40","updated":"2015-08-03 21:28:43.000000000","message":"Done","commit_id":"832aea2a9b4d69c96178924ca6ad56f792e6a892"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"2e7c3f847a905ef11e60d6382aeab81c078d37eb","unresolved":false,"context_lines":[{"line_number":26,"context_line":"        self.mocked_isfile.side_effect \u003d self.is_current_config"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def tearDown(self):"},{"line_number":29,"context_line":"        self.patcher.stop()"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def test_find_configs(self):"},{"line_number":32,"context_line":"        config_dirs \u003d ([\u0027.\u0027] + [user_config_dir(\"bandit\")] +"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_32d05ff7","line":29,"updated":"2015-07-31 02:01:33.000000000","message":"rather than use tearDown, use addCleanup(). The problem with tearDown is it\u0027s not always called (for example if there\u0027s an exception during setUp.\n\nSo, right after line 25,\n\n  self.addCleanup(self.patcher.stop)\n\nAlternatively, use a fixture. The beauty of a fixture is that it encapsulates both setUp and tearDown.","commit_id":"832aea2a9b4d69c96178924ca6ad56f792e6a892"},{"author":{"_account_id":979,"name":"Dave Walker","email":"email@daviey.com","username":"davewalker"},"change_message_id":"fd3278f92da65317e1e159556e892225c9cbb87f","unresolved":false,"context_lines":[{"line_number":26,"context_line":"        self.mocked_isfile.side_effect \u003d self.is_current_config"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def tearDown(self):"},{"line_number":29,"context_line":"        self.patcher.stop()"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def test_find_configs(self):"},{"line_number":32,"context_line":"        config_dirs \u003d ([\u0027.\u0027] + [user_config_dir(\"bandit\")] +"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_8717dcec","line":29,"in_reply_to":"3a50d1a3_32d05ff7","updated":"2015-08-03 21:28:43.000000000","message":"Done","commit_id":"832aea2a9b4d69c96178924ca6ad56f792e6a892"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"2e7c3f847a905ef11e60d6382aeab81c078d37eb","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        self.patcher.stop()"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def test_find_configs(self):"},{"line_number":32,"context_line":"        config_dirs \u003d ([\u0027.\u0027] + [user_config_dir(\"bandit\")] +"},{"line_number":33,"context_line":"                       site_config_dir(\"bandit\", multipath\u003dTrue).split(\u0027:\u0027))"},{"line_number":34,"context_line":"        config_locations \u003d [s + BASE_CONFIG for s in config_dirs]"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_12e1a39a","line":32,"updated":"2015-07-31 02:01:33.000000000","message":"suggest mock user_config_dir. We can trust that it works as designed.","commit_id":"832aea2a9b4d69c96178924ca6ad56f792e6a892"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"2e7c3f847a905ef11e60d6382aeab81c078d37eb","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def test_find_configs(self):"},{"line_number":32,"context_line":"        config_dirs \u003d ([\u0027.\u0027] + [user_config_dir(\"bandit\")] +"},{"line_number":33,"context_line":"                       site_config_dir(\"bandit\", multipath\u003dTrue).split(\u0027:\u0027))"},{"line_number":34,"context_line":"        config_locations \u003d [s + BASE_CONFIG for s in config_dirs]"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"        # check that at least 3 location paths were generated"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_72e6e7b1","line":33,"updated":"2015-07-31 02:01:33.000000000","message":"suggest mock site_config_dir. We can trust that it works as designed.\n\nAlso, by mocking you can provide a test where site_config_dir returns no : and a test where there it returns a string with : , which would provide better coverage whether you\u0027re running the tests on Windows or OS/2 warp or OS/X.","commit_id":"832aea2a9b4d69c96178924ca6ad56f792e6a892"},{"author":{"_account_id":979,"name":"Dave Walker","email":"email@daviey.com","username":"davewalker"},"change_message_id":"fd3278f92da65317e1e159556e892225c9cbb87f","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def test_find_configs(self):"},{"line_number":32,"context_line":"        config_dirs \u003d ([\u0027.\u0027] + [user_config_dir(\"bandit\")] +"},{"line_number":33,"context_line":"                       site_config_dir(\"bandit\", multipath\u003dTrue).split(\u0027:\u0027))"},{"line_number":34,"context_line":"        config_locations \u003d [s + BASE_CONFIG for s in config_dirs]"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"        # check that at least 3 location paths were generated"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_c7e4040f","line":33,"in_reply_to":"3a50d1a3_72e6e7b1","updated":"2015-08-03 21:28:43.000000000","message":"Added TODO","commit_id":"832aea2a9b4d69c96178924ca6ad56f792e6a892"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"84169d6edd30da569597164f7f43eb1748b4c7b1","unresolved":false,"context_lines":[{"line_number":23,"context_line":"        self.useFixture(fixtures.EnvironmentVariable(\u0027XDG_CONFIG_DIRS\u0027, \u0027/etc:/usr/local/etc\u0027))"},{"line_number":24,"context_line":"        # Mock os.path.isfile with one that selectively returns"},{"line_number":25,"context_line":"        # True if location being considered is the present one."},{"line_number":26,"context_line":"        self.patcher \u003d mock.patch(\u0027os.path.isfile\u0027)"},{"line_number":27,"context_line":"        self.mocked_isfile \u003d self.patcher.start()"},{"line_number":28,"context_line":"        self.addCleanup(self.patcher.stop)"},{"line_number":29,"context_line":"        self.mocked_isfile.side_effect \u003d self.is_current_config"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_02465a23","line":26,"updated":"2015-08-03 21:37:19.000000000","message":"no need to store this as member variable.","commit_id":"9181a305df34fecb149b0b2d387b148180d2dc0d"},{"author":{"_account_id":979,"name":"Dave Walker","email":"email@daviey.com","username":"davewalker"},"change_message_id":"ddcf7c6a08abf22fd73082f30b30013325e8344e","unresolved":false,"context_lines":[{"line_number":23,"context_line":"        self.useFixture(fixtures.EnvironmentVariable(\u0027XDG_CONFIG_DIRS\u0027, \u0027/etc:/usr/local/etc\u0027))"},{"line_number":24,"context_line":"        # Mock os.path.isfile with one that selectively returns"},{"line_number":25,"context_line":"        # True if location being considered is the present one."},{"line_number":26,"context_line":"        self.patcher \u003d mock.patch(\u0027os.path.isfile\u0027)"},{"line_number":27,"context_line":"        self.mocked_isfile \u003d self.patcher.start()"},{"line_number":28,"context_line":"        self.addCleanup(self.patcher.stop)"},{"line_number":29,"context_line":"        self.mocked_isfile.side_effect \u003d self.is_current_config"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_9634ebde","line":26,"in_reply_to":"1a4dcd0f_02465a23","updated":"2015-08-03 22:04:51.000000000","message":"Done","commit_id":"9181a305df34fecb149b0b2d387b148180d2dc0d"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"84169d6edd30da569597164f7f43eb1748b4c7b1","unresolved":false,"context_lines":[{"line_number":26,"context_line":"        self.patcher \u003d mock.patch(\u0027os.path.isfile\u0027)"},{"line_number":27,"context_line":"        self.mocked_isfile \u003d self.patcher.start()"},{"line_number":28,"context_line":"        self.addCleanup(self.patcher.stop)"},{"line_number":29,"context_line":"        self.mocked_isfile.side_effect \u003d self.is_current_config"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def test_find_configs(self):"},{"line_number":32,"context_line":"        #TODO(Daviey) Mock user_config_dir to make input deterministic"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_426302b2","line":29,"updated":"2015-08-03 21:37:19.000000000","message":"suggest pass side_effect as argument to mock.patch()","commit_id":"9181a305df34fecb149b0b2d387b148180d2dc0d"},{"author":{"_account_id":979,"name":"Dave Walker","email":"email@daviey.com","username":"davewalker"},"change_message_id":"ddcf7c6a08abf22fd73082f30b30013325e8344e","unresolved":false,"context_lines":[{"line_number":26,"context_line":"        self.patcher \u003d mock.patch(\u0027os.path.isfile\u0027)"},{"line_number":27,"context_line":"        self.mocked_isfile \u003d self.patcher.start()"},{"line_number":28,"context_line":"        self.addCleanup(self.patcher.stop)"},{"line_number":29,"context_line":"        self.mocked_isfile.side_effect \u003d self.is_current_config"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def test_find_configs(self):"},{"line_number":32,"context_line":"        #TODO(Daviey) Mock user_config_dir to make input deterministic"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_b68d677d","line":29,"in_reply_to":"1a4dcd0f_426302b2","updated":"2015-08-03 22:04:51.000000000","message":"Done","commit_id":"9181a305df34fecb149b0b2d387b148180d2dc0d"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"84169d6edd30da569597164f7f43eb1748b4c7b1","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        self.mocked_isfile.side_effect \u003d self.is_current_config"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def test_find_configs(self):"},{"line_number":32,"context_line":"        #TODO(Daviey) Mock user_config_dir to make input deterministic"},{"line_number":33,"context_line":"        # and test multi-platform locations."},{"line_number":34,"context_line":"        config_dirs \u003d ([\u0027.\u0027] + [user_config_dir(\"bandit\")] +"},{"line_number":35,"context_line":"                       site_config_dir(\"bandit\", multipath\u003dTrue).split(\u0027:\u0027))"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_025dfae8","line":32,"updated":"2015-08-03 21:37:19.000000000","message":": after TODO(Daviey)","commit_id":"9181a305df34fecb149b0b2d387b148180d2dc0d"},{"author":{"_account_id":979,"name":"Dave Walker","email":"email@daviey.com","username":"davewalker"},"change_message_id":"ddcf7c6a08abf22fd73082f30b30013325e8344e","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        self.mocked_isfile.side_effect \u003d self.is_current_config"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def test_find_configs(self):"},{"line_number":32,"context_line":"        #TODO(Daviey) Mock user_config_dir to make input deterministic"},{"line_number":33,"context_line":"        # and test multi-platform locations."},{"line_number":34,"context_line":"        config_dirs \u003d ([\u0027.\u0027] + [user_config_dir(\"bandit\")] +"},{"line_number":35,"context_line":"                       site_config_dir(\"bandit\", multipath\u003dTrue).split(\u0027:\u0027))"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_62063e22","line":32,"in_reply_to":"1a4dcd0f_025dfae8","updated":"2015-08-03 22:04:51.000000000","message":"Done","commit_id":"9181a305df34fecb149b0b2d387b148180d2dc0d"}]}
