code: 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)
              # This is OK to do even if we did not do discovery in
              # the first place.
              disco.cleanup(force=True)
  
          return response
docs: 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>}