public inbox for [email protected]  
help / color / mirror / Atom feed
Feature 6270: Allow for --load-servers to replace current server list
4+ messages / 2 participants
[nested] [flat]

* Feature 6270: Allow for --load-servers to replace current server list
@ 2021-02-25 16:36  Alessandro De Maria <[email protected]>
  0 siblings, 1 reply; 4+ messages in thread

From: Alessandro De Maria @ 2021-02-25 16:36 UTC (permalink / raw)
  To: [email protected]

Hello,

I have created a patch for the issue I raised earlier:

https://redmine.postgresql.org/issues/6270

I apologise I have never sent git patches before, and I could not find any
specific documentation of how you expect to receive contributions.

Regards
Alessandro

-- 
Alessandro De Maria
[email protected]


Attachments:

  [application/octet-stream] 0001-6270-add-replace-flag.patch (2.8K, 3-0001-6270-add-replace-flag.patch)
  download | inline diff:
From 07c5b10b1e178336768dc174fb3bdb0d84779cf3 Mon Sep 17 00:00:00 2001
From: Alessandro De Maria <[email protected]>
Date: Thu, 25 Feb 2021 16:21:25 +0000
Subject: [PATCH] 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)



^ permalink  raw  reply  [nested|flat] 4+ messages in thread

* Re: Feature 6270: Allow for --load-servers to replace current server list
@ 2021-02-26 09:25  Akshay Joshi <[email protected]>
  parent: Alessandro De Maria <[email protected]>
  0 siblings, 1 reply; 4+ messages in thread

From: Akshay Joshi @ 2021-02-26 09:25 UTC (permalink / raw)
  To: Alessandro De Maria <[email protected]>; +Cc: pgadmin-hackers <[email protected]>

Hi Alessandro

Patch looks good to me. Please fix the following issues:

   - Fix the PEP8 issue.
   - Documentation needs to be updated with this new flag. Please update
   "docs-> en_Us -> import_export_servers.rst" file.


On Thu, Feb 25, 2021 at 10:06 PM Alessandro De Maria <
[email protected]> wrote:

> Hello,
>
> I have created a patch for the issue I raised earlier:
>
> https://redmine.postgresql.org/issues/6270
>
> I apologise I have never sent git patches before, and I could not find any
> specific documentation of how you expect to receive contributions.
>
> Regards
> Alessandro
>
> --
> Alessandro De Maria
> [email protected]
>


-- 
*Thanks & Regards*
*Akshay Joshi*
*pgAdmin Hacker | Principal Software Architect*
*EDB Postgres <http://edbpostgres.com>*

*Mobile: +91 976-788-8246*


^ permalink  raw  reply  [nested|flat] 4+ messages in thread

* Re: Feature 6270: Allow for --load-servers to replace current server list
@ 2021-03-01 11:12  Alessandro De Maria <[email protected]>
  parent: Akshay Joshi <[email protected]>
  0 siblings, 1 reply; 4+ messages in thread

From: Alessandro De Maria @ 2021-03-01 11:12 UTC (permalink / raw)
  To: Akshay Joshi <[email protected]>; +Cc: pgadmin-hackers <[email protected]>

Hey Akshay,

Thank you for the suggestions, here are the patches.

Regards
Alessandro

On Fri, 26 Feb 2021 at 09:25, Akshay Joshi <[email protected]>
wrote:

> Hi Alessandro
>
> Patch looks good to me. Please fix the following issues:
>
>    - Fix the PEP8 issue.
>    - Documentation needs to be updated with this new flag. Please update
>    "docs-> en_Us -> import_export_servers.rst" file.
>
>
> On Thu, Feb 25, 2021 at 10:06 PM Alessandro De Maria <
> [email protected]> wrote:
>
>> Hello,
>>
>> I have created a patch for the issue I raised earlier:
>>
>> https://redmine.postgresql.org/issues/6270
>>
>> I apologise I have never sent git patches before, and I could not find
>> any specific documentation of how you expect to receive contributions.
>>
>> Regards
>> Alessandro
>>
>> --
>> Alessandro De Maria
>> [email protected]
>>
>
>
> --
> *Thanks & Regards*
> *Akshay Joshi*
> *pgAdmin Hacker | Principal Software Architect*
> *EDB Postgres <http://edbpostgres.com>*
>
> *Mobile: +91 976-788-8246*
>


-- 
Alessandro De Maria
[email protected]


Attachments:

  [application/octet-stream] 0002-Address-comments-on-pep8-and-documentation.patch (2.8K, 3-0002-Address-comments-on-pep8-and-documentation.patch)
  download | inline diff:
From d462c833d2f3e664a7480363bae13e33a352cd0c Mon Sep 17 00:00:00 2001
From: Alessandro De Maria <[email protected]>
Date: Mon, 1 Mar 2021 11:09:39 +0000
Subject: [PATCH 2/2] Address comments on pep8 and documentation

---
 docs/en_US/import_export_servers.rst |  3 +++
 web/setup.py                         | 11 +++++------
 2 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/docs/en_US/import_export_servers.rst b/docs/en_US/import_export_servers.rst
index 1e05f9617b..175a544cf4 100644
--- a/docs/en_US/import_export_servers.rst
+++ b/docs/en_US/import_export_servers.rst
@@ -57,6 +57,9 @@ path) of the JSON file containing the server definitions. Servers will be owned
 by the desktop mode user ([email protected] by default - see the DESKTOP_USER
 setting in ``config.py``). This can be overridden with the ``--user`` command
 line option. There can be multiple configuations of pgAdmin on the same system.
