diff --git a/web/pgadmin/browser/__init__.py b/web/pgadmin/browser/__init__.py index b1f2b5d92..ebeb0eab4 100644 --- a/web/pgadmin/browser/__init__.py +++ b/web/pgadmin/browser/__init__.py @@ -57,6 +57,18 @@ except ImportError as e: from flask_security.views import _render_json as default_render_json MODULE_NAME = 'browser' +BROWSER_STATIC = 'browser.static' +JQUERY_ACIPLUGIN = 'jquery.aciplugin' +BROWSER_INDEX = 'browser.index' +PGADMIN_NODE = 'pgadmin.node.%s' +PGADMIN_BROWSER = 'pgAdmin.Browser' +APP_JS = 'application/javascript' +SMTP_SOCKET_ERROR = u'SMTP Socket error: {}\n' \ + u'Your password has not been changed.' +SMTP_ERROR = u'SMTP error: {}\n' \ + u'Your password has not been changed.' +PASS_ERROR = u'Error: {}\n' \ + u'Your password has not been changed.' class BrowserModule(PgAdminModule): @@ -77,7 +89,7 @@ class BrowserModule(PgAdminModule): ('static', 'vendor/codemirror/addon/dialog/dialog.css'), ('static', context_menu_file), ('static', wcdocker_file), - ('browser.static', 'vendor/aciTree/css/aciTree.css') + (BROWSER_STATIC, 'vendor/aciTree/css/aciTree.css') ]: stylesheets.append(url_for(endpoint, filename=filename)) return stylesheets @@ -119,9 +131,9 @@ class BrowserModule(PgAdminModule): 'preloaded': True }) scripts.append({ - 'name': 'jquery.aciplugin', + 'name': JQUERY_ACIPLUGIN, 'path': url_for( - 'browser.static', + BROWSER_STATIC, filename='vendor/aciTree/jquery.aciPlugin.min' ), 'deps': ['jquery'], @@ -131,21 +143,21 @@ class BrowserModule(PgAdminModule): scripts.append({ 'name': 'jquery.acitree', 'path': url_for( - 'browser.static', + BROWSER_STATIC, filename='vendor/aciTree/jquery.aciTree' if current_app.debug else 'vendor/aciTree/jquery.aciTree.min' ), - 'deps': ['jquery', 'jquery.aciplugin'], + 'deps': ['jquery', JQUERY_ACIPLUGIN], 'exports': 'aciPluginClass.plugins.aciTree', 'preloaded': True }) scripts.append({ 'name': 'jquery.acisortable', 'path': url_for( - 'browser.static', + BROWSER_STATIC, filename='vendor/aciTree/jquery.aciSortable.min' ), - 'deps': ['jquery', 'jquery.aciplugin'], + 'deps': ['jquery', JQUERY_ACIPLUGIN], 'exports': 'aciPluginClass.plugins.aciSortable', 'when': None, 'preloaded': True @@ -153,10 +165,10 @@ class BrowserModule(PgAdminModule): scripts.append({ 'name': 'jquery.acifragment', 'path': url_for( - 'browser.static', + BROWSER_STATIC, filename='vendor/aciTree/jquery.aciFragment.min' ), - 'deps': ['jquery', 'jquery.aciplugin'], + 'deps': ['jquery', JQUERY_ACIPLUGIN], 'exports': 'aciPluginClass.plugins.aciFragment', 'when': None, 'preloaded': True @@ -175,7 +187,7 @@ class BrowserModule(PgAdminModule): scripts.append({ 'name': 'pgadmin.browser.datamodel', - 'path': url_for('browser.static', filename='js/datamodel'), + 'path': url_for(BROWSER_STATIC, filename='js/datamodel'), 'preloaded': True }) @@ -186,7 +198,7 @@ class BrowserModule(PgAdminModule): ]: scripts.append({ 'name': name, - 'path': url_for('browser.index') + script, + 'path': url_for(BROWSER_INDEX) + script, 'preloaded': True }) @@ -197,7 +209,7 @@ class BrowserModule(PgAdminModule): ]: scripts.append({ 'name': name, - 'path': url_for('browser.index') + script, + 'path': url_for(BROWSER_INDEX) + script, 'preloaded': True, 'deps': ['pgadmin.browser.datamodel'] }) @@ -208,12 +220,12 @@ class BrowserModule(PgAdminModule): ['pgadmin.browser.frame', 'js/frame'] ]: scripts.append({ - 'name': name, 'path': url_for('browser.static', filename=end), + 'name': name, 'path': url_for(BROWSER_STATIC, filename=end), 'preloaded': True}) scripts.append({ 'name': 'pgadmin.browser.node.ui', - 'path': url_for('browser.static', filename='js/node.ui'), + 'path': url_for(BROWSER_STATIC, filename='js/node.ui'), 'when': 'server_group' }) @@ -226,26 +238,26 @@ class BrowserModule(PgAdminModule): 'file_items': [ MenuItem( name='mnu_locklayout', - module='pgAdmin.Browser', + module=PGADMIN_BROWSER, label=gettext('Lock Layout'), priority=999, menu_items=[MenuItem( name='mnu_lock_none', - module='pgAdmin.Browser', + module=PGADMIN_BROWSER, callback='mnu_lock_none', priority=0, label=gettext('None'), checked=True ), MenuItem( name='mnu_lock_docking', - module='pgAdmin.Browser', + module=PGADMIN_BROWSER, callback='mnu_lock_docking', priority=1, label=gettext('Prevent Docking'), checked=False ), MenuItem( name='mnu_lock_full', - module='pgAdmin.Browser', + module=PGADMIN_BROWSER, callback='mnu_lock_full', priority=2, label=gettext('Full Lock'), @@ -263,7 +275,7 @@ class BrowserModule(PgAdminModule): Returns: list: a list of url endpoints exposed to the client. """ - return ['browser.index', 'browser.nodes', + return [BROWSER_INDEX, 'browser.nodes', 'browser.check_master_password', 'browser.set_master_password', 'browser.reset_master_password', @@ -358,15 +370,14 @@ class BrowserPluginModule(PgAdminModule): if self.module_use_template_javascript: scripts.extend([{ - 'name': 'pgadmin.node.%s' % self.node_type, - 'path': url_for('browser.index') + - '%s/module' % self.node_type, + 'name': PGADMIN_NODE % self.node_type, + 'path': url_for(BROWSER_INDEX) + '%s/module' % self.node_type, 'when': self.script_load, 'is_template': True }]) else: scripts.extend([{ - 'name': 'pgadmin.node.%s' % self.node_type, + 'name': PGADMIN_NODE % self.node_type, 'path': url_for( '%s.static' % self.name, filename=('js/%s' % self.node_type) @@ -412,7 +423,7 @@ class BrowserPluginModule(PgAdminModule): "_type": node_type, "_id": node_id, "_pid": parent_id, - "module": 'pgadmin.node.%s' % node_type + "module": PGADMIN_NODE % node_type } for key in kwargs: obj.setdefault(key, kwargs[key]) @@ -527,7 +538,7 @@ class BrowserPluginModule(PgAdminModule): def _get_logout_url(): return '{0}?next={1}'.format( - url_for('security.logout'), url_for('browser.index')) + url_for('security.logout'), url_for(BROWSER_INDEX)) @blueprint.route("/") @@ -737,7 +748,7 @@ def utils(): support_ssh_tunnel=config.SUPPORT_SSH_TUNNEL, logout_url=_get_logout_url() ), - 200, {'Content-Type': 'application/javascript'}) + 200, {'Content-Type': APP_JS}) @blueprint.route("/js/endpoints.js") @@ -745,7 +756,7 @@ def utils(): def exposed_urls(): return make_response( render_template('browser/js/endpoints.js'), - 200, {'Content-Type': 'application/javascript'} + 200, {'Content-Type': APP_JS} ) @@ -755,7 +766,7 @@ def exposed_urls(): def error_js(): return make_response( render_template('browser/js/error.js', _=gettext), - 200, {'Content-Type': 'application/javascript'}) + 200, {'Content-Type': APP_JS}) @blueprint.route("/js/messages.js") @@ -763,7 +774,7 @@ def error_js(): def messages_js(): return make_response( render_template('browser/js/messages.js', _=gettext), - 200, {'Content-Type': 'application/javascript'}) + 200, {'Content-Type': APP_JS}) @blueprint.route("/browser.css") @@ -969,9 +980,7 @@ if hasattr(config, 'SECURITY_CHANGEABLE') and config.SECURITY_CHANGEABLE: except SOCKETErrorException as e: # Handle socket errors which are not covered by SMTPExceptions. logging.exception(str(e), exc_info=True) - flash(gettext(u'SMTP Socket error: {}\n' - u'Your password has not been changed.' - ).format(e), + flash(gettext(SMTP_SOCKET_ERROR).format(e), 'danger') has_error = True except (SMTPConnectError, SMTPResponseException, @@ -980,19 +989,14 @@ if hasattr(config, 'SECURITY_CHANGEABLE') and config.SECURITY_CHANGEABLE: SMTPRecipientsRefused) as e: # Handle smtp specific exceptions. logging.exception(str(e), exc_info=True) - flash(gettext(u'SMTP error: {}\n' - u'Your password has not been changed.' - ).format(e), + flash(gettext(SMTP_ERROR).format(e), 'danger') has_error = True except Exception as e: # Handle other exceptions. logging.exception(str(e), exc_info=True) flash( - gettext( - u'Error: {}\n' - u'Your password has not been changed.' - ).format(e), + gettext(PASS_ERROR).format(e), 'danger' ) has_error = True @@ -1078,9 +1082,7 @@ if hasattr(config, 'SECURITY_RECOVERABLE') and config.SECURITY_RECOVERABLE: # Handle socket errors which are not # covered by SMTPExceptions. logging.exception(str(e), exc_info=True) - flash(gettext(u'SMTP Socket error: {}\n' - u'Your password has not been changed.' - ).format(e), + flash(gettext(SMTP_SOCKET_ERROR).format(e), 'danger') has_error = True except (SMTPConnectError, SMTPResponseException, @@ -1090,17 +1092,13 @@ if hasattr(config, 'SECURITY_RECOVERABLE') and config.SECURITY_RECOVERABLE: # Handle smtp specific exceptions. logging.exception(str(e), exc_info=True) - flash(gettext(u'SMTP error: {}\n' - u'Your password has not been changed.' - ).format(e), + flash(gettext(SMTP_ERROR).format(e), 'danger') has_error = True except Exception as e: # Handle other exceptions. logging.exception(str(e), exc_info=True) - flash(gettext(u'Error: {}\n' - u'Your password has not been changed.' - ).format(e), + flash(gettext(PASS_ERROR).format(e), 'danger') has_error = True @@ -1149,9 +1147,7 @@ if hasattr(config, 'SECURITY_RECOVERABLE') and config.SECURITY_RECOVERABLE: except SOCKETErrorException as e: # Handle socket errors which are not covered by SMTPExceptions. logging.exception(str(e), exc_info=True) - flash(gettext(u'SMTP Socket error: {}\n' - u'Your password has not been changed.' - ).format(e), + flash(gettext(SMTP_SOCKET_ERROR).format(e), 'danger') has_error = True except (SMTPConnectError, SMTPResponseException, @@ -1161,17 +1157,13 @@ if hasattr(config, 'SECURITY_RECOVERABLE') and config.SECURITY_RECOVERABLE: # Handle smtp specific exceptions. logging.exception(str(e), exc_info=True) - flash(gettext(u'SMTP error: {}\n' - u'Your password has not been changed.' - ).format(e), + flash(gettext(SMTP_ERROR).format(e), 'danger') has_error = True except Exception as e: # Handle other exceptions. logging.exception(str(e), exc_info=True) - flash(gettext(u'Error: {}\n' - u'Your password has not been changed.' - ).format(e), + flash(gettext(PASS_ERROR).format(e), 'danger') has_error = True diff --git a/web/pgadmin/browser/collection.py b/web/pgadmin/browser/collection.py index 6c1633451..1cecb3f4c 100644 --- a/web/pgadmin/browser/collection.py +++ b/web/pgadmin/browser/collection.py @@ -17,6 +17,8 @@ from pgadmin.browser.utils import PGChildModule from pgadmin.utils import PgAdminModule from pgadmin.utils.preferences import Preferences +PGADMIN_NODE = 'pgadmin.node.%s' + @six.add_metaclass(ABCMeta) class CollectionNodeModule(PgAdminModule, PGChildModule): @@ -58,15 +60,15 @@ class CollectionNodeModule(PgAdminModule, PGChildModule): if self.module_use_template_javascript: scripts.extend([{ - 'name': 'pgadmin.node.%s' % self.node_type, - 'path': url_for('browser.index') + - '%s/module' % self.node_type, + 'name': PGADMIN_NODE % self.node_type, + 'path': url_for('browser.index' + ) + '%s/module' % self.node_type, 'when': self.script_load, 'is_template': True }]) else: scripts.extend([{ - 'name': 'pgadmin.node.%s' % self.node_type, + 'name': PGADMIN_NODE % self.node_type, 'path': url_for( '%s.static' % self.name, filename=('js/%s' % self.node_type) @@ -93,7 +95,7 @@ class CollectionNodeModule(PgAdminModule, PGChildModule): "_type": self.node_type, "_id": node_id, "_pid": parent_id, - "module": 'pgadmin.node.%s' % self.node_type + "module": PGADMIN_NODE % self.node_type } for key in kwargs: obj.setdefault(key, kwargs[key]) @@ -108,7 +110,7 @@ class CollectionNodeModule(PgAdminModule, PGChildModule): "_type": 'coll-%s' % (self.node_type), "_id": parent_id, "_pid": parent_id, - "module": 'pgadmin.node.%s' % self.node_type, + "module": PGADMIN_NODE % self.node_type, "nodes": [self.node_type] } diff --git a/web/pgadmin/browser/register_browser_preferences.py b/web/pgadmin/browser/register_browser_preferences.py index 2857fc7cd..5d6451aa0 100644 --- a/web/pgadmin/browser/register_browser_preferences.py +++ b/web/pgadmin/browser/register_browser_preferences.py @@ -13,6 +13,7 @@ LOCK_LAYOUT_LEVEL = { 'FULL': 'full', 'NONE': 'none' } +KEYBOARD_SHORTCUTS = 'Keyboard shortcuts' def register_browser_preferences(self): @@ -125,7 +126,7 @@ def register_browser_preferences(self): 'control': False, 'key': {'key_code': 66, 'char': 'b'} }, - category_label=gettext('Keyboard shortcuts'), + category_label=gettext(KEYBOARD_SHORTCUTS), fields=fields ) @@ -140,7 +141,7 @@ def register_browser_preferences(self): 'control': False, 'key': {'key_code': 91, 'char': '['} }, - category_label=gettext('Keyboard shortcuts'), + category_label=gettext(KEYBOARD_SHORTCUTS), fields=fields ) @@ -155,7 +156,7 @@ def register_browser_preferences(self): 'control': False, 'key': {'key_code': 93, 'char': ']'} }, - category_label=gettext('Keyboard shortcuts'), + category_label=gettext(KEYBOARD_SHORTCUTS), fields=fields ) @@ -170,7 +171,7 @@ def register_browser_preferences(self): 'control': False, 'key': {'key_code': 70, 'char': 'f'} }, - category_label=gettext('Keyboard shortcuts'), + category_label=gettext(KEYBOARD_SHORTCUTS), fields=fields ) @@ -185,7 +186,7 @@ def register_browser_preferences(self): 'control': False, 'key': {'key_code': 79, 'char': 'o'} }, - category_label=gettext('Keyboard shortcuts'), + category_label=gettext(KEYBOARD_SHORTCUTS), fields=fields ) @@ -200,7 +201,7 @@ def register_browser_preferences(self): 'control': False, 'key': {'key_code': 76, 'char': 'l'} }, - category_label=gettext('Keyboard shortcuts'), + category_label=gettext(KEYBOARD_SHORTCUTS), fields=fields ) @@ -215,7 +216,7 @@ def register_browser_preferences(self): 'control': False, 'key': {'key_code': 72, 'char': 'h'} }, - category_label=gettext('Keyboard shortcuts'), + category_label=gettext(KEYBOARD_SHORTCUTS), fields=fields ) @@ -230,7 +231,7 @@ def register_browser_preferences(self): 'control': False, 'key': {'key_code': 81, 'char': 'q'} }, - category_label=gettext('Keyboard shortcuts'), + category_label=gettext(KEYBOARD_SHORTCUTS), fields=fields ) @@ -245,7 +246,7 @@ def register_browser_preferences(self): 'control': False, 'key': {'key_code': 86, 'char': 'v'} }, - category_label=gettext('Keyboard shortcuts'), + category_label=gettext(KEYBOARD_SHORTCUTS), fields=fields ) @@ -260,7 +261,7 @@ def register_browser_preferences(self): 'control': False, 'key': {'key_code': 83, 'char': 's'} }, - category_label=gettext('Keyboard shortcuts'), + category_label=gettext(KEYBOARD_SHORTCUTS), fields=fields ) @@ -275,7 +276,7 @@ def register_browser_preferences(self): 'control': False, 'key': {'key_code': 78, 'char': 'n'} }, - category_label=gettext('Keyboard shortcuts'), + category_label=gettext(KEYBOARD_SHORTCUTS), fields=fields ) @@ -290,7 +291,7 @@ def register_browser_preferences(self): 'control': False, 'key': {'key_code': 69, 'char': 'e'} }, - category_label=gettext('Keyboard shortcuts'), + category_label=gettext(KEYBOARD_SHORTCUTS), fields=fields ) @@ -305,7 +306,7 @@ def register_browser_preferences(self): 'control': False, 'key': {'key_code': 68, 'char': 'd'} }, - category_label=gettext('Keyboard shortcuts'), + category_label=gettext(KEYBOARD_SHORTCUTS), fields=fields ) @@ -320,7 +321,7 @@ def register_browser_preferences(self): 'control': False, 'key': {'key_code': 77, 'char': 'm'} }, - category_label=gettext('Keyboard shortcuts'), + category_label=gettext(KEYBOARD_SHORTCUTS), fields=fields ) @@ -335,7 +336,7 @@ def register_browser_preferences(self): 'control': False, 'key': {'key_code': 85, 'char': 'u'} }, - category_label=gettext('Keyboard shortcuts'), + category_label=gettext(KEYBOARD_SHORTCUTS), fields=fields ) @@ -350,7 +351,7 @@ def register_browser_preferences(self): 'control': False, 'key': {'key_code': 67, 'char': 'c'} }, - category_label=gettext('Keyboard shortcuts'), + category_label=gettext(KEYBOARD_SHORTCUTS), fields=fields ) @@ -365,7 +366,7 @@ def register_browser_preferences(self): 'control': False, 'key': {'key_code': 71, 'char': 'g'} }, - category_label=gettext('Keyboard shortcuts'), + category_label=gettext(KEYBOARD_SHORTCUTS), fields=fields ) @@ -380,7 +381,7 @@ def register_browser_preferences(self): 'control': True, 'key': {'key_code': 93, 'char': ']'} }, - category_label=gettext('Keyboard shortcuts'), + category_label=gettext(KEYBOARD_SHORTCUTS), fields=fields ) @@ -395,7 +396,7 @@ def register_browser_preferences(self): 'control': True, 'key': {'key_code': 91, 'char': '['} }, - category_label=gettext('Keyboard shortcuts'), + category_label=gettext(KEYBOARD_SHORTCUTS), fields=fields ) @@ -410,7 +411,7 @@ def register_browser_preferences(self): 'control': False, 'key': {'key_code': 116, 'char': 'F5'} }, - category_label=gettext('Keyboard shortcuts'), + category_label=gettext(KEYBOARD_SHORTCUTS), fields=fields ) @@ -425,6 +426,6 @@ def register_browser_preferences(self): 'control': True, 'key': {'key_code': 65, 'char': 'a'} }, - category_label=gettext('Keyboard shortcuts'), + category_label=gettext(KEYBOARD_SHORTCUTS), fields=fields ) diff --git a/web/pgadmin/browser/server_groups/__init__.py b/web/pgadmin/browser/server_groups/__init__.py index b9733f845..3b741c2b8 100644 --- a/web/pgadmin/browser/server_groups/__init__.py +++ b/web/pgadmin/browser/server_groups/__init__.py @@ -25,8 +25,12 @@ from sqlalchemy import exc from pgadmin.model import db, ServerGroup +SG_NOT_FOUND_ERROR = 'The specified server group could not be found.' + + class ServerGroupModule(BrowserPluginModule): _NODE_TYPE = "server_group" + node_icon = "icon-%s" % _NODE_TYPE def get_nodes(self, *arg, **kwargs): """Return a JSON document listing the server groups for the user""" @@ -37,7 +41,7 @@ class ServerGroupModule(BrowserPluginModule): yield self.generate_browser_node( "%d" % (group.id), None, group.name, - "icon-%s" % self.node_type, + self.node_icon, True, self.node_type, can_delete=True if idx > 0 else False @@ -92,6 +96,8 @@ blueprint = ServerGroupModule(__name__) class ServerGroupView(NodeView): node_type = ServerGroupModule._NODE_TYPE + node_icon = ServerGroupModule.node_icon + node_label = "Server Group" parent_ids = [] ids = [{'type': 'int', 'id': 'gid'}] @@ -136,9 +142,7 @@ class ServerGroupView(NodeView): return make_json_response( status=410, success=0, - errormsg=gettext( - 'The specified server group could not be found.' - ) + errormsg=gettext(SG_NOT_FOUND_ERROR) ) else: try: @@ -169,9 +173,7 @@ class ServerGroupView(NodeView): return make_json_response( status=417, success=0, - errormsg=gettext( - 'The specified server group could not be found.' - ) + errormsg=gettext(SG_NOT_FOUND_ERROR) ) else: try: @@ -194,7 +196,7 @@ class ServerGroupView(NodeView): gid, None, servergroup.name, - "icon-%s" % self.node_type, + self.node_icon, True, self.node_type, can_delete=True # This is user created hence can deleted @@ -214,9 +216,7 @@ class ServerGroupView(NodeView): return make_json_response( status=410, success=0, - errormsg=gettext( - 'The specified server group could not be found.' - ) + errormsg=gettext(SG_NOT_FOUND_ERROR) ) else: return ajax_response( @@ -246,7 +246,7 @@ class ServerGroupView(NodeView): "%d" % sg.id, None, sg.name, - "icon-%s" % self.node_type, + self.node_icon, True, self.node_type, # This is user created hence can deleted @@ -306,7 +306,7 @@ class ServerGroupView(NodeView): "%d" % group.id, None, group.name, - "icon-%s" % self.node_type, + self.node_icon, True, self.node_type ) @@ -322,7 +322,7 @@ class ServerGroupView(NodeView): nodes = self.blueprint.generate_browser_node( "%d" % (group.id), None, group.name, - "icon-%s" % self.node_type, + self.node_icon, True, self.node_type ) diff --git a/web/pgadmin/browser/server_groups/servers/__init__.py b/web/pgadmin/browser/server_groups/servers/__init__.py index 870da543b..b53422680 100644 --- a/web/pgadmin/browser/server_groups/servers/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/__init__.py @@ -31,6 +31,8 @@ from pgadmin.utils.exception import CryptKeyMissing from pgadmin.tools.schema_diff.node_registry import SchemaDiffRegistry from psycopg2 import Error as psycopg2_Error, OperationalError +UNAUTH_REQ = "Unauthorized request." + def has_any(data, keys): """ @@ -240,6 +242,7 @@ blueprint = ServerModule(__name__) class ServerNode(PGChildNodeView): node_type = ServerModule._NODE_TYPE + node_label = "Server" parent_ids = [{'type': 'int', 'id': 'gid'}] ids = [{'type': 'int', 'id': 'sid'}] @@ -471,7 +474,7 @@ class ServerNode(PGChildNodeView): return make_json_response( status=410, success=0, - errormsg=gettext("Could not find the required server.") + errormsg=self.not_found_error ) # Not all parameters can be modified, while the server is connected @@ -658,7 +661,7 @@ class ServerNode(PGChildNodeView): return make_json_response( status=410, success=0, - errormsg=gettext("Could not find the required server.") + errormsg=self.not_found_error ) sg = ServerGroup.query.filter_by( @@ -1006,15 +1009,15 @@ class ServerNode(PGChildNodeView): # Fetch Server Details server = Server.query.filter_by(id=sid).first() if server is None: - return bad_request(gettext("Server not found.")) + return bad_request(self.not_found_error) if current_user and hasattr(current_user, 'id'): # Fetch User Details. user = User.query.filter_by(id=current_user.id).first() if user is None: - return unauthorized(gettext("Unauthorized request.")) + return unauthorized(gettext(UNAUTH_REQ)) else: - return unauthorized(gettext("Unauthorized request.")) + return unauthorized(gettext(UNAUTH_REQ)) data = request.form if request.form else json.loads( request.data, encoding='utf-8' @@ -1181,7 +1184,7 @@ class ServerNode(PGChildNodeView): server = Server.query.filter_by(id=sid).first() if server is None: - return bad_request(gettext("Server not found.")) + return bad_request(self.not_found_error) # Release Connection manager = get_driver(PG_DEFAULT_DRIVER).connection_manager(sid) @@ -1289,12 +1292,12 @@ class ServerNode(PGChildNodeView): # Fetch Server Details server = Server.query.filter_by(id=sid).first() if server is None: - return bad_request(gettext("Server not found.")) + return bad_request(self.not_found_error) # Fetch User Details. user = User.query.filter_by(id=current_user.id).first() if user is None: - return unauthorized(gettext("Unauthorized request.")) + return unauthorized(gettext(UNAUTH_REQ)) manager = get_driver(PG_DEFAULT_DRIVER).connection_manager(sid) conn = manager.connection() @@ -1409,7 +1412,7 @@ class ServerNode(PGChildNodeView): if server is None: return make_json_response( success=0, - errormsg=gettext("Could not find the required server.") + errormsg=self.not_found_error ) try: @@ -1493,7 +1496,7 @@ class ServerNode(PGChildNodeView): if server is None: return make_json_response( success=0, - errormsg=gettext("Could not find the required server.") + errormsg=self.not_found_error ) try: @@ -1568,7 +1571,7 @@ class ServerNode(PGChildNodeView): if server is None: return make_json_response( success=0, - info=gettext("Could not find the required server.") + info=self.not_found_error ) setattr(server, 'password', None) @@ -1607,7 +1610,7 @@ class ServerNode(PGChildNodeView): if server is None: return make_json_response( success=0, - info=gettext("Could not find the required server.") + info=self.not_found_error ) setattr(server, 'tunnel_password', None) diff --git a/web/pgadmin/browser/server_groups/servers/databases/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/__init__.py index 6c6472583..b7e1bed95 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/__init__.py @@ -373,7 +373,7 @@ class DatabaseView(PGChildNodeView): status=200 ) - return gone(errormsg=_("Could not find the database on the server.")) + return gone(errormsg=self.not_found_error) @check_precondition(action="properties") def properties(self, gid, sid, did): @@ -388,9 +388,7 @@ class DatabaseView(PGChildNodeView): return internal_server_error(errormsg=res) if len(res['rows']) == 0: - return gone( - _("Could not find the database on the server.") - ) + return gone(self.not_found_error) SQL = render_template( "/".join([self.template_path, self._ACL_SQL]), @@ -793,9 +791,7 @@ class DatabaseView(PGChildNodeView): return internal_server_error(errormsg=rset) if len(rset['rows']) == 0: - return gone( - _("Could not find the database on the server.") - ) + return gone(self.not_found_error) res = rset['rows'][0] @@ -924,9 +920,7 @@ class DatabaseView(PGChildNodeView): return False, internal_server_error(errormsg=rset) if len(rset['rows']) == 0: - return gone( - _("Could not find the database on the server.") - ) + return gone(self.not_found_error) data['old_name'] = (rset['rows'][0])['name'] if 'name' not in data: @@ -1095,9 +1089,7 @@ class DatabaseView(PGChildNodeView): return internal_server_error(errormsg=res) if len(res['rows']) == 0: - return gone( - _("Could not find the database on the server.") - ) + return gone(self.not_found_error) SQL = render_template( "/".join([self.template_path, self._ACL_SQL]), diff --git a/web/pgadmin/browser/server_groups/servers/databases/casts/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/casts/__init__.py index 30640662a..492cdcda5 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/casts/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/casts/__init__.py @@ -147,6 +147,7 @@ class CastView(PGChildNodeView): """ node_type = blueprint.node_type + node_label = "Cast" parent_ids = [ {'type': 'int', 'id': 'gid'}, diff --git a/web/pgadmin/browser/server_groups/servers/databases/event_triggers/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/event_triggers/__init__.py index 035901726..847c9b07b 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/event_triggers/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/event_triggers/__init__.py @@ -147,6 +147,7 @@ class EventTriggerView(PGChildNodeView): """ node_type = blueprint.node_type + node_icon = "icon-%s" % blueprint.node_type parent_ids = [ {'type': 'int', 'id': 'gid'}, @@ -254,7 +255,7 @@ class EventTriggerView(PGChildNodeView): row['oid'], did, row['name'], - icon="icon-%s" % self.node_type + icon=self.node_icon )) return make_json_response( @@ -288,7 +289,7 @@ class EventTriggerView(PGChildNodeView): row['oid'], did, row['name'], - icon="icon-%s" % self.node_type + icon=self.node_icon ), status=200 ) @@ -415,7 +416,7 @@ class EventTriggerView(PGChildNodeView): etid, did, data['name'], - icon="icon-%s" % self.node_type + icon=self.node_icon ) ) except Exception as e: @@ -462,7 +463,7 @@ class EventTriggerView(PGChildNodeView): etid, did, data['name'], - icon="icon-%s" % self.node_type + icon=self.node_icon ) ) else: diff --git a/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/__init__.py index 9607c670d..a86e1fcf7 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/__init__.py @@ -161,6 +161,7 @@ class ForeignServerView(PGChildNodeView): """ node_type = blueprint.node_type + node_label = "Foreign Server" parent_ids = [ {'type': 'int', 'id': 'gid'}, @@ -338,9 +339,7 @@ class ForeignServerView(PGChildNodeView): return internal_server_error(errormsg=res) if len(res['rows']) == 0: - return gone( - gettext("Could not find the foreign server information.") - ) + return gone(self.not_found_error) res['rows'][0]['is_sys_obj'] = ( res['rows'][0]['fsrvid'] <= self.datlastsysoid) @@ -619,9 +618,7 @@ class ForeignServerView(PGChildNodeView): if not status: return internal_server_error(errormsg=res) if len(res['rows']) == 0: - return gone( - gettext("Could not find the foreign server information.") - ) + return gone(self.not_found_error) if res['rows'][0]['fsrvoptions'] is not None: res['rows'][0]['fsrvoptions'] = tokenize_options( @@ -724,9 +721,7 @@ class ForeignServerView(PGChildNodeView): if not status: return internal_server_error(errormsg=res) if len(res['rows']) == 0: - return gone( - gettext("Could not find the foreign server information.") - ) + return gone(self.not_found_error) is_valid_options = False if res['rows'][0]['fsrvoptions'] is not None: diff --git a/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/user_mappings/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/user_mappings/__init__.py index fcec41f2f..eb5e52162 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/user_mappings/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/user_mappings/__init__.py @@ -177,6 +177,7 @@ class UserMappingView(PGChildNodeView): """ node_type = blueprint.node_type + node_label = "User Mapping" parent_ids = [ {'type': 'int', 'id': 'gid'}, @@ -356,9 +357,7 @@ class UserMappingView(PGChildNodeView): return internal_server_error(errormsg=res) if len(res['rows']) == 0: - return gone( - gettext("Could not find the user mapping information.") - ) + return gone(self.not_found_error) res['rows'][0]['is_sys_obj'] = ( res['rows'][0]['um_oid'] <= self.datlastsysoid) @@ -633,9 +632,7 @@ class UserMappingView(PGChildNodeView): if not status: return internal_server_error(errormsg=res) if len(res['rows']) == 0: - return gone( - gettext("Could not find the user mapping information.") - ) + return gone(self.not_found_error) if res['rows'][0]['umoptions'] is not None: res['rows'][0]['umoptions'] = tokenize_options( @@ -728,9 +725,7 @@ class UserMappingView(PGChildNodeView): if not status: return internal_server_error(errormsg=res) if len(res['rows']) == 0: - return gone( - gettext("Could not find the user mapping information.") - ) + return gone(self.not_found_error) is_valid_options = False if res['rows'][0]['umoptions'] is not None: diff --git a/web/pgadmin/browser/utils.py b/web/pgadmin/browser/utils.py index d14c8cf5c..544d52635 100644 --- a/web/pgadmin/browser/utils.py +++ b/web/pgadmin/browser/utils.py @@ -221,6 +221,8 @@ class NodeView(with_metaclass(MethodViewType, View)): # Inherited class needs to modify these parameters node_type = None + # Inherited class needs to modify these parameters + node_label = None # This must be an array object with attributes (type and id) parent_ids = [] # This must be an array object with attributes (type and id) @@ -686,3 +688,8 @@ class PGChildNodeView(NodeView): ) return dependency + + @property + def not_found_error(self): + return gettext("Could not find the specified {}.".format( + self.node_label.lower()))