refactor: code clean-up

This commit is contained in:
Vlad Stan 2023-01-11 15:51:56 +02:00
parent de929c6c70
commit e3ee04edc7

View File

@ -760,17 +760,12 @@ async def api_install_extension(
@core_app.delete("/api/v1/extension/{ext_id}") @core_app.delete("/api/v1/extension/{ext_id}")
async def api_uninstall_extension(ext_id: str, user: User = Depends(check_admin)): async def api_uninstall_extension(ext_id: str, user: User = Depends(check_admin)):
try:
extension_list: List[
InstallableExtension
] = await InstallableExtension.get_installable_extensions()
except Exception as ex:
raise HTTPException(
status_code=HTTPStatus.NOT_FOUND,
detail="Cannot fetch installable extension list",
)
extensions = [e for e in extension_list if e.id == ext_id] installable_extensions: List[
InstallableExtension
] = await InstallableExtension.get_installable_extensions()
extensions = [e for e in installable_extensions if e.id == ext_id]
if len(extensions) == 0: if len(extensions) == 0:
raise HTTPException( raise HTTPException(
status_code=HTTPStatus.BAD_REQUEST, status_code=HTTPStatus.BAD_REQUEST,
@ -778,56 +773,23 @@ async def api_uninstall_extension(ext_id: str, user: User = Depends(check_admin)
) )
# check that other extensions do not depend on this one # check that other extensions do not depend on this one
for active_ext_id in list(map(lambda e: e.code, get_valid_extensions(True))): for valid_ext_id in list(map(lambda e: e.code, get_valid_extensions(True))):
active_ext = next( installed_ext = next(
(ext for ext in extension_list if ext.id == active_ext_id), None (ext for ext in installable_extensions if ext.id == valid_ext_id), None
) )
if active_ext and ext_id in active_ext.dependencies: if installed_ext and ext_id in installed_ext.dependencies:
raise HTTPException( raise HTTPException(
status_code=HTTPStatus.BAD_REQUEST, status_code=HTTPStatus.BAD_REQUEST,
detail=f"Cannot uninstall. Extension '{active_ext.name}' depends on this one.", detail=f"Cannot uninstall. Extension '{installed_ext.name}' depends on this one.",
) )
try: try:
settings.lnbits_disabled_extensions += [ext_id] settings.lnbits_disabled_extensions += [ext_id]
# remove downloaded archive for ext_info in extensions:
ext_zip_file = os.path.join( ext_info.clean_extension_files()
settings.lnbits_data_folder, "extensions", f"{ext_id}.zip"
)
if os.path.isfile(ext_zip_file):
os.remove(ext_zip_file)
# module_name = f"lnbits.extensions.{ext_id}"
# modules_to_delete = list_modules_for_extension(ext_id)
# print('### modules_to_delete', modules_to_delete)
# for m in modules_to_delete:
# module = sys.modules[m]
# del sys.modules[m]
# del module
# remove module from extensions
ext_dir = os.path.join("lnbits/extensions", ext_id)
shutil.rmtree(ext_dir, True)
except Exception as ex: except Exception as ex:
raise HTTPException( raise HTTPException(
status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail=str(ex) status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail=str(ex)
) )
def list_modules_for_extension(ext_id: str) -> List[str]:
modules_for_extension = []
for key in sys.modules.keys():
try:
module = sys.modules[key]
moduleFilePath = inspect.getfile(module).lower()
dir_name = str(Path(moduleFilePath).parent.absolute())
if dir_name.endswith(f"lnbits/extensions/{ext_id}"):
print("## moduleFilePath", moduleFilePath)
modules_for_extension += [key]
except:
pass # built in modules throw if queried
return modules_for_extension