diff --git a/web/pgAdmin4.py b/web/pgAdmin4.py index ce7f1f39d..fdab437ba 100644 --- a/web/pgAdmin4.py +++ b/web/pgAdmin4.py @@ -32,20 +32,20 @@ if config.SERVER_MODE is True: local_config = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'config_local.py') if not os.path.isfile(local_config): - print "The configuration file %s does not exist.\n" % local_config - print "Before running this application, ensure that config_local.py has been created" - print "and sets values for SECRET_KEY, SECURITY_PASSWORD_SALT and CSRF_SESSION_KEY" - print "at bare minimum. See config.py for more information and a complete list of" - print "settings. Exiting..." + print("The configuration file %s does not exist.\n" % local_config) + print("Before running this application, ensure that config_local.py has been created") + print("and sets values for SECRET_KEY, SECURITY_PASSWORD_SALT and CSRF_SESSION_KEY") + print("at bare minimum. See config.py for more information and a complete list of") + print("settings. Exiting...") sys.exit(1) # Check if the database exists. If it does not, tell the user and exit. if not os.path.isfile(config.SQLITE_PATH): - print "The configuration database %s does not exist.\n" \ - % config.SQLITE_PATH - print "Please run 'python %s' to create it.\nExiting..." % os.path.join( + print("The configuration database %s does not exist.\n" \ + % config.SQLITE_PATH) + print("Please run 'python %s' to create it.\nExiting..." % os.path.join( os.path.dirname(os.path.realpath(__file__)), 'setup.py' - ) + )) sys.exit(1) ########################################################################## diff --git a/web/pgadmin/__init__.py b/web/pgadmin/__init__.py index d0e4df1ca..0b5273504 100644 --- a/web/pgadmin/__init__.py +++ b/web/pgadmin/__init__.py @@ -16,7 +16,7 @@ from flask.ext.security import Security, SQLAlchemyUserDatastore from flask_security.utils import login_user from flask_mail import Mail from htmlmin.minify import html_minify -from settings.settings_model import db, Role, User, Version +from pgadmin.settings.settings_model import db, Role, User, Version from importlib import import_module from werkzeug.local import LocalProxy from pgadmin.utils import PgAdminModule, driver @@ -40,9 +40,9 @@ class PgAdmin(Flask): continue self.logger.info('Examining potential module: %s' % module_name) module = import_module(module_name) - for key, value in module.__dict__.items(): - if isinstance(value, PgAdminModule): - yield value + for key in list(module.__dict__.keys()): + if isinstance(module.__dict__[key], PgAdminModule): + yield module.__dict__[key] @property def submodules(self): diff --git a/web/pgadmin/browser/__init__.py b/web/pgadmin/browser/__init__.py index 5d9e02b3c..876e93224 100644 --- a/web/pgadmin/browser/__init__.py +++ b/web/pgadmin/browser/__init__.py @@ -16,10 +16,10 @@ from flask.ext.security import login_required from flask.ext.login import current_user from flask.ext.babel import gettext from flaskext.gravatar import Gravatar +import six MODULE_NAME = 'browser' - class BrowserModule(PgAdminModule): def get_own_stylesheets(self): @@ -136,20 +136,18 @@ class BrowserModule(PgAdminModule): for module in self.submodules: scripts.extend(module.get_own_javascripts()) - return scripts blueprint = BrowserModule(MODULE_NAME, __name__) - +@six.add_metaclass(ABCMeta) class BrowserPluginModule(PgAdminModule): """ Base class for browser submodules. """ browser_url_prefix = blueprint.url_prefix + '/' - __metaclass__ = ABCMeta def __init__(self, import_name, **kwargs): kwargs.setdefault("url_prefix", self.node_path) @@ -178,7 +176,6 @@ class BrowserPluginModule(PgAdminModule): for module in self.submodules: scripts.extend(module.get_own_javascripts()) - return scripts def generate_browser_node( @@ -213,7 +210,6 @@ class BrowserPluginModule(PgAdminModule): for submodule in self.submodules: snippets.extend(submodule.csssnippets) - return snippets @abstractmethod diff --git a/web/pgadmin/browser/server_groups/__init__.py b/web/pgadmin/browser/server_groups/__init__.py index 3afcd7e1f..5ecfd3d7d 100644 --- a/web/pgadmin/browser/server_groups/__init__.py +++ b/web/pgadmin/browser/server_groups/__init__.py @@ -21,7 +21,7 @@ from pgadmin.browser import BrowserPluginModule from pgadmin.utils.menu import MenuItem from pgadmin.settings.settings_model import db, ServerGroup from pgadmin.browser.utils import NodeView - +import six class ServerGroupModule(BrowserPluginModule): @@ -55,13 +55,12 @@ class ServerGroupMenuItem(MenuItem): kwargs.setdefault("type", ServerGroupModule.NODE_TYPE) super(ServerGroupMenuItem, self).__init__(**kwargs) - +@six.add_metaclass(ABCMeta) class ServerGroupPluginModule(BrowserPluginModule): """ Base class for server group plugins. """ - __metaclass__ = ABCMeta @abstractmethod def get_nodes(self, *arg, **kwargs): @@ -119,7 +118,7 @@ class ServerGroupView(NodeView): user_id=current_user.id, id=gid).first() - data = request.form if request.form else json.loads(request.data) + data = request.form if request.form else json.loads(request.data.decode()) if servergroup is None: return make_json_response( @@ -165,8 +164,7 @@ class ServerGroupView(NodeView): ) def create(self): - data = request.form if request.form else json.loads(request.data) - + data = request.form if request.form else json.loads(request.data.decode()) if data[u'name'] != '': try: sg = ServerGroup( @@ -177,7 +175,7 @@ class ServerGroupView(NodeView): data[u'id'] = sg.id data[u'name'] = sg.name - + return jsonify( node=self.blueprint.generate_browser_node( "%d" % (sg.id), diff --git a/web/pgadmin/browser/server_groups/servers/__init__.py b/web/pgadmin/browser/server_groups/servers/__init__.py index ba4eca84a..db56dbdf3 100644 --- a/web/pgadmin/browser/server_groups/servers/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/__init__.py @@ -22,7 +22,7 @@ import pgadmin.browser.server_groups as sg from pgadmin.utils.crypto import encrypt, decrypt from pgadmin.browser import BrowserPluginModule from config import PG_DEFAULT_DRIVER - +import six class ServerModule(sg.ServerGroupPluginModule): NODE_TYPE = "server" @@ -90,13 +90,12 @@ class ServerMenuItem(MenuItem): blueprint = ServerModule(__name__) - +@six.add_metaclass(ABCMeta) class ServerTypeModule(BrowserPluginModule): """ Base class for different server types. """ - __metaclass__ = ABCMeta @abstractproperty def type(self): @@ -381,7 +380,7 @@ class ServerNode(NodeView): u'role' ] - data = request.form if request.form else json.loads(request.data) + data = request.form if request.form else json.loads(request.data.decode()) for arg in required_args: if arg not in data: @@ -577,7 +576,10 @@ class ServerNode(NodeView): # TODO:: # Ask the password again (if existing password couldn't be # descrypted) - return internal_server_error(errormsg=e.message) + if e.message: + return internal_server_error(errormsg=e.message) + else: + return internal_server_error(errormsg=str(e)) if not status: current_app.logger.error( diff --git a/web/pgadmin/browser/utils.py b/web/pgadmin/browser/utils.py index 87b125d16..89e2ff03a 100644 --- a/web/pgadmin/browser/utils.py +++ b/web/pgadmin/browser/utils.py @@ -14,16 +14,16 @@ from collections import OrderedDict import flask from flask.views import View, MethodViewType, with_metaclass from flask.ext.babel import gettext +import six from config import PG_DEFAULT_DRIVER from pgadmin.browser import PgAdminModule from pgadmin.utils.ajax import make_json_response - +@six.add_metaclass(ABCMeta) class NodeAttr(object): """ """ - __metaclass__ = ABCMeta @abstractmethod def validate(self, mode, value): diff --git a/web/pgadmin/settings/__init__.py b/web/pgadmin/settings/__init__.py index 7d6ac731d..99359b318 100644 --- a/web/pgadmin/settings/__init__.py +++ b/web/pgadmin/settings/__init__.py @@ -13,7 +13,7 @@ from flask import current_app from flask.ext.login import current_user from flask.ext.sqlalchemy import SQLAlchemy -from settings_model import db, Setting +from .settings_model import db, Setting import traceback from flask import Blueprint, Response, abort, request, render_template from flask.ext.security import login_required diff --git a/web/pgadmin/utils/crypto.py b/web/pgadmin/utils/crypto.py index dff06864a..efe5905ae 100644 --- a/web/pgadmin/utils/crypto.py +++ b/web/pgadmin/utils/crypto.py @@ -12,7 +12,7 @@ from Crypto.Cipher import AES from Crypto import Random import base64 -padding_string = '}' +padding_string = b'}' def encrypt(plaintext, key): diff --git a/web/pgadmin/utils/driver/abstract.py b/web/pgadmin/utils/driver/abstract.py index 8292cc8cb..2fba2698f 100644 --- a/web/pgadmin/utils/driver/abstract.py +++ b/web/pgadmin/utils/driver/abstract.py @@ -9,8 +9,9 @@ from abc import ABCMeta, abstractmethod, abstractproperty from flask import session from .registry import DriverRegistry +import six - +@six.add_metaclass(DriverRegistry) class BaseDriver(object): """ class BaseDriver(object): @@ -40,7 +41,6 @@ class BaseDriver(object): session, which has not been pinged from more than the idle timeout configuration. """ - __metaclass__ = DriverRegistry @abstractproperty def Version(cls): @@ -58,7 +58,7 @@ class BaseDriver(object): def gc(self): pass - +@six.add_metaclass(ABCMeta) class BaseConnection(object): """ class BaseConnection(object) @@ -113,7 +113,6 @@ class BaseConnection(object): connection object for better memory management, and connection pool management. """ - __metaclass__ = ABCMeta @abstractmethod def connect(self, **kwargs): diff --git a/web/pgadmin/utils/driver/psycopg2/__init__.py b/web/pgadmin/utils/driver/psycopg2/__init__.py index 33f8ec339..8125bfef8 100644 --- a/web/pgadmin/utils/driver/psycopg2/__init__.py +++ b/web/pgadmin/utils/driver/psycopg2/__init__.py @@ -111,9 +111,12 @@ class Connection(BaseConnection): ) except psycopg2.Error as e: - msg = e.pgerror if e.pgerror else e.message \ - if e.message else e.diag.message_detail \ - if e.diag.message_detail else str(e) + if e.pgerror: + msg = e.pgerror + elif e.diag.message_detail: + msg = e.diag.message_detail + else: + msg = str(e) return False, msg diff --git a/web/setup.py b/web/setup.py index df3276f8b..9f430ae14 100644 --- a/web/setup.py +++ b/web/setup.py @@ -47,7 +47,7 @@ Enter the email address and password to use for the initial pgAdmin user \ account:\n""") email = '' while email == '': - email = raw_input("Email address: ") + email = input("Email address: ") def pprompt(): return getpass.getpass(), getpass.getpass('Retype password:')