<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def pull_release(self, name, version, destfolder=".", force=False):
 """Download and unpack a released iotile component by name and version range If the folder that would be created already exists, this command fails unless you pass force=True Args: name (string):
 The name of the component to download version (SemanticVersionRange):
 The valid versions of the component to fetch destfolder (string):
 The folder into which to unpack the result, defaults to the current working directory force (bool):
 Forcibly overwrite whatever is currently in the folder that would be fetched. Raises: ExternalError: If the destination folder exists and force is not specified ArgumentError: If the specified component could not be found with the required version """


        unique_id = name.replace('/', '_')

        depdict = {
            'name': name,
            'unique_id': unique_id,
            'required_version': version,
            'required_version_string': str(version)
        }

        destdir = os.path.join(destfolder, unique_id)
        if os.path.exists(destdir):
            if not force:
                raise ExternalError("Output directory exists and force was not specified, aborting",
                                    output_directory=destdir)

            shutil.rmtree(destdir)

        result = self.update_dependency(None, depdict, destdir)
        if result != "installed":
            raise ArgumentError("Could not find component to satisfy name/version combination")