Ejemplo n.º 1
0
    def download(self, uri, save_path, digest=None, digest_type='SHA256'):
        r_f = uri
        l_f = save_path
        valid = False
        if digest is not None:
            self.addDigest(l_f, digest, digest_type)

        if os.path.exists(l_f):
            #logger.w(_('Exists: %s') % l_f)
            # Checksum
            if digest is not None:
                if self.checksum(l_f, digest_type, silent=True):
                    valid = True
                else:
                    os.remove(l_f)
            else:
                valid = True

        if not valid:
            # Fetch
            logger.i(_('Start: download %s') % r_f)
            dl_dir, dl_fn = os.path.split(l_f)
            self._dl.fetch(r_f, dl_dir, dl_fn)
            if os.path.exists(l_f):
                logger.success(_('Sucess: download %s') % l_f)
                valid = True
            else:
                logger.failed(_('Failed: download %s') % l_f)

        return valid
Ejemplo n.º 2
0
    def checksum(self, _file, _type='SHA256', silent=False):
        if _type not in self.digest_types:
            if not silent:
                logger.w(_('Digest(%s) can only be %s') % (_type, ' '.join(self.digest_types)))
            return False

        file_digests = self.digest_map.get(_file)
        if file_digests is None:
            if not silent:
                logger.w(_('Can not find file digest information %s') % _file)
            return False

        digest = file_digests.get(_type)
        if digest is None:
            if not silent:
                logger.w(_('Can not find %s digest from file %s') % (_type, _file))
            return False

        calc_digest = checksum.perform_checksum(_file, _type)[0]
        if digest != calc_digest:
            if not silent:
                logger.failed(_('Digest checksum failed'))
                logger.i(_('Origin digest:\t\t%s') % digest)
                logger.i(_('Calculate digest:\t%s') % calc_digest)
            return False

        if not silent:
            logger.success(_('Checksum valid: %s') % _file)
        return True
Ejemplo n.º 3
0
 def do_pase(self, meta_path):
     logger.d('do parse %s' % meta_path)
     doc = parse(meta_path)
     for e_data in doc.getElementsByTagName('data'):
         href = e_data.getElementsByTagName('location')[0].getAttribute('href')
         uri = '%s/%s' % (self.repo_src, href)
         e_checksum = e_data.getElementsByTagName('checksum')[0]
         checksum_value = "".join(t.nodeValue for t in e_checksum.childNodes if t.nodeType == t.TEXT_NODE)
         checksum_type = e_checksum.getAttribute('type')
         if not checksum_type or \
             checksum_type.lower() not in (u'sha256', ):
             logger.e(_('Can not get checksum type "%s"') % checksum_type)
         
         logger.d('download %s' % uri)
         ret, l_f = self.dl_file(uri, checksum_value, checksum_type.upper())