Source code for errbot.core_plugins.backup

import os

from errbot import BotPlugin, botcmd


[docs]class Backup(BotPlugin): """Backup related commands."""
[docs] @botcmd(admin_only=True) def backup(self, msg, args): """Backup everything. Makes a backup script called backup.py in the data bot directory. You can restore the backup from the command line with errbot --restore """ filename = os.path.join(self.bot_config.BOT_DATA_DIR, "backup.py") with open(filename, "w") as f: f.write( "## This file is not executable on its own. use errbot -r FILE to restore your bot.\n\n" ) f.write('log.info("Restoring repo_manager.")\n') for key, value in self._bot.repo_manager.items(): f.write('bot.repo_manager["' + key + '"] = ' + repr(value) + "\n") f.write('log.info("Restoring plugin_manager.")\n') for ( key, value, ) in ( self._bot.plugin_manager.items() ): # don't mimic that in real plugins, this is core only. f.write('bot.plugin_manager["' + key + '"] = ' + repr(value) + "\n") f.write('log.info("Installing plugins.")\n') f.write('if "installed_repos" in bot.repo_manager:\n') f.write(' for repo in bot.repo_manager["installed_repos"]:\n') f.write(" log.error(bot.repo_manager.install_repo(repo))\n") f.write('log.info("Restoring plugins data.")\n') f.write( "bot.plugin_manager.update_plugin_places(bot.repo_manager.get_all_repos_paths())\n" ) for plugin in self._bot.plugin_manager.plugins.values(): if plugin._store: f.write( 'pobj = bot.plugin_manager.plugins["' + plugin.name + '"]\n' ) f.write("pobj.init_storage()\n") for key, value in plugin.items(): f.write('pobj["' + key + '"] = ' + repr(value) + "\n") f.write("pobj.close_storage()\n") return f'The backup file has been written in "{filename}".'