def check_previous_miniconda_folder(self, folder='[M|m]iniconda.*'): """ Checks if a Miniconda related folder exists inside the host project installation folder. Accepts regex. Returns folder name, False otherwise. """ self.log.debug("checking if miniconda install exists") list_dir = os.listdir(self.get_install_folder()) dirlist = [a for a in list_dir if os.path.isdir(a)] self.log.debug("<dirlist>: {}".format("\n".join(dirlist))) mask = re.compile(folder) miniconda_folder = [a for a in dirlist if mask.match(a)] self.log.debug("<miniconda_folder>: {}".format(miniconda_folder)) if miniconda_folder: if len(miniconda_folder) == 1: self.log.debug("returning: {}".format(miniconda_folder[0])) return miniconda_folder[0] else: self.log.info("More than one Miniconda folder found") self.log.info("You may wish to remove them manually") self.log.info(messages.something_wrong) self.log.info(messages.abort) commons.sys_exit() return else: self.log.debug("returning False") return False
def set_env_version(self, env_version): """ Sets Miniconda environment version. Should be integer. """ try: int(env_version) except TypeError as e: self._env_version = None self.log.debug(e) self.log.debug("<env_version>: None") return except ValueError as e: self.log.info( "* ERROR * Python environment version" "should be integer type" ) self.log.info("* ERROR * env version not set") self.log.debug(e) commons.sys_exit() return self._env_version = env_version self.log.debug("<env_version>: {}".format(self._env_version)) return
def unzip_new_version(self): """Unzips new version""" # lists current files/folders in installation folder previous_dirs = set(os.listdir(self.get_install_wd())) self.log.debug("<previous_dirs>: {}".format("\n".join(previous_dirs))) # removes previous .zip from previous updates (if existent) if self.get_new_version_zip() in previous_dirs: info_msg = "* A previous version of {} was found" self.log.info(info_msg.format(self.get_new_version_zip())) self.log.info(" ... removing.") os.remove(self.get_new_version_zip()) self.log.debug("removed") # extracts downloaded .zip file self.log.info("* Unpacking {}".format(self.get_new_version_zip())) self.log.debug("* to ... {}".format(self.get_install_wd())) zip_ref = zipfile.ZipFile(self.get_new_version_zip(), 'r') zip_ref.extractall(self.get_install_wd()) zip_ref.close() # lists files/folders in installation folder new_dirs = set(os.listdir(self.get_install_wd())) self.log.debug("<new_dirs> set: {}".format("\n".join(new_dirs))) # identifies the new folder # expects to find the newly created folder after zip.extractall() new_dirs.difference_update(previous_dirs) self.log.debug("sets diff update: {}".format(new_dirs)) self.log.debug("len new_dirs: {}".format(len(new_dirs))) # only ONE newly created folder can exist if len(new_dirs) == 1: self.set_zip_folder( os.path.join( self.get_install_wd(), "".join(new_dirs) # set does not support indexing ) ) else: self.log.info( "* ERROR * The new zip folder couldn't be identified" ) self.log.info(messages.additional_help) self.log.info(messages.abort) commons.sys_exit() self.log.info(" OKAY\n") time.sleep(0.5) return
def set_env_folder(self, env_folder): """ Defines an existent ENV folder """ if not (os.path.exists(env_folder)): self.log.info( "* ERROR* folder does NOT exists: {}".format(env_folder)) self.log.info(messages.something_wrong) self.log.info(messages.additional_help) self.log.info(messages.abort) commons.sys_exit() self._env_folder = env_folder self.log.debug("<env_folder>: {}".format(self._env_folder)) return
def clean_files(self): """Removes unnecessary files after updating.""" self.log.info("* Cleaning unnecessary files...") self.log.debug("removing: {}".format(self.get_zip_folder())) try: os.rmdir(self.get_zip_folder()) except OSError as e: self.log.info("* WARNNING * zip folder not found.") self.log.debug(e) self.log.info(messages.something_wrong) self.log.info("* continuing...") except TypeError as e: self.log.info( "* WARNNING * zip folder not defined. Nothing to remove" ) self.log.debug(e) self.log.info("* continuing...") except Exception as e: self.log.info("* ERROR * Something strange happened") self.log.debug(e) self.log.info(messages.something_wrong) self.log.info(messages.additional_help) self.log.info(messages.abort) commons.sys_exit() self.log.debug("removing: {}".format(self.get_new_version_zip())) try: os.remove(self.get_new_version_zip()) except FileNotFoundError as e: self.log.info("* ERROR * Couldn't remove new version zip file") self.log.debug(e) self.log.info("* continuing...") except Exception as e: self.log.info("* ERROR * Something strange happened") self.log.debug(e) self.log.info(messages.additional_help) self.log.info(messages.abort) commons.sys_exit() self.log.info(" OKAY\n") time.sleep(0.5) return
def set_conda_exec(self, conda_exec): """ Sets path to Miniconda 'conda' executable. """ if not(os.path.exists(conda_exec)): err_msg = "* ERROR * conda exec file does NOT exist: {}" self.log.info(err_msg.format(conda_exec)) self.log.info(messages.something_wrong) self.log.info(messages.additional_help) self.log.info(messages.abort) commons.sys_exit() self._conda_exec = conda_exec debug_msg = "Miniconda conda bin exec set to: {}" self.log.debug(debug_msg.format(self._conda_exec)) return
def move_new_files(self): """ Moves new files to software's installation directory. """ self.log.info("* Moving new files...") if not(self.get_zip_folder()): self.log.info("* ERROR * Can't move new files.") self.log.info("* ERROR * zip folder not defined.") self.log.info(messages.additional_help) self.log.info(messages.abort) commons.sys_exit() elif not(os.path.exists(self.get_zip_folder())): self.log.info("* ERROR * Can't move new files.") self.log.info("* ERROR * new extract folder does NOT exist") self.log.info(messages.additional_help) self.log.info(messages.abort) commons.sys_exit() source_folder = self.get_zip_folder() self.log.debug("<source_folder>: {}".format(source_folder)) files = os.listdir(source_folder) self.log.debug("files list: {}".format(files)) for f in files: s = os.path.join(source_folder, f) d = os.path.join(self.get_install_wd(), f) self.log.debug("moving '{}' to '{}'".format(s, d)) try: shutil.move(s, d) except Exception as e: self.log.info("* ERROR * Couldn't move {}".format(s)) self.log.debug(e) self.log.info(messages.something_wrong) self.log.info(messages.abort) commons.sys_exit() self.log.info(" OKAY\n") time.sleep(0.5) return
choice = None while not(choice in system.approve) and not(choice in system.deny): choice = user_input(messages.query).strip().upper() log.debug("<choice>: {}".format(choice)) log.debug("Resinstall option chosen: {}".format(choice)) if choice in system.approve: log.info(messages.install_miniconda_proceed) commons.remove_folders([previous_miniconda_folder]) elif choice in system.deny: log.info(messages.reinstall_canceled) log.info(messages.additional_help) log.info(messages.abort) commons.sys_exit() # expect the unexpected else: log.info(messages.something_wrong) log.info(messages.additional_help) log.info(messages.abort) commons.sys_exit() log.info(messages.install_miniconda_proceed) if not(commons.check_available_disk_space()): log.info(messages.not_enough_space) log.info(messages.additional_help) log.info(messages.abort) commons.sys_exit()