예제 #1
0
 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
예제 #2
0
 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
예제 #3
0
 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
예제 #4
0
    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
예제 #5
0
    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
예제 #6
0
 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
예제 #7
0
 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()