<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def fetch(dataset="mi", datadir=datadir):
 """Fetch example dataset. If the requested dataset is not found in the location specified by `datadir`, the function attempts to download it. Parameters dataset : str Which dataset to load. Currently only 'mi' is supported. datadir : str Path to the storage location of example datasets. Datasets are downloaded to this location if they cannot be found. If the directory does not exist it is created. Returns ------- data : list of dicts The data set is stored in a list, where each list element corresponds to data from one subject. Each list element is a dictionary with the following keys: """

    if dataset not in datasets:
        raise ValueError("Example data '{}' not available.".format(dataset))
    else:
        files = datasets[dataset]["files"]
        url = datasets[dataset]["url"]
        md5 = datasets[dataset]["md5"]
    if not isdir(datadir):
        makedirs(datadir)

    data = []

    for n, filename in enumerate(files):
        fullfile = join(datadir, filename)
        if not isfile(fullfile):
            with open(fullfile, "wb") as f:
                response = get(join(url, filename))
                f.write(response.content)
        with open(fullfile, "rb") as f:  # check if MD5 of downloaded file matches original hash
            hash = hashlib.md5(f.read()).hexdigest()
        if hash != md5[n]:
            raise MD5MismatchError("MD5 hash of {} does not match {}.".format(fullfile, md5[n]))
        data.append(convert(dataset, loadmat(fullfile)))

    return data