MCPcopy Index your code
hub / github.com/kivy/python-for-android / download

Method download

pythonforandroid/recipe.py:397–460  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

395 self.download()
396
397 def download(self):
398 if self.url is None:
399 info('Skipping {} download as no URL is set'.format(self.name))
400 return
401
402 url = self.versioned_url
403 expected_digests = {}
404 for alg in set(hashlib.algorithms_guaranteed) | set(('md5', 'sha512', 'blake2b')):
405 expected_digest = getattr(self, alg + 'sum') if hasattr(self, alg + 'sum') else None
406 ma = match(u'^(.+)#' + alg + u'=([0-9a-f]{32,})$', url)
407 if ma: # fragmented URL?
408 if expected_digest:
409 raise ValueError(
410 ('Received {}sum from both the {} recipe '
411 'and its url').format(alg, self.name))
412 url = ma.group(1)
413 expected_digest = ma.group(2)
414 if expected_digest:
415 expected_digests[alg] = expected_digest
416
417 ensure_dir(join(self.ctx.packages_path, self.name))
418
419 with current_directory(join(self.ctx.packages_path, self.name)):
420 filename = shprint(sh.basename, url).stdout[:-1].decode('utf-8')
421
422 do_download = True
423 marker_filename = '.mark-{}'.format(filename)
424 if exists(filename) and isfile(filename):
425 if not exists(marker_filename):
426 shprint(sh.rm, filename)
427 else:
428 for alg, expected_digest in expected_digests.items():
429 current_digest = algsum(alg, filename)
430 if current_digest != expected_digest:
431 debug('* Generated {}sum: {}'.format(alg,
432 current_digest))
433 debug('* Expected {}sum: {}'.format(alg,
434 expected_digest))
435 raise ValueError(
436 ('Generated {0}sum does not match expected {0}sum '
437 'for {1} recipe').format(alg, self.name))
438 do_download = False
439
440 # If we got this far, we will download
441 if do_download:
442 debug('Downloading {} from {}'.format(self.name, url))
443
444 shprint(sh.rm, '-f', marker_filename)
445 self.download_file(self.versioned_url, filename)
446 touch(marker_filename)
447
448 if exists(filename) and isfile(filename):
449 for alg, expected_digest in expected_digests.items():
450 current_digest = algsum(alg, filename)
451 if current_digest != expected_digest:
452 debug('* Generated {}sum: {}'.format(alg,
453 current_digest))
454 debug('* Expected {}sum: {}'.format(alg,

Callers 3

download_if_necessaryMethod · 0.95

Calls 7

download_fileMethod · 0.95
ensure_dirFunction · 0.90
current_directoryFunction · 0.90
shprintFunction · 0.90
touchFunction · 0.90
algsumFunction · 0.85
formatMethod · 0.80

Tested by 2