Skip to content

Commit f45d68e

Browse files
committed
Fix issue where spyder-updater could be installed multiple times in one Spyder session.
1 parent 266f5f9 commit f45d68e

File tree

2 files changed

+20
-12
lines changed

2 files changed

+20
-12
lines changed

spyder/plugins/updatemanager/widgets/update.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,13 @@
2727
from spyder.config.base import is_conda_based_app
2828
from spyder.config.gui import is_dark_interface
2929
from spyder.plugins.updatemanager.workers import (
30-
UPDATER_PATH,
3130
UpdateType,
3231
validate_download,
3332
WorkerUpdate,
3433
WorkerUpdateUpdater,
3534
WorkerDownloadInstaller
3635
)
36+
from spyder.plugins.updatemanager.utils import get_updater_info
3737
from spyder.utils.conda import find_conda, is_anaconda_pkg
3838
from spyder.utils.palette import SpyderPalette
3939
from spyder.utils.programs import get_temp_dir, is_program_installed
@@ -600,7 +600,8 @@ def _start_updater(self):
600600
json.dump(info, f, indent=4)
601601

602602
# Launch updater
603-
cmd = [UPDATER_PATH, "--update-info-file", info_file]
603+
updater_path, __ = get_updater_info()
604+
cmd = [updater_path, "--update-info-file", info_file]
604605
if self.restart_spyder:
605606
cmd.append("--start-spyder")
606607
subprocess.Popen(" ".join(cmd), shell=True)

spyder/plugins/updatemanager/workers.py

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,6 @@
3939

4040
CURRENT_VERSION = parse(__version__)
4141

42-
UPDATER_PATH, UPDATER_VERSION = get_updater_info()
43-
UPDATER_VERSION = parse(UPDATER_VERSION)
44-
4542
CONNECT_ERROR_MSG = _(
4643
'Unable to connect to the Spyder update service.'
4744
'<br><br>Make sure your connection is working properly.'
@@ -208,10 +205,10 @@ def get_asset_info(
208205

209206

210207
def _check_asset_available(
211-
releases: dict[Version, dict], updater: bool = False
208+
releases: dict[Version, dict],
209+
current_version: Version,
210+
updater: bool = False
212211
) -> AssetInfo | None:
213-
current_version = UPDATER_VERSION if updater else CURRENT_VERSION
214-
215212
latest_release = max(releases) if releases else current_version
216213
update_available = current_version < latest_release
217214
asset_info = None
@@ -372,7 +369,7 @@ def _check_update_available(self, release: Version | None = None):
372369
}
373370
logger.debug(f"Available releases: {sorted(releases)}")
374371

375-
self.asset_info = _check_asset_available(releases)
372+
self.asset_info = _check_asset_available(releases, CURRENT_VERSION)
376373

377374
def start(self):
378375
"""Main method of the worker."""
@@ -458,6 +455,8 @@ def __init__(self, stable_only):
458455
self.asset_info = None
459456
self.installer_path = None
460457
self.error = None
458+
__, updater_version = get_updater_info()
459+
self.updater_version = parse(updater_version)
461460

462461
def _check_asset_available(self):
463462
"""Checks if there is an update available for the Updater."""
@@ -472,7 +471,9 @@ def _check_asset_available(self):
472471
}
473472
logger.debug(f"Available releases: {sorted(releases)}")
474473

475-
self.asset_info = _check_asset_available(releases, updater=True)
474+
self.asset_info = _check_asset_available(
475+
releases, self.updater_version, updater=True
476+
)
476477

477478
def _clean_installer_dir(self):
478479
"""Remove downloaded file"""
@@ -533,7 +534,9 @@ def _install_update(self):
533534
spy_updater_conda = glob(osp.join(dirname, "spyder-updater*.conda"))[0]
534535

535536
conda_exe = find_conda()
536-
conda_cmd = "update" if UPDATER_VERSION > parse("0.0.0") else "create"
537+
conda_cmd = "create"
538+
if self.updater_version > parse("0.0.0"):
539+
conda_cmd = "update"
537540
env_path = osp.join(osp.dirname(sys.prefix), "spyder-updater")
538541
cmd = [
539542
# Update spyder-updater environment
@@ -559,9 +562,13 @@ def _install_update(self):
559562

560563
def start(self):
561564
"""Main method of the worker."""
565+
562566
try:
563567
self._check_asset_available()
564-
if self.asset_info is None and UPDATER_VERSION == parse("0.0.0"):
568+
if (
569+
self.asset_info is None
570+
and self.updater_version == parse("0.0.0")
571+
):
565572
raise RuntimeError(
566573
"Spyder-updater is not installed and "
567574
"not available for download!"

0 commit comments

Comments
 (0)