)]}'
{"examples/authenticate.py":[{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"7b93615f29cf996dd33da8463ccf21995aa0fc87","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"def make_authenticate(opts):"},{"line_number":50,"context_line":"    args \u003d vars(opts)"},{"line_number":51,"context_line":"    return authenticator.create(**args)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_ec526e67","line":50,"updated":"2014-09-08 13:21:22.000000000","message":"I\u0027m not a huge fan of this style, but I\u0027ve also not been doing a lot of reviews of the SDK code. Is this the preferred way to pass args in the project? Would it be better to define a little class (or a couple) to pass them through the API instead of building a dict and then using **args, allowing them to be grouped but still making it easy to add options as needed?","commit_id":"3aae4947f26c704deb738f8f201570d71f9b7be5"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"9261f442a2a83e4311c75e1d8871cfd72fab0bd8","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"def make_authenticate(opts):"},{"line_number":50,"context_line":"    args \u003d vars(opts)"},{"line_number":51,"context_line":"    return authenticator.create(**args)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"def run_authenticate(opts):"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa98f980_fb6cb838","line":51,"updated":"2014-09-09 16:05:59.000000000","message":"In patch set 1, Doug expressed some concern on this, converting argparse Namespace to a dict.","commit_id":"d92a96f01d2a2ac28578c52035fcd21bf7ba568d"}],"examples/common.py":[{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"b43f217bfaa8589a057db4dc6521640c9f0b5809","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        metavar\u003d\u0027\u003cauth-plugin\u003e\u0027,"},{"line_number":123,"context_line":"        default\u003denv(\u0027OS_AUTH_PLUGIN\u0027, default\u003d\u0027identity_v3\u0027),"},{"line_number":124,"context_line":"        help\u003d\u0027Authentication plugin (Env: OS_AUTH_PLUGIN)\u0027,"},{"line_number":125,"context_line":"    )"},{"line_number":126,"context_line":"    parser.add_argument("},{"line_number":127,"context_line":"        \u0027--os-auth-url\u0027,"},{"line_number":128,"context_line":"        dest\u003d\u0027auth_url\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"da9df570_0eb2fee5","line":125,"updated":"2014-09-24 14:59:03.000000000","message":"This could use the auth plugin loader name() to get a list of the choices, too. Not a big deal, since it\u0027s an example, but useful for pre-validating plugin  names.","commit_id":"18370a80185d874a691800983ed92f20d96a5707"}],"openstack/auth/identity/authenticator.py":[{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"7b93615f29cf996dd33da8463ccf21995aa0fc87","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    :returns string: An authenticator."},{"line_number":26,"context_line":"    \"\"\""},{"line_number":27,"context_line":"    ray \u003d auth_plugin.rsplit(\u0027.\u0027, 1)"},{"line_number":28,"context_line":"    if len(ray) \u003e 1:"},{"line_number":29,"context_line":"        namespace \u003d ray[0]"},{"line_number":30,"context_line":"        auth_plugin \u003d ray[1]"},{"line_number":31,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_ccecca92","line":28,"updated":"2014-09-08 13:21:22.000000000","message":"Why do we need to parse the plugin name here? I\u0027m probably just behind on the design discussions, is there a blueprint I can read up on?","commit_id":"3aae4947f26c704deb738f8f201570d71f9b7be5"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"3511ee6395ec2558a12945530b909ea890b1a4ac","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    :returns string: An authenticator."},{"line_number":26,"context_line":"    \"\"\""},{"line_number":27,"context_line":"    ray \u003d auth_plugin.rsplit(\u0027.\u0027, 1)"},{"line_number":28,"context_line":"    if len(ray) \u003e 1:"},{"line_number":29,"context_line":"        namespace \u003d ray[0]"},{"line_number":30,"context_line":"        auth_plugin \u003d ray[1]"},{"line_number":31,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_ce083f94","line":28,"in_reply_to":"fa98f980_ccecca92","updated":"2014-09-08 13:42:27.000000000","message":"I was hoping for some input from you on this one Doug.\n\nAnyway, the intention was to support openstack.auth.plugin.identity_v2 or identity_v2.  The main reason for allowing the full namespace.name was if someone had a plugin with a completely different namespace.  If everyone thinks we should insist on openstack.auth.plugin as the namespace, I\u0027m cool with that.\n\nI\u0027m not sure how this stuff works when you try to get a plugin from a different package.  I assumed that was possible, but I\u0027ve never tried.","commit_id":"3aae4947f26c704deb738f8f201570d71f9b7be5"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"9261f442a2a83e4311c75e1d8871cfd72fab0bd8","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    :returns string: An authenticator."},{"line_number":26,"context_line":"    \"\"\""},{"line_number":27,"context_line":"    ray \u003d auth_plugin.rsplit(\u0027.\u0027, 1)"},{"line_number":28,"context_line":"    if len(ray) \u003e 1:"},{"line_number":29,"context_line":"        namespace \u003d ray[0]"},{"line_number":30,"context_line":"        auth_plugin \u003d ray[1]"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa98f980_9bf1ec6c","line":27,"updated":"2014-09-09 16:05:59.000000000","message":"Dough also had concerns about this.  The idea was to support a plugin in any namespace rather than insist on openstack.auth.plugin","commit_id":"d92a96f01d2a2ac28578c52035fcd21bf7ba568d"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"b43f217bfaa8589a057db4dc6521640c9f0b5809","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        invoke_on_load\u003dFalse,"},{"line_number":31,"context_line":"    )"},{"line_number":32,"context_line":"    plugin \u003d mgr.driver"},{"line_number":33,"context_line":"    valid_list \u003d plugin.valid_options"},{"line_number":34,"context_line":"    args \u003d {}"},{"line_number":35,"context_line":"    for k in valid_list:"},{"line_number":36,"context_line":"        if k in auth_args:"}],"source_content_type":"text/x-python","patch_set":4,"id":"da9df570_6e22aa02","line":33,"updated":"2014-09-24 14:59:03.000000000","message":"Referring back to my comment on the base changeset, we could remove this loop if we defined an AuthArgumentContainer class that always held all of the arguments. I\u0027m a little worried we can end up with a call to a plugin here that doesn\u0027t pass a required argument, though I guess we can mitigate that risk by always having the plugins define default values for their arguments.","commit_id":"18370a80185d874a691800983ed92f20d96a5707"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"02d16b6a78f2b0a28bb97676b7ee43f9a06b7464","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        invoke_on_load\u003dFalse,"},{"line_number":31,"context_line":"    )"},{"line_number":32,"context_line":"    plugin \u003d mgr.driver"},{"line_number":33,"context_line":"    valid_list \u003d plugin.valid_options"},{"line_number":34,"context_line":"    args \u003d {}"},{"line_number":35,"context_line":"    for k in valid_list:"},{"line_number":36,"context_line":"        if k in auth_args:"}],"source_content_type":"text/x-python","patch_set":4,"id":"baa201ad_186bfbf2","line":33,"in_reply_to":"da9df570_6e22aa02","updated":"2014-10-04 11:52:14.000000000","message":"Again, this is temporary throw away code here, I\u0027d sooner address this concern in a later patch.  In order to track this, I created this bug: https://bugs.launchpad.net/unifiedsdk/+bug/1377425","commit_id":"18370a80185d874a691800983ed92f20d96a5707"}]}
