Commit 85eabd23 authored by Julien Muchembled's avatar Julien Muchembled

download*: new alternate-url option

parent 8a9e3766
Pipeline #17523 passed with stage
in 0 seconds
...@@ -339,6 +339,17 @@ In case of checksum mismatch:: ...@@ -339,6 +339,17 @@ In case of checksum mismatch::
Error: MD5 checksum mismatch downloading '...' Error: MD5 checksum mismatch downloading '...'
>>> ls('parts') >>> ls('parts')
option: alternate-url
---------------------
Alternate URL. If supported by Buildout, it is used as fallback if the main
URL (`url` option) fails at HTTP level.
Useful when a version of a resource can only be downloaded with a temporary
URL as long as it's the last version, and this version is then moved to a
permanent place when a newer version is released: `url` shall be the final URL
and `alternate-url` the temporary one.
option: mode option: mode
------------ ------------
...@@ -462,6 +473,11 @@ option: md5sum ...@@ -462,6 +473,11 @@ option: md5sum
An MD5 checksum can be specified to check the downloaded file, like for the An MD5 checksum can be specified to check the downloaded file, like for the
``download`` recipe. However, if unset, updating the part does nothing. ``download`` recipe. However, if unset, updating the part does nothing.
option: alternate-url
---------------------
See the ``download`` recipe.
option: environment option: environment
------------------- -------------------
......
...@@ -36,6 +36,7 @@ class Recipe(object): ...@@ -36,6 +36,7 @@ class Recipe(object):
def __init__(self, buildout, name, options): def __init__(self, buildout, name, options):
self._buildout = buildout['buildout'] self._buildout = buildout['buildout']
self._url = options['url'] self._url = options['url']
self._alternate = options.get('alternate-url')
self._md5sum = options.get('md5sum') or None self._md5sum = options.get('md5sum') or None
self._name = name self._name = name
mode = options.get('mode') mode = options.get('mode')
...@@ -72,8 +73,10 @@ class Recipe(object): ...@@ -72,8 +73,10 @@ class Recipe(object):
return [destination] return [destination]
def _download(self): def _download(self):
alternate = self._alternate
download.Download(self._buildout, hash_name=True)( download.Download(self._buildout, hash_name=True)(
self._url, self._md5sum, self._destination) self._url, self._md5sum, self._destination,
**({'alternate_url': alternate} if alternate else {}))
if self._mode is not None: if self._mode is not None:
os.chmod(self._destination, self._mode) os.chmod(self._destination, self._mode)
......
...@@ -61,8 +61,10 @@ class Recipe(EnvironMixin): ...@@ -61,8 +61,10 @@ class Recipe(EnvironMixin):
def _install(self): def _install(self):
location = self._shared.location location = self._shared.location
alternate = self.options.get('alternate-url')
path, is_temp = download.Download(self.buildout['buildout'], path, is_temp = download.Download(self.buildout['buildout'],
hash_name=True)(self._url, self.options.get('md5sum') or None) hash_name=True)(self._url, self.options.get('md5sum') or None,
**({'alternate_url': alternate} if alternate else {}))
try: try:
archive_util.extraction_drivers = patched_extraction_drivers archive_util.extraction_drivers = patched_extraction_drivers
# ad-hoc support for .xz and .lz archive # ad-hoc support for .xz and .lz archive
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment