From 2ce8e655273afed872d82f7e1ede6059f8a906d1 Mon Sep 17 00:00:00 2001 From: Leet <36166244+L33Tech@users.noreply.github.com> Date: Thu, 23 Sep 2021 11:34:38 -0400 Subject: [PATCH] Only initialize and teardown driver if actually needed (#5313) * Fix #5312 * Update setup.py * put db actions under one if statement * check backend type and improve displayed message * accept format fix Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com> * fix whitespace Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com> * separate datapath delete from data delete * Fix indentation * Call `driver_cls.initialize()` outside try-finally * Backup requires db server to run too + some simplifications Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com> --- redbot/setup.py | 42 ++++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/redbot/setup.py b/redbot/setup.py index 454b2bbe7..fecf94dbd 100644 --- a/redbot/setup.py +++ b/redbot/setup.py @@ -248,39 +248,41 @@ async def remove_instance( remove_datapath: Optional[bool] = None, ): data_manager.load_basic_configuration(instance) + backend = get_current_backend(instance) if interactive is True and delete_data is None: - delete_data = click.confirm( - "Would you like to delete this instance's data?", default=False - ) + msg = "Would you like to delete this instance's data?" + if backend != BackendType.JSON: + msg += " The database server must be running for this to work." + delete_data = click.confirm(msg, default=False) if interactive is True and _create_backup is None: - _create_backup = click.confirm( - "Would you like to make a backup of the data for this instance?", default=False - ) + msg = "Would you like to make a backup of the data for this instance?" + if backend != BackendType.JSON: + msg += " The database server must be running for this to work." + _create_backup = click.confirm(msg, default=False) if _create_backup is True: await create_backup(instance) - backend = get_current_backend(instance) driver_cls = drivers.get_driver_class(backend) - await driver_cls.initialize(**data_manager.storage_details()) - try: - if delete_data is True: + if delete_data is True: + await driver_cls.initialize(**data_manager.storage_details()) + try: await driver_cls.delete_all_data(interactive=interactive, drop_db=drop_db) + finally: + await driver_cls.teardown() - if interactive is True and remove_datapath is None: - remove_datapath = click.confirm( - "Would you like to delete the instance's entire datapath?", default=False - ) + if interactive is True and remove_datapath is None: + remove_datapath = click.confirm( + "Would you like to delete the instance's entire datapath?", default=False + ) - if remove_datapath is True: - data_path = data_manager.core_data_path().parent - safe_delete(data_path) + if remove_datapath is True: + data_path = data_manager.core_data_path().parent + safe_delete(data_path) - save_config(instance, {}, remove=True) - finally: - await driver_cls.teardown() + save_config(instance, {}, remove=True) print("The instance {} has been removed\n".format(instance))