From 032a000da7ea976e33d436c7bca9e179557009d0 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Wed, 11 Jan 2023 16:36:37 +0200 Subject: [PATCH] fix: do not fail when one of the extension manifest files is not available --- lnbits/core/views/generic.py | 5 +--- lnbits/extension_manger.py | 45 ++++++++++++++++++------------------ 2 files changed, 24 insertions(+), 26 deletions(-) diff --git a/lnbits/core/views/generic.py b/lnbits/core/views/generic.py index 106c90022..d0987379d 100644 --- a/lnbits/core/views/generic.py +++ b/lnbits/core/views/generic.py @@ -80,10 +80,7 @@ async def extensions_install( ] = await InstallableExtension.get_installable_extensions() except Exception as ex: logger.warning(ex) - raise HTTPException( - status_code=HTTPStatus.NOT_FOUND, - detail="Cannot fetch installable extension list", - ) + extension_list = [] try: if deactivate: diff --git a/lnbits/extension_manger.py b/lnbits/extension_manger.py index b573aaefe..ea71414d6 100644 --- a/lnbits/extension_manger.py +++ b/lnbits/extension_manger.py @@ -190,7 +190,7 @@ class InstallableExtension(NamedTuple): # remove module from extensions shutil.rmtree(self.ext_dir, True) - + shutil.rmtree(self.ext_upgrade_dir, True) @classmethod @@ -225,27 +225,28 @@ class InstallableExtension(NamedTuple): async with httpx.AsyncClient() as client: for url in settings.lnbits_extensions_manifests: - resp = await client.get(url) - if resp.status_code != 200: - raise HTTPException( - status_code=404, - detail=f"Unable to fetch extension list for repository: {url}", - ) - for e in resp.json()["extensions"]: - extension_list += [ - InstallableExtension( - id=e["id"], - name=e["name"], - archive=e["archive"], - hash=e["hash"], - short_description=e["shortDescription"], - details=e["details"] if "details" in e else "", - icon=e["icon"], - dependencies=e["dependencies"] - if "dependencies" in e - else [], - ) - ] + try: + resp = await client.get(url) + if resp.status_code != 200: + logger.warning(f"Unable to fetch extension list for repository: {url}") + continue + for e in resp.json()["extensions"]: + extension_list += [ + InstallableExtension( + id=e["id"], + name=e["name"], + archive=e["archive"], + hash=e["hash"], + short_description=e["shortDescription"], + details=e["details"] if "details" in e else "", + icon=e["icon"], + dependencies=e["dependencies"] + if "dependencies" in e + else [], + ) + ] + except Exception as e: + logger.warning(e) return extension_list