def _check_version(self): """ Checks if conda search has a newer version of MSS """ # Don't notify on updates if mss is in a git repo, as you are most likely a developer try: git = subprocess.run(["git", "rev-parse", "--is-inside-work-tree"], startupinfo=subprocess_startupinfo(), stdout=subprocess.PIPE, stderr=subprocess.STDOUT, encoding="utf8") if "true" in git.stdout: self.is_git_env = True except FileNotFoundError: pass # Return if conda is not installed try: subprocess.run(["conda"], startupinfo=subprocess_startupinfo(), stdout=subprocess.PIPE, stderr=subprocess.STDOUT) except FileNotFoundError: return self.on_status_update.emit("Checking for updates...") # Check if "search mss" yields a higher version than the currently running one search = self._execute_command(f"{self.command} search mss") self.new_version = search.split("\n")[-2].split()[1] c_list = self._execute_command(f"{self.command} list -f mss") self.old_version = c_list.split("\n")[-2].split()[1] if any(c.isdigit() for c in self.new_version): if self.new_version > self.old_version: self.on_status_update.emit("Your version of MSS is outdated!") self.on_update_available.emit(self.old_version, self.new_version) else: self.on_status_update.emit("Your MSS is up to date.")
def _execute_command(self, command): """ Handles proper execution of conda subprocesses and logging """ process = subprocess.Popen(command.split(), startupinfo=subprocess_startupinfo(), stdout=subprocess.PIPE, stderr=subprocess.STDOUT, encoding="utf8") self.on_log_update.emit(" ".join(process.args) + "\n") text = "" for line in process.stdout: self.on_log_update.emit(line) text += line # Happens e.g. on connection errors during installation attempts if "An unexpected error has occurred. Conda has prepared the above report" in text: raise RuntimeError("Something went wrong! Can't safely continue to update.") else: return text
def __init__(self, parent=None): super(Updater, self).__init__(parent) self.is_git_env = False self.new_version = None self.old_version = None self.command = "conda" # Check if mamba is installed try: subprocess.run(["mamba"], startupinfo=subprocess_startupinfo(), stdout=subprocess.PIPE, stderr=subprocess.STDOUT) self.command = "mamba" except FileNotFoundError: pass # pyqtSignals don't work without an application eventloop running if QtCore.QCoreApplication.startingUp(): self.on_update_available = NonQtCallback() self.on_update_finished = NonQtCallback() self.on_log_update = NonQtCallback() self.on_status_update = NonQtCallback()