From 8f610a8def97f4eeb8299508e168afcf313197f7 Mon Sep 17 00:00:00 2001
From: Alessandro De Maria <a.demaria@synthace.com>
Date: Thu, 25 Feb 2021 16:21:25 +0000
Subject: [PATCH 1/2] 6270: add --replace flag

---
 web/setup.py | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 50 insertions(+)

diff --git a/web/setup.py b/web/setup.py
index 20ce6563b3..86e61fc77b 100644
--- a/web/setup.py
+++ b/web/setup.py
@@ -397,6 +397,51 @@ def setup_db():
         if os.name != 'nt':
             os.chmod(config.SQLITE_PATH, 0o600)
 
+def clear_servers():
+    """Clear groups and servers configurations.
+
+    Args:
+        args (ArgParser): The parsed command line options
+    """
+
+    # What user?
+    load_user = args.user if args.user is not None else config.DESKTOP_USER
+
+    # And the sqlite path
+    if args.sqlite_path is not None:
+        config.SQLITE_PATH = args.sqlite_path
+
+    app = create_app(config.APP_NAME + '-cli')
+    with app.app_context():
+        user = User.query.filter_by(email=load_user).first()
+
+        if user is None:
+            print("The specified user ID (%s) could not be found." %
+                  load_user)
+            sys.exit(1)
+
+        user_id = user.id
+
+        # Remove all servers
+        servers = Server.query.filter_by(user_id=user_id)
+        for server in servers:
+            db.session.delete(server)
+
+        # Remove all groups
+        groups = ServerGroup.query.filter_by(user_id=user_id)
+        for group in groups:
+            db.session.delete(group)
+        servers = Server.query.filter_by(user_id=user_id)
+        
+        for server in servers:
+            db.session.delete(server)
+
+        try:
+            db.session.commit()
+        except Exception as e:
+            print("Error clearing server configuration")
+
+
 
 if __name__ == '__main__':
     # Configuration settings
@@ -415,7 +460,10 @@ if __name__ == '__main__':
     imp_group = parser.add_argument_group('Load server config')
     imp_group.add_argument('--load-servers', metavar="INPUT_FILE",
                            help='Load servers into the DB', required=False)
+    imp_group.add_argument('--replace', dest='replace', action='store_true',
+                           help='replace server configurations', required=False)
 
+    imp_group.set_defaults(replace=False)
     # Common args
     parser.add_argument('--sqlite-path', metavar="PATH",
                         help='Dump/load with the specified pgAdmin config DB'
@@ -442,6 +490,8 @@ if __name__ == '__main__':
             print(str(e))
     elif args.load_servers is not None:
         try:
+            if args.replace:
+                clear_servers()
             load_servers(args)
         except Exception as e:
             print(str(e))
-- 
2.24.3 (Apple Git-128)

