code: def discover(uri):
      
      result = DiscoveryResult(uri)
      resp = fetchers.fetch(uri, headers={'Accept': YADIS_ACCEPT_HEADER})
      if resp.status not in (200, 206):
          raise DiscoveryFailure(
              'HTTP Response status from identity URL host is not 200. '
              'Got status %r' % (resp.status,), resp)
  
      # Note the URL after following redirects
      result.normalized_uri = resp.final_url
  
      # Attempt to find out where to go to discover the document
      # or if we already have it
      result.content_type = resp.headers.get('content-type')
  
      result.xrds_uri = whereIsYadis(resp)
  
      if result.xrds_uri and result.usedYadisLocation():
          resp = fetchers.fetch(result.xrds_uri)
          if resp.status not in (200, 206):
              exc = DiscoveryFailure(
                  'HTTP Response status from Yadis host is not 200. '
                  'Got status %r' % (resp.status,), resp)
              exc.identity_url = result.normalized_uri
              raise exc
          result.content_type = resp.headers.get('content-type')
  
      result.response_text = resp.body
      return result
docs: Discover services for a given URI.
  
      @param uri: The identity URI as a well-formed http or https
          URI. The well-formedness and the protocol are not checked, but
          the results of this function are undefined if those properties
          do not hold.
  
      @return: DiscoveryResult object
  
      @raises Exception: Any exception that can be raised by fetching a URL with
          the given fetcher.
      @raises DiscoveryFailure: When the HTTP response does not have a 200 code.