)]}'
{"openstackclient/api/auth.py":[{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"47d3d9d1f030c6bb092388a2b5e14670f119a870","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    if PLUGIN_LIST:"},{"line_number":44,"context_line":"        # Only do this once..."},{"line_number":45,"context_line":"        return"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    PLUGIN_LIST \u003d stevedore.ExtensionManager("},{"line_number":48,"context_line":"        base.PLUGIN_NAMESPACE,"},{"line_number":49,"context_line":"        invoke_on_load\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aaa499b_abc0517d","line":46,"updated":"2015-04-14 06:14:38.000000000","message":"maybe move \"import stevedore\" to here too","commit_id":"937f2a06268bb3a10aec8f4135cd1c6dfa54c016"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"36a5bea8ba318f603a6e4c6270d8d58266092af7","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    if PLUGIN_LIST:"},{"line_number":44,"context_line":"        # Only do this once..."},{"line_number":45,"context_line":"        return"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    PLUGIN_LIST \u003d stevedore.ExtensionManager("},{"line_number":48,"context_line":"        base.PLUGIN_NAMESPACE,"},{"line_number":49,"context_line":"        invoke_on_load\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aaa499b_8469f127","line":46,"in_reply_to":"7aaa499b_abc0517d","updated":"2015-04-14 14:47:21.000000000","message":"I\u0027m doing these for startup time reasons, stevedore is already imported by the time we get here so time-wise is trivial.\n\nI think the general view is that embedding imports like this is generally frowned upon unless there are specific reasons.","commit_id":"937f2a06268bb3a10aec8f4135cd1c6dfa54c016"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"47d3d9d1f030c6bb092388a2b5e14670f119a870","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    auth_plugin_name \u003d None"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    get_options_list()"},{"line_number":72,"context_line":"    if options.os_auth_type in [plugin.name for plugin in PLUGIN_LIST]:"},{"line_number":73,"context_line":"        # A direct plugin name was given, use it"},{"line_number":74,"context_line":"        return options.os_auth_type"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aaa499b_ab6e1194","line":71,"updated":"2015-04-14 06:14:38.000000000","message":"Having to call get_options_list() manually before accessing PLUGIN_LIST looks error prone.   \n\nCan we create a getter for PLUGIN_LIST and OPTION_LIST and within that method it calls get_options_list()\n\nSomething like\n\ndef get_auth_options_list()\n    get_options_list()\n    return OPTIONS_LIST","commit_id":"937f2a06268bb3a10aec8f4135cd1c6dfa54c016"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"36a5bea8ba318f603a6e4c6270d8d58266092af7","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    auth_plugin_name \u003d None"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    get_options_list()"},{"line_number":72,"context_line":"    if options.os_auth_type in [plugin.name for plugin in PLUGIN_LIST]:"},{"line_number":73,"context_line":"        # A direct plugin name was given, use it"},{"line_number":74,"context_line":"        return options.os_auth_type"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aaa499b_444ac9ad","line":71,"in_reply_to":"7aaa499b_ab6e1194","updated":"2015-04-14 14:47:21.000000000","message":"Making it a descriptor would be even better...","commit_id":"937f2a06268bb3a10aec8f4135cd1c6dfa54c016"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"357f4b6266e7bde67b8a03bd472fc59d83c74d65","unresolved":false,"context_lines":[{"line_number":34,"context_line":"# List of plugin command line options"},{"line_number":35,"context_line":"OPTIONS_LIST \u003d {}"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"def get_plugin_list():"},{"line_number":39,"context_line":"    \"\"\"Gather plugin list and cache it\"\"\""},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7aaa499b_b53e59d8","line":37,"updated":"2015-04-14 15:47:27.000000000","message":"I know you are generally all about composition, but I do think these things would organize better in classes.  Still, this is an improvement.","commit_id":"b0eea4c2e5116323e126fcf326f99cb8a6e5f876"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"357f4b6266e7bde67b8a03bd472fc59d83c74d65","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    auth_plugin_name \u003d None"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    if options.os_auth_type in [plugin.name for plugin in get_plugin_list()]:"},{"line_number":78,"context_line":"        # A direct plugin name was given, use it"},{"line_number":79,"context_line":"        return options.os_auth_type"},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7aaa499b_f5662128","line":77,"updated":"2015-04-14 15:47:27.000000000","message":"That is definitely nicer.","commit_id":"b0eea4c2e5116323e126fcf326f99cb8a6e5f876"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"34af6fb07f9848fe403d3d304c47d9da3cafcea6","unresolved":false,"context_lines":[{"line_number":68,"context_line":"                OPTIONS_LIST[os_name][\u0027help\u0027] +\u003d \u0027With %s: %s\\n\u0027 % ("},{"line_number":69,"context_line":"                    plugin.name,"},{"line_number":70,"context_line":"                    o.help,"},{"line_number":71,"context_line":"                )"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"def select_auth_plugin(options):"}],"source_content_type":"text/x-python","patch_set":5,"id":"7aaa499b_ef83e554","line":71,"updated":"2015-04-14 19:21:13.000000000","message":"return OPTIONS_LIST and use it instead of the global below","commit_id":"7dacacb7a16e0d1f8fb9b1657ec833a893143e61"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"c721f51a2991e4d70ed981d3afab30bd085bbaae","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        LOG.debug(\u0027no auth_type\u0027)"},{"line_number":134,"context_line":"        # delay the plugin choice, grab every option"},{"line_number":135,"context_line":"        get_options_list()"},{"line_number":136,"context_line":"        plugin_options \u003d set([o.replace(\u0027-\u0027, \u0027_\u0027) for o in OPTIONS_LIST])"},{"line_number":137,"context_line":"        for option in plugin_options:"},{"line_number":138,"context_line":"            option_name \u003d \u0027os_\u0027 + option"},{"line_number":139,"context_line":"            LOG.debug(\u0027fetching option %s\u0027 % option_name)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7aaa499b_fadcc213","line":136,"updated":"2015-04-14 21:55:35.000000000","message":"can be changed to get_options_list()","commit_id":"7dacacb7a16e0d1f8fb9b1657ec833a893143e61"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"c721f51a2991e4d70ed981d3afab30bd085bbaae","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        ),"},{"line_number":191,"context_line":"    }"},{"line_number":192,"context_line":"    get_options_list()"},{"line_number":193,"context_line":"    for o in OPTIONS_LIST:"},{"line_number":194,"context_line":"        # remove allusion to tenants from v2.0 API"},{"line_number":195,"context_line":"        if \u0027tenant\u0027 not in o:"},{"line_number":196,"context_line":"            parser.add_argument("}],"source_content_type":"text/x-python","patch_set":5,"id":"7aaa499b_5aebb6b0","line":193,"updated":"2015-04-14 21:55:35.000000000","message":"if you applied Jamie\u0027s comment, this can be replaced with get_options_list()","commit_id":"7dacacb7a16e0d1f8fb9b1657ec833a893143e61"}]}
