def install_dependency(self, dependencyName, version, url, installDirectoryRelPath): savePath = utility.download_file(url, self.download_directory) utility.clear_directory_contents(self.extraction_directory) utility.extract_file(savePath, self.extraction_directory) os.remove(savePath) if self.installedDependencies.is_installed(dependencyName): self.remove_dependency(dependencyName) # not sure wether to add this or not (can cause serious impact) #if os.path.exists(installDirectory): # utility.log("installation directory {i} for dependency {d} already exist, overwriting it...".format(i=installDirectory,d=dependencyName)) # shutil.rmtree(installDirectory) installDirectory = utility.joinPaths(self.dependencies_directory, installDirectoryRelPath) utility.ensure_directory(installDirectory) # if the archive top level contains only one directory,copy its contents(not the directory itself) tempDirContents = [name for name in os.listdir(self.extraction_directory)] if len(tempDirContents) == 1 and os.path.isdir(utility.joinPaths(self.extraction_directory, tempDirContents[0])): dirPath = utility.joinPaths(self.extraction_directory, tempDirContents[0]) utility.move_directory_contents(dirPath, installDirectory) os.rmdir(dirPath) else: utility.move_directory_contents(self.extraction_directory, installDirectory) self.installedDependencies.add_dependency(dependencyName, version, installDirectoryRelPath) return True
def __init__(self, installed_dependencies, base_directory): assert (isinstance(installed_dependencies, InstalledDependencies)) assert (base_directory and os.path.isdir(base_directory)) self.dependencies_directory = base_directory self.download_directory = utility.joinPaths(base_directory, TMPDOWNLOAD_DIR_NAME) self.extraction_directory = utility.joinPaths(self.download_directory, TMPEXTRACTION_DIR_NAME) utility.remove_file_or_dir(self.extraction_directory) utility.remove_file_or_dir(self.download_directory) utility.ensure_directory(self.download_directory) utility.ensure_directory(self.extraction_directory) self.installedDependencies = installed_dependencies
def install_dependency(name, version, dependencyManager, registryClient, repositoryClient): try: packageHandler = registryClient.get_package_details(name) except Exception as e: utility.log(str(e)) return False if not packageHandler.check_version_existence(version): utility.log("package {p} version {v} is not in the ppm registry".format(p=name, v=version)) return False url = packageHandler.get_package_url(version) # check for repository url if repositoryClient: repository_url = repositoryClient.get_package_repository_url(url) if repository_url: url = repository_url parentDirectoryPath = packageHandler.get_package_parentdir(version) directoryName = packageHandler.get_package_dirname(version) installDirectoryRelPath = utility.joinPaths(parentDirectoryPath, directoryName) try: dependencyManager.install_dependency(name, version, url, installDirectoryRelPath) return True except Exception as e: utility.log(str(e)) return False
def get_package_env(self, version): env = self.__get_attribute("env", version) if not env: return parent_package = self.get_package_parentdir(version) dir_name = self.get_package_dirname(version) dir_path = utility.joinPaths(parent_package, dir_name) return [s.replace("${HOME}","${DEPS_HOME}/"+dir_path) for s in list(env)]
def remove_dependency(self, dependencyName): installRelPath = self.installedDependencies.get_installation_path(dependencyName) installLocation = utility.joinPaths(self.dependencies_directory, installRelPath) if os.path.exists(installLocation): try: shutil.rmtree(installLocation) except Exception: raise Exception("Error, can't remove {s}, ensure that you have prermissions and the program is not already running".format(s=installLocation)) else: utility.log("directory {s} does not exist, this should happen only if you have deleted the directory manually, please report the problem otherwise".format(s=installLocation)) self.installedDependencies.remove_dependency(dependencyName)
def cmd_download(args): """ downloading one or more packages without monitoring them""" downloadDirectory = utility.joinPaths(os.getcwd(), args.directory) packages = [('@' in p and p.split('@')) or [p,"latest"] for p in args.packages] utility.ensure_directory(downloadDirectory) registryClient = get_registry_client() if not registryClient: raise Exception("registry server is not set, please set it using set-registry-server command") repositoryClient = get_repository_client() for name, version in packages: try: package_handler = registryClient.get_package_details(name) except Exception as e: utility.log(str(e)) continue if version == 'latest': version = get_latest_version(package_handler.get_package_versions()) if version == '0.0': utility.log("Package {p} is not in the ppm registry".format(p=name)) continue else: version = str(StrictVersion(version)) if not package_handler.check_version_existence(version): utility.log("Package {p} is not in the ppm registry".format(p=name)) continue url = package_handler.get_package_url(version) # check for repository url if repositoryClient: repository_url = repositoryClient.get_package_repository_url(url) if repository_url: url = repository_url utility.download_file(url, downloadDirectory)