)]}'
{"tripleo_common/actions/base.py":[{"author":{"_account_id":15895,"name":"Adriano Petrich","email":"apetrich@redhat.com","username":"apetrich"},"change_message_id":"91742c60be57e72f9437b4879140fa546694937f","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        super(TripleOAction, self).__init__()"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def get_object_client(self, context):"},{"line_number":38,"context_line":"        obj_ep \u003d keystone_utils.get_endpoint_for_project(\u0027swift\u0027)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        kwargs \u003d {"},{"line_number":41,"context_line":"            \u0027preauthurl\u0027: obj_ep.url % {\u0027tenant_id\u0027: context.project_id},"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f201791_ed7004df","line":38,"updated":"2017-06-23 10:04:10.000000000","message":"here probably pass context to keystone_utils. (there are 7 occurrences on this file and one in the texts)","commit_id":"8bb4efb560e49fc2a5d0e571d63d003176d347d4"}],"tripleo_common/utils/keystone.py":[{"author":{"_account_id":15895,"name":"Adriano Petrich","email":"apetrich@redhat.com","username":"apetrich"},"change_message_id":"91742c60be57e72f9437b4879140fa546694937f","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"def client():"},{"line_number":24,"context_line":"    ctx \u003d context.ctx()"},{"line_number":25,"context_line":"    auth_url \u003d ctx.auth_uri"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    cl \u003d ks_client.Client("}],"source_content_type":"text/x-python","patch_set":2,"id":"5f201791_8d4990d1","line":24,"updated":"2017-06-23 10:04:10.000000000","message":"needs to either import or get context as a parameter. (better to get as a parameter so we can ditch mistral requirement) then we don\u0027t need the context.ctx if it is received as a parameter","commit_id":"8bb4efb560e49fc2a5d0e571d63d003176d347d4"},{"author":{"_account_id":15895,"name":"Adriano Petrich","email":"apetrich@redhat.com","username":"apetrich"},"change_message_id":"91742c60be57e72f9437b4879140fa546694937f","unresolved":false,"context_lines":[{"line_number":43,"context_line":"            \"Either \u0027service_name\u0027 or \u0027service_type\u0027 must be provided.\""},{"line_number":44,"context_line":"        )"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    ctx \u003d context.ctx()"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    service_catalog \u003d obtain_service_catalog(ctx)"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5f201791_0d0fc089","line":46,"updated":"2017-06-23 10:04:10.000000000","message":"Same here","commit_id":"8bb4efb560e49fc2a5d0e571d63d003176d347d4"},{"author":{"_account_id":9712,"name":"Dougal Matthews","email":"dougal.matthews@canonical.com","username":"dougal"},"change_message_id":"1f3bfbd50d7726ffddb1045622fc253f690a6415","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    if service_name \u003d\u003d \u0027keystone\u0027:"},{"line_number":54,"context_line":"        # Determining keystone endpoint should be done using"},{"line_number":55,"context_line":"        # keystone_authtoken section as this option is special for keystone."},{"line_number":56,"context_line":"        region \u003d region or CONF.keystone_authtoken.region_name"},{"line_number":57,"context_line":"    else:"},{"line_number":58,"context_line":"        region \u003d region or CONF.openstack_actions.default_region"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5f201791_7e5ffc0d","line":56,"updated":"2017-06-23 11:21:42.000000000","message":"Need to figure our what to do with the CONF call","commit_id":"22b8a60aa9467de442fce856a77b5e83f5fdc9c4"},{"author":{"_account_id":9712,"name":"Dougal Matthews","email":"dougal.matthews@canonical.com","username":"dougal"},"change_message_id":"1f3bfbd50d7726ffddb1045622fc253f690a6415","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        # keystone_authtoken section as this option is special for keystone."},{"line_number":56,"context_line":"        region \u003d region or CONF.keystone_authtoken.region_name"},{"line_number":57,"context_line":"    else:"},{"line_number":58,"context_line":"        region \u003d region or CONF.openstack_actions.default_region"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    service_endpoints \u003d service_catalog.get_endpoints("},{"line_number":61,"context_line":"        service_name\u003dservice_name,"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f201791_5e9c40bf","line":58,"updated":"2017-06-23 11:21:42.000000000","message":"and this.","commit_id":"22b8a60aa9467de442fce856a77b5e83f5fdc9c4"},{"author":{"_account_id":10873,"name":"Juan Antonio Osorio Robles","email":"jaosorior@redhat.com","username":"ejuaoso"},"change_message_id":"eaaddcbeec6f49e8806d5fa61ca905076c993e02","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"def client(ctx):"},{"line_number":26,"context_line":"    auth_url \u003d ctx.auth_uri"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    cl \u003d ks_client.Client("},{"line_number":29,"context_line":"        user_id\u003dctx.user_id,"},{"line_number":30,"context_line":"        token\u003dctx.auth_token,"},{"line_number":31,"context_line":"        tenant_id\u003dctx.project_id,"},{"line_number":32,"context_line":"        auth_url\u003dauth_url"},{"line_number":33,"context_line":"    )"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    cl.management_url \u003d auth_url"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    return cl"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"def get_endpoint_for_project(ctx, service_name\u003dNone, service_type\u003dNone,"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f201791_50161a4b","line":37,"range":{"start_line":26,"start_character":0,"end_line":37,"end_character":13},"updated":"2017-06-27 12:14:12.000000000","message":"are we using this anywhere?","commit_id":"9bc1f314692c2849de0767fc18e7c8605efa2d94"},{"author":{"_account_id":9712,"name":"Dougal Matthews","email":"dougal.matthews@canonical.com","username":"dougal"},"change_message_id":"3bac0ace47b416aa9c7c097a51b064e124643e36","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"def client(ctx):"},{"line_number":26,"context_line":"    auth_url \u003d ctx.auth_uri"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    cl \u003d ks_client.Client("},{"line_number":29,"context_line":"        user_id\u003dctx.user_id,"},{"line_number":30,"context_line":"        token\u003dctx.auth_token,"},{"line_number":31,"context_line":"        tenant_id\u003dctx.project_id,"},{"line_number":32,"context_line":"        auth_url\u003dauth_url"},{"line_number":33,"context_line":"    )"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    cl.management_url \u003d auth_url"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    return cl"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"def get_endpoint_for_project(ctx, service_name\u003dNone, service_type\u003dNone,"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f201791_362b9683","line":37,"range":{"start_line":26,"start_character":0,"end_line":37,"end_character":13},"in_reply_to":"5f201791_50161a4b","updated":"2017-06-27 12:45:51.000000000","message":"yes, on L105.","commit_id":"9bc1f314692c2849de0767fc18e7c8605efa2d94"},{"author":{"_account_id":10873,"name":"Juan Antonio Osorio Robles","email":"jaosorior@redhat.com","username":"ejuaoso"},"change_message_id":"eaaddcbeec6f49e8806d5fa61ca905076c993e02","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    return cl"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"def get_endpoint_for_project(ctx, service_name\u003dNone, service_type\u003dNone,"},{"line_number":41,"context_line":"                             region_name\u003dNone):"},{"line_number":42,"context_line":"    if service_name is None and service_type is None:"},{"line_number":43,"context_line":"        raise ValueError("},{"line_number":44,"context_line":"            \"Either \u0027service_name\u0027 or \u0027service_type\u0027 must be provided.\""},{"line_number":45,"context_line":"        )"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    service_catalog \u003d obtain_service_catalog(ctx)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    # When region_name is not passed, first get from context as region_name"},{"line_number":50,"context_line":"    # could be passed to rest api in http header (\u0027X-Region-Name\u0027). Otherwise,"},{"line_number":51,"context_line":"    # just get region from mistral configuration."},{"line_number":52,"context_line":"    region \u003d (region_name or ctx.region_name)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    service_endpoints \u003d service_catalog.get_endpoints("},{"line_number":55,"context_line":"        service_name\u003dservice_name,"},{"line_number":56,"context_line":"        service_type\u003dservice_type,"},{"line_number":57,"context_line":"        region_name\u003dregion"},{"line_number":58,"context_line":"    )"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    endpoint \u003d None"},{"line_number":61,"context_line":"    os_actions_endpoint_type \u003d \u0027public\u0027"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    for endpoints in six.itervalues(service_endpoints):"},{"line_number":64,"context_line":"        for ep in endpoints:"},{"line_number":65,"context_line":"            # is V3 interface?"},{"line_number":66,"context_line":"            if \u0027interface\u0027 in ep:"},{"line_number":67,"context_line":"                interface_type \u003d ep[\u0027interface\u0027]"},{"line_number":68,"context_line":"                if os_actions_endpoint_type in interface_type:"},{"line_number":69,"context_line":"                    endpoint \u003d ks_endpoints.Endpoint("},{"line_number":70,"context_line":"                        None,"},{"line_number":71,"context_line":"                        ep,"},{"line_number":72,"context_line":"                        loaded\u003dTrue"},{"line_number":73,"context_line":"                    )"},{"line_number":74,"context_line":"                    break"},{"line_number":75,"context_line":"            # is V2 interface?"},{"line_number":76,"context_line":"            if \u0027publicURL\u0027 in ep:"},{"line_number":77,"context_line":"                endpoint_data \u003d {"},{"line_number":78,"context_line":"                    \u0027url\u0027: ep[\u0027publicURL\u0027],"},{"line_number":79,"context_line":"                    \u0027region\u0027: ep[\u0027region\u0027]"},{"line_number":80,"context_line":"                }"},{"line_number":81,"context_line":"                endpoint \u003d ks_endpoints.Endpoint("},{"line_number":82,"context_line":"                    None,"},{"line_number":83,"context_line":"                    endpoint_data,"},{"line_number":84,"context_line":"                    loaded\u003dTrue"},{"line_number":85,"context_line":"                )"},{"line_number":86,"context_line":"                break"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    if not endpoint:"},{"line_number":89,"context_line":"        raise RuntimeError("},{"line_number":90,"context_line":"            \"No endpoints found [service_name\u003d%s, service_type\u003d%s,\""},{"line_number":91,"context_line":"            \" region_name\u003d%s]\""},{"line_number":92,"context_line":"            % (service_name, service_type, region)"},{"line_number":93,"context_line":"        )"},{"line_number":94,"context_line":"    else:"},{"line_number":95,"context_line":"        return endpoint"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"def obtain_service_catalog(ctx):"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f201791_ed6b0dee","line":95,"range":{"start_line":40,"start_character":0,"end_line":95,"end_character":23},"updated":"2017-06-27 12:14:12.000000000","message":"we could get rid of all this if we used keystone sessions and just used that to get the endpoints.","commit_id":"9bc1f314692c2849de0767fc18e7c8605efa2d94"},{"author":{"_account_id":10873,"name":"Juan Antonio Osorio Robles","email":"jaosorior@redhat.com","username":"ejuaoso"},"change_message_id":"eaaddcbeec6f49e8806d5fa61ca905076c993e02","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        return endpoint"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"def obtain_service_catalog(ctx):"},{"line_number":99,"context_line":"    token \u003d ctx.auth_token"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    response \u003d ctx.service_catalog"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    # Target service catalog may not be passed via API."},{"line_number":104,"context_line":"    if not response and ctx.is_target:"},{"line_number":105,"context_line":"        response \u003d client().tokens.get_token_data("},{"line_number":106,"context_line":"            token,"},{"line_number":107,"context_line":"            include_catalog\u003dTrue"},{"line_number":108,"context_line":"        )[\u0027token\u0027]"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    if not response:"},{"line_number":111,"context_line":"        raise exception.UnauthorizedException()"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    service_catalog \u003d ks_service_catalog.ServiceCatalog.factory(response)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    return service_catalog"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"def format_url(url_template, values):"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f201791_ed442d76","line":115,"range":{"start_line":98,"start_character":0,"end_line":115,"end_character":26},"updated":"2017-06-27 12:14:12.000000000","message":"actually, this shouldn\u0027t be needed either. A session does all this already,","commit_id":"9bc1f314692c2849de0767fc18e7c8605efa2d94"}]}
