<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def find_resource_list_from_source_description(self, uri):
 """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. """

        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))