'Download a single package, if needed.
An MD5 signature is used to determine whether download is needed,
and to test that we actually downloaded what we expected.
If output is given it is a file-like object that will receive a log
of what happens.
If anything unforeseen happened the method returns an error message
string.'

def downloadPackageOnly(self, output=None):

    (scheme, loc, path, query, frag) = urlparse.urlsplit(self._dict['Download-URL'])
    path = urllib.url2pathname(path)
    filename = os.path.split(path)[1]
    self.archiveFilename = os.path.join(self._db.preferences.downloadDir, filename)
    if (not self._archiveOK()):
        if (scheme == 'manual'):
            return ('Please    download    package    manually    and    save    as    %s' % self.archiveFilename)
        downloader = PimpUrllibDownloader(None, self._db.preferences.downloadDir, watcher=self._db.preferences.watcher)
        if (not downloader.download(self._dict['Download-URL'], self.archiveFilename, output)):
            return 'download    command    failed'
    if ((not os.path.exists(self.archiveFilename)) and (not NO_EXECUTE)):
        return 'archive    not    found    after    download'
    if (not self._archiveOK()):
        return 'archive    does    not    have    correct    MD5    checksum'
