def install_extension(self, extension_path): """Install the extension from the file or directory extension_path""" self.logger.log("Request to install '%s'" % extension_path) if os.path.isfile(extension_path): # it is a file. if it ends with .zip, assume it is a zip archive. # otherwise assume it is a tarball. extension_dir = None member_names = [] try: if extension_path[-4:] == '.zip': member_names = weecfg.extract_zip(extension_path, self.tmpdir, self.logger) else: member_names = weecfg.extract_tar(extension_path, self.tmpdir, self.logger) extension_reldir = os.path.commonprefix(member_names) if extension_reldir == '': raise InstallError( "Unable to install from '%s': no common path " "(the extension archive contains more than a " "single root directory)" % extension_path) extension_dir = os.path.join(self.tmpdir, extension_reldir) self.install_from_dir(extension_dir) finally: if extension_dir: shutil.rmtree(extension_dir, ignore_errors=True) elif os.path.isdir(extension_path): # It's a directory, presumably containing the extension components. # Install directly self.install_from_dir(extension_path) else: raise InstallError("Extension '%s' not found." % extension_path) self.logger.log("Finished installing extension '%s'" % extension_path)
def install_extension(self, extension_path): """Install the extension from the file or directory extension_path""" self.logger.log("Request to install '%s'" % extension_path) if os.path.isfile(extension_path): # it is a file. if it ends with .zip, assume it is a zip archive. # otherwise assume it is a tarball. extension_dir = None member_names = [] try: if extension_path[-4:] == '.zip': member_names = weecfg.extract_zip(extension_path, self.tmpdir, self.logger) else: member_names = weecfg.extract_tar(extension_path, self.tmpdir, self.logger) extension_reldir = os.path.commonprefix(member_names) if extension_reldir == '': raise InstallError("Unable to install from '%s': no common path (the extension archive contains more than a single root directory)" % extension_path) extension_dir = os.path.join(self.tmpdir, extension_reldir) self.install_from_dir(extension_dir) finally: if extension_dir: shutil.rmtree(extension_dir, ignore_errors=True) elif os.path.isdir(extension_path): # It's a directory, presumably containing the extension components. # Install directly self.install_from_dir(extension_path) else: raise InstallError("Extension '%s' not found." % extension_path) self.logger.log("Finished installing extension '%s'" % extension_path)