From ac4178233b8772f964825f8c8e0c95e23feddcc1 Mon Sep 17 00:00:00 2001 From: Dave Page Date: Fri, 20 Jan 2017 13:21:05 +0000 Subject: [PATCH] Revert "Handle comments on databases with datallowconn=False correctly. Fixes #2024" This reverts commit e431eb9d8ecc28572b39d26c9effcf66f70f6ae1. --- .../servers/databases/__init__.py | 140 ++++++++++-------- 1 file changed, 75 insertions(+), 65 deletions(-) diff --git a/web/pgadmin/browser/server_groups/servers/databases/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/__init__.py index 52ff286c4..53f5b412c 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/__init__.py @@ -134,17 +134,9 @@ class DatabaseView(PGChildNodeView): self.conn = self.manager.connection() elif 'did' in kwargs: self.conn = self.manager.connection(did=kwargs['did']) - - # If connection to database is not allowed then - # provide generic connection - if kwargs['did'] in self.conn.manager.db_info: - self._db = self.conn.manager.db_info[kwargs['did']] - if self._db['datallowconn'] is False: - self.conn = self.manager.connection() else: self.conn = self.manager.connection() - ver = self.manager.version # we will set template path for sql scripts if ver >= 90300: @@ -567,8 +559,8 @@ class DatabaseView(PGChildNodeView): if 'name' not in data: data['name'] = data['old_name'] + status = self.manager.release(did=did) for action in ["rename_database", "tablespace"]: - status = self.manager.release(did=did) SQL = self.get_offline_sql(gid, sid, data, did, action) SQL = SQL.strip('\n').strip(' ') if SQL and SQL != "": @@ -576,6 +568,21 @@ class DatabaseView(PGChildNodeView): if not status: return internal_server_error(errormsg=msg) + if not self.manager.db_info[did]['datallowconn']: + return jsonify( + node=self.blueprint.generate_browser_node( + did, + sid, + data['name'], + "icon-database-not-connected", + connected=False, + allowConn=False + ) + ) + + self.conn = self.manager.connection(database=data['name'], auto_reconnect=True) + status, errmsg = self.conn.connect() + SQL = self.get_online_sql(gid, sid, data, did) SQL = SQL.strip('\n').strip(' ') if SQL and SQL != "": @@ -588,11 +595,7 @@ class DatabaseView(PGChildNodeView): did, sid, data['name'], - "pg-icon-{0}".format(self.node_type) if - self._db['datallowconn'] else - "icon-database-not-connected", - connected=False, - allowConn=False + "pg-icon-{0}".format(self.node_type) ) ) @@ -636,6 +639,7 @@ class DatabaseView(PGChildNodeView): return internal_server_error(errormsg=msg) + return make_json_response(success=1) @check_precondition(action="msql") @@ -689,7 +693,8 @@ class DatabaseView(PGChildNodeView): for action in ["rename_database", "tablespace"]: SQL += self.get_offline_sql(gid, sid, data, did, action) - SQL += self.get_online_sql(gid, sid, data, did) + if rset['rows'][0]['datallowconn']: + SQL += self.get_online_sql(gid, sid, data, did) else: SQL += self.get_new_sql(gid, sid, data, did) @@ -710,30 +715,33 @@ class DatabaseView(PGChildNodeView): acls = [] SQL_acl = '' - try: - acls = render_template( - "/".join([self.template_path, 'allowed_privs.json']) - ) - acls = json.loads(acls, encoding='utf-8') - except Exception as e: - current_app.logger.exception(e) - - # Privileges - for aclcol in acls: - if aclcol in data: - allowedacl = acls[aclcol] - data[aclcol] = parse_priv_to_db( - data[aclcol], allowedacl['acl'] + if ('datallowconn' in data and data['datallowconn']) or \ + 'datallowconn' not in data: + try: + acls = render_template( + "/".join([self.template_path, 'allowed_privs.json']) ) + acls = json.loads(acls, encoding='utf-8') + except Exception as e: + current_app.logger.exception(e) - SQL_acl = render_template( - "/".join([self.template_path, 'grant.sql']), - data=data, conn=self.conn - ) + # Privileges + for aclcol in acls: + if aclcol in data: + allowedacl = acls[aclcol] + data[aclcol] = parse_priv_to_db( + data[aclcol], allowedacl['acl'] + ) + SQL_acl = render_template( + "/".join([self.template_path, 'grant.sql']), + data=data, conn=self.conn + ) + + conn = self.manager.connection() SQL = render_template( "/".join([self.template_path, 'create.sql']), - data=data, conn=self.conn + data=data, conn=conn ) SQL += "\n" SQL += SQL_acl @@ -839,44 +847,46 @@ class DatabaseView(PGChildNodeView): if not status: return internal_server_error(errormsg=res) - SQL = render_template( - "/".join([self.template_path, 'acl.sql']), - did=did, conn=self.conn - ) - status, dataclres = self.conn.execute_dict(SQL) - if not status: - return internal_server_error(errormsg=dataclres) - res = self.formatdbacl(res, dataclres['rows']) + if res['rows'][0]['datallowconn']: + SQL = render_template( + "/".join([self.template_path, 'acl.sql']), + did=did, conn=self.conn + ) + status, dataclres = self.conn.execute_dict(SQL) + if not status: + return internal_server_error(errormsg=dataclres) + res = self.formatdbacl(res, dataclres['rows']) - SQL = render_template( - "/".join([self.template_path, 'defacl.sql']), - did=did, conn=self.conn - ) - status, defaclres = self.conn.execute_dict(SQL) - if not status: - return internal_server_error(errormsg=defaclres) + SQL = render_template( + "/".join([self.template_path, 'defacl.sql']), + did=did, conn=self.conn + ) + status, defaclres = self.conn.execute_dict(SQL) + if not status: + return internal_server_error(errormsg=defaclres) - res = self.formatdbacl(res, defaclres['rows']) + res = self.formatdbacl(res, defaclres['rows']) result = res['rows'][0] - SQL = render_template( - "/".join([self.template_path, 'get_variables.sql']), - did=did, conn=self.conn - ) - status, res1 = self.conn.execute_dict(SQL) - if not status: - return internal_server_error(errormsg=res1) + if result['datallowconn']: + SQL = render_template( + "/".join([self.template_path, 'get_variables.sql']), + did=did, conn=self.conn + ) + status, res1 = self.conn.execute_dict(SQL) + if not status: + return internal_server_error(errormsg=res1) - # Get Formatted Security Labels - if 'seclabels' in result: - # Security Labels is not available for PostgreSQL <= 9.1 - frmtd_sec_labels = parse_sec_labels_from_db(result['seclabels']) - result.update(frmtd_sec_labels) + # Get Formatted Security Labels + if 'seclabels' in result: + # Security Labels is not available for PostgreSQL <= 9.1 + frmtd_sec_labels = parse_sec_labels_from_db(result['seclabels']) + result.update(frmtd_sec_labels) - # Get Formatted Variables - frmtd_variables = parse_variables_from_db(res1['rows']) - result.update(frmtd_variables) + # Get Formatted Variables + frmtd_variables = parse_variables_from_db(res1['rows']) + result.update(frmtd_variables) sql_header = "-- Database: {0}\n\n-- ".format(result['name']) if hasattr(str, 'decode'):