Exception handling for repo refresh
This commit is contained in:
@@ -82,10 +82,6 @@ class InstallException(Exception):
|
|||||||
class DownloadException(Exception):
|
class DownloadException(Exception):
|
||||||
"""Raised when there is an error downloading something"""
|
"""Raised when there is an error downloading something"""
|
||||||
|
|
||||||
def __init__(self, status_code: int, message: str):
|
|
||||||
self.status_code = status_code
|
|
||||||
self.message = message
|
|
||||||
|
|
||||||
class BadRepository(Exception):
|
class BadRepository(Exception):
|
||||||
"""Raised when reading a repository results in an error"""
|
"""Raised when reading a repository results in an error"""
|
||||||
|
|
||||||
@@ -207,7 +203,10 @@ class Repository:
|
|||||||
except KeyError:
|
except KeyError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
resp = requests.get(self.url, headers=req_headers)
|
try:
|
||||||
|
resp = requests.get(self.url, headers=req_headers, timeout=60)
|
||||||
|
except requests.exceptions.RequestException as err:
|
||||||
|
raise DownloadException(err) from err
|
||||||
|
|
||||||
try:
|
try:
|
||||||
resp.raise_for_status()
|
resp.raise_for_status()
|
||||||
@@ -232,7 +231,11 @@ class Repository:
|
|||||||
self.log.debug("Found headers: %s", resp_headers)
|
self.log.debug("Found headers: %s", resp_headers)
|
||||||
|
|
||||||
|
|
||||||
repodict = resp.json()
|
try:
|
||||||
|
repodict = resp.json()
|
||||||
|
except json.decoder.JSONDecodeError:
|
||||||
|
self.log.exception("Failed to parse downloaded repository")
|
||||||
|
raise DownloadException("Could not parse repository downloaded from '%s'. Are you sure this is the correct URL?" % self.url)
|
||||||
repodict['_headers'] = resp_headers
|
repodict['_headers'] = resp_headers
|
||||||
|
|
||||||
self.set_from_dict(repodict)
|
self.set_from_dict(repodict)
|
||||||
@@ -482,7 +485,8 @@ def refresh(pipe_to_blender, storage_path: pathlib.Path, repository_url: str):
|
|||||||
try:
|
try:
|
||||||
repo.refresh()
|
repo.refresh()
|
||||||
except DownloadException as err:
|
except DownloadException as err:
|
||||||
pipe_to_blender.send(DownloadError(err.status_code, err.message))
|
pipe_to_blender.send(SubprocError(err))
|
||||||
|
return
|
||||||
|
|
||||||
repo.to_file(repo_path) # TODO: this always writes even if repo wasn't changed
|
repo.to_file(repo_path) # TODO: this always writes even if repo wasn't changed
|
||||||
pipe_to_blender.send(Result(repo.to_dict(sort=True)))
|
pipe_to_blender.send(Result(repo.to_dict(sort=True)))
|
||||||
|
Reference in New Issue
Block a user