code: def fetch(self, is_dl_forced=False):
          
  
          (files_to_download, ftp) = self._get_file_list(
              self.files['anat_entity']['path'],
              self.files['anat_entity']['pattern'])
  
          LOG.info(
              'Will Check \n%s\nfrom %s',
              '\n'.join(list(files_to_download)), ftp.getwelcome())
  
          for dlname in files_to_download:
              localfile = '/'.join((self.rawdir, dlname))
              info = ftp.sendcmd("MLST {}".format(dlname))   # fetch remote file stats
              info = info.split('\n')[1].strip()              # drop pre & post script
              info = info.split(';')                          # partition fields
              info = [item.strip() for item in info[:-1]]     # cleanup an drop final name
              info = [item.split('=') for item in info]       # make pairs
              info = {item[0]: item[1] for item in info}      # transform list to dict
  
              LOG.info(
                  '%s\n'
                  'Remote File Size: %i\n'
                  'Remote timestamp: %s',
                  dlname, int(info['size']),
                  self._convert_ftp_time_to_iso(info['modify']))
  
              if not os.path.exists(localfile) or is_dl_forced or \
                      self.checkIfRemoteIsNewer(
                          localfile, int(info['size']), info['modify']):
  
                  LOG.info("Fetching %s", dlname)
                  LOG.info("Writing to %s", localfile)
  
                  ftp.retrbinary('RETR {}'.format(dlname), open(localfile, 'wb').write)
                  remote_dt = Bgee._convert_ftp_time_to_iso(info['modify'])
                  os.utime(
                      localfile,
                      (time.mktime(remote_dt.timetuple()),
                       time.mktime(remote_dt.timetuple())))
          ftp.quit()
  
          return
docs: :param is_dl_forced: boolean, force download
          :return: