diff --git a/CHANGELOG.md b/CHANGELOG.md index 293acf20..9cd0c226 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -307,3 +307,4 @@ - added guard on determining host IP address in `mmpm.constants.paths` - added import guard for Python3.8 when using `importlib.resources` in `mmpm.ui` +- added check for MMPM being a docker image when self upgrading diff --git a/mmpm/api/endpoints/ep_mmpm.py b/mmpm/api/endpoints/ep_mmpm.py index 5ce9efcb..716ff6ca 100644 --- a/mmpm/api/endpoints/ep_mmpm.py +++ b/mmpm/api/endpoints/ep_mmpm.py @@ -5,6 +5,7 @@ import mmpm.utils from mmpm.api.constants import http from mmpm.api.endpoints.endpoint import Endpoint +from mmpm.env import MMPMEnv from mmpm.log.factory import MMPMLogFactory logger = MMPMLogFactory.get_logger(__name__) @@ -18,7 +19,7 @@ class Mmpm(Endpoint): def __init__(self): self.name = "mmpm" self.blueprint = Blueprint(self.name, __name__, url_prefix=f"/api/{self.name}") - self.handler = None + self.env = MMPMEnv() @self.blueprint.route("/version", methods=[http.GET]) def version() -> Response: @@ -44,6 +45,8 @@ def upgrade() -> Response: Returns: Response: A Flask Response object indicating success or failure of the upgrade operation. """ + if self.env.MMPM_IS_DOCKER_IMAGE: + self.failure("MMPM is a Docker image. MMPM must be upgraded using the Docker CLI.") if mmpm.utils.upgrade(): return self.success("Upgrade MMPM") diff --git a/mmpm/subcommands/_sub_cmd_ui.py b/mmpm/subcommands/_sub_cmd_ui.py index c8abca25..f3f99cd7 100644 --- a/mmpm/subcommands/_sub_cmd_ui.py +++ b/mmpm/subcommands/_sub_cmd_ui.py @@ -5,6 +5,7 @@ from time import sleep from mmpm.constants import urls +from mmpm.env import MMPMEnv from mmpm.log.factory import MMPMLogFactory from mmpm.magicmirror.database import MagicMirrorDatabase from mmpm.subcommands.sub_cmd import SubCmd @@ -31,6 +32,7 @@ def __init__(self, app_name): self.usage = f"{self.app_name} {self.name} [--url] [--status] " self.database = MagicMirrorDatabase() self.ui = MMPMui() + self.env = MMPMEnv() def register(self, subparser): self.parser = subparser.add_parser(self.name, usage=self.usage, help=self.help) @@ -112,6 +114,10 @@ def exec(self, args, extra): if not self.database.is_initialized(): self.database.load() + if self.env.MMPM_IS_DOCKER_IMAGE: + logger.error("MMPM is a Docker image. Unable to interact with MMPM UI from CLI.") + return + if extra: logger.error(f"Extra arguments are not accepted. See '{self.app_name} {self.name} --help'") return diff --git a/mmpm/subcommands/_sub_cmd_upgrade.py b/mmpm/subcommands/_sub_cmd_upgrade.py index 99087bef..67047676 100644 --- a/mmpm/subcommands/_sub_cmd_upgrade.py +++ b/mmpm/subcommands/_sub_cmd_upgrade.py @@ -3,7 +3,9 @@ import json from typing import List +from mmpm import utils from mmpm.constants import paths +from mmpm.env import MMPMEnv from mmpm.log.factory import MMPMLogFactory from mmpm.magicmirror.database import MagicMirrorDatabase from mmpm.magicmirror.magicmirror import MagicMirror @@ -29,6 +31,7 @@ def __init__(self, app_name): self.usage = f"{self.app_name} {self.name} [--yes]" self.database = MagicMirrorDatabase() self.magicmirror = MagicMirror() + self.env = MMPMEnv() def register(self, subparser): self.parser = subparser.add_parser(self.name, usage=self.usage, help=self.help) @@ -76,7 +79,10 @@ def exec(self, args, extra): upgradable["MagicMirror"] = upgradable["MagicMirror"] and self.magicmirror.upgrade() if upgradable["mmpm"]: - print("Run 'pip install --upgrade --no-cache-dir mmpm' to install the latest version of MMPM. Run 'mmpm update' after upgrading.") + if self.env.MMPM_IS_DOCKER_IMAGE: + logger.warning("Cannot perform self-upgrade because MMPM is a Docker image. Stop MMPM and run `docker pull karsten13/mmpm:latest`") + else: + upgradable["mmpm"] = utils.upgrade() with open(paths.MMPM_AVAILABLE_UPGRADES_FILE, mode="w", encoding="utf-8") as upgrade_file: json.dump(upgradable, upgrade_file) diff --git a/mmpm/utils.py b/mmpm/utils.py index c15a2ec4..9d93b3d0 100644 --- a/mmpm/utils.py +++ b/mmpm/utils.py @@ -184,7 +184,7 @@ def upgrade() -> bool: """ error_code, stdout, stderr = run_cmd( - ["python3", "-m", "pip", "install", "--upgrade", "--no-cache-dir", "mmpm"], + ["python3", "-m", "pip", "install", "--upgrade", "mmpm"], message="Upgrading MMPM", ) diff --git a/ui/bun.lockb b/ui/bun.lockb index cb51a40d..e19a5fe5 100755 Binary files a/ui/bun.lockb and b/ui/bun.lockb differ