)]}'
{"zaqarclient/auth/keystone.py":[{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"238d32607ac1717ae9bc341e6edde6397fba5803","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        project_id \u003d kwargs.pop(\u0027project_id\u0027, None)"},{"line_number":55,"context_line":"        project_name \u003d kwargs.pop(\u0027project_name\u0027, None)"},{"line_number":56,"context_line":"        token \u003d kwargs.get(\u0027token\u0027)"},{"line_number":57,"context_line":"        timeout \u003d kwargs.get(\u0027timeout\u0027)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        if insecure:"},{"line_number":60,"context_line":"            verify \u003d False"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a8ec9b2_c4b78bf3","line":57,"updated":"2016-09-21 01:59:31.000000000","message":"how to use this \"timeout\"? I can\u0027t find a way to pass this parameter, in Glance, users use --timeout, but in OpenStack I can\u0027t find a similar one.","commit_id":"5f10d057ab400c988f31404d0f139f5909857ae1"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"4274ed391ad16e4fe509d625c61a766ff4ebc5ce","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        project_id \u003d kwargs.pop(\u0027project_id\u0027, None)"},{"line_number":55,"context_line":"        project_name \u003d kwargs.pop(\u0027project_name\u0027, None)"},{"line_number":56,"context_line":"        token \u003d kwargs.get(\u0027token\u0027)"},{"line_number":57,"context_line":"        timeout \u003d kwargs.get(\u0027timeout\u0027)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        if insecure:"},{"line_number":60,"context_line":"            verify \u003d False"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a8ec9b2_171e0763","line":57,"in_reply_to":"7a8ec9b2_c4b78bf3","updated":"2016-09-21 02:21:48.000000000","message":"Good catch, we can just get rid of it. Thanks.","commit_id":"5f10d057ab400c988f31404d0f139f5909857ae1"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"d75c525bd0b151de17c6e93a7ad8f6b77c360bf7","unresolved":false,"context_lines":[{"line_number":190,"context_line":"            ks_kwargs \u003d {}"},{"line_number":191,"context_line":"            keys \u003d (\"username\", \"password\", \"project_id\","},{"line_number":192,"context_line":"                    \"project_name\", \"auth_url\", \"insecure\","},{"line_number":193,"context_line":"                    \"cacert\", \"region_name\")"},{"line_number":194,"context_line":"            for k in keys:"},{"line_number":195,"context_line":"                ks_kwargs.update({k: get_options(k)})"},{"line_number":196,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7a8ec9b2_0447b31d","line":193,"updated":"2016-09-21 01:55:34.000000000","message":"do we support keystone v3? we lost \"user_domain_name\", \"user_domain_id\", \"project_domain_name\", \"project_domain_id\" here.","commit_id":"5f10d057ab400c988f31404d0f139f5909857ae1"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"4274ed391ad16e4fe509d625c61a766ff4ebc5ce","unresolved":false,"context_lines":[{"line_number":190,"context_line":"            ks_kwargs \u003d {}"},{"line_number":191,"context_line":"            keys \u003d (\"username\", \"password\", \"project_id\","},{"line_number":192,"context_line":"                    \"project_name\", \"auth_url\", \"insecure\","},{"line_number":193,"context_line":"                    \"cacert\", \"region_name\")"},{"line_number":194,"context_line":"            for k in keys:"},{"line_number":195,"context_line":"                ks_kwargs.update({k: get_options(k)})"},{"line_number":196,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7a8ec9b2_d713bf5a","line":193,"in_reply_to":"7a8ec9b2_0447b31d","updated":"2016-09-21 02:21:48.000000000","message":"Yes, we do. I will them and test with v3. Nice catch. Thanks.","commit_id":"5f10d057ab400c988f31404d0f139f5909857ae1"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"f5af90ec61b75e1300ef69fa3d422f83d5d4560b","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from keystoneauth1 import discover"},{"line_number":19,"context_line":"from keystoneauth1 import exceptions as ka_exc"},{"line_number":20,"context_line":"from keystoneauth1.identity import v2 as v2_auth"},{"line_number":21,"context_line":"from keystoneauth1.identity import v3 as v3_auth"},{"line_number":22,"context_line":"from keystoneauth1 import session"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from zaqarclient.auth import base"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a8bc5a2_9877d139","line":21,"range":{"start_line":20,"start_character":0,"end_line":21,"end_character":48},"updated":"2016-09-23 03:29:12.000000000","message":"you can use the generic plugins [1] to make this simpler, like in troveclient [2]\n\n1: https://github.com/openstack/keystoneauth/tree/master/keystoneauth1/identity/generic\n\n2: https://github.com/openstack/python-troveclient/blob/master/troveclient/shell.py#L605-L617","commit_id":"c57b67abf8a9b7f202f2570814d7c38fd24a92ba"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"f5af90ec61b75e1300ef69fa3d422f83d5d4560b","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        project_domain_id \u003d kwargs.pop(\u0027project_domain_id\u0027, None)"},{"line_number":79,"context_line":"        auth \u003d None"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        use_domain \u003d (user_domain_id or user_domain_name or"},{"line_number":82,"context_line":"                      project_domain_id or project_domain_name)"},{"line_number":83,"context_line":"        use_v3 \u003d v3_auth_url and (use_domain or (not v2_auth_url))"},{"line_number":84,"context_line":"        use_v2 \u003d v2_auth_url and not use_domain"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        if use_v3 and token:"},{"line_number":87,"context_line":"            auth \u003d v3_auth.Token("}],"source_content_type":"text/x-python","patch_set":5,"id":"5a8bc5a2_58cb8953","line":84,"range":{"start_line":81,"start_character":0,"end_line":84,"end_character":47},"updated":"2016-09-23 03:29:12.000000000","message":"this logic can go away once you use the generic plugins","commit_id":"c57b67abf8a9b7f202f2570814d7c38fd24a92ba"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"f5af90ec61b75e1300ef69fa3d422f83d5d4560b","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        use_v3 \u003d v3_auth_url and (use_domain or (not v2_auth_url))"},{"line_number":84,"context_line":"        use_v2 \u003d v2_auth_url and not use_domain"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        if use_v3 and token:"},{"line_number":87,"context_line":"            auth \u003d v3_auth.Token("},{"line_number":88,"context_line":"                v3_auth_url,"},{"line_number":89,"context_line":"                token\u003dtoken,"},{"line_number":90,"context_line":"                project_name\u003dproject_name,"},{"line_number":91,"context_line":"                project_id\u003dproject_id,"},{"line_number":92,"context_line":"                project_domain_name\u003dproject_domain_name,"},{"line_number":93,"context_line":"                project_domain_id\u003dproject_domain_id)"},{"line_number":94,"context_line":"        elif use_v2 and token:"},{"line_number":95,"context_line":"            auth \u003d v2_auth.Token("},{"line_number":96,"context_line":"                v2_auth_url,"},{"line_number":97,"context_line":"                token\u003dtoken,"},{"line_number":98,"context_line":"                tenant_id\u003dproject_id,"},{"line_number":99,"context_line":"                tenant_name\u003dproject_name)"},{"line_number":100,"context_line":"        elif use_v3:"},{"line_number":101,"context_line":"            # The auth_url as v3 specified"},{"line_number":102,"context_line":"            # e.g. http://no.where:5000/v3"},{"line_number":103,"context_line":"            # Keystone will return only v3 as viable option"},{"line_number":104,"context_line":"            auth \u003d v3_auth.Password("},{"line_number":105,"context_line":"                v3_auth_url,"},{"line_number":106,"context_line":"                username\u003dusername,"},{"line_number":107,"context_line":"                password\u003dkwargs.pop(\u0027password\u0027, None),"},{"line_number":108,"context_line":"                user_id\u003duser_id,"},{"line_number":109,"context_line":"                user_domain_name\u003duser_domain_name,"},{"line_number":110,"context_line":"                user_domain_id\u003duser_domain_id,"},{"line_number":111,"context_line":"                project_name\u003dproject_name,"},{"line_number":112,"context_line":"                project_id\u003dproject_id,"},{"line_number":113,"context_line":"                project_domain_name\u003dproject_domain_name,"},{"line_number":114,"context_line":"                project_domain_id\u003dproject_domain_id)"},{"line_number":115,"context_line":"        elif use_v2:"},{"line_number":116,"context_line":"            # The auth_url as v2 specified"},{"line_number":117,"context_line":"            # e.g. http://no.where:5000/v2.0"},{"line_number":118,"context_line":"            # Keystone will return only v2 as viable option"},{"line_number":119,"context_line":"            auth \u003d v2_auth.Password("},{"line_number":120,"context_line":"                v2_auth_url,"},{"line_number":121,"context_line":"                username,"},{"line_number":122,"context_line":"                kwargs.pop(\u0027password\u0027, None),"},{"line_number":123,"context_line":"                tenant_id\u003dproject_id,"},{"line_number":124,"context_line":"                tenant_name\u003dproject_name)"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        else:"},{"line_number":127,"context_line":"            raise errors.ZaqarError(\u0027Unable to determine the Keystone version \u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a8bc5a2_d88f9921","line":124,"range":{"start_line":86,"start_character":0,"end_line":124,"end_character":41},"updated":"2016-09-23 03:29:12.000000000","message":"using generic plugins should make this easier","commit_id":"c57b67abf8a9b7f202f2570814d7c38fd24a92ba"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"f5af90ec61b75e1300ef69fa3d422f83d5d4560b","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        ks_session.auth \u003d auth"},{"line_number":132,"context_line":"        return ks_session"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    def _discover_auth_versions(self, session, auth_url):"},{"line_number":135,"context_line":"        # Discover the API versions the server is supporting based on the"},{"line_number":136,"context_line":"        # given URL"},{"line_number":137,"context_line":"        v2_auth_url \u003d None"},{"line_number":138,"context_line":"        v3_auth_url \u003d None"},{"line_number":139,"context_line":"        try:"},{"line_number":140,"context_line":"            ks_discover \u003d discover.Discover(session\u003dsession, url\u003dauth_url)"},{"line_number":141,"context_line":"            v2_auth_url \u003d ks_discover.url_for(\u00272.0\u0027)"},{"line_number":142,"context_line":"            v3_auth_url \u003d ks_discover.url_for(\u00273.0\u0027)"},{"line_number":143,"context_line":"        except ka_exc.DiscoveryFailure:"},{"line_number":144,"context_line":"            raise"},{"line_number":145,"context_line":"        except ka_exc.ClientException:"},{"line_number":146,"context_line":"            # Identity service may not support discovery. In that case,"},{"line_number":147,"context_line":"            # try to determine version from auth_url"},{"line_number":148,"context_line":"            url_parts \u003d urlparse.urlparse(auth_url)"},{"line_number":149,"context_line":"            (scheme, netloc, path, params, query, fragment) \u003d url_parts"},{"line_number":150,"context_line":"            path \u003d path.lower()"},{"line_number":151,"context_line":"            if path.startswith(\u0027/v3\u0027):"},{"line_number":152,"context_line":"                v3_auth_url \u003d auth_url"},{"line_number":153,"context_line":"            elif path.startswith(\u0027/v2\u0027):"},{"line_number":154,"context_line":"                v2_auth_url \u003d auth_url"},{"line_number":155,"context_line":"            else:"},{"line_number":156,"context_line":"                raise errors.ZaqarError(\u0027Unable to determine the Keystone \u0027"},{"line_number":157,"context_line":"                                        \u0027version to authenticate with \u0027"},{"line_number":158,"context_line":"                                        \u0027using the given auth_url.\u0027)"},{"line_number":159,"context_line":"        return v2_auth_url, v3_auth_url"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    def _get_endpoint(self, ks_session, **kwargs):"},{"line_number":162,"context_line":"        \"\"\"Get an endpoint using the provided keystone session.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"5a8bc5a2_f8b9b5cc","line":159,"range":{"start_line":134,"start_character":0,"end_line":159,"end_character":39},"updated":"2016-09-23 03:29:12.000000000","message":"you shouldn\u0027t have to do this either, keystoneauth will handle the discovery for you at the auth plugin level: https://github.com/openstack/keystoneauth/blob/80b58cc2f2aa73e2d3fc88ef2e27fa3db6ed0025/keystoneauth1/identity/generic/password.py#L44","commit_id":"c57b67abf8a9b7f202f2570814d7c38fd24a92ba"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"f5af90ec61b75e1300ef69fa3d422f83d5d4560b","unresolved":false,"context_lines":[{"line_number":194,"context_line":"            for k in keys:"},{"line_number":195,"context_line":"                ks_kwargs.update({k: get_options(k)})"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"            ks_session \u003d self._get_keystone_session(**ks_kwargs)"},{"line_number":198,"context_line":"            if not token:"},{"line_number":199,"context_line":"                token \u003d ks_session.get_token()"},{"line_number":200,"context_line":"            if not request.endpoint:"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a8bc5a2_d804f97f","line":197,"range":{"start_line":197,"start_character":12,"end_line":197,"end_character":64},"updated":"2016-09-23 03:29:12.000000000","message":"you can create a new session by calling loading.load_session_from_conf_options: https://github.com/openstack/keystoneauth/blob/master/keystoneauth1/loading/__init__.py#L32","commit_id":"c57b67abf8a9b7f202f2570814d7c38fd24a92ba"}]}
