Example #1
0
 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)
Example #2
0
 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)
Example #3
0
 def file_write(data):
     zipfile.write(data)
     global pbar
     pbar += len(data)
     zipfile.flush()
     print("\r%3.2f %%" % (pbar * 100.0 / size), end='')
Example #4
0
    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))
Example #5
0
File: plugin.py Project: zas/picard
    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))