code: def find_resource_list_from_source_description(self, uri):
          
          self.logger.info("Reading source description %s" % (uri))
          try:
              sd = SourceDescription()
              sd.read(uri=uri)
          except Exception as e:
              raise ClientError(
                  "Can't read source description from %s (%s)" %
                  (uri, str(e)))
          if (len(sd) == 0):
              raise ClientFatalError(
                  "Source description %s has no sources" % (uri))
          elif (len(sd) > 1):
              raise ClientFatalError(
                  "Source description %s has multiple sources, specify one "
                  "with --capabilitylist" % (uri))
          self.logger.info("Finished reading source description")
          cluri = sd.resources.first().uri
          uri = urljoin(uri, cluri)  # FIXME - Should relative URI handling be elsewhere?
          return(self.find_resource_list_from_capability_list(uri))
docs: Read source description to find resource list.
  
          Raises a ClientError in cases where the client might look for a
          source description in another location, but a ClientFatalError if
          a source description is found but there is some problem using it.