)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"21879d0bcad31ed098aed33e48686b699cc6e78e","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"WIP: switch to keystoneauth"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"move cinderclient to keystoneauth as keystoneclient\u0027s auth session,"},{"line_number":10,"context_line":"plugins and adapter code has been deprecated."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I88fb327628e1bec48dc391f50d66b3deab4a8ab9"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"5aef4532_f8405a36","line":9,"range":{"start_line":9,"start_character":5,"end_line":9,"end_character":17},"updated":"2016-03-09 15:50:27.000000000","message":"glanceclient.","commit_id":"dc014b17f96fd2659857a0ced0eea6ab1b0ca6dc"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"3a5b6be9337f10836aa14de2883715fbadd30f45","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Itisha Dewan \u003cishadewan07@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-06-14 06:59:03 +0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"WIP: switch to keystoneauth"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"move glanceclient to keystoneauth as keystoneclient\u0027s auth session,"},{"line_number":10,"context_line":"plugins and adapter code has been deprecated."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"7aa08908_10d18f57","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":4},"updated":"2016-06-14 03:32:25.000000000","message":"looks like this is pretty close, feel free to drop the \"WIP\" prefix :)","commit_id":"109ccdf08a701c4652945a9e992690347f5cfa4f"}],"glanceclient/client.py":[{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"dc73a8806ce854d85c2fe06d453ccc9006eeb390","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    :param string version: The version of API to use."},{"line_number":28,"context_line":"    :param session: A keystoneauth session that should be used for transport."},{"line_number":29,"context_line":"    :type session: keystoneauth.session.Session"},{"line_number":30,"context_line":"    \"\"\""},{"line_number":31,"context_line":"    # FIXME(jamielennox): Add a deprecation warning if no session is passed."},{"line_number":32,"context_line":"    # Leaving it as an option until we can ensure nothing break when we switch."}],"source_content_type":"text/x-python","patch_set":15,"id":"3aaa91ec_558c5e7f","line":29,"updated":"2016-06-27 12:46:05.000000000","message":"Shouldn\u0027t this be `keystoneauth1`, not `keystoneauth`?","commit_id":"bfc8633e74b3eb37e8540ca51390a141920bb789"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"281a280fed9741935df33754aa146061a063069c","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    :param string version: The version of API to use."},{"line_number":28,"context_line":"    :param session: A keystoneauth session that should be used for transport."},{"line_number":29,"context_line":"    :type session: keystoneauth.session.Session"},{"line_number":30,"context_line":"    \"\"\""},{"line_number":31,"context_line":"    # FIXME(jamielennox): Add a deprecation warning if no session is passed."},{"line_number":32,"context_line":"    # Leaving it as an option until we can ensure nothing break when we switch."}],"source_content_type":"text/x-python","patch_set":15,"id":"3aaa91ec_7450635f","line":29,"in_reply_to":"3aaa91ec_558c5e7f","updated":"2016-06-27 19:59:24.000000000","message":"yep, nice catch","commit_id":"bfc8633e74b3eb37e8540ca51390a141920bb789"}],"glanceclient/common/http.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"af5109cfd8bf91b490baf8d32ef63529ee70f4c7","unresolved":false,"context_lines":[{"line_number":319,"context_line":"                                                      headers\u003dheaders,"},{"line_number":320,"context_line":"                                                      data\u003ddata,"},{"line_number":321,"context_line":"                                                      **kwargs)"},{"line_number":322,"context_line":"        except ksc_exc.RequestTimeout as e:"},{"line_number":323,"context_line":"            conn_url \u003d self.get_endpoint(auth\u003dkwargs.get(\u0027auth\u0027))"},{"line_number":324,"context_line":"            conn_url \u003d \"%s/%s\" % (conn_url.rstrip(\u0027/\u0027), url.lstrip(\u0027/\u0027))"},{"line_number":325,"context_line":"            message \u003d (\"Error communicating with %(url)s %(e)s\" %"}],"source_content_type":"text/x-python","patch_set":8,"id":"7aa08908_90de1f6b","line":322,"range":{"start_line":322,"start_character":15,"end_line":322,"end_character":37},"updated":"2016-06-14 03:32:01.000000000","message":"i think you may need to change this to ksc_exc.ConnectTimeout or catch both Timeouts.","commit_id":"109ccdf08a701c4652945a9e992690347f5cfa4f"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ca97938caab6c3076270a949572c6c2833d97541","unresolved":false,"context_lines":[{"line_number":319,"context_line":"                                                      headers\u003dheaders,"},{"line_number":320,"context_line":"                                                      data\u003ddata,"},{"line_number":321,"context_line":"                                                      **kwargs)"},{"line_number":322,"context_line":"        except ksc_exc.RequestTimeout as e:"},{"line_number":323,"context_line":"            conn_url \u003d self.get_endpoint(auth\u003dkwargs.get(\u0027auth\u0027))"},{"line_number":324,"context_line":"            conn_url \u003d \"%s/%s\" % (conn_url.rstrip(\u0027/\u0027), url.lstrip(\u0027/\u0027))"},{"line_number":325,"context_line":"            message \u003d (\"Error communicating with %(url)s %(e)s\" %"}],"source_content_type":"text/x-python","patch_set":8,"id":"7aa08908_2b9b7c67","line":322,"range":{"start_line":322,"start_character":15,"end_line":322,"end_character":37},"in_reply_to":"7aa08908_90de1f6b","updated":"2016-06-14 04:39:03.000000000","message":"Done","commit_id":"109ccdf08a701c4652945a9e992690347f5cfa4f"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"dc73a8806ce854d85c2fe06d453ccc9006eeb390","unresolved":false,"context_lines":[{"line_number":18,"context_line":"import socket"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from keystoneauth1 import adapter"},{"line_number":21,"context_line":"from keystoneauth1 import exceptions as ksc_exc"},{"line_number":22,"context_line":"from oslo_utils import importutils"},{"line_number":23,"context_line":"from oslo_utils import netutils"},{"line_number":24,"context_line":"import requests"}],"source_content_type":"text/x-python","patch_set":15,"id":"3aaa91ec_b5e78245","line":21,"updated":"2016-06-27 12:46:05.000000000","message":"Since we\u0027re changing this line and others, why not rename it to `ksa_exc`?","commit_id":"bfc8633e74b3eb37e8540ca51390a141920bb789"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"281a280fed9741935df33754aa146061a063069c","unresolved":false,"context_lines":[{"line_number":18,"context_line":"import socket"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from keystoneauth1 import adapter"},{"line_number":21,"context_line":"from keystoneauth1 import exceptions as ksc_exc"},{"line_number":22,"context_line":"from oslo_utils import importutils"},{"line_number":23,"context_line":"from oslo_utils import netutils"},{"line_number":24,"context_line":"import requests"}],"source_content_type":"text/x-python","patch_set":15,"id":"3aaa91ec_f4ca9319","line":21,"in_reply_to":"3aaa91ec_b5e78245","updated":"2016-06-27 19:59:24.000000000","message":"sure, we could","commit_id":"bfc8633e74b3eb37e8540ca51390a141920bb789"}],"glanceclient/shell.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"e0fba33bdb684042cc8b58c9edabbb04ef2119f0","unresolved":false,"context_lines":[{"line_number":380,"context_line":"                      \"env[OS_PASSWORD], \""},{"line_number":381,"context_line":"                      \"or prompted response\"))"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"        # Validate password flow auth"},{"line_number":384,"context_line":"        project_info \u003d ("},{"line_number":385,"context_line":"            args.os_tenant_name or args.os_tenant_id or ("},{"line_number":386,"context_line":"                args.os_project_name and ("},{"line_number":387,"context_line":"                    args.os_project_domain_name or"},{"line_number":388,"context_line":"                    args.os_project_domain_id"},{"line_number":389,"context_line":"                )"},{"line_number":390,"context_line":"            ) or args.os_project_id"},{"line_number":391,"context_line":"        )"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":"        if not project_info:"},{"line_number":394,"context_line":"            # tenant is deprecated in Keystone v3. Use the latest"},{"line_number":395,"context_line":"            # terminology instead."},{"line_number":396,"context_line":"            raise exc.CommandError("},{"line_number":397,"context_line":"                _(\"You must provide a project_id or project_name (\""},{"line_number":398,"context_line":"                  \"with project_domain_name or project_domain_id) \""},{"line_number":399,"context_line":"                  \"via \""},{"line_number":400,"context_line":"                  \"  --os-project-id (env[OS_PROJECT_ID])\""},{"line_number":401,"context_line":"                  \"  --os-project-name (env[OS_PROJECT_NAME]),\""},{"line_number":402,"context_line":"                  \"  --os-project-domain-id \""},{"line_number":403,"context_line":"                  \"(env[OS_PROJECT_DOMAIN_ID])\""},{"line_number":404,"context_line":"                  \"  --os-project-domain-name \""},{"line_number":405,"context_line":"                  \"(env[OS_PROJECT_DOMAIN_NAME])\"))"},{"line_number":406,"context_line":""},{"line_number":407,"context_line":"        if not args.os_auth_url:"},{"line_number":408,"context_line":"            raise exc.CommandError("}],"source_content_type":"text/x-python","patch_set":10,"id":"7aa08908_99644a49","line":405,"range":{"start_line":383,"start_character":0,"end_line":405,"end_character":51},"updated":"2016-06-15 05:49:16.000000000","message":"i changed the way this was handled slightly, it should be more backwards compatible now","commit_id":"c9fa46d83980c582c81ef39cbde867c221aa1935"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1b9958f6705a8e4d527335fbc7f5c78199370b18","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    def _append_global_identity_args(self, parser, argv):"},{"line_number":56,"context_line":"        # register common identity args"},{"line_number":57,"context_line":"        loading.register_session_argparse_arguments(parser)"},{"line_number":58,"context_line":"        # Peek into argv to see if os-auth-token or os-token were given,"},{"line_number":59,"context_line":"        # in which case, the token auth plugin is what the user wants"},{"line_number":60,"context_line":"        # else, we\u0027ll default to password"},{"line_number":61,"context_line":"        default_auth_plugin \u003d \u0027password\u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"7aa08908_9e2a09e6","line":58,"range":{"start_line":58,"start_character":35,"end_line":58,"end_character":48},"updated":"2016-06-16 19:00:46.000000000","message":"the code only checks for os-token. There must be a test missing.","commit_id":"f5ff79ad529836fade815cf468fb95b193b3ea3f"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2ec12106a11f80937d601f03a812b9263f1076b8","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    def _append_global_identity_args(self, parser, argv):"},{"line_number":56,"context_line":"        # register common identity args"},{"line_number":57,"context_line":"        loading.register_session_argparse_arguments(parser)"},{"line_number":58,"context_line":"        # Peek into argv to see if os-auth-token or os-token were given,"},{"line_number":59,"context_line":"        # in which case, the token auth plugin is what the user wants"},{"line_number":60,"context_line":"        # else, we\u0027ll default to password"},{"line_number":61,"context_line":"        default_auth_plugin \u003d \u0027password\u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"7aa08908_f2b88e13","line":58,"range":{"start_line":58,"start_character":35,"end_line":58,"end_character":48},"in_reply_to":"7aa08908_9e2a09e6","updated":"2016-06-17 04:08:44.000000000","message":"it now checks for os-auth-token too, good catch","commit_id":"f5ff79ad529836fade815cf468fb95b193b3ea3f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1b9958f6705a8e4d527335fbc7f5c78199370b18","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        loading.register_session_argparse_arguments(parser)"},{"line_number":58,"context_line":"        # Peek into argv to see if os-auth-token or os-token were given,"},{"line_number":59,"context_line":"        # in which case, the token auth plugin is what the user wants"},{"line_number":60,"context_line":"        # else, we\u0027ll default to password"},{"line_number":61,"context_line":"        default_auth_plugin \u003d \u0027password\u0027"},{"line_number":62,"context_line":"        if argv and \u0027os-token\u0027 in argv:"},{"line_number":63,"context_line":"            default_auth_plugin \u003d \u0027token\u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"7aa08908_5e9381fa","line":60,"updated":"2016-06-16 19:00:46.000000000","message":"comments should say why. I can read the code to see what it does.","commit_id":"f5ff79ad529836fade815cf468fb95b193b3ea3f"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2ec12106a11f80937d601f03a812b9263f1076b8","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        loading.register_session_argparse_arguments(parser)"},{"line_number":58,"context_line":"        # Peek into argv to see if os-auth-token or os-token were given,"},{"line_number":59,"context_line":"        # in which case, the token auth plugin is what the user wants"},{"line_number":60,"context_line":"        # else, we\u0027ll default to password"},{"line_number":61,"context_line":"        default_auth_plugin \u003d \u0027password\u0027"},{"line_number":62,"context_line":"        if argv and \u0027os-token\u0027 in argv:"},{"line_number":63,"context_line":"            default_auth_plugin \u003d \u0027token\u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"7aa08908_525d22eb","line":60,"in_reply_to":"7aa08908_5e9381fa","updated":"2016-06-17 04:08:44.000000000","message":"tried to clean this up a bit.","commit_id":"f5ff79ad529836fade815cf468fb95b193b3ea3f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1b9958f6705a8e4d527335fbc7f5c78199370b18","unresolved":false,"context_lines":[{"line_number":635,"context_line":"                    print(\"\\nRun `glance --os-image-api-version 1 help`\""},{"line_number":636,"context_line":"                          \" for v1 help\")"},{"line_number":637,"context_line":"                else:"},{"line_number":638,"context_line":"                    self.get_subcommand_parser(1, argv\u003dNone)"},{"line_number":639,"context_line":"                    if command in self.subcommands:"},{"line_number":640,"context_line":"                        command \u003d \u0027 \u0027 + command"},{"line_number":641,"context_line":"                        print((\"\\nRun `glance --os-image-api-version 1 help%s`\""}],"source_content_type":"text/x-python","patch_set":11,"id":"7aa08908_39b96f16","line":638,"updated":"2016-06-16 19:00:46.000000000","message":"if argv can be None then I think it\u0027s best to provide a default.","commit_id":"f5ff79ad529836fade815cf468fb95b193b3ea3f"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2ec12106a11f80937d601f03a812b9263f1076b8","unresolved":false,"context_lines":[{"line_number":635,"context_line":"                    print(\"\\nRun `glance --os-image-api-version 1 help`\""},{"line_number":636,"context_line":"                          \" for v1 help\")"},{"line_number":637,"context_line":"                else:"},{"line_number":638,"context_line":"                    self.get_subcommand_parser(1, argv\u003dNone)"},{"line_number":639,"context_line":"                    if command in self.subcommands:"},{"line_number":640,"context_line":"                        command \u003d \u0027 \u0027 + command"},{"line_number":641,"context_line":"                        print((\"\\nRun `glance --os-image-api-version 1 help%s`\""}],"source_content_type":"text/x-python","patch_set":11,"id":"7aa08908_4730c207","line":638,"in_reply_to":"7aa08908_39b96f16","updated":"2016-06-17 04:08:44.000000000","message":"good call, i changed get_subcommand_parser to default argv to None and only passed in (1) here","commit_id":"f5ff79ad529836fade815cf468fb95b193b3ea3f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b92b961bc56cb8fde7e9b28950ef76c0c53bc723","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        # else, we\u0027ll default to password. If given, we can safely assume"},{"line_number":61,"context_line":"        # the token auth plugin can be used."},{"line_number":62,"context_line":"        default_auth_plugin \u003d \u0027password\u0027"},{"line_number":63,"context_line":"        if argv and (\u0027os-token\u0027 in argv or \u0027os-auth-token\u0027 in argv):"},{"line_number":64,"context_line":"            default_auth_plugin \u003d \u0027token\u0027"},{"line_number":65,"context_line":"        loading.register_auth_argparse_arguments("},{"line_number":66,"context_line":"            parser, argv, default\u003ddefault_auth_plugin)"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a9d85d2_7e182685","line":63,"updated":"2016-06-20 22:18:20.000000000","message":"This should also check the OS_AUTH_TOKEN environment variable since that\u0027s an alternative to the command line. And maybe it should also check for os_auth_token in addition to os-auth-token. (Or add a comment why the code doesn\u0027t have to look for this when the code below handles it.)","commit_id":"fb8e95e8b611f58fb2089341bcdd5f33dc53a21a"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"b50ea41e3a77bb0ad2131a1d2f089c1c0ba02536","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        # else, we\u0027ll default to password. If given, we can safely assume"},{"line_number":61,"context_line":"        # the token auth plugin can be used."},{"line_number":62,"context_line":"        default_auth_plugin \u003d \u0027password\u0027"},{"line_number":63,"context_line":"        if argv and (\u0027os-token\u0027 in argv or \u0027os-auth-token\u0027 in argv):"},{"line_number":64,"context_line":"            default_auth_plugin \u003d \u0027token\u0027"},{"line_number":65,"context_line":"        loading.register_auth_argparse_arguments("},{"line_number":66,"context_line":"            parser, argv, default\u003ddefault_auth_plugin)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_aeeb57af","line":63,"in_reply_to":"5a9d85d2_7e182685","updated":"2016-06-23 05:42:57.000000000","message":"Done, i moved this check lower, after the parser gets the data","commit_id":"fb8e95e8b611f58fb2089341bcdd5f33dc53a21a"},{"author":{"_account_id":14676,"name":"Kairat Kushaev","email":"kkushaev@mirantis.com","username":"kairat_kushaev"},"change_message_id":"718b7023d5096db49b75b10227d347e0ad5f18b1","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        # OS_AUTH_TOKEN were given. In which case, the token auth plugin is"},{"line_number":114,"context_line":"        # what the user wants. Else, we\u0027ll default to password."},{"line_number":115,"context_line":"        default_auth_plugin \u003d \u0027password\u0027"},{"line_number":116,"context_line":"        if argv and (\u0027os-token\u0027 in argv or \u0027os-auth-token\u0027 in argv or"},{"line_number":117,"context_line":"                     \u0027os_auth_token\u0027 in argv):"},{"line_number":118,"context_line":"            default_auth_plugin \u003d \u0027token\u0027"},{"line_number":119,"context_line":"        loading.register_auth_argparse_arguments("}],"source_content_type":"text/x-python","patch_set":16,"id":"3aaa91ec_e730040a","line":116,"updated":"2016-06-28 13:14:18.000000000","message":"Nit:\nwhat do you think about that?\nany(i in (os-token, os-auth-token, os_auth-token) for i in argv)","commit_id":"1e23d9a93d8af905c4a11de8559e3e6b27a0c6a0"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2ad811f31a703f9130b084600412bc338ec4fa1b","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        # OS_AUTH_TOKEN were given. In which case, the token auth plugin is"},{"line_number":114,"context_line":"        # what the user wants. Else, we\u0027ll default to password."},{"line_number":115,"context_line":"        default_auth_plugin \u003d \u0027password\u0027"},{"line_number":116,"context_line":"        if argv and (\u0027os-token\u0027 in argv or \u0027os-auth-token\u0027 in argv or"},{"line_number":117,"context_line":"                     \u0027os_auth_token\u0027 in argv):"},{"line_number":118,"context_line":"            default_auth_plugin \u003d \u0027token\u0027"},{"line_number":119,"context_line":"        loading.register_auth_argparse_arguments("}],"source_content_type":"text/x-python","patch_set":16,"id":"dada55a8_e85982fe","line":116,"in_reply_to":"3aaa91ec_044d4372","updated":"2016-07-26 17:52:52.000000000","message":"thanks, it worked","commit_id":"1e23d9a93d8af905c4a11de8559e3e6b27a0c6a0"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"142bd629ebae8430f81e23ce25d0ee404e0d389b","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        # OS_AUTH_TOKEN were given. In which case, the token auth plugin is"},{"line_number":114,"context_line":"        # what the user wants. Else, we\u0027ll default to password."},{"line_number":115,"context_line":"        default_auth_plugin \u003d \u0027password\u0027"},{"line_number":116,"context_line":"        if argv and (\u0027os-token\u0027 in argv or \u0027os-auth-token\u0027 in argv or"},{"line_number":117,"context_line":"                     \u0027os_auth_token\u0027 in argv):"},{"line_number":118,"context_line":"            default_auth_plugin \u003d \u0027token\u0027"},{"line_number":119,"context_line":"        loading.register_auth_argparse_arguments("}],"source_content_type":"text/x-python","patch_set":16,"id":"3aaa91ec_044d4372","line":116,"in_reply_to":"3aaa91ec_e730040a","updated":"2016-06-28 14:15:50.000000000","message":"sure, let me test it out","commit_id":"1e23d9a93d8af905c4a11de8559e3e6b27a0c6a0"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"9f30f140f6a29d4521600d4ea81310805ac77b65","unresolved":false,"context_lines":[{"line_number":117,"context_line":"                     \u0027os_auth_token\u0027 in argv):"},{"line_number":118,"context_line":"            default_auth_plugin \u003d \u0027token\u0027"},{"line_number":119,"context_line":"        loading.register_auth_argparse_arguments("},{"line_number":120,"context_line":"            parser, argv, default\u003ddefault_auth_plugin)"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    def get_base_parser(self, argv):"},{"line_number":123,"context_line":"        parser \u003d argparse.ArgumentParser("}],"source_content_type":"text/x-python","patch_set":16,"id":"1aa78d24_0e2e748b","line":120,"range":{"start_line":120,"start_character":20,"end_line":120,"end_character":24},"updated":"2016-07-13 04:56:23.000000000","message":"I\u0027m not sure i like this default_auth_plugin setting. You can use it to register arguments like this, but its purpose is so that when you then do the corresponding load_auth_from_argparse_arguments it can use load that default.","commit_id":"1e23d9a93d8af905c4a11de8559e3e6b27a0c6a0"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"a4c1398bd4a509f9f41830ba45cc65d151949584","unresolved":false,"context_lines":[{"line_number":117,"context_line":"                     \u0027os_auth_token\u0027 in argv):"},{"line_number":118,"context_line":"            default_auth_plugin \u003d \u0027token\u0027"},{"line_number":119,"context_line":"        loading.register_auth_argparse_arguments("},{"line_number":120,"context_line":"            parser, argv, default\u003ddefault_auth_plugin)"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    def get_base_parser(self, argv):"},{"line_number":123,"context_line":"        parser \u003d argparse.ArgumentParser("}],"source_content_type":"text/x-python","patch_set":16,"id":"1aa78d24_ae0da0e9","line":120,"range":{"start_line":120,"start_character":20,"end_line":120,"end_character":24},"in_reply_to":"1aa78d24_0e2e748b","updated":"2016-07-13 05:11:48.000000000","message":"oh, i see - there\u0027s really no other way in ksa to always register a certain plugins options. \n\nThis is kind of intentional because it\u0027s supposed to be a pluggable system rather than specifying what people will use and doing it this way will leave you with an --os-auth-type flag that is going to be ignored. But i don\u0027t know of a different way.","commit_id":"1e23d9a93d8af905c4a11de8559e3e6b27a0c6a0"},{"author":{"_account_id":14676,"name":"Kairat Kushaev","email":"kkushaev@mirantis.com","username":"kairat_kushaev"},"change_message_id":"718b7023d5096db49b75b10227d347e0ad5f18b1","unresolved":false,"context_lines":[{"line_number":295,"context_line":"        return (v2_auth_url, v3_auth_url)"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"    def _get_keystone_auth_plugin(self, ks_session, **kwargs):"},{"line_number":298,"context_line":"        ks_session \u003d ks_session or session.Session(kwargs)"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"        # discover the supported keystone versions using the given auth url"},{"line_number":301,"context_line":"        auth_url \u003d kwargs.pop(\u0027auth_url\u0027, None)"}],"source_content_type":"text/x-python","patch_set":16,"id":"3aaa91ec_ed490590","line":298,"updated":"2016-06-28 13:14:18.000000000","message":"Can load_session_from_argparse_arguments return None instead of session?\nIf it is not possible could you please explain why do we need \"or\" here?","commit_id":"1e23d9a93d8af905c4a11de8559e3e6b27a0c6a0"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2ad811f31a703f9130b084600412bc338ec4fa1b","unresolved":false,"context_lines":[{"line_number":295,"context_line":"        return (v2_auth_url, v3_auth_url)"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"    def _get_keystone_auth_plugin(self, ks_session, **kwargs):"},{"line_number":298,"context_line":"        ks_session \u003d ks_session or session.Session(kwargs)"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"        # discover the supported keystone versions using the given auth url"},{"line_number":301,"context_line":"        auth_url \u003d kwargs.pop(\u0027auth_url\u0027, None)"}],"source_content_type":"text/x-python","patch_set":16,"id":"dada55a8_0855f6c0","line":298,"in_reply_to":"1aa78d24_7a337362","updated":"2016-07-26 17:52:52.000000000","message":"i removed this line","commit_id":"1e23d9a93d8af905c4a11de8559e3e6b27a0c6a0"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"9f30f140f6a29d4521600d4ea81310805ac77b65","unresolved":false,"context_lines":[{"line_number":295,"context_line":"        return (v2_auth_url, v3_auth_url)"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"    def _get_keystone_auth_plugin(self, ks_session, **kwargs):"},{"line_number":298,"context_line":"        ks_session \u003d ks_session or session.Session(kwargs)"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"        # discover the supported keystone versions using the given auth url"},{"line_number":301,"context_line":"        auth_url \u003d kwargs.pop(\u0027auth_url\u0027, None)"}],"source_content_type":"text/x-python","patch_set":16,"id":"1aa78d24_7a337362","line":298,"in_reply_to":"3aaa91ec_4420eb9b","updated":"2016-07-13 04:56:23.000000000","message":"that\u0027s an auth plugin method, so it returns none if there is no plugin specified via --auth-type. \n\nsession is [1] and it should never return None\n\n[1] https://github.com/openstack/keystoneauth/blob/80b58cc2f2aa73e2d3fc88ef2e27fa3db6ed0025/keystoneauth1/loading/session.py#L249","commit_id":"1e23d9a93d8af905c4a11de8559e3e6b27a0c6a0"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"0bb10b895fb054d8934bf359e0b20507e2eee278","unresolved":false,"context_lines":[{"line_number":295,"context_line":"        return (v2_auth_url, v3_auth_url)"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"    def _get_keystone_auth_plugin(self, ks_session, **kwargs):"},{"line_number":298,"context_line":"        ks_session \u003d ks_session or session.Session(kwargs)"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"        # discover the supported keystone versions using the given auth url"},{"line_number":301,"context_line":"        auth_url \u003d kwargs.pop(\u0027auth_url\u0027, None)"}],"source_content_type":"text/x-python","patch_set":16,"id":"3aaa91ec_4420eb9b","line":298,"in_reply_to":"3aaa91ec_ed490590","updated":"2016-06-28 14:15:31.000000000","message":"it can https://github.com/openstack/keystoneauth/blob/80b58cc2f2aa73e2d3fc88ef2e27fa3db6ed0025/keystoneauth1/loading/cli.py#L80-L95","commit_id":"1e23d9a93d8af905c4a11de8559e3e6b27a0c6a0"},{"author":{"_account_id":14676,"name":"Kairat Kushaev","email":"kkushaev@mirantis.com","username":"kairat_kushaev"},"change_message_id":"718b7023d5096db49b75b10227d347e0ad5f18b1","unresolved":false,"context_lines":[{"line_number":383,"context_line":"                      \"or prompted response\"))"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"        # Validate password flow auth"},{"line_number":386,"context_line":"        os_project_name \u003d getattr("},{"line_number":387,"context_line":"            args, \u0027os_project_name\u0027, getattr(args, \u0027os_tenant_name\u0027, None))"},{"line_number":388,"context_line":"        os_project_id \u003d getattr("},{"line_number":389,"context_line":"            args, \u0027os_project_id\u0027, getattr(args, \u0027os_tenant_id\u0027, None))"}],"source_content_type":"text/x-python","patch_set":16,"id":"3aaa91ec_fe0409c7","line":386,"updated":"2016-06-28 13:14:18.000000000","message":"IIUC, project_name requires project domain to be specified. \nHow is this case covered in the patch?","commit_id":"1e23d9a93d8af905c4a11de8559e3e6b27a0c6a0"},{"author":{"_account_id":14676,"name":"Kairat Kushaev","email":"kkushaev@mirantis.com","username":"kairat_kushaev"},"change_message_id":"c3db26cf415544e7128cb0807d7098eedada9429","unresolved":false,"context_lines":[{"line_number":383,"context_line":"                      \"or prompted response\"))"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"        # Validate password flow auth"},{"line_number":386,"context_line":"        os_project_name \u003d getattr("},{"line_number":387,"context_line":"            args, \u0027os_project_name\u0027, getattr(args, \u0027os_tenant_name\u0027, None))"},{"line_number":388,"context_line":"        os_project_id \u003d getattr("},{"line_number":389,"context_line":"            args, \u0027os_project_id\u0027, getattr(args, \u0027os_tenant_id\u0027, None))"}],"source_content_type":"text/x-python","patch_set":16,"id":"3aaa91ec_6459a75b","line":386,"in_reply_to":"3aaa91ec_2138313d","updated":"2016-06-28 14:29:03.000000000","message":"So we need to update exception message in lines 391-402 because domain won\u0027t be validated here.\nplease also see that if we do not validate it here then lines 328-329 needs to be updated because we will get \nCredential and auth_url mismatch. The given \"\n\n\"auth_url is using Keystone V2 endpoint, which \"\n\"may not able to handle Keystone V3 credentials. \"\n\"Please provide a correct Keystone V3 auth_url.\nIt may confuse users.","commit_id":"1e23d9a93d8af905c4a11de8559e3e6b27a0c6a0"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"a4c1398bd4a509f9f41830ba45cc65d151949584","unresolved":false,"context_lines":[{"line_number":383,"context_line":"                      \"or prompted response\"))"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"        # Validate password flow auth"},{"line_number":386,"context_line":"        os_project_name \u003d getattr("},{"line_number":387,"context_line":"            args, \u0027os_project_name\u0027, getattr(args, \u0027os_tenant_name\u0027, None))"},{"line_number":388,"context_line":"        os_project_id \u003d getattr("},{"line_number":389,"context_line":"            args, \u0027os_project_id\u0027, getattr(args, \u0027os_tenant_id\u0027, None))"}],"source_content_type":"text/x-python","patch_set":16,"id":"1aa78d24_ce1d8c10","line":386,"in_reply_to":"3aaa91ec_6459a75b","updated":"2016-07-13 05:11:48.000000000","message":"I think for simplicity in this patch just leave the old validation alone. There\u0027s a number of places where this isn\u0027t going to be quite right but they involve a much larger fix","commit_id":"1e23d9a93d8af905c4a11de8559e3e6b27a0c6a0"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"0bb10b895fb054d8934bf359e0b20507e2eee278","unresolved":false,"context_lines":[{"line_number":383,"context_line":"                      \"or prompted response\"))"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"        # Validate password flow auth"},{"line_number":386,"context_line":"        os_project_name \u003d getattr("},{"line_number":387,"context_line":"            args, \u0027os_project_name\u0027, getattr(args, \u0027os_tenant_name\u0027, None))"},{"line_number":388,"context_line":"        os_project_id \u003d getattr("},{"line_number":389,"context_line":"            args, \u0027os_project_id\u0027, getattr(args, \u0027os_tenant_id\u0027, None))"}],"source_content_type":"text/x-python","patch_set":16,"id":"3aaa91ec_2138313d","line":386,"in_reply_to":"3aaa91ec_fe0409c7","updated":"2016-06-28 14:15:31.000000000","message":"that\u0027ll be handled by keystoneauth itself. the project name is sufficient if using v2 auth","commit_id":"1e23d9a93d8af905c4a11de8559e3e6b27a0c6a0"},{"author":{"_account_id":14676,"name":"Kairat Kushaev","email":"kkushaev@mirantis.com","username":"kairat_kushaev"},"change_message_id":"22e85d3097c80f5631cdfd1c24de5663d50035a1","unresolved":false,"context_lines":[{"line_number":394,"context_line":"                  \"  --os-project-id (env[OS_PROJECT_ID])\""},{"line_number":395,"context_line":"                  \"  --os-project-name (env[OS_PROJECT_NAME]),\""},{"line_number":396,"context_line":"                  \"  --os-project-domain-id \""},{"line_number":397,"context_line":"                  \"(env[OS_PROJECT_DOMAIN_ID])\""},{"line_number":398,"context_line":"                  \"  --os-project-domain-name \""},{"line_number":399,"context_line":"                  \"(env[OS_PROJECT_DOMAIN_NAME])\"))"},{"line_number":400,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"bacf61ea_bbed0db9","line":397,"updated":"2016-08-01 08:17:20.000000000","message":"Could you please correct the exception message here?\nSince we pass domain validation to keystoneauth we are validating only project id or name.","commit_id":"a12d8c6c8b35f0ae0b34eee291dda2b6d3d72b09"},{"author":{"_account_id":14676,"name":"Kairat Kushaev","email":"kkushaev@mirantis.com","username":"kairat_kushaev"},"change_message_id":"7091f6074474dcef145c44dbb845c44c48b9d450","unresolved":false,"context_lines":[{"line_number":394,"context_line":"                  \"  --os-project-id (env[OS_PROJECT_ID])\""},{"line_number":395,"context_line":"                  \"  --os-project-name (env[OS_PROJECT_NAME]),\""},{"line_number":396,"context_line":"                  \"  --os-project-domain-id \""},{"line_number":397,"context_line":"                  \"(env[OS_PROJECT_DOMAIN_ID])\""},{"line_number":398,"context_line":"                  \"  --os-project-domain-name \""},{"line_number":399,"context_line":"                  \"(env[OS_PROJECT_DOMAIN_NAME])\"))"},{"line_number":400,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"bacf61ea_9861ecd5","line":397,"in_reply_to":"bacf61ea_1281828f","updated":"2016-08-02 09:55:18.000000000","message":"I was asking about deletion info about domains because it must work with v2 also. IIUC we don\u0027t need domains for v2 with project_name and we don\u0027t know which Keystone API version we are going to use at this step. Now I am wondering how this worked with v2 previously because we have validation for domain\u003d).\nIMO, with the current parch the logic may be the following:\n1. Validate project_id or name because they are required for both api versions. If they are not present, raise an error about project_id, project_name absence OR raise an error that project_id/project_name is required for v2 and project domain is also required for v3.\n2. depends on this at line no 327 and domain info presence glanceclient decides which api to use: v2 or v3.\n\nHonestly, I am wondering if all that logic could be moved to keystoneauth but I don\u0027t know if that possible.","commit_id":"a12d8c6c8b35f0ae0b34eee291dda2b6d3d72b09"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"91cd1036d3d3c2510f064e6670390e5f1c84f031","unresolved":false,"context_lines":[{"line_number":394,"context_line":"                  \"  --os-project-id (env[OS_PROJECT_ID])\""},{"line_number":395,"context_line":"                  \"  --os-project-name (env[OS_PROJECT_NAME]),\""},{"line_number":396,"context_line":"                  \"  --os-project-domain-id \""},{"line_number":397,"context_line":"                  \"(env[OS_PROJECT_DOMAIN_ID])\""},{"line_number":398,"context_line":"                  \"  --os-project-domain-name \""},{"line_number":399,"context_line":"                  \"(env[OS_PROJECT_DOMAIN_NAME])\"))"},{"line_number":400,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"bacf61ea_1281828f","line":397,"in_reply_to":"bacf61ea_bbed0db9","updated":"2016-08-01 15:37:07.000000000","message":"Do you have a suggestions for the new text? The message here is still valid. Using the project name won\u0027t work without the domain bits and that\u0027s how you pass them in. If I remove the info about domains then the user will be left with an error message just about projects, which doesn\u0027t help them.","commit_id":"a12d8c6c8b35f0ae0b34eee291dda2b6d3d72b09"}],"glanceclient/tests/unit/test_shell.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1b9958f6705a8e4d527335fbc7f5c78199370b18","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"FAKE_V2_ENV \u003d {\u0027OS_USERNAME\u0027: DEFAULT_USERNAME,"},{"line_number":63,"context_line":"               \u0027OS_PASSWORD\u0027: DEFAULT_PASSWORD,"},{"line_number":64,"context_line":"               \u0027OS_PROJECT_ID\u0027: DEFAULT_PROJECT_ID,"},{"line_number":65,"context_line":"               \u0027OS_AUTH_URL\u0027: DEFAULT_V2_AUTH_URL,"},{"line_number":66,"context_line":"               \u0027OS_IMAGE_URL\u0027: DEFAULT_IMAGE_URL}"},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"7aa08908_3967afb8","line":64,"updated":"2016-06-16 19:00:46.000000000","message":"the code should continue to work even with the old value.","commit_id":"f5ff79ad529836fade815cf468fb95b193b3ea3f"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2ec12106a11f80937d601f03a812b9263f1076b8","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"FAKE_V2_ENV \u003d {\u0027OS_USERNAME\u0027: DEFAULT_USERNAME,"},{"line_number":63,"context_line":"               \u0027OS_PASSWORD\u0027: DEFAULT_PASSWORD,"},{"line_number":64,"context_line":"               \u0027OS_PROJECT_ID\u0027: DEFAULT_PROJECT_ID,"},{"line_number":65,"context_line":"               \u0027OS_AUTH_URL\u0027: DEFAULT_V2_AUTH_URL,"},{"line_number":66,"context_line":"               \u0027OS_IMAGE_URL\u0027: DEFAULT_IMAGE_URL}"},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"7aa08908_e77baebc","line":64,"in_reply_to":"7aa08908_3967afb8","updated":"2016-06-17 04:08:44.000000000","message":"you are right, i undid this change","commit_id":"f5ff79ad529836fade815cf468fb95b193b3ea3f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b92b961bc56cb8fde7e9b28950ef76c0c53bc723","unresolved":false,"context_lines":[{"line_number":248,"context_line":""},{"line_number":249,"context_line":"    def test_get_base_parser(self):"},{"line_number":250,"context_line":"        test_shell \u003d openstack_shell.OpenStackImagesShell()"},{"line_number":251,"context_line":"        actual_parser \u003d test_shell.get_base_parser(sys.argv)"},{"line_number":252,"context_line":"        description \u003d \u0027Command-line interface to the OpenStack Images API.\u0027"},{"line_number":253,"context_line":"        expected \u003d argparse.ArgumentParser("},{"line_number":254,"context_line":"            prog\u003d\u0027glance\u0027, usage\u003dNone,"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a9d85d2_e1cbd770","line":251,"updated":"2016-06-20 22:18:20.000000000","message":"there should be a comment that says what sys.argv is in this case because it\u0027s not obvious. In other tests where sys.argv is used it\u0027s overridden via mock.","commit_id":"fb8e95e8b611f58fb2089341bcdd5f33dc53a21a"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"b50ea41e3a77bb0ad2131a1d2f089c1c0ba02536","unresolved":false,"context_lines":[{"line_number":248,"context_line":""},{"line_number":249,"context_line":"    def test_get_base_parser(self):"},{"line_number":250,"context_line":"        test_shell \u003d openstack_shell.OpenStackImagesShell()"},{"line_number":251,"context_line":"        actual_parser \u003d test_shell.get_base_parser(sys.argv)"},{"line_number":252,"context_line":"        description \u003d \u0027Command-line interface to the OpenStack Images API.\u0027"},{"line_number":253,"context_line":"        expected \u003d argparse.ArgumentParser("},{"line_number":254,"context_line":"            prog\u003d\u0027glance\u0027, usage\u003dNone,"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_2ec5a75a","line":251,"in_reply_to":"5a9d85d2_e1cbd770","updated":"2016-06-23 05:42:57.000000000","message":"Done","commit_id":"fb8e95e8b611f58fb2089341bcdd5f33dc53a21a"}]}
