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}".'