)]}'
{"bandit.yaml":[{"author":{"_account_id":14692,"name":"Lucas Fisher","email":"lucas.fisher@gmail.com","username":"lucas.fisher"},"change_message_id":"97bb8915966869efd2e42dc9a743dd0619b1bcf6","unresolved":false,"context_lines":[{"line_number":19,"context_line":"#log_format: \"[%(module)s]\\t%(levelname)s\\t%(message)s\""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"# extensions of files which should be analyzed"},{"line_number":22,"context_line":"scan_filetypes:"},{"line_number":23,"context_line":"    - \u0027.py\u0027"},{"line_number":24,"context_line":"    - \u0027.pyw\u0027"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":7,"id":"ba7be1f8_393f5727","line":22,"updated":"2015-02-20 19:18:03.000000000","message":"Could we rename these. I expect we will want to expand on this at some point.  We should mimic existing command line tools like grep. So we could go with:\n\n* include - list of glob patterns to match file path. default is [*.py, *.pyw]\n* exclude - list of glob patterns to exclude \n* include_dir - include everything matching include in dir even if not specified on the cmd line.\n* exclude_dir - exclude everything below dir\n\nWe don\u0027t need to implement all of that now. Just include and exclude_dir. These names also work well as command line args.  At some point I expect we will merge the command line and config file processing.","commit_id":"5fa216df8c015a4dbdabd3ab2c923a6923fb22c1"},{"author":{"_account_id":11861,"name":"Travis McPeak","email":"tmcpeak@us.ibm.com","username":"travis-mcpeak"},"change_message_id":"8e2bba7e4696211cb73adb3b988ed18d7d6f4867","unresolved":false,"context_lines":[{"line_number":19,"context_line":"#log_format: \"[%(module)s]\\t%(levelname)s\\t%(message)s\""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"# extensions of files which should be analyzed"},{"line_number":22,"context_line":"scan_filetypes:"},{"line_number":23,"context_line":"    - \u0027.py\u0027"},{"line_number":24,"context_line":"    - \u0027.pyw\u0027"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":7,"id":"ba7be1f8_e50506c3","line":22,"in_reply_to":"ba7be1f8_393f5727","updated":"2015-02-21 03:25:21.000000000","message":"Done","commit_id":"5fa216df8c015a4dbdabd3ab2c923a6923fb22c1"},{"author":{"_account_id":11029,"name":"Jamie Finnigan","email":"jamiefinnigan@gmail.com","username":"jamiefinnigan"},"change_message_id":"822a6d253c416707cdefa037746361d23855a4ef","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    - \u0027.pyw\u0027"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"# a list of paths which should be excluded (eg project/tests)"},{"line_number":27,"context_line":"excluded_paths:"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"profiles:"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"ba7be1f8_593ecbb9","line":27,"updated":"2015-02-20 18:33:24.000000000","message":"Are there any sensible defaults that we should include here?","commit_id":"5fa216df8c015a4dbdabd3ab2c923a6923fb22c1"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"46a6124d47ce16bcba84e645fa2c47a997c96735","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    - \u0027.pyw\u0027"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"# a list of paths which should be excluded (eg project/tests)"},{"line_number":27,"context_line":"excluded_paths:"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"profiles:"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"ba7be1f8_41db311b","line":27,"updated":"2015-02-20 20:10:23.000000000","message":"since I need to run bandit from the bandit directory there\u0027s no way that */tests is going to work... it requires a full path.","commit_id":"5fa216df8c015a4dbdabd3ab2c923a6923fb22c1"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"cab19767a9214ca77e0c152a937c41e58d669ead","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    - \u0027.pyw\u0027"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"# a list of paths which should be excluded (eg project/tests)"},{"line_number":27,"context_line":"excluded_paths:"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"profiles:"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"ba7be1f8_e4cfd3ae","line":27,"in_reply_to":"ba7be1f8_046867b9","updated":"2015-02-20 20:24:15.000000000","message":"It can\u0027t find the plugins so I was told I had to run in the bandit directory.","commit_id":"5fa216df8c015a4dbdabd3ab2c923a6923fb22c1"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"91e1cf5920f8519e44181571306cc2a30fdf5808","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    - \u0027.pyw\u0027"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"# a list of paths which should be excluded (eg project/tests)"},{"line_number":27,"context_line":"excluded_paths:"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"profiles:"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"ba7be1f8_24d80bef","line":27,"in_reply_to":"ba7be1f8_0472277c","updated":"2015-02-20 20:36:58.000000000","message":"If I set\n\n plugins_dir: \u0027/usr/local/lib/python2.7/dist-packages/bandit/plugins\u0027\n\nthen it finds the plugins.","commit_id":"5fa216df8c015a4dbdabd3ab2c923a6923fb22c1"},{"author":{"_account_id":15173,"name":"Rob Fletcher","email":"rfletch.vol@gmail.com","username":"fletcher"},"change_message_id":"28fdbc1d5e357b072a83263506c80b0aceec0349","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    - \u0027.pyw\u0027"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"# a list of paths which should be excluded (eg project/tests)"},{"line_number":27,"context_line":"excluded_paths:"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"profiles:"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"ba7be1f8_046867b9","line":27,"in_reply_to":"ba7be1f8_41db311b","updated":"2015-02-20 20:21:51.000000000","message":"You don\u0027t have to be in the bandit directory to run bandit. You need to be in bandit directory to ```python setup.py install``` but once you\u0027ve done that, you can call bandit from anywhere and just need to provide it the config via -c","commit_id":"5fa216df8c015a4dbdabd3ab2c923a6923fb22c1"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"c9c7d5e3d9c168d877fb1d5df77fbcbb72e4e2d6","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    - \u0027.pyw\u0027"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"# a list of paths which should be excluded (eg project/tests)"},{"line_number":27,"context_line":"excluded_paths:"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"profiles:"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"ba7be1f8_f9fe9f6a","line":27,"in_reply_to":"ba7be1f8_593ecbb9","updated":"2015-02-20 18:45:50.000000000","message":"Probably, */tests, .tox, .venv, etc","commit_id":"5fa216df8c015a4dbdabd3ab2c923a6923fb22c1"},{"author":{"_account_id":11861,"name":"Travis McPeak","email":"tmcpeak@us.ibm.com","username":"travis-mcpeak"},"change_message_id":"8e2bba7e4696211cb73adb3b988ed18d7d6f4867","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    - \u0027.pyw\u0027"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"# a list of paths which should be excluded (eg project/tests)"},{"line_number":27,"context_line":"excluded_paths:"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"profiles:"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"ba7be1f8_452c1248","line":27,"in_reply_to":"ba7be1f8_593ecbb9","updated":"2015-02-21 03:25:21.000000000","message":"how about if I add a comment suggesting those?","commit_id":"5fa216df8c015a4dbdabd3ab2c923a6923fb22c1"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"736a5f7580d819ea2f11dd996eb420dcdcd0b730","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    - \u0027.pyw\u0027"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"# a list of paths which should be excluded (eg project/tests)"},{"line_number":27,"context_line":"excluded_paths:"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"profiles:"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"ba7be1f8_0472277c","line":27,"in_reply_to":"ba7be1f8_e4cfd3ae","updated":"2015-02-20 20:26:14.000000000","message":"btw - setting this to /tests excluded the tests in keystone, so that works for me. Still doesn\u0027t run any tests if run in keystone directory.","commit_id":"5fa216df8c015a4dbdabd3ab2c923a6923fb22c1"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"1b5391ac50c60d951803c6d9ccd0658fca6d8a1f","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    - \u0027.pyw\u0027"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"# a list of paths which should be excluded (eg project/tests)"},{"line_number":27,"context_line":"excluded_paths:"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"profiles:"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"ba7be1f8_8b746a9d","line":27,"in_reply_to":"ba7be1f8_f9fe9f6a","updated":"2015-02-20 18:56:02.000000000","message":"Or maybe parse the .gitignore file of a project if exists.","commit_id":"5fa216df8c015a4dbdabd3ab2c923a6923fb22c1"},{"author":{"_account_id":11861,"name":"Travis McPeak","email":"tmcpeak@us.ibm.com","username":"travis-mcpeak"},"change_message_id":"8f2b8b633401262b39753941618cff41f58e1ee9","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"# a list of paths which should be excluded (eg project/tests)"},{"line_number":27,"context_line":"excluded_paths:"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"profiles:"},{"line_number":31,"context_line":"    ShellInjection:"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"ba7be1f8_c4572f01","line":28,"updated":"2015-02-20 20:20:53.000000000","message":"Brant, it should work - it just does a string compare on the full path.  So /tests will exclude any file whose full path has /tests in it.","commit_id":"5fa216df8c015a4dbdabd3ab2c923a6923fb22c1"},{"author":{"_account_id":11861,"name":"Travis McPeak","email":"tmcpeak@us.ibm.com","username":"travis-mcpeak"},"change_message_id":"8e2bba7e4696211cb73adb3b988ed18d7d6f4867","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"# a list of paths which should be excluded (eg project/tests)"},{"line_number":27,"context_line":"excluded_paths:"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"profiles:"},{"line_number":31,"context_line":"    ShellInjection:"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"ba7be1f8_25271e66","line":28,"in_reply_to":"ba7be1f8_24f64bd8","updated":"2015-02-21 03:25:21.000000000","message":"I tend to agree here, exclusions should be completely opt-in.  What makes sense for one project doesn\u0027t necessarily make sense for another.  It\u0027s easy enough to set up a config file if you want regular exclusions.","commit_id":"5fa216df8c015a4dbdabd3ab2c923a6923fb22c1"},{"author":{"_account_id":15173,"name":"Rob Fletcher","email":"rfletch.vol@gmail.com","username":"fletcher"},"change_message_id":"948f8fc8aaa70dd91b54625e18751d09b54aa0b2","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"# a list of paths which should be excluded (eg project/tests)"},{"line_number":27,"context_line":"excluded_paths:"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"profiles:"},{"line_number":31,"context_line":"    ShellInjection:"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"ba7be1f8_24f64bd8","line":28,"in_reply_to":"ba7be1f8_c4572f01","updated":"2015-02-20 20:26:38.000000000","message":"To the original statement, I don\u0027t think we should exclude anything by default. I like the idea of adding a command line argument to exclude directories if you\u0027d like.\n\nFor example, I see it useful to run bandit on development boxes that touch the internet. I\u0027ve seen instances where tests/ on dev boxes has vulnerable code running because it assumes it\u0027s \"just a dev box\".\n\nIt would be nice to \u0027opt\u0027 in to ignoring directories.","commit_id":"5fa216df8c015a4dbdabd3ab2c923a6923fb22c1"}],"bandit/bandit.py":[{"author":{"_account_id":11029,"name":"Jamie Finnigan","email":"jamiefinnigan@gmail.com","username":"jamiefinnigan"},"change_message_id":"822a6d253c416707cdefa037746361d23855a4ef","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    parser \u003d argparse.ArgumentParser("},{"line_number":28,"context_line":"        description\u003d\u0027Bandit - a Python source code analyzer.\u0027"},{"line_number":29,"context_line":"    )"},{"line_number":30,"context_line":"    parser.add_argument("},{"line_number":31,"context_line":"        \u0027files\u0027, metavar\u003d\u0027file\u0027, type\u003dstr, nargs\u003d\u0027+\u0027,"},{"line_number":32,"context_line":"        help\u003d\u0027source file/s to be tested\u0027"},{"line_number":33,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba7be1f8_b99b47c8","side":"PARENT","line":30,"updated":"2015-02-20 18:33:24.000000000","message":"We should probably change the metavar and help values for this argument to indicate it can be both files and directories.  You could also rename the variable that the value ends up in, to indicate that it holds the same files/directories combo - might make the discover_files() call below more intuitive.  \u0027targets\u0027 might be a good option?","commit_id":"c68c8e4c23534485e15093ef62646fbe1c062a2c"},{"author":{"_account_id":11861,"name":"Travis McPeak","email":"tmcpeak@us.ibm.com","username":"travis-mcpeak"},"change_message_id":"8e2bba7e4696211cb73adb3b988ed18d7d6f4867","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    parser \u003d argparse.ArgumentParser("},{"line_number":28,"context_line":"        description\u003d\u0027Bandit - a Python source code analyzer.\u0027"},{"line_number":29,"context_line":"    )"},{"line_number":30,"context_line":"    parser.add_argument("},{"line_number":31,"context_line":"        \u0027files\u0027, metavar\u003d\u0027file\u0027, type\u003dstr, nargs\u003d\u0027+\u0027,"},{"line_number":32,"context_line":"        help\u003d\u0027source file/s to be tested\u0027"},{"line_number":33,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba7be1f8_45e33207","side":"PARENT","line":30,"in_reply_to":"ba7be1f8_b99b47c8","updated":"2015-02-21 03:25:21.000000000","message":"Done","commit_id":"c68c8e4c23534485e15093ef62646fbe1c062a2c"}],"bandit/core/manager.py":[{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"7ce4c464f3ca4fd686a43a99d93a05aeaafd7544","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        files_list \u003d set()"},{"line_number":108,"context_line":"        excluded_files \u003d set()"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        excluded_paths \u003d None"},{"line_number":111,"context_line":"        extensions \u003d None"},{"line_number":112,"context_line":"        excluded_paths \u003d self.b_conf.get_option(\u0027excluded_paths\u0027)"},{"line_number":113,"context_line":"        extensions \u003d self.b_conf.get_option(\u0027scan_filetypes\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba7be1f8_b9e9871c","line":110,"updated":"2015-02-20 18:33:25.000000000","message":"not needed","commit_id":"5fa216df8c015a4dbdabd3ab2c923a6923fb22c1"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"7ce4c464f3ca4fd686a43a99d93a05aeaafd7544","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        excluded_files \u003d set()"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        excluded_paths \u003d None"},{"line_number":111,"context_line":"        extensions \u003d None"},{"line_number":112,"context_line":"        excluded_paths \u003d self.b_conf.get_option(\u0027excluded_paths\u0027)"},{"line_number":113,"context_line":"        extensions \u003d self.b_conf.get_option(\u0027scan_filetypes\u0027)"},{"line_number":114,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ba7be1f8_f9f3ff07","line":111,"updated":"2015-02-20 18:33:25.000000000","message":"unnecessary","commit_id":"5fa216df8c015a4dbdabd3ab2c923a6923fb22c1"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"eb6f6afbb834ba175a4704a3f2a64b519ad56849","unresolved":false,"context_lines":[{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        excluded_paths \u003d None"},{"line_number":111,"context_line":"        extensions \u003d None"},{"line_number":112,"context_line":"        excluded_paths \u003d self.b_conf.get_option(\u0027excluded_paths\u0027)"},{"line_number":113,"context_line":"        extensions \u003d self.b_conf.get_option(\u0027scan_filetypes\u0027)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        if not excluded_paths:"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba7be1f8_79f1cfcc","line":112,"updated":"2015-02-20 18:38:34.000000000","message":"excluded_paths \u003d self.b_conf.get_option(\u0027excluded_paths\u0027) or []","commit_id":"5fa216df8c015a4dbdabd3ab2c923a6923fb22c1"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"eb6f6afbb834ba175a4704a3f2a64b519ad56849","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        excluded_paths \u003d None"},{"line_number":111,"context_line":"        extensions \u003d None"},{"line_number":112,"context_line":"        excluded_paths \u003d self.b_conf.get_option(\u0027excluded_paths\u0027)"},{"line_number":113,"context_line":"        extensions \u003d self.b_conf.get_option(\u0027scan_filetypes\u0027)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        if not excluded_paths:"},{"line_number":116,"context_line":"            excluded_paths \u003d []"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba7be1f8_19ba93de","line":113,"updated":"2015-02-20 18:38:34.000000000","message":"extensions \u003d self.b_conf.get_option(\u0027scan_filetypes\u0027) or []","commit_id":"5fa216df8c015a4dbdabd3ab2c923a6923fb22c1"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"75ad633e828eadeaa5a0f6f68d964986eb59e998","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        excluded_paths \u003d None"},{"line_number":111,"context_line":"        extensions \u003d None"},{"line_number":112,"context_line":"        excluded_paths \u003d self.b_conf.get_option(\u0027excluded_paths\u0027)"},{"line_number":113,"context_line":"        extensions \u003d self.b_conf.get_option(\u0027scan_filetypes\u0027)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        if not excluded_paths:"},{"line_number":116,"context_line":"            excluded_paths \u003d []"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba7be1f8_4b81928e","line":113,"in_reply_to":"ba7be1f8_19ba93de","updated":"2015-02-20 19:21:39.000000000","message":"Oops, should be:\nextensions \u003d self.b_conf.get_option(\u0027scan_filetypes\u0027) or \u0027.py\u0027","commit_id":"5fa216df8c015a4dbdabd3ab2c923a6923fb22c1"},{"author":{"_account_id":11861,"name":"Travis McPeak","email":"tmcpeak@us.ibm.com","username":"travis-mcpeak"},"change_message_id":"8e2bba7e4696211cb73adb3b988ed18d7d6f4867","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        excluded_paths \u003d None"},{"line_number":111,"context_line":"        extensions \u003d None"},{"line_number":112,"context_line":"        excluded_paths \u003d self.b_conf.get_option(\u0027excluded_paths\u0027)"},{"line_number":113,"context_line":"        extensions \u003d self.b_conf.get_option(\u0027scan_filetypes\u0027)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        if not excluded_paths:"},{"line_number":116,"context_line":"            excluded_paths \u003d []"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba7be1f8_e5ba66e0","line":113,"in_reply_to":"ba7be1f8_4b81928e","updated":"2015-02-21 03:25:21.000000000","message":"Done","commit_id":"5fa216df8c015a4dbdabd3ab2c923a6923fb22c1"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"eb6f6afbb834ba175a4704a3f2a64b519ad56849","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        extensions \u003d self.b_conf.get_option(\u0027scan_filetypes\u0027)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        if not excluded_paths:"},{"line_number":116,"context_line":"            excluded_paths \u003d []"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        if not extensions:"},{"line_number":119,"context_line":"            extensions \u003d \u0027.py\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba7be1f8_99ee83eb","line":116,"updated":"2015-02-20 18:38:34.000000000","message":"remove","commit_id":"5fa216df8c015a4dbdabd3ab2c923a6923fb22c1"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"eb6f6afbb834ba175a4704a3f2a64b519ad56849","unresolved":false,"context_lines":[{"line_number":116,"context_line":"            excluded_paths \u003d []"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        if not extensions:"},{"line_number":119,"context_line":"            extensions \u003d \u0027.py\u0027"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        # build list of files we will analyze"},{"line_number":122,"context_line":"        for _, fname in enumerate(scope):"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba7be1f8_d9bf1bcf","line":119,"updated":"2015-02-20 18:38:34.000000000","message":"remove","commit_id":"5fa216df8c015a4dbdabd3ab2c923a6923fb22c1"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"75ad633e828eadeaa5a0f6f68d964986eb59e998","unresolved":false,"context_lines":[{"line_number":116,"context_line":"            excluded_paths \u003d []"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        if not extensions:"},{"line_number":119,"context_line":"            extensions \u003d \u0027.py\u0027"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        # build list of files we will analyze"},{"line_number":122,"context_line":"        for _, fname in enumerate(scope):"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba7be1f8_0b5eba45","line":119,"in_reply_to":"ba7be1f8_cb82e2ff","updated":"2015-02-20 19:21:39.000000000","message":"Correct above, I find it nicer as just one line foo \u003d bar or bar2","commit_id":"5fa216df8c015a4dbdabd3ab2c923a6923fb22c1"},{"author":{"_account_id":14692,"name":"Lucas Fisher","email":"lucas.fisher@gmail.com","username":"lucas.fisher"},"change_message_id":"97bb8915966869efd2e42dc9a743dd0619b1bcf6","unresolved":false,"context_lines":[{"line_number":116,"context_line":"            excluded_paths \u003d []"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        if not extensions:"},{"line_number":119,"context_line":"            extensions \u003d \u0027.py\u0027"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        # build list of files we will analyze"},{"line_number":122,"context_line":"        for _, fname in enumerate(scope):"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba7be1f8_cb82e2ff","line":119,"in_reply_to":"ba7be1f8_d9bf1bcf","updated":"2015-02-20 19:18:03.000000000","message":"We need to set the default somewhere.","commit_id":"5fa216df8c015a4dbdabd3ab2c923a6923fb22c1"},{"author":{"_account_id":11029,"name":"Jamie Finnigan","email":"jamiefinnigan@gmail.com","username":"jamiefinnigan"},"change_message_id":"822a6d253c416707cdefa037746361d23855a4ef","unresolved":false,"context_lines":[{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        # build list of files we will analyze"},{"line_number":122,"context_line":"        for _, fname in enumerate(scope):"},{"line_number":123,"context_line":"            # if this is a directory and recursive is set, find all files"},{"line_number":124,"context_line":"            if os.path.isdir(fname) and recursive:"},{"line_number":125,"context_line":"                new_files, newly_excluded \u003d _get_files_from_dir("},{"line_number":126,"context_line":"                    fname,"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba7be1f8_19ab73d9","line":123,"updated":"2015-02-20 18:33:24.000000000","message":"If I run \u0027bandit examples\u0027, bandit runs but doesn\u0027t find anything and there\u0027s no feedback that I could have missed content.  In contrast, if I run \u0027grep foo examples\u0027, I get output \u0027grep: examples: Is a directory\u0027.  If I provide bandit with a directory and no -r flag, can we either a) scan for files in that directory but not in any sub-directories (this feels intuitive to me), or b) take the grep route and warn the user that it\u0027s been passed over?","commit_id":"5fa216df8c015a4dbdabd3ab2c923a6923fb22c1"},{"author":{"_account_id":11861,"name":"Travis McPeak","email":"tmcpeak@us.ibm.com","username":"travis-mcpeak"},"change_message_id":"8e2bba7e4696211cb73adb3b988ed18d7d6f4867","unresolved":false,"context_lines":[{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        # build list of files we will analyze"},{"line_number":122,"context_line":"        for _, fname in enumerate(scope):"},{"line_number":123,"context_line":"            # if this is a directory and recursive is set, find all files"},{"line_number":124,"context_line":"            if os.path.isdir(fname) and recursive:"},{"line_number":125,"context_line":"                new_files, newly_excluded \u003d _get_files_from_dir("},{"line_number":126,"context_line":"                    fname,"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba7be1f8_058e9a2e","line":123,"in_reply_to":"ba7be1f8_19ab73d9","updated":"2015-02-21 03:25:21.000000000","message":"Done","commit_id":"5fa216df8c015a4dbdabd3ab2c923a6923fb22c1"},{"author":{"_account_id":14692,"name":"Lucas Fisher","email":"lucas.fisher@gmail.com","username":"lucas.fisher"},"change_message_id":"97bb8915966869efd2e42dc9a743dd0619b1bcf6","unresolved":false,"context_lines":[{"line_number":130,"context_line":"                files_list.update(new_files)"},{"line_number":131,"context_line":"                excluded_files.update(newly_excluded)"},{"line_number":132,"context_line":"            else:"},{"line_number":133,"context_line":"                file_ext \u003d os.path.splitext(fname)[-1].lower()"},{"line_number":134,"context_line":"                if file_ext in extensions:"},{"line_number":135,"context_line":"                    if not any(x in fname for x in excluded_paths):"},{"line_number":136,"context_line":"                        files_list.add(fname)"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba7be1f8_0b6dda32","line":133,"updated":"2015-02-20 19:18:03.000000000","message":"Let\u0027s factor out the code into a helper function that checks if the file should be included. We use this in two places so it should be a separate function.","commit_id":"5fa216df8c015a4dbdabd3ab2c923a6923fb22c1"},{"author":{"_account_id":11861,"name":"Travis McPeak","email":"tmcpeak@us.ibm.com","username":"travis-mcpeak"},"change_message_id":"8e2bba7e4696211cb73adb3b988ed18d7d6f4867","unresolved":false,"context_lines":[{"line_number":130,"context_line":"                files_list.update(new_files)"},{"line_number":131,"context_line":"                excluded_files.update(newly_excluded)"},{"line_number":132,"context_line":"            else:"},{"line_number":133,"context_line":"                file_ext \u003d os.path.splitext(fname)[-1].lower()"},{"line_number":134,"context_line":"                if file_ext in extensions:"},{"line_number":135,"context_line":"                    if not any(x in fname for x in excluded_paths):"},{"line_number":136,"context_line":"                        files_list.add(fname)"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba7be1f8_453b323a","line":133,"in_reply_to":"ba7be1f8_0b6dda32","updated":"2015-02-21 03:25:21.000000000","message":"Done","commit_id":"5fa216df8c015a4dbdabd3ab2c923a6923fb22c1"},{"author":{"_account_id":14692,"name":"Lucas Fisher","email":"lucas.fisher@gmail.com","username":"lucas.fisher"},"change_message_id":"97bb8915966869efd2e42dc9a743dd0619b1bcf6","unresolved":false,"context_lines":[{"line_number":131,"context_line":"                excluded_files.update(newly_excluded)"},{"line_number":132,"context_line":"            else:"},{"line_number":133,"context_line":"                file_ext \u003d os.path.splitext(fname)[-1].lower()"},{"line_number":134,"context_line":"                if file_ext in extensions:"},{"line_number":135,"context_line":"                    if not any(x in fname for x in excluded_paths):"},{"line_number":136,"context_line":"                        files_list.add(fname)"},{"line_number":137,"context_line":"                    else:"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba7be1f8_ebb5e6cd","line":134,"updated":"2015-02-20 19:18:03.000000000","message":"If a user explicitly specifies a file that doesn\u0027t match the ext patterns I think we should let them.","commit_id":"5fa216df8c015a4dbdabd3ab2c923a6923fb22c1"},{"author":{"_account_id":11861,"name":"Travis McPeak","email":"tmcpeak@us.ibm.com","username":"travis-mcpeak"},"change_message_id":"8e2bba7e4696211cb73adb3b988ed18d7d6f4867","unresolved":false,"context_lines":[{"line_number":131,"context_line":"                excluded_files.update(newly_excluded)"},{"line_number":132,"context_line":"            else:"},{"line_number":133,"context_line":"                file_ext \u003d os.path.splitext(fname)[-1].lower()"},{"line_number":134,"context_line":"                if file_ext in extensions:"},{"line_number":135,"context_line":"                    if not any(x in fname for x in excluded_paths):"},{"line_number":136,"context_line":"                        files_list.add(fname)"},{"line_number":137,"context_line":"                    else:"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba7be1f8_25363e53","line":134,"in_reply_to":"ba7be1f8_ebb5e6cd","updated":"2015-02-21 03:25:21.000000000","message":"Done","commit_id":"5fa216df8c015a4dbdabd3ab2c923a6923fb22c1"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"eb6f6afbb834ba175a4704a3f2a64b519ad56849","unresolved":false,"context_lines":[{"line_number":243,"context_line":"        return logger"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"def _get_files_from_dir(dir, extensions\u003d\u0027.py\u0027, excluded_paths\u003dNone):"},{"line_number":247,"context_line":"    if not excluded_paths:"},{"line_number":248,"context_line":"        excluded_paths \u003d []"},{"line_number":249,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ba7be1f8_39f917c9","line":246,"updated":"2015-02-20 18:38:34.000000000","message":"just set excluded_paths\u003d[]","commit_id":"5fa216df8c015a4dbdabd3ab2c923a6923fb22c1"},{"author":{"_account_id":11861,"name":"Travis McPeak","email":"tmcpeak@us.ibm.com","username":"travis-mcpeak"},"change_message_id":"8e2bba7e4696211cb73adb3b988ed18d7d6f4867","unresolved":false,"context_lines":[{"line_number":243,"context_line":"        return logger"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"def _get_files_from_dir(dir, extensions\u003d\u0027.py\u0027, excluded_paths\u003dNone):"},{"line_number":247,"context_line":"    if not excluded_paths:"},{"line_number":248,"context_line":"        excluded_paths \u003d []"},{"line_number":249,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ba7be1f8_653f5626","line":246,"in_reply_to":"ba7be1f8_39f917c9","updated":"2015-02-21 03:25:21.000000000","message":"Python gets very upset with setting a default of empty list","commit_id":"5fa216df8c015a4dbdabd3ab2c923a6923fb22c1"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"eb6f6afbb834ba175a4704a3f2a64b519ad56849","unresolved":false,"context_lines":[{"line_number":245,"context_line":""},{"line_number":246,"context_line":"def _get_files_from_dir(dir, extensions\u003d\u0027.py\u0027, excluded_paths\u003dNone):"},{"line_number":247,"context_line":"    if not excluded_paths:"},{"line_number":248,"context_line":"        excluded_paths \u003d []"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"    files_list \u003d set()"},{"line_number":251,"context_line":"    excluded_files \u003d set()"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba7be1f8_39ce7784","line":248,"updated":"2015-02-20 18:38:34.000000000","message":"remove","commit_id":"5fa216df8c015a4dbdabd3ab2c923a6923fb22c1"}],"bandit/core/result_store.py":[{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"eb6f6afbb834ba175a4704a3f2a64b519ad56849","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                                            issue_text), ]"},{"line_number":84,"context_line":"        self.count +\u003d 1"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    def report(self, files_list, scores, excluded_files\u003dNone, lines\u003d0, level\u003d1,"},{"line_number":87,"context_line":"               output_filename\u003dNone):"},{"line_number":88,"context_line":"        \u0027\u0027\u0027Prints the contents of the result store"},{"line_number":89,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ba7be1f8_591deb0e","line":86,"updated":"2015-02-20 18:38:34.000000000","message":"just set excluded_files\u003d[]","commit_id":"5fa216df8c015a4dbdabd3ab2c923a6923fb22c1"},{"author":{"_account_id":11861,"name":"Travis McPeak","email":"tmcpeak@us.ibm.com","username":"travis-mcpeak"},"change_message_id":"8e2bba7e4696211cb73adb3b988ed18d7d6f4867","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                                            issue_text), ]"},{"line_number":84,"context_line":"        self.count +\u003d 1"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    def report(self, files_list, scores, excluded_files\u003dNone, lines\u003d0, level\u003d1,"},{"line_number":87,"context_line":"               output_filename\u003dNone):"},{"line_number":88,"context_line":"        \u0027\u0027\u0027Prints the contents of the result store"},{"line_number":89,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ba7be1f8_853c4a31","line":86,"in_reply_to":"ba7be1f8_591deb0e","updated":"2015-02-21 03:25:21.000000000","message":"Same reason as other file, Python really doesn\u0027t want to have a default value of empty list","commit_id":"5fa216df8c015a4dbdabd3ab2c923a6923fb22c1"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"eb6f6afbb834ba175a4704a3f2a64b519ad56849","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        \u0027\u0027\u0027"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"        if not excluded_files:"},{"line_number":100,"context_line":"            excluded_files \u003d []"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        # display output using colors if not writing to a file"},{"line_number":103,"context_line":"        is_tty \u003d False if output_filename is not None else stdout.isatty()"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba7be1f8_991763ed","line":100,"updated":"2015-02-20 18:38:34.000000000","message":"remove","commit_id":"5fa216df8c015a4dbdabd3ab2c923a6923fb22c1"},{"author":{"_account_id":14692,"name":"Lucas Fisher","email":"lucas.fisher@gmail.com","username":"lucas.fisher"},"change_message_id":"97bb8915966869efd2e42dc9a743dd0619b1bcf6","unresolved":false,"context_lines":[{"line_number":159,"context_line":"            tmpstr +\u003d \"Files excluded (%s):\" % len(excluded_files)"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        for fname in excluded_files:"},{"line_number":162,"context_line":"            tmpstr +\u003d \"\\n\\t%s\" % fname"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        # print the results"},{"line_number":165,"context_line":"        if is_tty:"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba7be1f8_0b895aca","line":162,"updated":"2015-02-20 19:18:03.000000000","message":"This will conflict with Rob\u0027s output format patch so we will have coordinate merging changes.","commit_id":"5fa216df8c015a4dbdabd3ab2c923a6923fb22c1"},{"author":{"_account_id":11861,"name":"Travis McPeak","email":"tmcpeak@us.ibm.com","username":"travis-mcpeak"},"change_message_id":"8e2bba7e4696211cb73adb3b988ed18d7d6f4867","unresolved":false,"context_lines":[{"line_number":159,"context_line":"            tmpstr +\u003d \"Files excluded (%s):\" % len(excluded_files)"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        for fname in excluded_files:"},{"line_number":162,"context_line":"            tmpstr +\u003d \"\\n\\t%s\" % fname"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        # print the results"},{"line_number":165,"context_line":"        if is_tty:"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba7be1f8_e51266b3","line":162,"in_reply_to":"ba7be1f8_0b895aca","updated":"2015-02-21 03:25:21.000000000","message":"Greeeeaat, I love non-simple git ops","commit_id":"5fa216df8c015a4dbdabd3ab2c923a6923fb22c1"}]}
