mirror of
https://github.com/lnbits/lnbits.git
synced 2025-10-10 12:32:34 +02:00
feat: returned the installed release
This commit is contained in:
@@ -6,7 +6,6 @@ from uuid import uuid4
|
|||||||
|
|
||||||
from lnbits import bolt11
|
from lnbits import bolt11
|
||||||
from lnbits.db import COCKROACH, POSTGRES, Connection
|
from lnbits.db import COCKROACH, POSTGRES, Connection
|
||||||
from lnbits.extension_manger import ExtensionRelease, InstallableExtension
|
|
||||||
from lnbits.settings import AdminSettings, EditableSettings, SuperSettings, settings
|
from lnbits.settings import AdminSettings, EditableSettings, SuperSettings, settings
|
||||||
|
|
||||||
from . import db
|
from . import db
|
||||||
@@ -122,9 +121,7 @@ async def delete_installed_extension(
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
async def get_installed_extension(
|
async def get_installed_extension(ext_id: str, conn: Optional[Connection] = None):
|
||||||
ext_id: str, conn: Optional[Connection] = None
|
|
||||||
) -> InstallableExtension:
|
|
||||||
row = await (conn or db).fetchone(
|
row = await (conn or db).fetchone(
|
||||||
"SELECT * FROM installed_extensions WHERE id = ?",
|
"SELECT * FROM installed_extensions WHERE id = ?",
|
||||||
(ext_id,),
|
(ext_id,),
|
||||||
@@ -132,12 +129,7 @@ async def get_installed_extension(
|
|||||||
if not row:
|
if not row:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
data = dict(row)
|
return dict(row)
|
||||||
meta = json.loads(data["meta"])
|
|
||||||
ext = InstallableExtension(**data)
|
|
||||||
if "installed_release" in meta:
|
|
||||||
ext.installed_release = ExtensionRelease(**meta["installed_release"])
|
|
||||||
return ext
|
|
||||||
|
|
||||||
|
|
||||||
async def get_inactive_extensions(*, conn: Optional[Connection] = None) -> List[str]:
|
async def get_inactive_extensions(*, conn: Optional[Connection] = None) -> List[str]:
|
||||||
|
@@ -6,9 +6,8 @@ import time
|
|||||||
from sqlite3 import Row
|
from sqlite3 import Row
|
||||||
from typing import Callable, Dict, List, Optional
|
from typing import Callable, Dict, List, Optional
|
||||||
|
|
||||||
from ecdsa import SECP256k1, SigningKey
|
from ecdsa import SECP256k1, SigningKey # type: ignore
|
||||||
from fastapi import Query
|
from lnurl import encode as lnurl_encode # type: ignore
|
||||||
from lnurl import encode as lnurl_encode
|
|
||||||
from loguru import logger
|
from loguru import logger
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
|
|
||||||
|
@@ -726,15 +726,15 @@ async def api_install_extension(
|
|||||||
data: CreateExtension, user: User = Depends(check_admin)
|
data: CreateExtension, user: User = Depends(check_admin)
|
||||||
):
|
):
|
||||||
|
|
||||||
installed_release = await InstallableExtension.get_extension_release(
|
release = await InstallableExtension.get_extension_release(
|
||||||
data.ext_id, data.source_repo, data.archive
|
data.ext_id, data.source_repo, data.archive
|
||||||
)
|
)
|
||||||
if not installed_release:
|
if not release:
|
||||||
raise HTTPException(
|
raise HTTPException(
|
||||||
status_code=HTTPStatus.NOT_FOUND, detail="Release not found"
|
status_code=HTTPStatus.NOT_FOUND, detail="Release not found"
|
||||||
)
|
)
|
||||||
ext_info = InstallableExtension(
|
ext_info = InstallableExtension(
|
||||||
id=data.ext_id, name=data.ext_id, installed_release=installed_release
|
id=data.ext_id, name=data.ext_id, installed_release=release
|
||||||
)
|
)
|
||||||
|
|
||||||
ext_info.download_archive()
|
ext_info.download_archive()
|
||||||
@@ -749,10 +749,10 @@ async def api_install_extension(
|
|||||||
|
|
||||||
await add_installed_extension(
|
await add_installed_extension(
|
||||||
ext_id=data.ext_id,
|
ext_id=data.ext_id,
|
||||||
version=installed_release.version,
|
version=release.version,
|
||||||
name=ext_info.name,
|
name=ext_info.name,
|
||||||
active=False,
|
active=False,
|
||||||
meta={"installed_release": dict(installed_release)},
|
meta={"installed_release": dict(release)},
|
||||||
)
|
)
|
||||||
settings.lnbits_disabled_extensions += [data.ext_id]
|
settings.lnbits_disabled_extensions += [data.ext_id]
|
||||||
|
|
||||||
|
@@ -113,6 +113,9 @@ async def extensions_install(
|
|||||||
"latestRelease": dict(ext.latest_release)
|
"latestRelease": dict(ext.latest_release)
|
||||||
if ext.latest_release
|
if ext.latest_release
|
||||||
else None,
|
else None,
|
||||||
|
"installedRelease": dict(ext.installed_release)
|
||||||
|
if ext.installed_release
|
||||||
|
else None,
|
||||||
},
|
},
|
||||||
extension_list,
|
extension_list,
|
||||||
)
|
)
|
||||||
|
@@ -15,6 +15,7 @@ from loguru import logger
|
|||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
from starlette.types import ASGIApp, Receive, Scope, Send
|
from starlette.types import ASGIApp, Receive, Scope, Send
|
||||||
|
|
||||||
|
from lnbits.core.crud import get_installed_extension
|
||||||
from lnbits.settings import settings
|
from lnbits.settings import settings
|
||||||
|
|
||||||
|
|
||||||
@@ -253,12 +254,24 @@ class InstallableExtension(BaseModel):
|
|||||||
|
|
||||||
shutil.rmtree(self.ext_upgrade_dir, True)
|
shutil.rmtree(self.ext_upgrade_dir, True)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
async def from_row(cls, data: dict) -> Optional["InstallableExtension"]:
|
||||||
|
if not data:
|
||||||
|
return None
|
||||||
|
meta = json.loads(data["meta"])
|
||||||
|
ext = InstallableExtension(**data)
|
||||||
|
if "installed_release" in meta:
|
||||||
|
ext.installed_release = ExtensionRelease(**meta["installed_release"])
|
||||||
|
return ext
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
async def from_repo(
|
async def from_repo(
|
||||||
cls, ext_id, org, repository
|
cls, ext_id, org, repository
|
||||||
) -> Optional["InstallableExtension"]:
|
) -> Optional["InstallableExtension"]:
|
||||||
try:
|
try:
|
||||||
# installed_release = await get_installed_extension(ext_id)
|
installed_release = await InstallableExtension.from_row(
|
||||||
|
await get_installed_extension(ext_id)
|
||||||
|
)
|
||||||
repo, latest_release, config = await fetch_github_repo_info(org, repository)
|
repo, latest_release, config = await fetch_github_repo_info(org, repository)
|
||||||
|
|
||||||
return InstallableExtension(
|
return InstallableExtension(
|
||||||
@@ -268,6 +281,7 @@ class InstallableExtension(BaseModel):
|
|||||||
version="0",
|
version="0",
|
||||||
stars=repo["stargazers_count"],
|
stars=repo["stargazers_count"],
|
||||||
icon_url=icon_to_github_url(org, config.get("tile")),
|
icon_url=icon_to_github_url(org, config.get("tile")),
|
||||||
|
installed_release=installed_release,
|
||||||
latest_release=ExtensionRelease.from_github_release(
|
latest_release=ExtensionRelease.from_github_release(
|
||||||
repo["html_url"], latest_release
|
repo["html_url"], latest_release
|
||||||
),
|
),
|
||||||
@@ -276,6 +290,28 @@ class InstallableExtension(BaseModel):
|
|||||||
logger.warning(e)
|
logger.warning(e)
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
async def from_manifest(cls, e: dict) -> Optional["InstallableExtension"]:
|
||||||
|
try:
|
||||||
|
installed_ext = await InstallableExtension.from_row(
|
||||||
|
await get_installed_extension(e["id"])
|
||||||
|
)
|
||||||
|
return InstallableExtension(
|
||||||
|
id=e["id"],
|
||||||
|
name=e["name"],
|
||||||
|
archive=e["archive"],
|
||||||
|
hash=e["hash"],
|
||||||
|
short_description=e["shortDescription"],
|
||||||
|
icon=e["icon"],
|
||||||
|
installed_release=installed_ext.installed_release
|
||||||
|
if installed_ext
|
||||||
|
else None,
|
||||||
|
dependencies=e["dependencies"] if "dependencies" in e else [],
|
||||||
|
)
|
||||||
|
except Exception as e:
|
||||||
|
logger.warning(e)
|
||||||
|
return None
|
||||||
|
|
||||||
@classmethod # todo: remove
|
@classmethod # todo: remove
|
||||||
async def get_extension_info(
|
async def get_extension_info(
|
||||||
cls, ext_id: str, archive: str
|
cls, ext_id: str, archive: str
|
||||||
@@ -331,17 +367,7 @@ class InstallableExtension(BaseModel):
|
|||||||
if e["id"] in extension_id_list:
|
if e["id"] in extension_id_list:
|
||||||
continue
|
continue
|
||||||
extension_list += [
|
extension_list += [
|
||||||
InstallableExtension(
|
await InstallableExtension.from_manifest(e)
|
||||||
id=e["id"],
|
|
||||||
name=e["name"],
|
|
||||||
archive=e["archive"],
|
|
||||||
hash=e["hash"],
|
|
||||||
short_description=e["shortDescription"],
|
|
||||||
icon=e["icon"],
|
|
||||||
dependencies=e["dependencies"]
|
|
||||||
if "dependencies" in e
|
|
||||||
else [],
|
|
||||||
)
|
|
||||||
]
|
]
|
||||||
extension_id_list += [e["id"]]
|
extension_id_list += [e["id"]]
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
Reference in New Issue
Block a user