public inbox for [email protected]  
help / color / mirror / Atom feed
From: Murtuza Zabuawala <[email protected]>
To: pgadmin-hackers <[email protected]>
Subject: [pgAdmin4][PATCH] To fix the issue in server group node
Date: Wed, 17 May 2017 12:58:04 +0530
Message-ID: <CAKKotZS_Mo6yZA9X6V0Tsy1zvC9+ZPFAcD12fs+vrC++B_0w0w@mail.gmail.com> (raw)
List-Unsubscribe:  <mailto:[email protected]?body=unsub%20pgadmin-hackers>

Hi,

PFA minor patch to fix the in server group node, If you user creates/update
server group name which is already present in tree then it fails and it
does not provide clear informative error message regarding failure.

Issue found during testing node rename issue :)
RM#2414

--
Regards,
Murtuza Zabuawala
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

diff --git a/web/pgadmin/browser/server_groups/__init__.py b/web/pgadmin/browser/server_groups/__init__.py
index 8d28ec4..e337d85 100644
--- a/web/pgadmin/browser/server_groups/__init__.py
+++ b/web/pgadmin/browser/server_groups/__init__.py
@@ -19,9 +19,9 @@ from flask_security import current_user
 from pgadmin.browser import BrowserPluginModule
 from pgadmin.browser.utils import NodeView
 from pgadmin.utils.ajax import make_json_response, gone, \
-    make_response as ajax_response
+    make_response as ajax_response, bad_request
 from pgadmin.utils.menu import MenuItem
-
+from sqlalchemy import exc
 from pgadmin.model import db, ServerGroup
 
 
@@ -174,6 +174,10 @@ class ServerGroupView(NodeView):
                 if u'name' in data:
                     servergroup.name = data[u'name']
                 db.session.commit()
+            except exc.IntegrityError:
+                return bad_request(gettext(
+                    "The specified server group already exists."
+                ))
             except Exception as e:
                 return make_json_response(
                     status=410, success=0, errormsg=e.message
@@ -220,18 +224,6 @@ class ServerGroupView(NodeView):
         )
         if data[u'name'] != '':
             try:
-                check_sg = ServerGroup.query.filter_by(
-                    user_id=current_user.id,
-                    name=data[u'name']).first()
-
-                # Throw error if server group already exists...
-                if check_sg is not None:
-                    return make_json_response(
-                        status=409,
-                        success=0,
-                        errormsg=gettext('Server group already exists')
-                    )
-
                 sg = ServerGroup(
                     user_id=current_user.id,
                     name=data[u'name'])
@@ -248,9 +240,15 @@ class ServerGroupView(NodeView):
                         "icon-%s" % self.node_type,
                         True,
                         self.node_type,
-                        can_delete=True  # This is user created hence can deleted
+                        # This is user created hence can deleted
+                        can_delete=True
                     )
                 )
+            except exc.IntegrityError:
+                return bad_request(gettext(
+                    "The specified server group already exists."
+                ))
+
             except Exception as e:
                 return make_json_response(
                     status=410,


-- 
Sent via pgadmin-hackers mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgadmin-hackers


Attachments:

  [text/plain] server_group_duplicate_name_issue.diff (2.5K, 3-server_group_duplicate_name_issue.diff)
  download | inline diff:
diff --git a/web/pgadmin/browser/server_groups/__init__.py b/web/pgadmin/browser/server_groups/__init__.py
index 8d28ec4..e337d85 100644
--- a/web/pgadmin/browser/server_groups/__init__.py
+++ b/web/pgadmin/browser/server_groups/__init__.py
@@ -19,9 +19,9 @@ from flask_security import current_user
 from pgadmin.browser import BrowserPluginModule
 from pgadmin.browser.utils import NodeView
 from pgadmin.utils.ajax import make_json_response, gone, \
-    make_response as ajax_response
+    make_response as ajax_response, bad_request
 from pgadmin.utils.menu import MenuItem
-
+from sqlalchemy import exc
 from pgadmin.model import db, ServerGroup
 
 
@@ -174,6 +174,10 @@ class ServerGroupView(NodeView):
                 if u'name' in data:
                     servergroup.name = data[u'name']
                 db.session.commit()
+            except exc.IntegrityError:
+                return bad_request(gettext(
+                    "The specified server group already exists."
+                ))
             except Exception as e:
                 return make_json_response(
                     status=410, success=0, errormsg=e.message
@@ -220,18 +224,6 @@ class ServerGroupView(NodeView):
         )
         if data[u'name'] != '':
             try:
-                check_sg = ServerGroup.query.filter_by(
-                    user_id=current_user.id,
-                    name=data[u'name']).first()
-
-                # Throw error if server group already exists...
-                if check_sg is not None:
-                    return make_json_response(
-                        status=409,
-                        success=0,
-                        errormsg=gettext('Server group already exists')
-                    )
-
                 sg = ServerGroup(
                     user_id=current_user.id,
                     name=data[u'name'])
@@ -248,9 +240,15 @@ class ServerGroupView(NodeView):
                         "icon-%s" % self.node_type,
                         True,
                         self.node_type,
-                        can_delete=True  # This is user created hence can deleted
+                        # This is user created hence can deleted
+                        can_delete=True
                     )
                 )
+            except exc.IntegrityError:
+                return bad_request(gettext(
+                    "The specified server group already exists."
+                ))
+
             except Exception as e:
                 return make_json_response(
                     status=410,


view thread (2+ messages)  latest in thread

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: [email protected]
  Cc: [email protected]
  Subject: Re: [pgAdmin4][PATCH] To fix the issue in server group node
  In-Reply-To: <CAKKotZS_Mo6yZA9X6V0Tsy1zvC9+ZPFAcD12fs+vrC++B_0w0w@mail.gmail.com>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

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