def _install_plugin_zip(self, plugin_name, plugin_data, update=False): # zipped module from download zip_plugin = plugin_name + '.zip' dst = os.path.join(self.plugins_directory, zip_plugin) if update: dst += _UPDATE_SUFFIX if os.path.isfile(dst): os.remove(dst) with tempfile.NamedTemporaryFile(dir=self.plugins_directory) as zipfile: zipfile.write(plugin_data) zipfile.flush() os.fsync(zipfile.fileno()) os.link(zipfile.name, dst) log.debug("Plugin (zipped) saved to %r", dst)
def _install_plugin_zip(self, plugin_name, plugin_data, update=False): # zipped module from download zip_plugin = plugin_name + '.zip' dst = os.path.join(self.plugins_directory, zip_plugin) if update: dst += _UPDATE_SUFFIX if os.path.isfile(dst): os.remove(dst) with tempfile.NamedTemporaryFile( dir=self.plugins_directory) as zipfile: zipfile.write(plugin_data) zipfile.flush() os.fsync(zipfile.fileno()) os.link(zipfile.name, dst) log.debug("Plugin (zipped) saved to %r", dst)
def install_plugin(self, path, action, overwrite_confirm=None, plugin_name=None, plugin_data=None): """ path is either: 1) /some/dir/name.py 2) /some/dir/name (directory containing __init__.py) 3) /some/dir/name.zip (containing either 1 or 2) """ zip_plugin = False if not plugin_name: zip_plugin = is_zip(path) if not zip_plugin: plugin_name = _plugin_name_from_path(path) else: plugin_name = os.path.splitext(zip_plugin)[0] if plugin_name: try: if plugin_data and plugin_name: # zipped module from download zip_plugin = plugin_name + '.zip' dst = os.path.join(USER_PLUGIN_DIR, zip_plugin) if action == PLUGIN_ACTION_UPDATE: dst += '.update' if os.path.isfile(dst): os.remove(dst) ziptmp = tempfile.NamedTemporaryFile( delete=False, dir=USER_PLUGIN_DIR).name try: with open(ziptmp, "wb") as zipfile: zipfile.write(plugin_data) zipfile.flush() os.fsync(zipfile.fileno()) os.rename(ziptmp, dst) log.debug("Plugin saved to %r", dst) except: try: os.remove(ziptmp) except (IOError, OSError): pass raise elif os.path.isfile(path): dst = os.path.join(USER_PLUGIN_DIR, os.path.basename(path)) if action == PLUGIN_ACTION_UPDATE: dst += '.update' if os.path.isfile(dst): os.remove(dst) shutil.copy2(path, dst) elif os.path.isdir(path): dst = os.path.join(USER_PLUGIN_DIR, plugin_name) if action == PLUGIN_ACTION_UPDATE: dst += '.update' if os.path.isdir(dst): shutil.rmtree(dst) shutil.copytree(path, dst) if action != PLUGIN_ACTION_UPDATE: installed_plugin = self.load_plugin( zip_plugin or plugin_name, USER_PLUGIN_DIR) if installed_plugin is not None: self.plugin_installed.emit(installed_plugin, False) else: self.plugin_updated.emit(plugin_name, False) except (OSError, IOError): log.warning("Unable to copy %s to plugin folder %s" % (path, USER_PLUGIN_DIR))
def install_plugin(self, path, update=False, overwrite_confirm=None, plugin_name=None, plugin_data=None): """ path is either: 1) /some/dir/name.py 2) /some/dir/name (directory containing __init__.py) 3) /some/dir/name.zip (containing either 1 or 2) """ zip_plugin = False if not plugin_name: zip_plugin = is_zip(path) if not zip_plugin: plugin_name = _plugin_name_from_path(path) else: plugin_name = os.path.splitext(zip_plugin)[0] if plugin_name: try: if plugin_data and plugin_name: # zipped module from download zip_plugin = plugin_name + '.zip' dst = os.path.join(USER_PLUGIN_DIR, zip_plugin) if update: dst += '.update' if os.path.isfile(dst): os.remove(dst) ziptmp = tempfile.NamedTemporaryFile(delete=False, dir=USER_PLUGIN_DIR).name try: with open(ziptmp, "wb") as zipfile: zipfile.write(plugin_data) zipfile.flush() os.fsync(zipfile.fileno()) os.rename(ziptmp, dst) log.debug("Plugin saved to %r", dst) except BaseException: try: os.remove(ziptmp) except (IOError, OSError): pass raise elif os.path.isfile(path): dst = os.path.join(USER_PLUGIN_DIR, os.path.basename(path)) if update: dst += '.update' if os.path.isfile(dst): os.remove(dst) shutil.copy2(path, dst) elif os.path.isdir(path): dst = os.path.join(USER_PLUGIN_DIR, plugin_name) if update: dst += '.update' if os.path.isdir(dst): shutil.rmtree(dst) shutil.copytree(path, dst) if not update: try: installed_plugin = self.load_plugin(zip_plugin or plugin_name, USER_PLUGIN_DIR) except Exception as e: log.error('Unable to load plugin: %s.\nError occured: %s', plugin_name, e) installed_plugin = None if installed_plugin is not None: self.plugin_installed.emit(installed_plugin, False) else: self.plugin_updated.emit(plugin_name, False) except (OSError, IOError): log.warning("Unable to copy %s to plugin folder %s" % (path, USER_PLUGIN_DIR))