'Called to interpret the server\'s response to an OpenID
request. It is called in step 4 of the flow described in the
consumer overview.
@param query: A dictionary of the query parameters for this
HTTP request.
@param current_url: The URL used to invoke the application.
Extract the URL from your application\'s web
request framework and specify it here to have it checked
against the openid.return_to value in the response.  If
the return_to URL check fails, the status of the
completion will be FAILURE.
@returns: a subclass of Response. The type of response is
indicated by the status attribute, which will be one of
SUCCESS, CANCEL, FAILURE, or SETUP_NEEDED.
@see: L{SuccessResponse<openid.consumer.consumer.SuccessResponse>}
@see: L{CancelResponse<openid.consumer.consumer.CancelResponse>}
@see: L{SetupNeededResponse<openid.consumer.consumer.SetupNeededResponse>}
@see: L{FailureResponse<openid.consumer.consumer.FailureResponse>}'

def complete(self, query, current_url):

    endpoint = self.session.get(self._token_key)
    message = Message.fromPostArgs(query)
    response = self.consumer.complete(message, endpoint, current_url)
    try:
        del self.session[self._token_key]
    except KeyError:
        pass
    if ((response.status in ['success', 'cancel']) and (response.identity_url is not None)):
        disco = Discovery(self.session, response.identity_url, self.session_key_prefix)
        disco.cleanup(force=True)
    return response
