def download(self, url):
working_dir = self.working_dir if self.working_dir else ''
r = Resource()
# For local files, don't download, just reference in place.
if url.scheme == 'file':
r.cache_path = Url(url.resource_url).path
r.download_time = None
# Many places the file may exist
locations = { # What a mess ...
abspath(r.cache_path),
abspath(r.cache_path.lstrip('/')),
abspath(join(working_dir, r.cache_path)),
abspath(r.cache_path.lstrip('/'))
}
for l in locations:
if exists(l):
r.sys_path = l
break
else:
raise DownloadError(("File resource does not exist. Found none of:"
"\n{}\n\nWorking dir = {}\ncache_path={}\nspec_path={}")
.format('\n'.join(locations), working_dir, r.cache_path, url.path))
else:
# Not a local file, so actually need to download it.
try:
r.cache_path, r.download_time = self._download_with_lock(url.resource_url)
except AccessError as e:
# Try again, using a URL that we may have configured an account for. This is
# primarily S3 urls, with Boto or AWS credential
try:
r.cache_path, r.download_time = self._download_with_lock(url.auth_resource_url)
except AttributeError:
raise e
r.sys_path = self.cache.getsyspath(r.cache_path)
return r
评论列表
文章目录