+The default behaviour is for the imported servers to be added to the existent list,
+which might lead to duplicates. This can be overridden with the ``--replace`` command
+line option, which will replace the list of servers with the newly imported one.
 To load the servers into a specific pgAdmin config DB file, ``--sqlite-path`` option
 can be used. It is also recommended to use this option when running pgAdmin in
 desktop mode. By default SQLITE_PATH setting in ``config.py`` is taken. For example:
diff --git a/web/setup.py b/web/setup.py
index 86e61fc77b..37d8345f4f 100644
--- a/web/setup.py
+++ b/web/setup.py
@@ -10,6 +10,9 @@
 """Perform the initial setup of the application, by creating the auth
 and settings database."""
 
+from pgadmin.model import db, User, Version, ServerGroup, Server, \
+    SCHEMA_VERSION as CURRENT_SCHEMA_VERSION
+from pgadmin import create_app
 import argparse
 import json
 import os
@@ -28,10 +31,6 @@ root = os.path.dirname(os.path.realpath(__file__))
 if sys.path[0] != root:
     sys.path.insert(0, root)
 
-from pgadmin import create_app
-from pgadmin.model import db, User, Version, ServerGroup, Server, \
-    SCHEMA_VERSION as CURRENT_SCHEMA_VERSION
-
 
 def add_value(attr_dict, key, value):
     """Add a value to the attribute dict if non-empty.
@@ -397,6 +396,7 @@ def setup_db():
         if os.name != 'nt':
             os.chmod(config.SQLITE_PATH, 0o600)
 
+
 def clear_servers():
     """Clear groups and servers configurations.
 
@@ -432,7 +432,7 @@ def clear_servers():
         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)
 
@@ -442,7 +442,6 @@ def clear_servers():
             print("Error clearing server configuration")
 
 
-
 if __name__ == '__main__':
     # Configuration settings
     import config
-- 
2.24.3 (Apple Git-128)



  [application/octet-stream] 0001-6270-add-replace-flag.patch (2.8K, 4-0001-6270-add-replace-flag.patch)
  download | inline diff:
From 8f610a8def97f4eeb8299508e168afcf313197f7 Mon Sep 17 00:00:00 2001
From: Alessandro De Maria <[email protected]>
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)



^ permalink  raw  reply  [nested|flat] 4+ messages in thread

* Re: Feature 6270: Allow for --load-servers to replace current server list
@ 2021-03-01 12:30  Akshay Joshi <[email protected]>
  parent: Alessandro De Maria <[email protected]>
  0 siblings, 0 replies; 4+ messages in thread

From: Akshay Joshi @ 2021-03-01 12:30 UTC (permalink / raw)
  To: Alessandro De Maria <[email protected]>; +Cc: pgadmin-hackers <[email protected]>

Thanks, patch applied.

On Mon, Mar 1, 2021 at 4:42 PM Alessandro De Maria <
[email protected]> wrote:

> Hey Akshay,
>
> Thank you for the suggestions, here are the patches.
>
> Regards
> Alessandro
>
> On Fri, 26 Feb 2021 at 09:25, Akshay Joshi <[email protected]>
> wrote:
>
>> Hi Alessandro
>>
>> Patch looks good to me. Please fix the following issues:
>>
>>    - Fix the PEP8 issue.
>>    - Documentation needs to be updated with this new flag. Please update
>>    "docs-> en_Us -> import_export_servers.rst" file.
>>
>>
>> On Thu, Feb 25, 2021 at 10:06 PM Alessandro De Maria <
>> [email protected]> wrote:
>>
>>> Hello,
>>>
>>> I have created a patch for the issue I raised earlier:
>>>
>>> https://redmine.postgresql.org/issues/6270
>>>
>>> I apologise I have never sent git patches before, and I could not find
>>> any specific documentation of how you expect to receive contributions.
>>>
>>> Regards
>>> Alessandro
>>>
>>> --
>>> Alessandro De Maria
>>> [email protected]
>>>
>>
>>
>> --
>> *Thanks & Regards*
>> *Akshay Joshi*
>> *pgAdmin Hacker | Principal Software Architect*
>> *EDB Postgres <http://edbpostgres.com>*
>>
>> *Mobile: +91 976-788-8246*
>>
>
>
> --
> Alessandro De Maria
> [email protected]
>


-- 
*Thanks & Regards*
*Akshay Joshi*
*pgAdmin Hacker | Principal Software Architect*
*EDB Postgres <http://edbpostgres.com>*

*Mobile: +91 976-788-8246*


^ permalink  raw  reply  [nested|flat] 4+ messages in thread


end of thread, other threads:[~2021-03-01 12:30 UTC | newest]

Thread overview: 4+ messages (download: mbox mbox.gz follow: Atom feed)
-- links below jump to the message on this page --
2021-02-25 16:36 Feature 6270: Allow for --load-servers to replace current server list Alessandro De Maria <[email protected]>
2021-02-26 09:25 ` Akshay Joshi <[email protected]>
2021-03-01 11:12   ` Alessandro De Maria <[email protected]>
2021-03-01 12:30     ` Akshay Joshi <[email protected]>

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox