)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"8ee682bf967601f5de7e559beb4e4210b925520d","unresolved":false,"context_lines":[{"line_number":11,"context_line":"automatically added to the argument parser."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I330c20ddb8d96b3a4287c68b57c36c4a0f869669"},{"line_number":14,"context_line":"Co-Authored-By: Florent Flament \u003cflorent.flament-ext@cloudwatt.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"baada198_9413e35a","line":14,"updated":"2014-07-22 07:47:26.000000000","message":"I think Change-Id must be a last line in the commit message. Otherwise Jenkins and company will badly complain about that.","commit_id":"c2db5f3f8aa897f270b97e04bc6959c34590246f"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"6cdba3464bdf5e7db159eccc0eb411f697a181e3","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"  OS_USERNAME\u003dadmin OS_PROJECT_DOMAIN_NAME\u003ddefault OS_USER_DOMAIN_NAME\u003ddefault \\"},{"line_number":18,"context_line":"  OS_PROJECT_NAME\u003dadmin OS_AUTH_URL\u003dhttp://keystone:5000/v3 OS_PASSWORD\u003dadmin \\"},{"line_number":19,"context_line":"  OS_IDENTITY_API_VERSION\u003d3 OS_AUTH_PLUGIN\u003dv3password openstack project list"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"  OS_TOKEN\u003d1234 OS_URL\u003dhttp://service_url:35357/v2.0 \\"},{"line_number":22,"context_line":"  OS_IDENTITY_API_VERSION\u003d2.0 openstack user list"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"baa201ad_304f8894","line":19,"updated":"2014-09-29 01:22:40.000000000","message":"So, like dtroyer says, I don\u0027t think we can use OS_AUTH_PLUGIN... we can likely try to resolve this based on the other environment variables...\n\nif OS_PASSWORD is passed in, and OS_IDENTITY_API_VERSION is 3, then use v3password, else use v2password\n\nif OS_TOKEN is passed in, and OS_IDENTITY_API_VERSION is 3, then use v3token, else use v2token\n\nif OS_TRUST_ID is used, use whatever the equivalent trust option is.","commit_id":"888f6772ee0d87bb76c7c001b1eb36cec59b9db5"}],"doc/source/man/openstack.rst":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"571f962cdc8d5876e699005d8706d3713200cd3c","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    Authentication username"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":":option:`--os-password` \u003cauth-password\u003e"},{"line_number":60,"context_line":"    Authentication password"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":":option:`--os-user-domain-name` \u003cauth-user-domain-name\u003e | :option:`--os-user-domain-id` \u003cauth-user-domain-id\u003e"},{"line_number":63,"context_line":"    Domain name or id containing user"}],"source_content_type":"text/x-rst","patch_set":16,"id":"da9df570_df34cbfd","side":"PARENT","line":60,"updated":"2014-09-28 20:49:11.000000000","message":"isn\u0027t this option still valid?","commit_id":"ffe976ce3edf2e4dc5dd50247a182ca690b4fdd9"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"571f962cdc8d5876e699005d8706d3713200cd3c","unresolved":false,"context_lines":[{"line_number":227,"context_line":":envvar:`OS_TOKEN`"},{"line_number":228,"context_line":"    Authenticated or service token"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":":envvar:`OS_USER_DOMAIN_NAME`"},{"line_number":231,"context_line":"    Domain name or id containing user"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":":envvar:`OS_PASSWORD`"}],"source_content_type":"text/x-rst","patch_set":16,"id":"da9df570_bf7b87bc","line":230,"updated":"2014-09-28 20:49:11.000000000","message":"this is referenced at line 236","commit_id":"1bc760f4f024007bb7e2481bc6fe8b2bdec037d2"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"571f962cdc8d5876e699005d8706d3713200cd3c","unresolved":false,"context_lines":[{"line_number":254,"context_line":":envvar:`OS_XXXX_API_VERSION`"},{"line_number":255,"context_line":"    Additional API version options will be available depending on the installed API libraries."},{"line_number":256,"context_line":""},{"line_number":257,"context_line":":envvar:`OS_TRUST_ID`"},{"line_number":258,"context_line":"    id of the trust to use as a trustee user"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":":envvar:`OS_IDENTITY_PROVIDER_URL`"}],"source_content_type":"text/x-rst","patch_set":16,"id":"da9df570_7f759fc9","line":257,"updated":"2014-09-28 20:49:11.000000000","message":"this is referenced at line 240","commit_id":"1bc760f4f024007bb7e2481bc6fe8b2bdec037d2"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"571f962cdc8d5876e699005d8706d3713200cd3c","unresolved":false,"context_lines":[{"line_number":258,"context_line":"    id of the trust to use as a trustee user"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":":envvar:`OS_IDENTITY_PROVIDER_URL`"},{"line_number":261,"context_line":"    The URL to use when contacting an Identity Provider for ECP authentication. (v3unscopedsaml specific)"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":":envvar:`OS_IDENTITY_PROVIDER`"},{"line_number":264,"context_line":"    The Identity Provider id on keystone. (v3unscopedsaml specific)"}],"source_content_type":"text/x-rst","patch_set":16,"id":"da9df570_9f80838c","line":261,"updated":"2014-09-28 20:49:11.000000000","message":"the IdP stuff should be merged in a separate patch","commit_id":"1bc760f4f024007bb7e2481bc6fe8b2bdec037d2"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"20edfeade669144a288a3214bd6636704996a984","unresolved":false,"context_lines":[{"line_number":108,"context_line":":option:`--os-XXXX-api-version` \u003cXXXX-api-version\u003e"},{"line_number":109,"context_line":"    Additional API version options will be available depending on the installed API libraries."},{"line_number":110,"context_line":""},{"line_number":111,"context_line":":option:`--os-trust-id` \u003ctrust-id\u003e"},{"line_number":112,"context_line":"    id of the trust to use as a trustee user"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"baa201ad_109524e4","line":111,"updated":"2014-09-29 01:18:40.000000000","message":"already on line 90","commit_id":"888f6772ee0d87bb76c7c001b1eb36cec59b9db5"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"25f3bd45f1970ed18bb5d5444eaf314a90af4d01","unresolved":false,"context_lines":[{"line_number":42,"context_line":"* ``token``: Authentication with a token"},{"line_number":43,"context_line":"* ``password``: Authentication with a username and a password"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"Refer to the keystoneclient library documentation for more details about these plugins and their options, and for a complete list of available plugins."},{"line_number":46,"context_line":"Please bear in mind that some plugins might not support all of the functionalities of :program:`openstack`; for example the v3unscopedsaml plugin can deliver only unscoped tokens, some commands might not be available through this authentication method."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"Additionally, it is possible to use Keystone\u0027s service token to authenticate, by setting the options :option:`--os-token` and :option:`--os-url` (or the environment variables :envvar:`OS_TOKEN` and :envvar:`OS_URL` respectively). This method takes precedence over authentication plugins."}],"source_content_type":"text/x-rst","patch_set":24,"id":"baa201ad_aa115c5e","line":45,"updated":"2014-10-08 19:42:34.000000000","message":"try and limit these lines to 80 characters","commit_id":"753d43de77bae9c0bcee4ff03b47b02a6319a6dd"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"25f3bd45f1970ed18bb5d5444eaf314a90af4d01","unresolved":false,"context_lines":[{"line_number":45,"context_line":"Refer to the keystoneclient library documentation for more details about these plugins and their options, and for a complete list of available plugins."},{"line_number":46,"context_line":"Please bear in mind that some plugins might not support all of the functionalities of :program:`openstack`; for example the v3unscopedsaml plugin can deliver only unscoped tokens, some commands might not be available through this authentication method."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"Additionally, it is possible to use Keystone\u0027s service token to authenticate, by setting the options :option:`--os-token` and :option:`--os-url` (or the environment variables :envvar:`OS_TOKEN` and :envvar:`OS_URL` respectively). This method takes precedence over authentication plugins."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"OPTIONS"},{"line_number":51,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":24,"id":"baa201ad_ca14e04e","line":48,"updated":"2014-10-08 19:42:34.000000000","message":"try and limit these lines to 80 characters","commit_id":"753d43de77bae9c0bcee4ff03b47b02a6319a6dd"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"25f3bd45f1970ed18bb5d5444eaf314a90af4d01","unresolved":false,"context_lines":[{"line_number":55,"context_line":":program:`openstack` recognizes the following global topions:"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":":option:`--os-auth-plugin` \u003cauth-plugin\u003e"},{"line_number":58,"context_line":"    The authentication plugin to use when connecting to the Identity service. If this option is not set, :program:`openstack` will attempt to guess the authentication method to use based on the other options."},{"line_number":59,"context_line":"    If this option is set, its version must match :option:`--os-identity-api-version` "},{"line_number":60,"context_line":""},{"line_number":61,"context_line":":option:`--os-auth-url` \u003cauth-url\u003e"}],"source_content_type":"text/x-rst","patch_set":24,"id":"baa201ad_85d6494d","line":58,"updated":"2014-10-08 19:42:34.000000000","message":"limit to 80 chars per line,","commit_id":"753d43de77bae9c0bcee4ff03b47b02a6319a6dd"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"25f3bd45f1970ed18bb5d5444eaf314a90af4d01","unresolved":false,"context_lines":[{"line_number":199,"context_line":"The following environment variables can be set to alter the behaviour of :program:`openstack`.  Most of them have corresponding command-line options that take precedence if set."},{"line_number":200,"context_line":""},{"line_number":201,"context_line":":envvar:`OS_AUTH_PLUGIN`"},{"line_number":202,"context_line":"    The authentication plugin to use when connecting to the Identity service, its version must match the Identity API version "},{"line_number":203,"context_line":""},{"line_number":204,"context_line":":envvar:`OS_AUTH_URL`"},{"line_number":205,"context_line":"    Authentication URL"}],"source_content_type":"text/x-rst","patch_set":24,"id":"baa201ad_05db397c","line":202,"updated":"2014-10-08 19:42:34.000000000","message":"a few trailing white spaces in this doc should be cleaned up","commit_id":"753d43de77bae9c0bcee4ff03b47b02a6319a6dd"}],"openstackclient/api/auth.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"571f962cdc8d5876e699005d8706d3713200cd3c","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import logging"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from keystoneclient.auth import base"},{"line_number":20,"context_line":"from openstackclient.common import utils"},{"line_number":21,"context_line":"import stevedore"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"da9df570_3f479778","line":20,"updated":"2014-09-28 20:49:11.000000000","message":"OSC import should be in a separate section","commit_id":"1bc760f4f024007bb7e2481bc6fe8b2bdec037d2"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"571f962cdc8d5876e699005d8706d3713200cd3c","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        os_name \u003d o.dest.lower().replace(\u0027_\u0027, \u0027-\u0027)"},{"line_number":41,"context_line":"        os_env_name \u003d \u0027OS_\u0027 + os_name.upper().replace(\u0027-\u0027, \u0027_\u0027)"},{"line_number":42,"context_line":"        OPTIONS_LIST.setdefault("},{"line_number":43,"context_line":"            os_name,"},{"line_number":44,"context_line":"            {\u0027env\u0027: os_env_name,"},{"line_number":45,"context_line":"             \u0027help\u0027: \u0027\u0027}"},{"line_number":46,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":16,"id":"da9df570_5f61bb03","line":43,"updated":"2014-09-28 20:49:11.000000000","message":"nit: this can be condensed to fewer lines...","commit_id":"1bc760f4f024007bb7e2481bc6fe8b2bdec037d2"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"25f3bd45f1970ed18bb5d5444eaf314a90af4d01","unresolved":false,"context_lines":[{"line_number":139,"context_line":"             \u0027, \u0027.join(available_plugins),"},{"line_number":140,"context_line":"        choices\u003davailable_plugins"},{"line_number":141,"context_line":"    )"},{"line_number":142,"context_line":"    # make sur we catch old v2.0 env values"},{"line_number":143,"context_line":"    envs \u003d {"},{"line_number":144,"context_line":"        \u0027OS_PROJECT_NAME\u0027: utils.env("},{"line_number":145,"context_line":"            \u0027OS_PROJECT_NAME\u0027,"}],"source_content_type":"text/x-python","patch_set":24,"id":"baa201ad_25f11d95","line":142,"updated":"2014-10-08 19:42:34.000000000","message":"sure*","commit_id":"753d43de77bae9c0bcee4ff03b47b02a6319a6dd"}],"openstackclient/common/clientmanager.py":[{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"4b5c4a56342e54fe2cc24db0c2f3ca9dcaeefeea","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        self._verify \u003d verify"},{"line_number":65,"context_line":"        # also store in the form used by the legacy client libs"},{"line_number":66,"context_line":"        self._cacert \u003d None"},{"line_number":67,"context_line":"        if verify is True or verify is False:"},{"line_number":68,"context_line":"            self._insecure \u003d not verify"},{"line_number":69,"context_line":"        else:"},{"line_number":70,"context_line":"            self._cacert \u003d verify"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_61412c63","line":67,"updated":"2014-07-23 10:25:35.000000000","message":"how about:\n\nif isinstance(verify, bool):\n     #####\n\n?","commit_id":"c2db5f3f8aa897f270b97e04bc6959c34590246f"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"571f962cdc8d5876e699005d8706d3713200cd3c","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import logging"},{"line_number":19,"context_line":"import pkg_resources"},{"line_number":20,"context_line":"import requests"},{"line_number":21,"context_line":"import sys"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from keystoneclient.auth import base"}],"source_content_type":"text/x-python","patch_set":16,"id":"da9df570_7f5cbf4b","line":20,"updated":"2014-09-28 20:49:11.000000000","message":"requests should be grouped with other 3rd party imports","commit_id":"1bc760f4f024007bb7e2481bc6fe8b2bdec037d2"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"8d0cafdd3638e1e669b11140f1a2e2164cd1fb93","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        ver_prefix \u003d identity_client.AUTH_VERSIONS["},{"line_number":86,"context_line":"            self._api_version[identity_client.API_NAME]"},{"line_number":87,"context_line":"        ]"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        # Get logging from root logger"},{"line_number":90,"context_line":"        root_logger \u003d logging.getLogger(\u0027\u0027)"}],"source_content_type":"text/x-python","patch_set":20,"id":"baa201ad_8530e657","side":"PARENT","line":87,"updated":"2014-09-29 15:44:08.000000000","message":"Getting the Identity version","commit_id":"02320a5a2437acdc501a003cca53310a444e4b4e"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2ff87f5f070b35e7817be686351e6415954bcb54","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        self.timing \u003d auth_options.timing"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        # For compatability until all clients can be updated"},{"line_number":70,"context_line":"        self._project_name \u003d self._auth_params[\u0027tenant_name\u0027]"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        # verify is the Requests-compatible form"},{"line_number":73,"context_line":"        self._verify \u003d verify"}],"source_content_type":"text/x-python","patch_set":25,"id":"baa201ad_851e496e","line":70,"updated":"2014-10-08 19:50:27.000000000","message":"do something like...\n\n  if \u0027tenant_name\u0027 in self._auth_params:\n    self._project_name \u003d self._auth_params[\u0027tenant_name\u0027]\n  else if \u0027project_name\u0027 in self._auth_params:\n    self._project_name \u003d self._auth_params[\u0027project_name\u0027]","commit_id":"401c654502814c2bdb0b4d0707f8713736c79de4"},{"author":{"_account_id":7186,"name":"Matthieu Huin","email":"mhuin@redhat.com","username":"mhu"},"change_message_id":"ae61dd30633c79835a94bb569183313c82ff999d","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        self._service_catalog \u003d None"},{"line_number":67,"context_line":"        self.timing \u003d auth_options.timing"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        # For compatability until all clients can be updated"},{"line_number":70,"context_line":"        if \u0027project_name\u0027 in self._auth_params:"},{"line_number":71,"context_line":"            self._project_name \u003d self._auth_params[\u0027project_name\u0027]"},{"line_number":72,"context_line":"        elif \u0027tenant_name\u0027 in self._auth_params:"}],"source_content_type":"text/x-python","patch_set":26,"id":"baa201ad_901e740c","line":69,"updated":"2014-10-09 10:34:13.000000000","message":"(NIT) compatibility\nalso, I think it\u0027d make more sense to have this covered in build_auth_params in openstackclient.api.auth since something similar is done there.","commit_id":"fef70049ac83e5a47be07cc2254d7540d740c44d"}],"openstackclient/identity/client.py":[{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"7421b5f4652b97c227a5071659d1d14f1db00c74","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        # also the text rendering is ugly in the CLI ..."},{"line_number":51,"context_line":"        OPTIONS_LIST[os_name][\u0027help\u0027] +\u003d \u0027With %s: %s\\n\u0027 % (plugin.name,"},{"line_number":52,"context_line":"                                                            o.help)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"def build_auth_params(options):"},{"line_number":56,"context_line":"    auth_params \u003d {}"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_f477f19d","line":53,"updated":"2014-08-22 04:22:05.000000000","message":"I need to spend some time to understand what is happening above and to make sure it does not add much overhead on load time...\n\nI have a feeling I don\u0027t like the auth modules imposing UI constraints...that\u0027s where the \u0027tenant\u0027 options are coming from, right?","commit_id":"f43a86fe21a0e530f209b365b0835f5efffe4267"},{"author":{"_account_id":7186,"name":"Matthieu Huin","email":"mhuin@redhat.com","username":"mhu"},"change_message_id":"443696ee205a0f508bc9da91a7f3814cc6944b7d","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        # also the text rendering is ugly in the CLI ..."},{"line_number":51,"context_line":"        OPTIONS_LIST[os_name][\u0027help\u0027] +\u003d \u0027With %s: %s\\n\u0027 % (plugin.name,"},{"line_number":52,"context_line":"                                                            o.help)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"def build_auth_params(options):"},{"line_number":56,"context_line":"    auth_params \u003d {}"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_706ca008","line":53,"in_reply_to":"1abeadc6_a7a1a447","updated":"2014-08-23 16:36:20.000000000","message":"I like this idea, as I am not very happy with the help text rendering, but maybe in a following patch ?","commit_id":"f43a86fe21a0e530f209b365b0835f5efffe4267"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"0ec34fdd31c955dd74c93a6c0f617ba03bcc3072","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        # also the text rendering is ugly in the CLI ..."},{"line_number":51,"context_line":"        OPTIONS_LIST[os_name][\u0027help\u0027] +\u003d \u0027With %s: %s\\n\u0027 % (plugin.name,"},{"line_number":52,"context_line":"                                                            o.help)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"def build_auth_params(options):"},{"line_number":56,"context_line":"    auth_params \u003d {}"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_a7a1a447","line":53,"in_reply_to":"1abeadc6_e6dc9e48","updated":"2014-08-23 12:32:44.000000000","message":"This is kind of cool with the help text, but it almost seems like it would be nicer if the got this information by explicitly asking for it with a special \u0027auth plugin list\u0027 command or something.  Seems like the help text could get very cluttered with this approach.","commit_id":"f43a86fe21a0e530f209b365b0835f5efffe4267"},{"author":{"_account_id":7186,"name":"Matthieu Huin","email":"mhuin@redhat.com","username":"mhu"},"change_message_id":"ffc130259f475ee2e357d7efada7fcd884a67df7","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        # also the text rendering is ugly in the CLI ..."},{"line_number":51,"context_line":"        OPTIONS_LIST[os_name][\u0027help\u0027] +\u003d \u0027With %s: %s\\n\u0027 % (plugin.name,"},{"line_number":52,"context_line":"                                                            o.help)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"def build_auth_params(options):"},{"line_number":56,"context_line":"    auth_params \u003d {}"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_e6dc9e48","line":53,"in_reply_to":"1abeadc6_f477f19d","updated":"2014-08-22 11:23:22.000000000","message":"It stores the options by their \"destination name\" (ie how the arguments are called when instantiating the plugin), their associated env var name, and the help text provided by the plugin. It is used to provision the UI options and the associated help text. For example:\n\n  --os-username \u003cauth-username\u003e\n                        With v2password: Username to login with With\n                        v3unscopedsaml: Username With v3password: Username\n                        (Env: OS_USERNAME)","commit_id":"f43a86fe21a0e530f209b365b0835f5efffe4267"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"248cbc5b6560dfa9650ecdcb63556282a2413066","unresolved":false,"context_lines":[{"line_number":35,"context_line":"                                         propagate_map_exceptions\u003dTrue)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"OPTIONS_LIST \u003d {}"},{"line_number":38,"context_line":"for plugin in PLUGIN_LIST:"},{"line_number":39,"context_line":"    for o in plugin.plugin.get_options():"},{"line_number":40,"context_line":"        os_name \u003d o.dest.lower().replace(\u0027_\u0027, \u0027-\u0027)"},{"line_number":41,"context_line":"        os_env_name \u003d \u0027OS_\u0027 + os_name.upper().replace(\u0027-\u0027, \u0027_\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa98f980_40269669","line":38,"updated":"2014-09-19 13:40:56.000000000","message":"Have you considered using https://github.com/openstack/python-keystoneclient/blob/master/keystoneclient/auth/base.py#L29 ?\nRight now you don\u0027t check if the plugin really exists, right? \nI am not sure if stevedore.DriverManager does something you really don\u0027t want to (like instantiates a full object), but the name of the method makes me think it simply returns a class.","commit_id":"f005995be443c6e2c603a2d2b0ffebc93bd8f928"},{"author":{"_account_id":7186,"name":"Matthieu Huin","email":"mhuin@redhat.com","username":"mhu"},"change_message_id":"41ec1d5b7c5e5ac3d88d9109d96a520d8c46b100","unresolved":false,"context_lines":[{"line_number":35,"context_line":"                                         propagate_map_exceptions\u003dTrue)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"OPTIONS_LIST \u003d {}"},{"line_number":38,"context_line":"for plugin in PLUGIN_LIST:"},{"line_number":39,"context_line":"    for o in plugin.plugin.get_options():"},{"line_number":40,"context_line":"        os_name \u003d o.dest.lower().replace(\u0027_\u0027, \u0027-\u0027)"},{"line_number":41,"context_line":"        os_env_name \u003d \u0027OS_\u0027 + os_name.upper().replace(\u0027-\u0027, \u0027_\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"da9df570_729bbbc9","line":38,"in_reply_to":"fa98f980_40269669","updated":"2014-09-22 15:18:05.000000000","message":"It simply lists plugins declared as endpoints in keystoneclient\u0027s setup.cfg, so it is safe to assume the plugins exist.\nI can go the extra mile and test the loaded plugins, but isn\u0027t it overkill ?","commit_id":"f005995be443c6e2c603a2d2b0ffebc93bd8f928"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"248cbc5b6560dfa9650ecdcb63556282a2413066","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        # also the text rendering is ugly in the CLI ..."},{"line_number":50,"context_line":"        OPTIONS_LIST[os_name][\u0027help\u0027] +\u003d \u0027With %s: %s\\n\u0027 % (plugin.name,"},{"line_number":51,"context_line":"                                                            o.help)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"def build_auth_params(options):"},{"line_number":55,"context_line":"    auth_params \u003d {}"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa98f980_e0c22a52","line":52,"updated":"2014-09-19 13:40:56.000000000","message":"(NIT) I think some people might complain and want this line to look like:\n\nOPTIONS_LIST[os_name][\u0027help\u0027] +\u003d \u0027With %(plugin_name)s: %(help_text)s\\n\u0027 % {\u0027plugin_name\u0027: plugin.name, \u0027help_text\u0027: o.help}","commit_id":"f005995be443c6e2c603a2d2b0ffebc93bd8f928"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"e4e19006f86283c5c2ddc0e81b68db2712270e4e","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        # also the text rendering is ugly in the CLI ..."},{"line_number":50,"context_line":"        OPTIONS_LIST[os_name][\u0027help\u0027] +\u003d \u0027With %s: %s\\n\u0027 % (plugin.name,"},{"line_number":51,"context_line":"                                                            o.help)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"def build_auth_params(options):"},{"line_number":55,"context_line":"    auth_params \u003d {}"}],"source_content_type":"text/x-python","patch_set":13,"id":"da9df570_9424aac7","line":52,"in_reply_to":"fa98f980_e0c22a52","updated":"2014-09-20 05:16:47.000000000","message":"I don\u0027t think we do keyword substitution anywhere else in OSC.  Why might it be preferred?","commit_id":"f005995be443c6e2c603a2d2b0ffebc93bd8f928"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"248cbc5b6560dfa9650ecdcb63556282a2413066","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    if options.os_auth_plugin.startswith(\"v2\"):"},{"line_number":64,"context_line":"        auth_params[\u0027tenant_id\u0027] \u003d getattr(options, \u0027os_project_id\u0027, None)"},{"line_number":65,"context_line":"        auth_params[\u0027tenant_name\u0027] \u003d getattr(options, \u0027os_project_name\u0027, None)"},{"line_number":66,"context_line":"    return auth_params"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"# Translate our API version to auth plugin version prefix"},{"line_number":69,"context_line":"AUTH_VERSIONS \u003d {"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa98f980_803ebe27","line":66,"updated":"2014-09-19 13:40:56.000000000","message":"I have a feeling that this whole green block of code should belong to the keystoneclient and openstackclient should simply consume it.","commit_id":"f005995be443c6e2c603a2d2b0ffebc93bd8f928"},{"author":{"_account_id":7186,"name":"Matthieu Huin","email":"mhuin@redhat.com","username":"mhu"},"change_message_id":"41ec1d5b7c5e5ac3d88d9109d96a520d8c46b100","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    if options.os_auth_plugin.startswith(\"v2\"):"},{"line_number":64,"context_line":"        auth_params[\u0027tenant_id\u0027] \u003d getattr(options, \u0027os_project_id\u0027, None)"},{"line_number":65,"context_line":"        auth_params[\u0027tenant_name\u0027] \u003d getattr(options, \u0027os_project_name\u0027, None)"},{"line_number":66,"context_line":"    return auth_params"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"# Translate our API version to auth plugin version prefix"},{"line_number":69,"context_line":"AUTH_VERSIONS \u003d {"}],"source_content_type":"text/x-python","patch_set":13,"id":"da9df570_d087fe5f","line":66,"in_reply_to":"da9df570_b7c0d07d","updated":"2014-09-22 15:18:05.000000000","message":"Agreed, this looks more specific to OSC.\nI\u0027ll move the code to its own module, just as you did in your fork.","commit_id":"f005995be443c6e2c603a2d2b0ffebc93bd8f928"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"e4e19006f86283c5c2ddc0e81b68db2712270e4e","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    if options.os_auth_plugin.startswith(\"v2\"):"},{"line_number":64,"context_line":"        auth_params[\u0027tenant_id\u0027] \u003d getattr(options, \u0027os_project_id\u0027, None)"},{"line_number":65,"context_line":"        auth_params[\u0027tenant_name\u0027] \u003d getattr(options, \u0027os_project_name\u0027, None)"},{"line_number":66,"context_line":"    return auth_params"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"# Translate our API version to auth plugin version prefix"},{"line_number":69,"context_line":"AUTH_VERSIONS \u003d {"}],"source_content_type":"text/x-python","patch_set":13,"id":"da9df570_b7c0d07d","line":66,"in_reply_to":"fa98f980_803ebe27","updated":"2014-09-20 05:16:47.000000000","message":"I think it is too tied to how OSC\u0027s options are handled to move to keystonenclient.\n\nI do, however, think it should be moved to clientmanager.py.  That is really the interface from the CLI shell to the client libs.  Or possibly moved to a new module that encapsulates much of the auth interface.  I would also add build_auth_plugins_option_parser() to this.","commit_id":"f005995be443c6e2c603a2d2b0ffebc93bd8f928"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"571f962cdc8d5876e699005d8706d3713200cd3c","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    # TODO(dtroyer): Something doesn\u0027t like the session.auth when using"},{"line_number":48,"context_line":"    #                token auth, chase that down."},{"line_number":49,"context_line":"    if instance._url:"},{"line_number":50,"context_line":"        LOG.debug(\u0027Using service token auth\u0027)"},{"line_number":51,"context_line":"        client \u003d identity_client("},{"line_number":52,"context_line":"            endpoint\u003dinstance._url,"},{"line_number":53,"context_line":"            token\u003dinstance._auth_params[\u0027token\u0027],"}],"source_content_type":"text/x-python","patch_set":16,"id":"da9df570_9f57a325","line":50,"updated":"2014-09-28 20:49:11.000000000","message":"this isn\u0027t true, it could just be a regular token, not a service token.","commit_id":"1bc760f4f024007bb7e2481bc6fe8b2bdec037d2"},{"author":{"_account_id":7186,"name":"Matthieu Huin","email":"mhuin@redhat.com","username":"mhu"},"change_message_id":"0914e0d937f17fcadc88d552941833924348892b","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    # TODO(dtroyer): Something doesn\u0027t like the session.auth when using"},{"line_number":48,"context_line":"    #                token auth, chase that down."},{"line_number":49,"context_line":"    if instance._url:"},{"line_number":50,"context_line":"        LOG.debug(\u0027Using service token auth\u0027)"},{"line_number":51,"context_line":"        client \u003d identity_client("},{"line_number":52,"context_line":"            endpoint\u003dinstance._url,"},{"line_number":53,"context_line":"            token\u003dinstance._auth_params[\u0027token\u0027],"}],"source_content_type":"text/x-python","patch_set":16,"id":"da9df570_4229e035","line":50,"in_reply_to":"da9df570_9f57a325","updated":"2014-09-28 22:26:47.000000000","message":"It has to be a service token if you use the --os-url option (service URL), as opposed to the auth url. The service token auth is a bit different from the regular token workflow and it is not covered as such by the current token auth plugins, which is why the client creation is a bit different in that case (see dtroyer\u0027s remark above)","commit_id":"1bc760f4f024007bb7e2481bc6fe8b2bdec037d2"}],"openstackclient/shell.py":[{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"49e8f75e437a8334886f28d77e751d26b89b4253","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        help\u003d\u0027The authentication method to use. Default is v2password. \u0027"},{"line_number":71,"context_line":"             \u0027The --os-identity-api-version argument must be consistent \u0027"},{"line_number":72,"context_line":"             \u0027with the version of the method.\\nAvailable methods are \u0027 +"},{"line_number":73,"context_line":"             \u0027, \u0027.join(available_plugins)"},{"line_number":74,"context_line":"    )"},{"line_number":75,"context_line":"    for o in identity_client.OPTIONS_LIST:"},{"line_number":76,"context_line":"        parser.add_argument("}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_e488a8c8","line":73,"updated":"2014-08-26 13:49:47.000000000","message":"Is there any way would could make available_plugins into a choices\u003davailable_plugins, option to argparse here?  I assume these are going to be things like identity.v2 or something like that.","commit_id":"f43a86fe21a0e530f209b365b0835f5efffe4267"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"7421b5f4652b97c227a5071659d1d14f1db00c74","unresolved":false,"context_lines":[{"line_number":284,"context_line":"            )"},{"line_number":285,"context_line":"        # TODO(mhu) All these checks should be exposed at the plugin level"},{"line_number":286,"context_line":"        # or just dropped altogether, as the client instantiation will fail"},{"line_number":287,"context_line":"        # anyway"},{"line_number":288,"context_line":"        if self.options.os_url:"},{"line_number":289,"context_line":"            if not self.options.os_token:"},{"line_number":290,"context_line":"                # service token needed"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_d48af562","line":287,"updated":"2014-08-22 04:22:05.000000000","message":"I like this plan...the combinations were already getting out of hand...","commit_id":"f43a86fe21a0e530f209b365b0835f5efffe4267"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"248cbc5b6560dfa9650ecdcb63556282a2413066","unresolved":false,"context_lines":[{"line_number":251,"context_line":"        # or just dropped altogether, as the client instantiation will fail"},{"line_number":252,"context_line":"        # anyway"},{"line_number":253,"context_line":"        if self.options.os_url:"},{"line_number":254,"context_line":"            if not self.options.os_token:"},{"line_number":255,"context_line":"                # service token needed"},{"line_number":256,"context_line":"                raise exc.CommandError("},{"line_number":257,"context_line":"                    \"You must provide a token via\""}],"source_content_type":"text/x-python","patch_set":13,"id":"fa98f980_60d47abd","line":254,"updated":"2014-09-19 13:40:56.000000000","message":"if self.options.os_url and not self.options.os_token:\n    # service token needed","commit_id":"f005995be443c6e2c603a2d2b0ffebc93bd8f928"},{"author":{"_account_id":7186,"name":"Matthieu Huin","email":"mhuin@redhat.com","username":"mhu"},"change_message_id":"41ec1d5b7c5e5ac3d88d9109d96a520d8c46b100","unresolved":false,"context_lines":[{"line_number":251,"context_line":"        # or just dropped altogether, as the client instantiation will fail"},{"line_number":252,"context_line":"        # anyway"},{"line_number":253,"context_line":"        if self.options.os_url:"},{"line_number":254,"context_line":"            if not self.options.os_token:"},{"line_number":255,"context_line":"                # service token needed"},{"line_number":256,"context_line":"                raise exc.CommandError("},{"line_number":257,"context_line":"                    \"You must provide a token via\""}],"source_content_type":"text/x-python","patch_set":13,"id":"da9df570_b0d0ba54","line":254,"in_reply_to":"fa98f980_60d47abd","updated":"2014-09-22 15:18:05.000000000","message":"Done","commit_id":"f005995be443c6e2c603a2d2b0ffebc93bd8f928"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"8635c76c3f33b5ca1d0d697f177ca9a5f54725ff","unresolved":false,"context_lines":[{"line_number":226,"context_line":"        if (not self.options.os_url and"},{"line_number":227,"context_line":"           self.options.os_auth_plugin.startswith(\u0027v\u0027) and"},{"line_number":228,"context_line":"           self.options.os_auth_plugin[1] !\u003d"},{"line_number":229,"context_line":"           self.options.os_identity_api_version[0]):"},{"line_number":230,"context_line":"            raise exc.CommandError("},{"line_number":231,"context_line":"                \"Auth plugin %s not compatible\""},{"line_number":232,"context_line":"                \" with requested API version\" % self.options.os_auth_plugin"}],"source_content_type":"text/x-python","patch_set":25,"id":"baa201ad_4552a135","line":229,"updated":"2014-10-08 19:52:12.000000000","message":"IMO identity api version shouldn\u0027t refer to auth api version.  The plugin should set auth api version.  What if you wanted to auth on v3 and do a identity v2 action?","commit_id":"401c654502814c2bdb0b4d0707f8713736c79de4"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"f70eae39379b36d0b44bd6b007e5e30acb15cc6e","unresolved":false,"context_lines":[{"line_number":226,"context_line":"        if (not self.options.os_url and"},{"line_number":227,"context_line":"           self.options.os_auth_plugin.startswith(\u0027v\u0027) and"},{"line_number":228,"context_line":"           self.options.os_auth_plugin[1] !\u003d"},{"line_number":229,"context_line":"           self.options.os_identity_api_version[0]):"},{"line_number":230,"context_line":"            raise exc.CommandError("},{"line_number":231,"context_line":"                \"Auth plugin %s not compatible\""},{"line_number":232,"context_line":"                \" with requested API version\" % self.options.os_auth_plugin"}],"source_content_type":"text/x-python","patch_set":25,"id":"baa201ad_a057bbc8","line":229,"in_reply_to":"baa201ad_4552a135","updated":"2014-10-08 20:01:35.000000000","message":"I\u0027ve come to the conclusion that is going to be a rare case.  However, I do agree long-term that os_identity_api_version should only apply to the API and not auth.","commit_id":"401c654502814c2bdb0b4d0707f8713736c79de4"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"8635c76c3f33b5ca1d0d697f177ca9a5f54725ff","unresolved":false,"context_lines":[{"line_number":240,"context_line":"                \"You must provide a service token via\""},{"line_number":241,"context_line":"                \" either --os-token or env[OS_TOKEN]\")"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"        if (self.options.os_auth_plugin.endswith(\u0027token\u0027) and"},{"line_number":244,"context_line":"           (self.options.os_token or self.options.os_auth_url)):"},{"line_number":245,"context_line":"            # Token flow auth takes priority"},{"line_number":246,"context_line":"            if not self.options.os_token:"}],"source_content_type":"text/x-python","patch_set":25,"id":"baa201ad_4017ef44","line":243,"updated":"2014-10-08 19:52:12.000000000","message":"Having the user specify token or password authentication seems unnecessary to me.  If they provide a token, they want token auth.  Why can\u0027t the auth plugin be v3 or v2?","commit_id":"401c654502814c2bdb0b4d0707f8713736c79de4"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"f70eae39379b36d0b44bd6b007e5e30acb15cc6e","unresolved":false,"context_lines":[{"line_number":240,"context_line":"                \"You must provide a service token via\""},{"line_number":241,"context_line":"                \" either --os-token or env[OS_TOKEN]\")"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"        if (self.options.os_auth_plugin.endswith(\u0027token\u0027) and"},{"line_number":244,"context_line":"           (self.options.os_token or self.options.os_auth_url)):"},{"line_number":245,"context_line":"            # Token flow auth takes priority"},{"line_number":246,"context_line":"            if not self.options.os_token:"}],"source_content_type":"text/x-python","patch_set":25,"id":"baa201ad_80c0f750","line":243,"in_reply_to":"baa201ad_4017ef44","updated":"2014-10-08 20:01:35.000000000","message":"Most of these checks will do away, we\u0027ll let the plugins pass or fail.  I do want to try to be smart about choices like this based on what the user provides.","commit_id":"401c654502814c2bdb0b4d0707f8713736c79de4"}],"openstackclient/tests/common/test_clientmanager.py":[{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"7421b5f4652b97c227a5071659d1d14f1db00c74","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#   License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"#   under the License."},{"line_number":14,"context_line":"#"},{"line_number":15,"context_line":"from mox3 import mox"},{"line_number":16,"context_line":"from requests_mock.contrib import fixture"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from keystoneclient.openstack.common import jsonutils"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_3457a903","line":15,"updated":"2014-08-22 04:22:05.000000000","message":"Why do we need to use mox3?","commit_id":"f43a86fe21a0e530f209b365b0835f5efffe4267"},{"author":{"_account_id":7186,"name":"Matthieu Huin","email":"mhuin@redhat.com","username":"mhu"},"change_message_id":"ffc130259f475ee2e357d7efada7fcd884a67df7","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#   License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"#   under the License."},{"line_number":14,"context_line":"#"},{"line_number":15,"context_line":"from mox3 import mox"},{"line_number":16,"context_line":"from requests_mock.contrib import fixture"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from keystoneclient.openstack.common import jsonutils"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_669ece64","line":15,"in_reply_to":"1abeadc6_3457a903","updated":"2014-08-22 11:23:22.000000000","message":"I \"stole\" this from a test in python-keystoneclient, if this can be achieved with mock, I don\u0027t have any problem with replacing this","commit_id":"f43a86fe21a0e530f209b365b0835f5efffe4267"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"248cbc5b6560dfa9650ecdcb63556282a2413066","unresolved":false,"context_lines":[{"line_number":26,"context_line":"AUTH_TOKEN \u003d \"foobar\""},{"line_number":27,"context_line":"USERNAME \u003d \"itchy\""},{"line_number":28,"context_line":"PASSWORD \u003d \"scratchy\""},{"line_number":29,"context_line":"AUTH_URL \u003d \"http://0.0.0.0:5000\""},{"line_number":30,"context_line":"TEST_RESPONSE_DICT \u003d {"},{"line_number":31,"context_line":"    \"access\": {"},{"line_number":32,"context_line":"        \"metadata\": {"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa98f980_1b632342","line":29,"updated":"2014-09-19 13:40:56.000000000","message":"this can be taken from tests.fakes.AUTH_URL","commit_id":"f005995be443c6e2c603a2d2b0ffebc93bd8f928"},{"author":{"_account_id":7186,"name":"Matthieu Huin","email":"mhuin@redhat.com","username":"mhu"},"change_message_id":"41ec1d5b7c5e5ac3d88d9109d96a520d8c46b100","unresolved":false,"context_lines":[{"line_number":26,"context_line":"AUTH_TOKEN \u003d \"foobar\""},{"line_number":27,"context_line":"USERNAME \u003d \"itchy\""},{"line_number":28,"context_line":"PASSWORD \u003d \"scratchy\""},{"line_number":29,"context_line":"AUTH_URL \u003d \"http://0.0.0.0:5000\""},{"line_number":30,"context_line":"TEST_RESPONSE_DICT \u003d {"},{"line_number":31,"context_line":"    \"access\": {"},{"line_number":32,"context_line":"        \"metadata\": {"}],"source_content_type":"text/x-python","patch_set":13,"id":"da9df570_706c929d","line":29,"in_reply_to":"fa98f980_1b632342","updated":"2014-09-22 15:18:05.000000000","message":"Done","commit_id":"f005995be443c6e2c603a2d2b0ffebc93bd8f928"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"248cbc5b6560dfa9650ecdcb63556282a2413066","unresolved":false,"context_lines":[{"line_number":27,"context_line":"USERNAME \u003d \"itchy\""},{"line_number":28,"context_line":"PASSWORD \u003d \"scratchy\""},{"line_number":29,"context_line":"AUTH_URL \u003d \"http://0.0.0.0:5000\""},{"line_number":30,"context_line":"TEST_RESPONSE_DICT \u003d {"},{"line_number":31,"context_line":"    \"access\": {"},{"line_number":32,"context_line":"        \"metadata\": {"},{"line_number":33,"context_line":"            \"is_admin\": 0,"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa98f980_7b534f6c","line":30,"updated":"2014-09-19 13:40:56.000000000","message":"this should be moved to some fixtures/fakes I think.","commit_id":"f005995be443c6e2c603a2d2b0ffebc93bd8f928"},{"author":{"_account_id":7186,"name":"Matthieu Huin","email":"mhuin@redhat.com","username":"mhu"},"change_message_id":"41ec1d5b7c5e5ac3d88d9109d96a520d8c46b100","unresolved":false,"context_lines":[{"line_number":27,"context_line":"USERNAME \u003d \"itchy\""},{"line_number":28,"context_line":"PASSWORD \u003d \"scratchy\""},{"line_number":29,"context_line":"AUTH_URL \u003d \"http://0.0.0.0:5000\""},{"line_number":30,"context_line":"TEST_RESPONSE_DICT \u003d {"},{"line_number":31,"context_line":"    \"access\": {"},{"line_number":32,"context_line":"        \"metadata\": {"},{"line_number":33,"context_line":"            \"is_admin\": 0,"}],"source_content_type":"text/x-python","patch_set":13,"id":"da9df570_901d76c0","line":30,"in_reply_to":"fa98f980_7b534f6c","updated":"2014-09-22 15:18:05.000000000","message":"Done","commit_id":"f005995be443c6e2c603a2d2b0ffebc93bd8f928"}],"openstackclient/tests/test_shell.py":[{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"49e8f75e437a8334886f28d77e751d26b89b4253","unresolved":false,"context_lines":[{"line_number":91,"context_line":"            self.assertEqual(_shell.options.os_tenant_id,"},{"line_number":92,"context_line":"                             default_args[\"tenant_id\"])"},{"line_number":93,"context_line":"            self.assertEqual(_shell.options.os_tenant_name,"},{"line_number":94,"context_line":"                             default_args[\"tenant_name\"])"},{"line_number":95,"context_line":"            self.assertEqual(_shell.options.os_domain_id,"},{"line_number":96,"context_line":"                             default_args[\"domain_id\"])"},{"line_number":97,"context_line":"            self.assertEqual(_shell.options.os_domain_name,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_0407641e","line":94,"updated":"2014-08-26 13:49:47.000000000","message":"We aren\u0027t suddenly taking --os-tenant-id and --os-tenant-name are we?  I\u0027m a little confused where this is coming from.  Maybe there needs to be some mapping functiont that will take from the CLI --os-project-name and map it to tenant-name for the plugin.","commit_id":"f43a86fe21a0e530f209b365b0835f5efffe4267"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"fb097b7215cb6b4521cce7e34c4d35f0283cf3c6","unresolved":false,"context_lines":[{"line_number":110,"context_line":"                             default_args[\"trust_id\"])"},{"line_number":111,"context_line":"            self.assertEqual(_shell.options.os_auth_plugin,"},{"line_number":112,"context_line":"                             default_args.get(\u0027auth_plugin\u0027,"},{"line_number":113,"context_line":"                                              DEFAULT_AUTH_PLUGIN))"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def _assert_token_auth(self, cmd_options, default_args):"},{"line_number":116,"context_line":"        with mock.patch(\"openstackclient.shell.OpenStackShell.initialize_app\","}],"source_content_type":"text/x-python","patch_set":16,"id":"da9df570_5aecc5c7","line":113,"updated":"2014-09-26 16:37:44.000000000","message":"If default_args are equal to None the .get() method will return \u0027password\u0027 and the test will pass. Is this what you want?","commit_id":"1bc760f4f024007bb7e2481bc6fe8b2bdec037d2"}]}
