Fix numerous encoding issues. Fixes #1307. Fixes #1479

This commit is contained in:
Murtuza Zabuawala 2016-07-26 15:05:14 +01:00 committed by Dave Page
parent 166d42953c
commit 06e881570a
47 changed files with 463 additions and 268 deletions

View File

@ -21,7 +21,7 @@ linecache2==1.0.0
MarkupSafe==0.23 MarkupSafe==0.23
passlib==1.6.2 passlib==1.6.2
pbr==1.9.1 pbr==1.9.1
psycopg2==2.5.2 psycopg2==2.6.2
pycrypto==2.6.1 pycrypto==2.6.1
pyrsistent==0.11.13 pyrsistent==0.11.13
python-dateutil==2.5.0 python-dateutil==2.5.0

View File

@ -20,7 +20,7 @@ linecache2==1.0.0
MarkupSafe==0.23 MarkupSafe==0.23
passlib==1.6.2 passlib==1.6.2
pbr==1.9.1 pbr==1.9.1
psycopg2==2.5.2 psycopg2==2.6.2
pycrypto==2.6.1 pycrypto==2.6.1
pyrsistent==0.11.13 pyrsistent==0.11.13
python-dateutil==2.5.0 python-dateutil==2.5.0

View File

@ -147,7 +147,7 @@ def create_app(app_name=config.APP_NAME):
logger.setLevel(logging.INFO) logger.setLevel(logging.INFO)
# File logging # File logging
fh = logging.FileHandler(config.LOG_FILE) fh = logging.FileHandler(config.LOG_FILE, encoding='utf-8')
fh.setLevel(config.FILE_LOG_LEVEL) fh.setLevel(config.FILE_LOG_LEVEL)
fh.setFormatter(logging.Formatter(config.FILE_LOG_FORMAT)) fh.setFormatter(logging.Formatter(config.FILE_LOG_FORMAT))
app.logger.addHandler(fh) app.logger.addHandler(fh)

View File

@ -8,7 +8,7 @@
########################################################################## ##########################################################################
"""Defines views for management of server groups""" """Defines views for management of server groups"""
import json import simplejson as json
from abc import ABCMeta, abstractmethod from abc import ABCMeta, abstractmethod
import six import six
@ -156,7 +156,9 @@ class ServerGroupView(NodeView):
user_id=current_user.id, user_id=current_user.id,
id=gid).first() id=gid).first()
data = request.form if request.form else json.loads(request.data.decode()) data = request.form if request.form else json.loads(
request.data, encoding='utf-8'
)
if servergroup is None: if servergroup is None:
return make_json_response( return make_json_response(
@ -201,7 +203,10 @@ class ServerGroupView(NodeView):
) )
def create(self): def create(self):
data = request.form if request.form else json.loads(request.data.decode()) """Creates new server-group """
data = request.form if request.form else json.loads(
request.data, encoding='utf-8'
)
if data[u'name'] != '': if data[u'name'] != '':
try: try:
check_sg = ServerGroup.query.filter_by( check_sg = ServerGroup.query.filter_by(

View File

@ -7,7 +7,7 @@
# #
########################################################################## ##########################################################################
import json import simplejson as json
import traceback import traceback
import pgadmin.browser.server_groups as sg import pgadmin.browser.server_groups as sg
@ -400,7 +400,9 @@ class ServerNode(PGChildNodeView):
} }
idx = 0 idx = 0
data = request.form if request.form else json.loads(request.data.decode()) data = request.form if request.form else json.loads(
request.data, encoding='utf-8'
)
from pgadmin.utils.driver import get_driver from pgadmin.utils.driver import get_driver
manager = get_driver(PG_DEFAULT_DRIVER).connection_manager(sid) manager = get_driver(PG_DEFAULT_DRIVER).connection_manager(sid)
@ -554,7 +556,9 @@ class ServerNode(PGChildNodeView):
u'role' u'role'
] ]
data = request.form if request.form else json.loads(request.data.decode()) data = request.form if request.form else json.loads(
request.data, encoding='utf-8'
)
for arg in required_args: for arg in required_args:
if arg not in data: if arg not in data:
@ -740,8 +744,9 @@ class ServerNode(PGChildNodeView):
if user is None: if user is None:
return unauthorized(gettext("Unauthorized request.")) return unauthorized(gettext("Unauthorized request."))
data = request.form if request.form else json.loads(request.data) if \ data = request.form if request.form else json.loads(
request.data else {} request.data, encoding='utf-8'
) if request.data else {}
password = None password = None
save_password = False save_password = False
@ -969,7 +974,7 @@ class ServerNode(PGChildNodeView):
sid: Server id sid: Server id
""" """
try: try:
data = json.loads(request.form['data']) data = json.loads(request.form['data'], encoding='utf-8')
if data and ('password' not in data or if data and ('password' not in data or
data['password'] == '' or data['password'] == '' or
'newPassword' not in data or 'newPassword' not in data or

View File

@ -9,7 +9,7 @@
"""Implements the Database Node""" """Implements the Database Node"""
import json import simplejson as json
import re import re
from functools import wraps from functools import wraps
@ -186,11 +186,12 @@ class DatabaseView(PGChildNodeView):
return internal_server_error(errormsg=rset) return internal_server_error(errormsg=rset)
for row in rset['rows']: for row in rset['rows']:
if self.manager.db == row['name']: dbname = row['name']
if self.manager.db == dbname:
connected = True connected = True
canDrop = canDisConn = False canDrop = canDisConn = False
else: else:
conn = self.manager.connection(row['name']) conn = self.manager.connection(dbname)
connected = conn.connected() connected = conn.connected()
canDrop = canDisConn = True canDrop = canDisConn = True
@ -441,7 +442,9 @@ class DatabaseView(PGChildNodeView):
u'name' u'name'
] ]
data = request.form if request.form else json.loads(request.data.decode()) data = request.form if request.form else json.loads(
request.data, encoding='utf-8'
)
for arg in required_args: for arg in required_args:
if arg not in data: if arg not in data:
@ -516,7 +519,7 @@ class DatabaseView(PGChildNodeView):
"""Update the database.""" """Update the database."""
data = request.form if request.form else json.loads( data = request.form if request.form else json.loads(
request.data.decode() request.data, encoding='utf-8'
) )
info = "nothing to update." info = "nothing to update."
@ -636,7 +639,7 @@ class DatabaseView(PGChildNodeView):
data = {} data = {}
for k, v in request.args.items(): for k, v in request.args.items():
try: try:
data[k] = json.loads(v) data[k] = json.loads(v, encoding='utf-8')
except ValueError: except ValueError:
data[k] = v data[k] = v
try: try:
@ -708,7 +711,7 @@ class DatabaseView(PGChildNodeView):
acls = render_template( acls = render_template(
"/".join([self.template_path, 'allowed_privs.json']) "/".join([self.template_path, 'allowed_privs.json'])
) )
acls = json.loads(acls) acls = json.loads(acls, encoding='utf-8')
except Exception as e: except Exception as e:
current_app.logger.exception(e) current_app.logger.exception(e)
@ -741,7 +744,7 @@ class DatabaseView(PGChildNodeView):
acls = render_template( acls = render_template(
"/".join([self.template_path, 'allowed_privs.json']) "/".join([self.template_path, 'allowed_privs.json'])
) )
acls = json.loads(acls) acls = json.loads(acls, encoding='utf-8')
except Exception as e: except Exception as e:
current_app.logger.exception(e) current_app.logger.exception(e)
@ -864,17 +867,20 @@ class DatabaseView(PGChildNodeView):
frmtd_variables = parse_variables_from_db(res1['rows']) frmtd_variables = parse_variables_from_db(res1['rows'])
result.update(frmtd_variables) result.update(frmtd_variables)
sql_header = """ sql_header = "-- Database: {0}\n\n-- ".format(result['name'])
-- Database: {0} if hasattr(str, 'decode'):
sql_header = sql_header.decode('utf-8')
-- DROP DATABASE {0}; sql_header += render_template(
"/".join([self.template_path, 'delete.sql']),
""".format(result['name']) datname=result['name'], conn=self.conn
)
SQL = self.get_new_sql(gid, sid, result, did) SQL = self.get_new_sql(gid, sid, result, did)
SQL = re.sub('\n{2,}', '\n\n', SQL) SQL = re.sub('\n{2,}', '\n\n', SQL)
SQL = sql_header + SQL SQL = sql_header + '\n' + SQL
SQL = SQL.strip('\n') SQL = SQL.strip('\n')
return ajax_response(response=SQL) return ajax_response(response=SQL)
@check_precondition() @check_precondition()

View File

@ -9,7 +9,7 @@
"""Implements Cast Node""" """Implements Cast Node"""
import json import simplejson as json
from functools import wraps from functools import wraps
import pgadmin.browser.server_groups.servers.databases as databases import pgadmin.browser.server_groups.servers.databases as databases
@ -345,7 +345,9 @@ class CastView(PGChildNodeView):
'trgtyp' 'trgtyp'
] ]
data = request.form if request.form else json.loads(request.data.decode()) data = request.form if request.form else json.loads(
request.data, encoding='utf-8'
)
for arg in required_args: for arg in required_args:
if arg not in data: if arg not in data:
return make_json_response( return make_json_response(
@ -396,7 +398,9 @@ class CastView(PGChildNodeView):
:param gid: group id :param gid: group id
:return: :return:
""" """
data = request.form if request.form else json.loads(request.data.decode()) data = request.form if request.form else json.loads(
request.data, encoding='utf-8'
)
sql = self.get_sql(gid, sid, did, data, cid) sql = self.get_sql(gid, sid, did, data, cid)
try: try:
if sql and sql.strip('\n') and sql.strip(' '): if sql and sql.strip('\n') and sql.strip(' '):
@ -560,7 +564,10 @@ class CastView(PGChildNodeView):
:return: :return:
""" """
res = [] res = []
data = request.form if request.form else json.loads(request.data.decode()) data = request.form if request.form else json.loads(
request.data, encoding='utf-8'
)
sql = render_template("/".join([self.template_path, 'functions.sql']), sql = render_template("/".join([self.template_path, 'functions.sql']),
srctyp=data['srctyp'], srctyp=data['srctyp'],
trgtyp=data['trgtyp']) trgtyp=data['trgtyp'])

View File

@ -7,7 +7,7 @@
# #
########################################################################## ##########################################################################
import json import simplejson as json
import re import re
from functools import wraps from functools import wraps
@ -327,7 +327,10 @@ class EventTriggerView(PGChildNodeView):
Returns: Returns:
""" """
data = request.form if request.form else json.loads(request.data.decode()) data = request.form if request.form else json.loads(
request.data, encoding='utf-8'
)
required_args = { required_args = {
'name': 'Name', 'name': 'Name',
'eventowner': 'Owner', 'eventowner': 'Owner',
@ -390,7 +393,9 @@ class EventTriggerView(PGChildNodeView):
Returns: Returns:
""" """
data = request.form if request.form else json.loads(request.data.decode()) data = request.form if request.form else json.loads(
request.data, encoding='utf-8'
)
try: try:
sql = self.get_sql(data, etid) sql = self.get_sql(data, etid)
@ -500,7 +505,7 @@ class EventTriggerView(PGChildNodeView):
data = {} data = {}
for k, v in request.args.items(): for k, v in request.args.items():
try: try:
data[k] = json.loads(v) data[k] = json.loads(v, encoding='utf-8')
except ValueError: except ValueError:
data[k] = v data[k] = v
try: try:
@ -601,6 +606,8 @@ class EventTriggerView(PGChildNodeView):
return internal_server_error(errormsg=db_name) return internal_server_error(errormsg=db_name)
sql_header = "-- Event Trigger: {0} on database {1}\n\n-- ".format(result['name'], db_name) sql_header = "-- Event Trigger: {0} on database {1}\n\n-- ".format(result['name'], db_name)
if hasattr(str, 'decode'):
sql_header = sql_header.decode('utf-8')
sql_header += render_template( sql_header += render_template(
"/".join([self.template_path, 'delete.sql']), "/".join([self.template_path, 'delete.sql']),

View File

@ -9,7 +9,7 @@
""" Implements Extension Node """ """ Implements Extension Node """
import json import simplejson as json
from functools import wraps from functools import wraps
import pgadmin.browser.server_groups.servers.databases as databases import pgadmin.browser.server_groups.servers.databases as databases
@ -216,8 +216,10 @@ class ExtensionView(PGChildNodeView):
'name' 'name'
] ]
data = request.form if request.form else \ data = request.form if request.form else json.loads(
json.loads(request.data.decode()) request.data, encoding='utf-8'
)
for arg in required_args: for arg in required_args:
if arg not in data: if arg not in data:
return make_json_response( return make_json_response(
@ -263,8 +265,9 @@ class ExtensionView(PGChildNodeView):
""" """
This function will update an extension object This function will update an extension object
""" """
data = request.form if request.form else \ data = request.form if request.form else json.loads(
json.loads(request.data.decode()) request.data, encoding='utf-8'
)
SQL = self.getSQL(gid, sid, data, did, eid) SQL = self.getSQL(gid, sid, data, did, eid)
try: try:

View File

@ -9,7 +9,7 @@
"""Implements Foreign Data Wrapper Node""" """Implements Foreign Data Wrapper Node"""
import json import simplejson as json
from functools import wraps from functools import wraps
import pgadmin.browser.server_groups.servers as servers import pgadmin.browser.server_groups.servers as servers
@ -355,7 +355,9 @@ class ForeignDataWrapperView(PGChildNodeView):
'name' 'name'
] ]
data = request.form if request.form else json.loads(request.data.decode()) data = request.form if request.form else json.loads(
request.data, encoding='utf-8'
)
for arg in required_args: for arg in required_args:
if arg not in data: if arg not in data:
return make_json_response( return make_json_response(
@ -422,7 +424,9 @@ class ForeignDataWrapperView(PGChildNodeView):
did: Database ID did: Database ID
fid: foreign data wrapper ID fid: foreign data wrapper ID
""" """
data = request.form if request.form else json.loads(request.data.decode()) data = request.form if request.form else json.loads(
request.data, encoding='utf-8'
)
sql = self.get_sql(gid, sid, data, did, fid) sql = self.get_sql(gid, sid, data, did, fid)
try: try:
if sql and sql.strip('\n') and sql.strip(' '): if sql and sql.strip('\n') and sql.strip(' '):
@ -524,7 +528,7 @@ class ForeignDataWrapperView(PGChildNodeView):
data = {} data = {}
for k, v in request.args.items(): for k, v in request.args.items():
try: try:
data[k] = json.loads(v) data[k] = json.loads(v, encoding='utf-8')
except ValueError: except ValueError:
data[k] = v data[k] = v
@ -677,6 +681,9 @@ class ForeignDataWrapperView(PGChildNodeView):
""".format(res['rows'][0]['name']) """.format(res['rows'][0]['name'])
if hasattr(str, 'decode'):
sql_header = sql_header.decode('utf-8')
sql = sql_header + sql sql = sql_header + sql
return ajax_response(response=sql) return ajax_response(response=sql)

View File

@ -9,7 +9,7 @@
"""Implements Foreign Server Node""" """Implements Foreign Server Node"""
import json import simplejson as json
from functools import wraps from functools import wraps
import pgadmin.browser.server_groups.servers.databases as databases import pgadmin.browser.server_groups.servers.databases as databases
@ -356,7 +356,9 @@ class ForeignServerView(PGChildNodeView):
'name' 'name'
] ]
data = request.form if request.form else json.loads(request.data.decode()) data = request.form if request.form else json.loads(
request.data, encoding='utf-8'
)
for arg in required_args: for arg in required_args:
if arg not in data: if arg not in data:
return make_json_response( return make_json_response(
@ -428,7 +430,9 @@ class ForeignServerView(PGChildNodeView):
fsid: foreign server ID fsid: foreign server ID
""" """
data = request.form if request.form else json.loads(request.data.decode()) data = request.form if request.form else json.loads(
request.data, encoding='utf-8'
)
sql = self.get_sql(gid, sid, data, did, fid, fsid) sql = self.get_sql(gid, sid, data, did, fid, fsid)
try: try:
if sql and sql.strip('\n') and sql.strip(' '): if sql and sql.strip('\n') and sql.strip(' '):
@ -538,7 +542,7 @@ class ForeignServerView(PGChildNodeView):
data = {} data = {}
for k, v in request.args.items(): for k, v in request.args.items():
try: try:
data[k] = json.loads(v) data[k] = json.loads(v, encoding='utf-8')
except ValueError: except ValueError:
data[k] = v data[k] = v
@ -715,6 +719,8 @@ class ForeignServerView(PGChildNodeView):
-- DROP SERVER {0} -- DROP SERVER {0}
""".format(res['rows'][0]['name']) """.format(res['rows'][0]['name'])
if hasattr(str, 'decode'):
sql_header = sql_header.decode('utf-8')
sql = sql_header + sql sql = sql_header + sql

View File

@ -9,7 +9,7 @@
"""Implements User Mapping Node""" """Implements User Mapping Node"""
import json import simplejson as json
from functools import wraps from functools import wraps
import pgadmin.browser.server_groups.servers as servers import pgadmin.browser.server_groups.servers as servers
@ -361,7 +361,9 @@ class UserMappingView(PGChildNodeView):
'name' 'name'
] ]
data = request.form if request.form else json.loads(request.data.decode()) data = request.form if request.form else json.loads(
request.data, encoding='utf-8'
)
for arg in required_args: for arg in required_args:
if arg not in data: if arg not in data:
return make_json_response( return make_json_response(
@ -435,7 +437,9 @@ class UserMappingView(PGChildNodeView):
umid: User mapping ID umid: User mapping ID
""" """
data = request.form if request.form else json.loads(request.data.decode()) data = request.form if request.form else json.loads(
request.data, encoding='utf-8'
)
sql = self.get_sql(gid, sid, data, did, fid, fsid, umid) sql = self.get_sql(gid, sid, data, did, fid, fsid, umid)
try: try:
if sql and sql.strip('\n') and sql.strip(' '): if sql and sql.strip('\n') and sql.strip(' '):
@ -565,7 +569,7 @@ class UserMappingView(PGChildNodeView):
data = {} data = {}
for k, v in request.args.items(): for k, v in request.args.items():
try: try:
data[k] = json.loads(v) data[k] = json.loads(v, encoding='utf-8')
except ValueError: except ValueError:
data[k] = v data[k] = v
@ -725,6 +729,8 @@ class UserMappingView(PGChildNodeView):
-- DROP USER MAPPING FOR {0} SERVER {1} -- DROP USER MAPPING FOR {0} SERVER {1}
""".format(res['rows'][0]['name'], fdw_data['name']) """.format(res['rows'][0]['name'], fdw_data['name'])
if hasattr(str, 'decode'):
sql_header = sql_header.decode('utf-8')
sql = sql_header + sql sql = sql_header + sql

View File

@ -9,7 +9,7 @@
"""Implements Language Node""" """Implements Language Node"""
import json import simplejson as json
from functools import wraps from functools import wraps
import pgadmin.browser.server_groups.servers.databases as databases import pgadmin.browser.server_groups.servers.databases as databases
@ -354,7 +354,9 @@ class LanguageView(PGChildNodeView):
did: Database ID did: Database ID
lid: Language ID lid: Language ID
""" """
data = request.form if request.form else json.loads(request.data.decode()) data = request.form if request.form else json.loads(
request.data, encoding='utf-8'
)
sql = self.get_sql(data, lid) sql = self.get_sql(data, lid)
try: try:
@ -402,7 +404,7 @@ class LanguageView(PGChildNodeView):
data = {} data = {}
for k, v in request.args.items(): for k, v in request.args.items():
try: try:
data[k] = json.loads(v) data[k] = json.loads(v, encoding='utf-8')
except ValueError: except ValueError:
data[k] = v data[k] = v

View File

@ -7,7 +7,7 @@
# #
########################################################################## ##########################################################################
import json import simplejson as json
import re import re
from functools import wraps from functools import wraps
@ -262,7 +262,7 @@ class SchemaView(PGChildNodeView):
acls = render_template( acls = render_template(
"/".join([self.template_path, 'allowed_privs.json']) "/".join([self.template_path, 'allowed_privs.json'])
) )
acls = json.loads(acls) acls = json.loads(acls, encoding='utf-8')
except Exception as e: except Exception as e:
current_app.logger.exception(e) current_app.logger.exception(e)
@ -490,8 +490,9 @@ It may have been removed by another user.
sid: Server ID sid: Server ID
did: Database ID did: Database ID
""" """
data = request.form if request.form else \ data = request.form if request.form else json.loads(
json.loads(request.data.decode()) request.data, encoding='utf-8'
)
required_args = { required_args = {
'name': 'Name' 'name': 'Name'
@ -559,7 +560,7 @@ It may have been removed by another user.
scid: Schema ID scid: Schema ID
""" """
data = request.form if request.form else json.loads( data = request.form if request.form else json.loads(
request.data.decode() request.data, encoding='utf-8'
) )
try: try:
SQL = self.get_sql(gid, sid, data, scid) SQL = self.get_sql(gid, sid, data, scid)
@ -669,7 +670,7 @@ It may have been removed by another user.
data = dict() data = dict()
for k, v in request.args.items(): for k, v in request.args.items():
try: try:
data[k] = json.loads(v) data[k] = json.loads(v, encoding='utf-8')
except ValueError: except ValueError:
data[k] = v data[k] = v
@ -769,14 +770,16 @@ It may have been removed by another user.
_=gettext, data=data, conn=self.conn _=gettext, data=data, conn=self.conn
) )
sql_header = """ sql_header = "-- SCHEMA: {0}\n\n-- ".format(data['name'])
-- SCHEMA: {0} if hasattr(str, 'decode'):
sql_header = sql_header.decode('utf-8')
-- DROP SCHEMA {0}; # drop schema
sql_header += render_template(
"/".join([self.template_path, 'sql/delete.sql']),
_=gettext, name=data['name'], conn=self.conn, cascade=False)
""".format(data['name']) SQL = sql_header + '\n\n' + SQL
SQL = sql_header + SQL
return ajax_response(response=SQL.strip("\n")) return ajax_response(response=SQL.strip("\n"))
@ -959,6 +962,8 @@ It may have been removed by another user.
-- DROP SCHEMA {0}; -- DROP SCHEMA {0};
""".format(old_data['name']) """.format(old_data['name'])
if hasattr(str, 'decode'):
sql_header = sql_header.decode('utf-8')
SQL = sql_header + SQL SQL = sql_header + SQL

View File

@ -9,7 +9,7 @@
""" Implements Collation Node """ """ Implements Collation Node """
import json import simplejson as json
from functools import wraps from functools import wraps
import pgadmin.browser.server_groups.servers.databases as database import pgadmin.browser.server_groups.servers.databases as database
@ -378,7 +378,7 @@ class CollationView(PGChildNodeView):
""" """
data = request.form if request.form else json.loads( data = request.form if request.form else json.loads(
request.data.decode() request.data, encoding='utf-8'
) )
required_args = [ required_args = [
@ -502,7 +502,7 @@ class CollationView(PGChildNodeView):
coid: Collation ID coid: Collation ID
""" """
data = request.form if request.form else json.loads( data = request.form if request.form else json.loads(
request.data.decode() request.data, encoding='utf-8'
) )
SQL = self.get_sql(gid, sid, data, scid, coid) SQL = self.get_sql(gid, sid, data, scid, coid)
try: try:
@ -549,7 +549,7 @@ class CollationView(PGChildNodeView):
data = dict() data = dict()
for k, v in request.args.items(): for k, v in request.args.items():
try: try:
data[k] = json.loads(v) data[k] = json.loads(v, encoding='utf-8')
except ValueError: except ValueError:
data[k] = v data[k] = v
@ -622,6 +622,8 @@ class CollationView(PGChildNodeView):
data=data, conn=self.conn) data=data, conn=self.conn)
sql_header = "-- Collation: {0};\n\n-- ".format(data['name']) sql_header = "-- Collation: {0};\n\n-- ".format(data['name'])
if hasattr(str, 'decode'):
sql_header = sql_header.decode('utf-8')
sql_header += render_template("/".join([self.template_path, sql_header += render_template("/".join([self.template_path,
'delete.sql']), 'delete.sql']),
name=data['name']) name=data['name'])

View File

@ -9,7 +9,7 @@
"""Implements the Domain Node.""" """Implements the Domain Node."""
import json import simplejson as json
from functools import wraps from functools import wraps
import pgadmin.browser.server_groups.servers.databases as databases import pgadmin.browser.server_groups.servers.databases as databases
@ -189,7 +189,7 @@ class DomainView(PGChildNodeView, DataTypeReader):
data = {} data = {}
if request.data: if request.data:
req = json.loads(request.data.decode()) req = json.loads(request.data, encoding='utf-8')
else: else:
req = request.args or request.form req = request.args or request.form
@ -218,7 +218,7 @@ class DomainView(PGChildNodeView, DataTypeReader):
if key in list_params and req[key] != '' \ if key in list_params and req[key] != '' \
and req[key] is not None: and req[key] is not None:
# Coverts string into python list as expected. # Coverts string into python list as expected.
data[key] = json.loads(req[key]) data[key] = json.loads(req[key], encoding='utf-8')
elif key == 'typnotnull': elif key == 'typnotnull':
data[key] = True if req[key] == 'true' or req[key] is \ data[key] = True if req[key] == 'true' or req[key] is \
True else \ True else \
@ -706,6 +706,8 @@ AND relkind != 'c'))"""
-- DROP DOMAIN {0}; -- DROP DOMAIN {0};
""".format(data['basensp'] + '.' + data['name']) """.format(data['basensp'] + '.' + data['name'])
if hasattr(str, 'decode'):
sql_header = sql_header.decode('utf-8')
SQL = sql_header + SQL SQL = sql_header + SQL

View File

@ -9,7 +9,7 @@
"""Implements the Domain Constraint Module.""" """Implements the Domain Constraint Module."""
import json import simplejson as json
from functools import wraps from functools import wraps
import pgadmin.browser.server_groups.servers.databases.schemas.domains \ import pgadmin.browser.server_groups.servers.databases.schemas.domains \
@ -193,7 +193,7 @@ class DomainConstraintView(PGChildNodeView):
data = {} data = {}
if request.data: if request.data:
req = json.loads(request.data.decode()) req = json.loads(request.data, encoding='utf-8')
else: else:
req = request.args or request.form req = request.args or request.form
@ -571,6 +571,8 @@ class DomainConstraintView(PGChildNodeView):
-- ALTER DOMAIN {1} DROP CONSTRAINT {0}; -- ALTER DOMAIN {1} DROP CONSTRAINT {0};
""".format(data['name'], schema + '.' + domain) """.format(data['name'], schema + '.' + domain)
if hasattr(str, 'decode'):
sql_header = sql_header.decode('utf-8')
SQL = sql_header + SQL SQL = sql_header + SQL

View File

@ -9,7 +9,7 @@
"""Implements the Foreign Table Module.""" """Implements the Foreign Table Module."""
import json import simplejson as json
import sys import sys
import traceback import traceback
from functools import wraps from functools import wraps
@ -232,7 +232,7 @@ class ForeignTableView(PGChildNodeView, DataTypeReader):
data = {} data = {}
if request.data: if request.data:
req = json.loads(request.data.decode()) req = json.loads(request.data, encoding='utf-8')
else: else:
req = request.args or request.form req = request.args or request.form
@ -267,7 +267,7 @@ class ForeignTableView(PGChildNodeView, DataTypeReader):
# Coverts string into python list as expected. # Coverts string into python list as expected.
data[key] = [] if \ data[key] = [] if \
type(req[key]) == list and len(req[key]) == 0 else \ type(req[key]) == list and len(req[key]) == 0 else \
json.loads(req[key]) json.loads(req[key], encoding='utf-8')
if key == 'inherits': if key == 'inherits':
# Convert Table ids from unicode/string to int # Convert Table ids from unicode/string to int
@ -833,6 +833,8 @@ AND relkind != 'c'))"""
-- DROP {0} {1}; -- DROP {0} {1};
""".format('FOREIGN TABLE', data['basensp'] + "." + data['name']) """.format('FOREIGN TABLE', data['basensp'] + "." + data['name'])
if hasattr(str, 'decode'):
sql_header = sql_header.decode('utf-8')
SQL = sql_header + SQL SQL = sql_header + SQL
@ -1205,7 +1207,7 @@ AND relkind != 'c'))"""
else: else:
columns = '*' columns = '*'
sql = "SELECT {0}\n\tFROM {1};".format( sql = u"SELECT {0}\n\tFROM {1};".format(
columns, columns,
self.qtIdent(self.conn, data['basensp'], data['name']) self.qtIdent(self.conn, data['basensp'], data['name'])
) )
@ -1241,7 +1243,7 @@ AND relkind != 'c'))"""
if len(columns) > 0: if len(columns) > 0:
columns = ", ".join(columns) columns = ", ".join(columns)
values = ", ".join(values) values = ", ".join(values)
sql = "INSERT INTO {0}(\n\t{1})\n\tVALUES ({2});".format( sql = u"INSERT INTO {0}(\n\t{1})\n\tVALUES ({2});".format(
self.qtIdent(self.conn, data['basensp'], data['name']), self.qtIdent(self.conn, data['basensp'], data['name']),
columns, values columns, values
) )
@ -1282,7 +1284,7 @@ AND relkind != 'c'))"""
columns = "=?, ".join(columns) columns = "=?, ".join(columns)
columns += "=?" columns += "=?"
sql = "UPDATE {0}\n\tSET {1}\n\tWHERE <condition>;".format( sql = u"UPDATE {0}\n\tSET {1}\n\tWHERE <condition>;".format(
self.qtIdent(self.conn, data['basensp'], data['name']), self.qtIdent(self.conn, data['basensp'], data['name']),
columns columns
) )
@ -1308,7 +1310,7 @@ AND relkind != 'c'))"""
""" """
data = self._fetch_properties(gid, sid, did, scid, foid) data = self._fetch_properties(gid, sid, did, scid, foid)
sql = "DELETE FROM {0}\n\tWHERE <condition>;".format( sql = u"DELETE FROM {0}\n\tWHERE <condition>;".format(
self.qtIdent(self.conn, data['basensp'], data['name']) self.qtIdent(self.conn, data['basensp'], data['name'])
) )

View File

@ -9,7 +9,7 @@
"""Defines views for management of Fts Configuration node""" """Defines views for management of Fts Configuration node"""
import json import simplejson as json
from functools import wraps from functools import wraps
import pgadmin.browser.server_groups.servers.databases as databases import pgadmin.browser.server_groups.servers.databases as databases
@ -404,7 +404,8 @@ class FtsConfigurationView(PGChildNodeView):
] ]
data = request.form if request.form else json.loads( data = request.form if request.form else json.loads(
request.data.decode()) request.data, encoding='utf-8'
)
for arg in required_args: for arg in required_args:
if arg not in data: if arg not in data:
return make_json_response( return make_json_response(
@ -484,7 +485,8 @@ class FtsConfigurationView(PGChildNodeView):
:param cfgid: fts Configuration id :param cfgid: fts Configuration id
""" """
data = request.form if request.form else json.loads( data = request.form if request.form else json.loads(
request.data.decode()) request.data, encoding='utf-8'
)
# Fetch sql query to update fts Configuration # Fetch sql query to update fts Configuration
sql = self.get_sql(gid, sid, did, scid, data, cfgid) sql = self.get_sql(gid, sid, did, scid, data, cfgid)
@ -620,7 +622,7 @@ class FtsConfigurationView(PGChildNodeView):
data = {} data = {}
for k, v in request.args.items(): for k, v in request.args.items():
try: try:
data[k] = json.loads(v) data[k] = json.loads(v, encoding='utf-8')
except ValueError: except ValueError:
data[k] = v data[k] = v

View File

@ -9,7 +9,7 @@
"""Defines views for management of Fts Dictionary node""" """Defines views for management of Fts Dictionary node"""
import json import simplejson as json
from functools import wraps from functools import wraps
import pgadmin.browser.server_groups.servers.databases as databases import pgadmin.browser.server_groups.servers.databases as databases
@ -409,7 +409,8 @@ class FtsDictionaryView(PGChildNodeView):
] ]
data = request.form if request.form else json.loads( data = request.form if request.form else json.loads(
request.data.decode()) request.data, encoding='utf-8'
)
for arg in required_args: for arg in required_args:
if arg not in data: if arg not in data:
return make_json_response( return make_json_response(
@ -475,7 +476,8 @@ class FtsDictionaryView(PGChildNodeView):
:param dcid: fts dictionary id :param dcid: fts dictionary id
""" """
data = request.form if request.form else json.loads( data = request.form if request.form else json.loads(
request.data.decode()) request.data, encoding='utf-8'
)
# Fetch sql query to update fts dictionary # Fetch sql query to update fts dictionary
sql = self.get_sql(gid, sid, did, scid, data, dcid) sql = self.get_sql(gid, sid, did, scid, data, dcid)
@ -606,7 +608,7 @@ class FtsDictionaryView(PGChildNodeView):
data = {} data = {}
for k, v in request.args.items(): for k, v in request.args.items():
try: try:
data[k] = json.loads(v) data[k] = json.loads(v, encoding='utf-8')
except ValueError: except ValueError:
data[k] = v data[k] = v

View File

@ -9,7 +9,7 @@
"""Defines views for management of FTS Parser node""" """Defines views for management of FTS Parser node"""
import json import simplejson as json
from functools import wraps from functools import wraps
from flask import render_template, request, jsonify, current_app from flask import render_template, request, jsonify, current_app
@ -345,7 +345,8 @@ class FtsParserView(PGChildNodeView):
] ]
data = request.form if request.form else json.loads( data = request.form if request.form else json.loads(
request.data.decode()) request.data, encoding='utf-8'
)
for arg in required_args: for arg in required_args:
if arg not in data: if arg not in data:
return make_json_response( return make_json_response(
@ -413,7 +414,8 @@ class FtsParserView(PGChildNodeView):
:param pid: fts parser id :param pid: fts parser id
""" """
data = request.form if request.form else json.loads( data = request.form if request.form else json.loads(
request.data.decode()) request.data, encoding='utf-8'
)
# Fetch sql query to update fts parser # Fetch sql query to update fts parser
sql = self.get_sql(gid, sid, did, scid, data, pid) sql = self.get_sql(gid, sid, did, scid, data, pid)

View File

@ -9,7 +9,7 @@
"""Defines views for management of Fts Template node""" """Defines views for management of Fts Template node"""
import json import simplejson as json
from functools import wraps from functools import wraps
from flask import render_template, make_response, request, jsonify from flask import render_template, make_response, request, jsonify
@ -322,7 +322,8 @@ class FtsTemplateView(PGChildNodeView):
] ]
data = request.form if request.form else json.loads( data = request.form if request.form else json.loads(
request.data.decode()) request.data, encoding='utf-8'
)
for arg in required_args: for arg in required_args:
if arg not in data: if arg not in data:
return make_json_response( return make_json_response(
@ -387,7 +388,8 @@ class FtsTemplateView(PGChildNodeView):
:param tid: fts tempate id :param tid: fts tempate id
""" """
data = request.form if request.form else json.loads( data = request.form if request.form else json.loads(
request.data.decode()) request.data, encoding='utf-8'
)
# Fetch sql query to update fts template # Fetch sql query to update fts template
sql = self.get_sql(gid, sid, did, scid, data, tid) sql = self.get_sql(gid, sid, did, scid, data, tid)

View File

@ -10,7 +10,7 @@
"""Implements Functions/Procedures Node.""" """Implements Functions/Procedures Node."""
import copy import copy
import json import simplejson as json
import re import re
import sys import sys
import traceback import traceback
@ -252,7 +252,7 @@ class FunctionView(PGChildNodeView, DataTypeReader):
data = {} data = {}
if request.data: if request.data:
req = json.loads(request.data.decode()) req = json.loads(request.data, encoding='utf-8')
else: else:
req = request.args or request.form req = request.args or request.form
@ -280,7 +280,7 @@ class FunctionView(PGChildNodeView, DataTypeReader):
if key in list_params and req[key] != '' \ if key in list_params and req[key] != '' \
and req[key] is not None: and req[key] is not None:
# Coverts string into python list as expected. # Coverts string into python list as expected.
data[key] = json.loads(req[key]) data[key] = json.loads(req[key], encoding='utf-8')
elif ( elif (
key == 'proretset' or key == 'proisstrict' or key == 'proretset' or key == 'proisstrict' or
key == 'prosecdef' or key == 'proiswindow' or key == 'prosecdef' or key == 'proiswindow' or
@ -971,6 +971,8 @@ class FunctionView(PGChildNodeView, DataTypeReader):
-- DROP {0} {1}; -- DROP {0} {1};
""".format(object_type.upper(), name) """.format(object_type.upper(), name)
if hasattr(str, 'decode'):
sql_header = sql_header.decode('utf-8')
SQL = sql_header + func_def SQL = sql_header + func_def
SQL = re.sub('\n{2,}', '\n\n', SQL) SQL = re.sub('\n{2,}', '\n\n', SQL)
@ -1135,7 +1137,7 @@ class FunctionView(PGChildNodeView, DataTypeReader):
if 'acl' in data: if 'acl' in data:
data['acl'] = parse_priv_to_db(data['acl'], ["X"]) data['acl'] = parse_priv_to_db(data['acl'], ["X"])
args = '' args = u''
cnt = 1 cnt = 1
if 'arguments' in data: if 'arguments' in data:
for a in data['arguments']: for a in data['arguments']:

View File

@ -9,7 +9,7 @@
"""Implements Sequence Node""" """Implements Sequence Node"""
import json import simplejson as json
from functools import wraps from functools import wraps
import pgadmin.browser.server_groups.servers.databases as database import pgadmin.browser.server_groups.servers.databases as database
@ -302,7 +302,9 @@ class SequenceView(PGChildNodeView):
u'seqowner', u'seqowner',
] ]
data = request.form if request.form else json.loads(request.data.decode()) data = request.form if request.form else json.loads(
request.data, encoding='utf-8'
)
for arg in required_args: for arg in required_args:
if arg not in data: if arg not in data:
@ -429,7 +431,9 @@ class SequenceView(PGChildNodeView):
Returns: Returns:
""" """
data = request.form if request.form else json.loads(request.data.decode()) data = request.form if request.form else json.loads(
request.data, encoding='utf-8'
)
try: try:
SQL = self.getSQL(gid, sid, did, data, scid, seid) SQL = self.getSQL(gid, sid, did, data, scid, seid)
SQL = SQL.strip('\n').strip(' ') SQL = SQL.strip('\n').strip(' ')
@ -481,7 +485,7 @@ class SequenceView(PGChildNodeView):
data = {} data = {}
for k, v in request.args.items(): for k, v in request.args.items():
try: try:
data[k] = json.loads(v) data[k] = json.loads(v, encoding='utf-8')
except ValueError: except ValueError:
data[k] = v data[k] = v

View File

@ -9,7 +9,7 @@
""" Implements Table Node """ """ Implements Table Node """
import json import simplejson as json
import re import re
from functools import wraps from functools import wraps
@ -1348,11 +1348,13 @@ class TableView(PGChildNodeView, DataTypeReader, VacuumSettings):
did: Database ID did: Database ID
scid: Schema ID scid: Schema ID
""" """
data = request.form if request.form else json.loads(request.data.decode()) data = request.form if request.form else json.loads(
request.data, encoding='utf-8'
)
for k, v in data.items(): for k, v in data.items():
try: try:
data[k] = json.loads(v) data[k] = json.loads(v, encoding='utf-8')
except (ValueError, TypeError): except (ValueError, TypeError):
data[k] = v data[k] = v
@ -1381,7 +1383,9 @@ class TableView(PGChildNodeView, DataTypeReader, VacuumSettings):
# We will convert it again to list # We will convert it again to list
if 'coll_inherits' in data and \ if 'coll_inherits' in data and \
isinstance(data['coll_inherits'], str): isinstance(data['coll_inherits'], str):
data['coll_inherits'] = json.loads(data['coll_inherits']) data['coll_inherits'] = json.loads(
data['coll_inherits'], encoding='utf-8'
)
if 'foreign_key' in data: if 'foreign_key' in data:
for c in data['foreign_key']: for c in data['foreign_key']:
@ -1434,12 +1438,12 @@ class TableView(PGChildNodeView, DataTypeReader, VacuumSettings):
tid: Table ID tid: Table ID
""" """
data = request.form if request.form else json.loads( data = request.form if request.form else json.loads(
request.data.decode() request.data, encoding='utf-8'
) )
for k, v in data.items(): for k, v in data.items():
try: try:
data[k] = json.loads(v) data[k] = json.loads(v, encoding='utf-8')
except (ValueError, TypeError): except (ValueError, TypeError):
data[k] = v data[k] = v
@ -1547,7 +1551,9 @@ class TableView(PGChildNodeView, DataTypeReader, VacuumSettings):
tid: Table ID tid: Table ID
""" """
# Below will decide if it's simple drop or drop with cascade call # Below will decide if it's simple drop or drop with cascade call
data = request.form if request.form else json.loads(request.data.decode()) data = request.form if request.form else json.loads(
request.data, encoding='utf-8'
)
# Convert str 'true' to boolean type # Convert str 'true' to boolean type
is_cascade = json.loads(data['cascade']) is_cascade = json.loads(data['cascade'])
@ -1593,7 +1599,9 @@ class TableView(PGChildNodeView, DataTypeReader, VacuumSettings):
tid: Table ID tid: Table ID
""" """
# Below will decide if it's simple drop or drop with cascade call # Below will decide if it's simple drop or drop with cascade call
data = request.form if request.form else json.loads(request.data.decode()) data = request.form if request.form else json.loads(
request.data, encoding='utf-8'
)
# Convert str 'true' to boolean type # Convert str 'true' to boolean type
is_enable = json.loads(data['enable']) is_enable = json.loads(data['enable'])
@ -1675,7 +1683,7 @@ class TableView(PGChildNodeView, DataTypeReader, VacuumSettings):
data = dict() data = dict()
for k, v in request.args.items(): for k, v in request.args.items():
try: try:
data[k] = json.loads(v) data[k] = json.loads(v, encoding='utf-8')
except (ValueError, TypeError): except (ValueError, TypeError):
data[k] = v data[k] = v
@ -2397,9 +2405,10 @@ class TableView(PGChildNodeView, DataTypeReader, VacuumSettings):
c['cltype'] = self._cltype_formatter(c['cltype']) c['cltype'] = self._cltype_formatter(c['cltype'])
c['hasSqrBracket'] = self.hasSqrBracket c['hasSqrBracket'] = self.hasSqrBracket
sql_header = "-- Table: {0}\n\n-- ".format(self.qtIdent(self.conn, sql_header = u"-- Table: {0}\n\n-- ".format(self.qtIdent(self.conn,
data['schema'], data['schema'],
data['name'])) data['name']))
sql_header += render_template("/".join([self.template_path, sql_header += render_template("/".join([self.template_path,
'delete.sql']), 'delete.sql']),
data=data, conn=self.conn) data=data, conn=self.conn)
@ -2490,6 +2499,9 @@ class TableView(PGChildNodeView, DataTypeReader, VacuumSettings):
data['cols'] = ', '.join(cols) data['cols'] = ', '.join(cols)
sql_header = "\n-- Index: {0}\n\n-- ".format(data['name']) sql_header = "\n-- Index: {0}\n\n-- ".format(data['name'])
if hasattr(str, 'decode'):
sql_header = sql_header.decode('utf-8')
sql_header += render_template("/".join([self.index_template_path, sql_header += render_template("/".join([self.index_template_path,
'delete.sql']), 'delete.sql']),
data=data, conn=self.conn) data=data, conn=self.conn)
@ -2559,6 +2571,9 @@ class TableView(PGChildNodeView, DataTypeReader, VacuumSettings):
data = trigger_definition(data) data = trigger_definition(data)
sql_header = "\n-- Trigger: {0}\n\n-- ".format(data['name']) sql_header = "\n-- Trigger: {0}\n\n-- ".format(data['name'])
if hasattr(str, 'decode'):
sql_header = sql_header.decode('utf-8')
sql_header += render_template("/".join([self.trigger_template_path, sql_header += render_template("/".join([self.trigger_template_path,
'delete.sql']), 'delete.sql']),
data=data, conn=self.conn) data=data, conn=self.conn)
@ -2656,7 +2671,7 @@ class TableView(PGChildNodeView, DataTypeReader, VacuumSettings):
else: else:
columns = '*' columns = '*'
sql = "SELECT {0}\n\tFROM {1};".format( sql = u"SELECT {0}\n\tFROM {1};".format(
columns, columns,
self.qtIdent(self.conn, data['schema'], data['name']) self.qtIdent(self.conn, data['schema'], data['name'])
) )
@ -2700,7 +2715,7 @@ class TableView(PGChildNodeView, DataTypeReader, VacuumSettings):
if len(columns) > 0: if len(columns) > 0:
columns = ", ".join(columns) columns = ", ".join(columns)
values = ", ".join(values) values = ", ".join(values)
sql = "INSERT INTO {0}(\n\t{1})\n\tVALUES ({2});".format( sql = u"INSERT INTO {0}(\n\t{1})\n\tVALUES ({2});".format(
self.qtIdent(self.conn, data['schema'], data['name']), self.qtIdent(self.conn, data['schema'], data['name']),
columns, values columns, values
) )
@ -2749,7 +2764,7 @@ class TableView(PGChildNodeView, DataTypeReader, VacuumSettings):
else: else:
columns = "=?, ".join(columns) columns = "=?, ".join(columns)
sql = "UPDATE {0}\n\tSET {1}\n\tWHERE <condition>;".format( sql = u"UPDATE {0}\n\tSET {1}\n\tWHERE <condition>;".format(
self.qtIdent(self.conn, data['schema'], data['name']), self.qtIdent(self.conn, data['schema'], data['name']),
columns columns
) )
@ -2783,7 +2798,7 @@ class TableView(PGChildNodeView, DataTypeReader, VacuumSettings):
data = res['rows'][0] data = res['rows'][0]
sql = "DELETE FROM {0}\n\tWHERE <condition>;".format( sql = u"DELETE FROM {0}\n\tWHERE <condition>;".format(
self.qtIdent(self.conn, data['schema'], data['name']) self.qtIdent(self.conn, data['schema'], data['name'])
) )

View File

@ -9,7 +9,7 @@
""" Implements Column Node """ """ Implements Column Node """
import json import simplejson as json
from functools import wraps from functools import wraps
import pgadmin.browser.server_groups.servers.databases as database import pgadmin.browser.server_groups.servers.databases as database
@ -505,12 +505,12 @@ class ColumnsView(PGChildNodeView, DataTypeReader):
tid: Table ID tid: Table ID
""" """
data = request.form if request.form else json.loads( data = request.form if request.form else json.loads(
request.data.decode() request.data, encoding='utf-8'
) )
for k, v in data.items(): for k, v in data.items():
try: try:
data[k] = json.loads(v) data[k] = json.loads(v, encoding='utf-8')
except (ValueError, TypeError): except (ValueError, TypeError):
data[k] = v data[k] = v
@ -642,7 +642,9 @@ class ColumnsView(PGChildNodeView, DataTypeReader):
tid: Table ID tid: Table ID
clid: Column ID clid: Column ID
""" """
data = request.form if request.form else json.loads(request.data.decode()) data = request.form if request.form else json.loads(
request.data, encoding='utf-8'
)
# Adding parent into data dict, will be using it while creating sql # Adding parent into data dict, will be using it while creating sql
data['schema'] = self.schema data['schema'] = self.schema
@ -699,7 +701,7 @@ class ColumnsView(PGChildNodeView, DataTypeReader):
data = dict() data = dict()
for k, v in request.args.items(): for k, v in request.args.items():
try: try:
data[k] = json.loads(v) data[k] = json.loads(v, encoding='utf-8')
except ValueError: except ValueError:
data[k] = v data[k] = v
@ -824,10 +826,11 @@ class ColumnsView(PGChildNodeView, DataTypeReader):
SQL = self.get_sql(scid, tid, None, data) SQL = self.get_sql(scid, tid, None, data)
sql_header = "-- Column: {0}\n\n-- ".format(self.qtIdent(self.conn, sql_header = u"-- Column: {0}\n\n-- ".format(self.qtIdent(self.conn,
data['schema'], data['schema'],
data['table'], data['table'],
data['name'])) data['name']))
sql_header += render_template("/".join([self.template_path, sql_header += render_template("/".join([self.template_path,
'delete.sql']), 'delete.sql']),
data=data, conn=self.conn) data=data, conn=self.conn)

View File

@ -9,7 +9,7 @@
"""Implements the Check Constraint Module.""" """Implements the Check Constraint Module."""
import json import simplejson as json
from functools import wraps from functools import wraps
import pgadmin.browser.server_groups.servers.databases as database import pgadmin.browser.server_groups.servers.databases as database
@ -396,11 +396,13 @@ class CheckConstraintView(PGChildNodeView):
""" """
required_args = ['consrc'] required_args = ['consrc']
data = request.form if request.form else json.loads(request.data.decode()) data = request.form if request.form else json.loads(
request.data, encoding='utf-8'
)
for k, v in data.items(): for k, v in data.items():
try: try:
data[k] = json.loads(v) data[k] = json.loads(v, encoding='utf-8')
except (ValueError, TypeError): except (ValueError, TypeError):
data[k] = v data[k] = v
@ -556,7 +558,9 @@ class CheckConstraintView(PGChildNodeView):
tid: Table Id tid: Table Id
cid: Check Constraint Id cid: Check Constraint Id
""" """
data = request.form if request.form else json.loads(request.data.decode()) data = request.form if request.form else json.loads(
request.data, encoding='utf-8'
)
try: try:
data['schema'] = self.schema data['schema'] = self.schema
@ -643,6 +647,8 @@ class CheckConstraintView(PGChildNodeView):
data=data) data=data)
sql_header = "-- Constraint: {0}\n\n-- ".format(data['name']) sql_header = "-- Constraint: {0}\n\n-- ".format(data['name'])
if hasattr(str, 'decode'):
sql_header = sql_header.decode('utf-8')
sql_header += render_template( sql_header += render_template(
"/".join([self.template_path, 'delete.sql']), "/".join([self.template_path, 'delete.sql']),
@ -672,7 +678,7 @@ class CheckConstraintView(PGChildNodeView):
data = {} data = {}
for k, v in request.args.items(): for k, v in request.args.items():
try: try:
data[k] = json.loads(v) data[k] = json.loads(v, encoding='utf-8')
except ValueError: except ValueError:
data[k] = v data[k] = v

View File

@ -9,7 +9,7 @@
"""Implements Exclusion constraint Node""" """Implements Exclusion constraint Node"""
import json import simplejson as json
from functools import wraps from functools import wraps
import pgadmin.browser.server_groups.servers.databases as database import pgadmin.browser.server_groups.servers.databases as database
@ -441,11 +441,13 @@ class ExclusionConstraintView(PGChildNodeView):
""" """
required_args = ['columns'] required_args = ['columns']
data = request.form if request.form else json.loads(request.data.decode()) data = request.form if request.form else json.loads(
request.data, encoding='utf-8'
)
for k, v in data.items(): for k, v in data.items():
try: try:
data[k] = json.loads(v) data[k] = json.loads(v, encoding='utf-8')
except (ValueError, TypeError): except (ValueError, TypeError):
data[k] = v data[k] = v
@ -546,7 +548,9 @@ class ExclusionConstraintView(PGChildNodeView):
Returns: Returns:
""" """
data = request.form if request.form else json.loads(request.data.decode()) data = request.form if request.form else json.loads(
request.data, encoding='utf-8'
)
try: try:
data['schema'] = self.schema data['schema'] = self.schema
@ -677,7 +681,7 @@ class ExclusionConstraintView(PGChildNodeView):
data = {} data = {}
for k, v in request.args.items(): for k, v in request.args.items():
try: try:
data[k] = json.loads(v) data[k] = json.loads(v, encoding='utf-8')
except ValueError: except ValueError:
data[k] = v data[k] = v
@ -800,6 +804,8 @@ class ExclusionConstraintView(PGChildNodeView):
"/".join([self.template_path, 'create.sql']), data=data) "/".join([self.template_path, 'create.sql']), data=data)
sql_header = "-- Constraint: {0}\n\n-- ".format(data['name']) sql_header = "-- Constraint: {0}\n\n-- ".format(data['name'])
if hasattr(str, 'decode'):
sql_header = sql_header.decode('utf-8')
sql_header += render_template( sql_header += render_template(
"/".join([self.template_path, 'delete.sql']), "/".join([self.template_path, 'delete.sql']),

View File

@ -9,7 +9,7 @@
"""Implements Foreign key constraint Node""" """Implements Foreign key constraint Node"""
import json import simplejson as json
from functools import wraps from functools import wraps
import pgadmin.browser.server_groups.servers.databases as database import pgadmin.browser.server_groups.servers.databases as database
@ -464,11 +464,13 @@ class ForeignKeyConstraintView(PGChildNodeView):
""" """
required_args = ['columns'] required_args = ['columns']
data = request.form if request.form else json.loads(request.data.decode()) data = request.form if request.form else json.loads(
request.data, encoding='utf-8'
)
for k, v in data.items(): for k, v in data.items():
try: try:
data[k] = json.loads(v) data[k] = json.loads(v, encoding='utf-8')
except (ValueError, TypeError): except (ValueError, TypeError):
data[k] = v data[k] = v
@ -598,7 +600,9 @@ class ForeignKeyConstraintView(PGChildNodeView):
Returns: Returns:
""" """
data = request.form if request.form else json.loads(request.data.decode()) data = request.form if request.form else json.loads(
request.data, encoding='utf-8'
)
try: try:
data['schema'] = self.schema data['schema'] = self.schema
@ -737,7 +741,7 @@ class ForeignKeyConstraintView(PGChildNodeView):
data = {} data = {}
for k, v in request.args.items(): for k, v in request.args.items():
try: try:
data[k] = json.loads(v) data[k] = json.loads(v, encoding='utf-8')
except ValueError: except ValueError:
data[k] = v data[k] = v
@ -903,6 +907,8 @@ class ForeignKeyConstraintView(PGChildNodeView):
"/".join([self.template_path, 'create.sql']), data=data) "/".join([self.template_path, 'create.sql']), data=data)
sql_header = "-- Constraint: {0}\n\n-- ".format(data['name']) sql_header = "-- Constraint: {0}\n\n-- ".format(data['name'])
if hasattr(str, 'decode'):
sql_header = sql_header.decode('utf-8')
sql_header += render_template( sql_header += render_template(
"/".join([self.template_path, 'delete.sql']), "/".join([self.template_path, 'delete.sql']),
@ -1055,7 +1061,7 @@ class ForeignKeyConstraintView(PGChildNodeView):
index = None index = None
try: try:
if data and 'cols' in data: if data and 'cols' in data:
cols = set(json.loads(data['cols'])) cols = set(json.loads(data['cols'], encoding='utf-8'))
index = self.search_coveringindex(tid, cols) index = self.search_coveringindex(tid, cols)
return make_json_response( return make_json_response(

View File

@ -9,7 +9,7 @@
"""Implements Primary key constraint Node""" """Implements Primary key constraint Node"""
import json import simplejson as json
from functools import wraps from functools import wraps
import pgadmin.browser.server_groups.servers.databases as database import pgadmin.browser.server_groups.servers.databases as database
@ -444,11 +444,13 @@ class IndexConstraintView(PGChildNodeView):
[u'columns', u'index'] # Either of one should be there. [u'columns', u'index'] # Either of one should be there.
] ]
data = request.form if request.form else json.loads(request.data.decode()) data = request.form if request.form else json.loads(
request.data, encoding='utf-8'
)
for k, v in data.items(): for k, v in data.items():
try: try:
data[k] = json.loads(v) data[k] = json.loads(v, encoding='utf-8')
except (ValueError, TypeError): except (ValueError, TypeError):
data[k] = v data[k] = v
@ -563,7 +565,9 @@ class IndexConstraintView(PGChildNodeView):
Returns: Returns:
""" """
data = request.form if request.form else json.loads(request.data.decode()) data = request.form if request.form else json.loads(
request.data, encoding='utf-8'
)
try: try:
data['schema'] = self.schema data['schema'] = self.schema
@ -699,7 +703,7 @@ class IndexConstraintView(PGChildNodeView):
data = {} data = {}
for k, v in request.args.items(): for k, v in request.args.items():
try: try:
data[k] = json.loads(v) data[k] = json.loads(v, encoding='utf-8')
except ValueError: except ValueError:
data[k] = v data[k] = v
@ -827,6 +831,8 @@ class IndexConstraintView(PGChildNodeView):
constraint_name=self.constraint_name) constraint_name=self.constraint_name)
sql_header = "-- Constraint: {0}\n\n-- ".format(data['name']) sql_header = "-- Constraint: {0}\n\n-- ".format(data['name'])
if hasattr(str, 'decode'):
sql_header = sql_header.decode('utf-8')
sql_header += render_template( sql_header += render_template(
"/".join([self.template_path, 'delete.sql']), "/".join([self.template_path, 'delete.sql']),

View File

@ -9,7 +9,7 @@
""" Implements Index Node """ """ Implements Index Node """
import json import simplejson as json
from functools import wraps from functools import wraps
import pgadmin.browser.server_groups.servers.databases as database import pgadmin.browser.server_groups.servers.databases as database
@ -522,12 +522,12 @@ class IndexesView(PGChildNodeView):
tid: Table ID tid: Table ID
""" """
data = request.form if request.form else json.loads( data = request.form if request.form else json.loads(
request.data.decode() request.data, encoding='utf-8'
) )
for k, v in data.items(): for k, v in data.items():
try: try:
data[k] = json.loads(v) data[k] = json.loads(v, encoding='utf-8')
except (ValueError, TypeError): except (ValueError, TypeError):
data[k] = v data[k] = v
@ -683,7 +683,9 @@ class IndexesView(PGChildNodeView):
tid: Table ID tid: Table ID
idx: Index ID idx: Index ID
""" """
data = request.form if request.form else json.loads(request.data.decode()) data = request.form if request.form else json.loads(
request.data, encoding='utf-8'
)
data['schema'] = self.schema data['schema'] = self.schema
data['table'] = self.table data['table'] = self.table
try: try:
@ -732,7 +734,7 @@ class IndexesView(PGChildNodeView):
data = dict() data = dict()
for k, v in request.args.items(): for k, v in request.args.items():
try: try:
data[k] = json.loads(v) data[k] = json.loads(v, encoding='utf-8')
except ValueError: except ValueError:
data[k] = v data[k] = v
@ -835,6 +837,9 @@ class IndexesView(PGChildNodeView):
SQL = self.get_sql(scid, tid, None, data) SQL = self.get_sql(scid, tid, None, data)
sql_header = "-- Index: {0}\n\n-- ".format(data['name']) sql_header = "-- Index: {0}\n\n-- ".format(data['name'])
if hasattr(str, 'decode'):
sql_header = sql_header.decode('utf-8')
sql_header += render_template("/".join([self.template_path, sql_header += render_template("/".join([self.template_path,
'delete.sql']), 'delete.sql']),
data=data, conn=self.conn) data=data, conn=self.conn)

View File

@ -9,7 +9,7 @@
"""Implements Rule Node""" """Implements Rule Node"""
import json import simplejson as json
from functools import wraps from functools import wraps
import pgadmin.browser.server_groups.servers.databases.schemas as schemas import pgadmin.browser.server_groups.servers.databases.schemas as schemas
@ -290,8 +290,9 @@ class RuleView(PGChildNodeView):
'name', 'name',
] ]
data = request.form if request.form else \ data = request.form if request.form else json.loads(
json.loads(request.data.decode()) request.data, encoding='utf-8'
)
for arg in required_args: for arg in required_args:
if arg not in data: if arg not in data:
return make_json_response( return make_json_response(
@ -331,8 +332,9 @@ class RuleView(PGChildNodeView):
""" """
This function will update a rule object This function will update a rule object
""" """
data = request.form if request.form else \ data = request.form if request.form else json.loads(
json.loads(request.data.decode()) request.data, encoding='utf-8'
)
SQL = self.getSQL(gid, sid, data, tid, rid) SQL = self.getSQL(gid, sid, data, tid, rid)
try: try:
if SQL and SQL.strip('\n') and SQL.strip(' '): if SQL and SQL.strip('\n') and SQL.strip(' '):

View File

@ -9,7 +9,7 @@
""" Implements Trigger Node """ """ Implements Trigger Node """
import json import simplejson as json
from functools import wraps from functools import wraps
import pgadmin.browser.server_groups.servers.databases as database import pgadmin.browser.server_groups.servers.databases as database
@ -537,12 +537,12 @@ class TriggerView(PGChildNodeView):
tid: Table ID tid: Table ID
""" """
data = request.form if request.form else json.loads( data = request.form if request.form else json.loads(
request.data.decode() request.data, encoding='utf-8'
) )
for k, v in data.items(): for k, v in data.items():
try: try:
data[k] = json.loads(v) data[k] = json.loads(v, encoding='utf-8')
except (ValueError, TypeError): except (ValueError, TypeError):
data[k] = v data[k] = v
@ -668,7 +668,9 @@ class TriggerView(PGChildNodeView):
tid: Table ID tid: Table ID
trid: Trigger ID trid: Trigger ID
""" """
data = request.form if request.form else json.loads(request.data.decode()) data = request.form if request.form else json.loads(
request.data, encoding='utf-8'
)
try: try:
SQL = self.get_sql(scid, tid, trid, data) SQL = self.get_sql(scid, tid, trid, data)
@ -716,7 +718,7 @@ class TriggerView(PGChildNodeView):
data = dict() data = dict()
for k, v in request.args.items(): for k, v in request.args.items():
try: try:
data[k] = json.loads(v) data[k] = json.loads(v, encoding='utf-8')
except ValueError: except ValueError:
data[k] = v data[k] = v
@ -826,6 +828,9 @@ class TriggerView(PGChildNodeView):
SQL = self.get_sql(scid, tid, None, data) SQL = self.get_sql(scid, tid, None, data)
sql_header = "-- Trigger: {0}\n\n-- ".format(data['name']) sql_header = "-- Trigger: {0}\n\n-- ".format(data['name'])
if hasattr(str, 'decode'):
sql_header = sql_header.decode('utf-8')
sql_header += render_template("/".join([self.template_path, sql_header += render_template("/".join([self.template_path,
'delete.sql']), 'delete.sql']),
data=data, conn=self.conn) data=data, conn=self.conn)
@ -858,7 +863,9 @@ class TriggerView(PGChildNodeView):
trid: Trigger ID trid: Trigger ID
""" """
data = request.form if request.form else json.loads(request.data.decode()) data = request.form if request.form else json.loads(
request.data, encoding='utf-8'
)
# Convert str 'true' to boolean type # Convert str 'true' to boolean type
is_enable_flag = json.loads(data['enable']) is_enable_flag = json.loads(data['enable'])

View File

@ -9,7 +9,7 @@
""" Implements Type Node """ """ Implements Type Node """
import json import simplejson as json
from functools import wraps from functools import wraps
import pgadmin.browser.server_groups.servers.databases as database import pgadmin.browser.server_groups.servers.databases as database
@ -793,7 +793,9 @@ class TypeView(PGChildNodeView, DataTypeReader):
scid: Schema ID scid: Schema ID
tid: Type ID tid: Type ID
""" """
data = request.form if request.form else json.loads(request.data.decode()) data = request.form if request.form else json.loads(
request.data, encoding='utf-8'
)
required_args = { required_args = {
'name': 'Name', 'name': 'Name',
'typtype': 'Type' 'typtype': 'Type'
@ -898,7 +900,9 @@ class TypeView(PGChildNodeView, DataTypeReader):
tid: Type ID tid: Type ID
""" """
data = request.form if request.form else json.loads(request.data.decode()) data = request.form if request.form else json.loads(
request.data, encoding='utf-8'
)
try: try:
SQL = self.get_sql(gid, sid, data, scid, tid) SQL = self.get_sql(gid, sid, data, scid, tid)
if SQL and SQL.strip('\n') and SQL.strip(' '): if SQL and SQL.strip('\n') and SQL.strip(' '):
@ -1015,7 +1019,7 @@ class TypeView(PGChildNodeView, DataTypeReader):
# converting nested request data in proper json format # converting nested request data in proper json format
for key, val in req.items(): for key, val in req.items():
if key in ['composite', 'enum', 'seclabels', 'typacl']: if key in ['composite', 'enum', 'seclabels', 'typacl']:
data[key] = json.loads(val) data[key] = json.loads(val, encoding='utf-8')
else: else:
data[key] = val data[key] = val
@ -1191,6 +1195,9 @@ class TypeView(PGChildNodeView, DataTypeReader):
# We are appending headers here for sql panel # We are appending headers here for sql panel
sql_header = "-- Type: {0}\n\n-- ".format(data['name']) sql_header = "-- Type: {0}\n\n-- ".format(data['name'])
if hasattr(str, 'decode'):
sql_header = sql_header.decode('utf-8')
sql_header += render_template("/".join([self.template_path, sql_header += render_template("/".join([self.template_path,
'delete.sql']), 'delete.sql']),
data=data, conn=self.conn) data=data, conn=self.conn)

View File

@ -466,8 +466,9 @@ class ViewNode(PGChildNodeView, VacuumSettings):
'definition' 'definition'
] ]
data = request.form if request.form else \ data = request.form if request.form else json.loads(
json.loads(request.data.decode()) request.data, encoding='utf-8'
)
for arg in required_args: for arg in required_args:
if arg not in data: if arg not in data:
return make_json_response( return make_json_response(
@ -511,8 +512,9 @@ class ViewNode(PGChildNodeView, VacuumSettings):
""" """
This function will update a view object This function will update a view object
""" """
data = request.form if request.form else \ data = request.form if request.form else json.loads(
json.loads(request.data.decode()) request.data, encoding='utf-8'
)
SQL = self.getSQL(gid, sid, data, vid) SQL = self.getSQL(gid, sid, data, vid)
try: try:
if SQL and SQL.strip('\n') and SQL.strip(' '): if SQL and SQL.strip('\n') and SQL.strip(' '):
@ -637,7 +639,7 @@ class ViewNode(PGChildNodeView, VacuumSettings):
data = {} data = {}
for k, v in request.args.items(): for k, v in request.args.items():
try: try:
data[k] = json.loads(v) data[k] = json.loads(v, encoding='utf-8')
except ValueError: except ValueError:
data[k] = v data[k] = v
@ -1139,7 +1141,7 @@ class ViewNode(PGChildNodeView, VacuumSettings):
else: else:
columns = '*' columns = '*'
sql = "SELECT {0}\n\tFROM {1};".format( sql = u"SELECT {0}\n\tFROM {1};".format(
columns, columns,
self.qtIdent(self.conn, data_view['schema'], data_view['name']) self.qtIdent(self.conn, data_view['schema'], data_view['name'])
) )
@ -1196,7 +1198,7 @@ class ViewNode(PGChildNodeView, VacuumSettings):
if len(columns) > 0: if len(columns) > 0:
columns = ", ".join(columns) columns = ", ".join(columns)
values = ", ".join(values) values = ", ".join(values)
sql = "INSERT INTO {0}(\n\t{1})\n\tVALUES ({2});".format( sql = u"INSERT INTO {0}(\n\t{1})\n\tVALUES ({2});".format(
self.qtIdent( self.qtIdent(
self.conn, data_view['schema'], data_view['name'] self.conn, data_view['schema'], data_view['name']
), ),
@ -1607,8 +1609,9 @@ class MViewNode(ViewNode, VacuumSettings):
""" """
# Below will decide if it's refresh data or refresh concurrently # Below will decide if it's refresh data or refresh concurrently
data = request.form if request.form else \ data = request.form if request.form else json.loads(
json.loads(request.data.decode()) request.data, encoding='utf-8'
)
is_concurrent = json.loads(data['concurrent']) is_concurrent = json.loads(data['concurrent'])
with_data = json.loads(data['with_data']) with_data = json.loads(data['with_data'])

View File

@ -9,7 +9,7 @@
"""Implements Resource Groups for PPAS 9.4 and above""" """Implements Resource Groups for PPAS 9.4 and above"""
import json import simplejson as json
from functools import wraps from functools import wraps
import pgadmin.browser.server_groups.servers as servers import pgadmin.browser.server_groups.servers as servers
@ -312,7 +312,9 @@ class ResourceGroupView(NodeView):
'name' 'name'
] ]
data = request.form if request.form else json.loads(request.data.decode()) data = request.form if request.form else json.loads(
request.data, encoding='utf-8'
)
for arg in required_args: for arg in required_args:
if arg not in data: if arg not in data:
return make_json_response( return make_json_response(
@ -370,7 +372,9 @@ class ResourceGroupView(NodeView):
required_args = [ required_args = [
'name', 'cpu_rate_limit', 'dirty_rate_limit' 'name', 'cpu_rate_limit', 'dirty_rate_limit'
] ]
data = request.form if request.form else json.loads(request.data.decode()) data = request.form if request.form else json.loads(
request.data, encoding='utf-8'
)
try: try:
sql = render_template("/".join([self.template_path, 'properties.sql']), rgid=rg_id) sql = render_template("/".join([self.template_path, 'properties.sql']), rgid=rg_id)
@ -474,7 +478,7 @@ class ResourceGroupView(NodeView):
data = dict() data = dict()
for k, v in request.args.items(): for k, v in request.args.items():
try: try:
data[k] = json.loads(v) data[k] = json.loads(v, encoding='utf-8')
except ValueError: except ValueError:
data[k] = v data[k] = v

View File

@ -111,7 +111,7 @@ class RoleView(PGChildNodeView):
data = None data = None
if request.data: if request.data:
data = json.loads(request.data) data = json.loads(request.data, encoding='utf-8')
else: else:
data = dict() data = dict()
req = request.args or request.form req = request.args or request.form
@ -125,7 +125,7 @@ class RoleView(PGChildNodeView):
u'rolcatupdate', u'variables', u'rolmembership', u'rolcatupdate', u'variables', u'rolmembership',
u'seclabels' u'seclabels'
]: ]:
data[key] = json.loads(val) data[key] = json.loads(val, encoding='utf-8')
else: else:
data[key] = val data[key] = val
@ -685,7 +685,7 @@ rolmembership:{
def drop(self, gid, sid, rid): def drop(self, gid, sid, rid):
status, res = self.conn.execute_2darray( status, res = self.conn.execute_2darray(
"DROP ROLE {0};".format(self.qtIdent(self.conn, self.role)) u"DROP ROLE {0};".format(self.qtIdent(self.conn, self.role))
) )
if not status: if not status:
return internal_server_error( return internal_server_error(

View File

@ -6,7 +6,7 @@
# This software is released under the PostgreSQL Licence # This software is released under the PostgreSQL Licence
# #
########################################################################## ##########################################################################
import json import simplejson as json
import re import re
from functools import wraps from functools import wraps
@ -252,7 +252,9 @@ class TablespaceView(PGChildNodeView):
'spclocation': 'Location' 'spclocation': 'Location'
} }
data = request.form if request.form else json.loads(request.data.decode()) data = request.form if request.form else json.loads(
request.data, encoding='utf-8'
)
for arg in required_args: for arg in required_args:
if arg not in data: if arg not in data:
@ -318,7 +320,9 @@ class TablespaceView(PGChildNodeView):
""" """
This function will update tablespace object This function will update tablespace object
""" """
data = request.form if request.form else json.loads(request.data.decode()) data = request.form if request.form else json.loads(
request.data, encoding='utf-8'
)
try: try:
SQL = self.get_sql(gid, sid, data, tsid) SQL = self.get_sql(gid, sid, data, tsid)
@ -411,7 +415,7 @@ class TablespaceView(PGChildNodeView):
data = dict() data = dict()
for k, v in request.args.items(): for k, v in request.args.items():
try: try:
data[k] = json.loads(v) data[k] = json.loads(v, encoding='utf-8')
except ValueError as ve: except ValueError as ve:
current_app.logger.exception(ve) current_app.logger.exception(ve)
data[k] = v data[k] = v
@ -527,6 +531,9 @@ class TablespaceView(PGChildNodeView):
""".format(old_data['name']) """.format(old_data['name'])
if hasattr(str, 'decode'):
sql_header = sql_header.decode('utf-8')
SQL = sql_header + SQL SQL = sql_header + SQL
SQL = re.sub('\n{2,}', '\n\n', SQL) SQL = re.sub('\n{2,}', '\n\n', SQL)
return ajax_response(response=SQL.strip('\n')) return ajax_response(response=SQL.strip('\n'))
@ -729,7 +736,7 @@ class TablespaceView(PGChildNodeView):
sid: Server ID sid: Server ID
tsid: Tablespace ID tsid: Tablespace ID
""" """
data = json.loads(request.form['data']) data = json.loads(request.form['data'], encoding='utf-8')
try: try:
SQL = render_template("/".join( SQL = render_template("/".join(
@ -768,7 +775,7 @@ class TablespaceView(PGChildNodeView):
data = dict() data = dict()
for k, v in request.args.items(): for k, v in request.args.items():
try: try:
data[k] = json.loads(v) data[k] = json.loads(v, encoding='utf-8')
except ValueError as ve: except ValueError as ve:
current_app.logger.exception(ve) current_app.logger.exception(ve)
data[k] = v data[k] = v

View File

@ -9,7 +9,7 @@
"""Implements Backup Utility""" """Implements Backup Utility"""
import json import simplejson as json
import os import os
from flask import render_template, request, current_app, \ from flask import render_template, request, current_app, \
@ -233,9 +233,9 @@ def create_backup_job(sid):
if request.form: if request.form:
# Convert ImmutableDict to dict # Convert ImmutableDict to dict
data = dict(request.form) data = dict(request.form)
data = json.loads(data['data'][0]) data = json.loads(data['data'][0], encoding='utf-8')
else: else:
data = json.loads(request.data.decode()) data = json.loads(request.data, encoding='utf-8')
backup_file = filename_with_file_manager_path(data['file']) backup_file = filename_with_file_manager_path(data['file'])
@ -327,9 +327,9 @@ def create_backup_objects_job(sid):
if request.form: if request.form:
# Convert ImmutableDict to dict # Convert ImmutableDict to dict
data = dict(request.form) data = dict(request.form)
data = json.loads(data['data'][0]) data = json.loads(data['data'][0], encoding='utf-8')
else: else:
data = json.loads(request.data.decode()) data = json.loads(request.data, encoding='utf-8')
backup_file = filename_with_file_manager_path(data['file']) backup_file = filename_with_file_manager_path(data['file'])

View File

@ -10,7 +10,7 @@
"""A blueprint module implementing the datagrid frame.""" """A blueprint module implementing the datagrid frame."""
MODULE_NAME = 'datagrid' MODULE_NAME = 'datagrid'
import json import simplejson as json
import pickle import pickle
import random import random
@ -93,7 +93,7 @@ def initialize_datagrid(cmd_type, obj_type, sid, did, obj_id):
""" """
if request.data: if request.data:
filter_sql = json.loads(request.data.decode()) filter_sql = json.loads(request.data, encoding='utf-8')
else: else:
filter_sql = request.args or request.form filter_sql = request.args or request.form
@ -289,7 +289,7 @@ def validate_filter(sid, did, obj_id):
obj_id: Id of currently selected object obj_id: Id of currently selected object
""" """
if request.data: if request.data:
filter_sql = json.loads(request.data.decode()) filter_sql = json.loads(request.data, encoding='utf-8')
else: else:
filter_sql = request.args or request.form filter_sql = request.args or request.form

View File

@ -11,7 +11,7 @@
MODULE_NAME = 'debugger' MODULE_NAME = 'debugger'
import json import simplejson as json
import random import random
from flask import url_for, Response, render_template, request, session, current_app from flask import url_for, Response, render_template, request, session, current_app
@ -373,7 +373,7 @@ def initialize_target(debug_type, sid, did, scid, func_id):
# Here we get the value in case of direct debugging so update the session variables accordingly # Here we get the value in case of direct debugging so update the session variables accordingly
# For indirect debugging user will provide the data from another session so below condition will be be required # For indirect debugging user will provide the data from another session so below condition will be be required
if request.method == 'POST': if request.method == 'POST':
data = json.loads(request.values['data']) data = json.loads(request.values['data'], encoding='utf-8')
if data: if data:
d = session['funcData'] d = session['funcData']
d['args_value'] = data d['args_value'] = data
@ -582,7 +582,7 @@ def start_debugger_listener(trans_id):
# If user again start the same debug function with different arguments then we need to save that values to session # If user again start the same debug function with different arguments then we need to save that values to session
# variable and database. # variable and database.
if request.method == 'POST': if request.method == 'POST':
data = json.loads(request.values['data']) data = json.loads(request.values['data'], encoding='utf-8')
if data: if data:
function_data = session['functionData'] function_data = session['functionData']
session_obj = function_data[str(trans_id)] session_obj = function_data[str(trans_id)]
@ -1080,7 +1080,7 @@ def deposit_parameter_value(trans_id):
if conn.connected(): if conn.connected():
# get the data sent through post from client # get the data sent through post from client
data = json.loads(request.values['data']) data = json.loads(request.values['data'], encoding='utf-8')
if data: if data:
sql = render_template("/".join([template_path, "deposit_value.sql"]), session_id=obj['session_id'], sql = render_template("/".join([template_path, "deposit_value.sql"]), session_id=obj['session_id'],
@ -1223,7 +1223,7 @@ def set_arguments_sqlite(sid, did, scid, func_id):
""" """
if request.values['data']: if request.values['data']:
data = json.loads(request.values['data']) data = json.loads(request.values['data'], encoding='utf-8')
try: try:
for i in range(0, len(data)): for i in range(0, len(data)):

View File

@ -9,7 +9,7 @@
"""A blueprint module implementing the import and export functionality""" """A blueprint module implementing the import and export functionality"""
import json import simplejson as json
import os import os
from flask import url_for, Response, render_template, request, current_app from flask import url_for, Response, render_template, request, current_app
@ -166,9 +166,9 @@ def create_import_export_job(sid):
if request.form: if request.form:
# Convert ImmutableDict to dict # Convert ImmutableDict to dict
data = dict(request.form) data = dict(request.form)
data = json.loads(data['data'][0]) data = json.loads(data['data'][0], encoding='utf-8')
else: else:
data = json.loads(request.data.decode()) data = json.loads(request.data, encoding='utf-8')
# Fetch the server details like hostname, port, roles etc # Fetch the server details like hostname, port, roles etc
server = Server.query.filter_by( server = Server.query.filter_by(

View File

@ -9,7 +9,7 @@
"""A blueprint module implementing the maintenance tool for vacuum""" """A blueprint module implementing the maintenance tool for vacuum"""
import json import simplejson as json
from flask import url_for, Response, render_template, request, current_app from flask import url_for, Response, render_template, request, current_app
from flask_babel import gettext as _ from flask_babel import gettext as _
@ -171,9 +171,9 @@ def create_maintenance_job(sid, did):
if request.form: if request.form:
# Convert ImmutableDict to dict # Convert ImmutableDict to dict
data = dict(request.form) data = dict(request.form)
data = json.loads(data['data'][0]) data = json.loads(data['data'][0], encoding='utf-8')
else: else:
data = json.loads(request.data.decode()) data = json.loads(request.data, encoding='utf-8')
index_name = None index_name = None

View File

@ -9,7 +9,7 @@
"""Implements Restore Utility""" """Implements Restore Utility"""
import json import simplejson as json
import os import os
from flask import render_template, request, current_app, \ from flask import render_template, request, current_app, \
@ -175,9 +175,9 @@ def create_restore_job(sid):
if request.form: if request.form:
# Convert ImmutableDict to dict # Convert ImmutableDict to dict
data = dict(request.form) data = dict(request.form)
data = json.loads(data['data'][0]) data = json.loads(data['data'][0], encoding='utf-8')
else: else:
data = json.loads(request.data.decode()) data = json.loads(request.data, encoding='utf-8')
backup_file = filename_with_file_manager_path(data['file']) backup_file = filename_with_file_manager_path(data['file'])

View File

@ -10,7 +10,7 @@
"""A blueprint module implementing the sqleditor frame.""" """A blueprint module implementing the sqleditor frame."""
MODULE_NAME = 'sqleditor' MODULE_NAME = 'sqleditor'
import json import simplejson as json
import os import os
import pickle import pickle
import random import random
@ -238,7 +238,7 @@ def start_query_tool(trans_id):
""" """
if request.data: if request.data:
sql = json.loads(request.data.decode()) sql = json.loads(request.data, encoding='utf-8')
else: else:
sql = request.args or request.form sql = request.args or request.form
@ -366,7 +366,7 @@ def preferences(trans_id):
else: else:
data = None data = None
if request.data: if request.data:
data = json.loads(request.data.decode()) data = json.loads(request.data, encoding='utf-8')
else: else:
data = request.args or request.form data = request.args or request.form
for k, v in data.items(): for k, v in data.items():
@ -516,7 +516,7 @@ def save(trans_id):
""" """
if request.data: if request.data:
changed_data = json.loads(request.data.decode()) changed_data = json.loads(request.data, encoding='utf-8')
else: else:
changed_data = request.args or request.form changed_data = request.args or request.form
@ -574,7 +574,7 @@ def apply_filter(trans_id):
trans_id: unique transaction id trans_id: unique transaction id
""" """
if request.data: if request.data:
filter_sql = json.loads(request.data.decode()) filter_sql = json.loads(request.data, encoding='utf-8')
else: else:
filter_sql = request.args or request.form filter_sql = request.args or request.form
@ -606,7 +606,7 @@ def append_filter_inclusive(trans_id):
trans_id: unique transaction id trans_id: unique transaction id
""" """
if request.data: if request.data:
filter_data = json.loads(request.data.decode()) filter_data = json.loads(request.data, encoding='utf-8')
else: else:
filter_data = request.args or request.form filter_data = request.args or request.form
@ -649,7 +649,7 @@ def append_filter_exclusive(trans_id):
trans_id: unique transaction id trans_id: unique transaction id
""" """
if request.data: if request.data:
filter_data = json.loads(request.data.decode()) filter_data = json.loads(request.data, encoding='utf-8')
else: else:
filter_data = request.args or request.form filter_data = request.args or request.form
@ -724,7 +724,7 @@ def set_limit(trans_id):
trans_id: unique transaction id trans_id: unique transaction id
""" """
if request.data: if request.data:
limit = json.loads(request.data.decode()) limit = json.loads(request.data, encoding='utf-8')
else: else:
limit = request.args or request.form limit = request.args or request.form
@ -847,7 +847,7 @@ def set_auto_commit(trans_id):
trans_id: unique transaction id trans_id: unique transaction id
""" """
if request.data: if request.data:
auto_commit = json.loads(request.data.decode()) auto_commit = json.loads(request.data, encoding='utf-8')
else: else:
auto_commit = request.args or request.form auto_commit = request.args or request.form
@ -885,7 +885,7 @@ def set_auto_rollback(trans_id):
trans_id: unique transaction id trans_id: unique transaction id
""" """
if request.data: if request.data:
auto_rollback = json.loads(request.data.decode()) auto_rollback = json.loads(request.data, encoding='utf-8')
else: else:
auto_rollback = request.args or request.form auto_rollback = request.args or request.form
@ -926,7 +926,7 @@ def auto_complete(trans_id):
text_before_cursor = '' text_before_cursor = ''
if request.data: if request.data:
data = json.loads(request.data.decode()) data = json.loads(request.data, encoding='utf-8')
else: else:
data = request.args or request.form data = request.args or request.form
@ -1125,7 +1125,7 @@ def load_file():
reads the data and sends back in reponse reads the data and sends back in reponse
""" """
if request.data: if request.data:
file_data = json.loads(request.data.decode()) file_data = json.loads(request.data, encoding='utf-8')
file_path = unquote(file_data['file_name']) file_path = unquote(file_data['file_name'])
# retrieve storage directory path # retrieve storage directory path
@ -1182,7 +1182,7 @@ def save_file():
and then save the data to the file and then save the data to the file
""" """
if request.data: if request.data:
file_data = json.loads(request.data.decode()) file_data = json.loads(request.data, encoding='utf-8')
# retrieve storage directory path # retrieve storage directory path
storage_manager_path = get_storage_directory() storage_manager_path = get_storage_directory()

View File

@ -9,7 +9,7 @@
"""Implements pgAdmin4 User Management Utility""" """Implements pgAdmin4 User Management Utility"""
import json import simplejson as json
import re import re
from flask import render_template, request, \ from flask import render_template, request, \
@ -163,7 +163,9 @@ def create():
Returns: Returns:
""" """
data = request.form if request.form else json.loads(request.data.decode()) data = request.form if request.form else json.loads(
request.data, encoding='utf-8'
)
for f in ('email', 'role', 'active', 'newPassword', 'confirmPassword'): for f in ('email', 'role', 'active', 'newPassword', 'confirmPassword'):
if f in data and data[f] != '': if f in data and data[f] != '':
@ -265,7 +267,9 @@ def update(uid):
if not usr: if not usr:
abort(404) abort(404)
data = request.form if request.form else json.loads(request.data.decode()) data = request.form if request.form else json.loads(
request.data, encoding='utf-8'
)
try: try:
new_data = validate_user(data) new_data = validate_user(data)

View File

@ -250,13 +250,23 @@ class Connection(BaseConnection):
password = password.decode() password = password.decode()
try: try:
if hasattr(str, 'decode'):
database = self.db.encode('utf-8')
user = mgr.user.encode('utf-8')
conn_id = self.conn_id.encode('utf-8')
else:
database = self.db
user = mgr.user
conn_id = self.conn_id
import os import os
os.environ['PGAPPNAME'] = '{0} - {1}'.format(config.APP_NAME, self.conn_id) os.environ['PGAPPNAME'] = '{0} - {1}'.format(config.APP_NAME, conn_id)
pg_conn = psycopg2.connect( pg_conn = psycopg2.connect(
host=mgr.host, host=mgr.host,
port=mgr.port, port=mgr.port,
database=self.db, database=database,
user=mgr.user, user=user,
password=password, password=password,
async=self.async async=self.async
) )
@ -277,7 +287,7 @@ class Connection(BaseConnection):
Failed to connect to the database server(#{server_id}) for connection ({conn_id}) with error message as below: Failed to connect to the database server(#{server_id}) for connection ({conn_id}) with error message as below:
{msg}""".format( {msg}""".format(
server_id=self.manager.sid, server_id=self.manager.sid,
conn_id=self.conn_id, conn_id=conn_id,
msg=msg msg=msg
) )
) )
@ -310,7 +320,7 @@ SET client_encoding='UNICODE';""")
return False, res return False, res
if mgr.role: if mgr.role:
status, res = self.execute_scalar("SET ROLE TO %s", [mgr.role]) status, res = self.execute_scalar(u"SET ROLE TO %s", [mgr.role])
if not status: if not status:
self.conn.close() self.conn.close()
@ -320,7 +330,7 @@ Connect to the database server (#{server_id}) for connection ({conn_id}), but -
{msg} {msg}
""".format( """.format(
server_id=self.manager.sid, server_id=self.manager.sid,
conn_id=self.conn_id, conn_id=conn_id,
msg=res msg=res
) )
) )
@ -343,7 +353,7 @@ Failed to fetch the version information on the established connection to the dat
{msg} {msg}
""".format( """.format(
server_id=self.manager.sid, server_id=self.manager.sid,
conn_id=self.conn_id, conn_id=conn_id,
msg=res msg=res
) )
) )
@ -395,7 +405,10 @@ WHERE
return True, None return True, None
def __cursor(self, server_cursor=False): def __cursor(self, server_cursor=False):
cur = getattr(g, str(self.manager.sid) + '#' + self.conn_id, None) cur = getattr(g, "{0}#{1}".format(
self.manager.sid,
self.conn_id.encode('utf-8')
), None)
if self.connected() and cur and not cur.closed: if self.connected() and cur and not cur.closed:
if not server_cursor or (server_cursor and cur.name): if not server_cursor or (server_cursor and cur.name):
@ -457,7 +470,7 @@ Attempting to reconnect to the database server (#{server_id}) for the connection
status, cur = self.connect() status, cur = self.connect()
if not status: if not status:
msg = gettext( msg = gettext(
""" u"""
Connection for server#{0} with database "{1}" was lost. Connection for server#{0} with database "{1}" was lost.
Attempt to reconnect it failed with the error: Attempt to reconnect it failed with the error:
{2}""" {2}"""
@ -468,7 +481,7 @@ Attempt to reconnect it failed with the error:
else: else:
return False, errmsg return False, errmsg
setattr(g, str(self.manager.sid) + '#' + self.conn_id, cur) setattr(g, "{0}#{1}".format(self.manager.sid, self.conn_id.encode('utf-8')), cur)
return True, cur return True, cur
@ -498,7 +511,7 @@ Attempt to reconnect it failed with the error:
query_id = random.randint(1, 9999999) query_id = random.randint(1, 9999999)
current_app.logger.log(25, current_app.logger.log(25,
"Execute (with server cursor) for server #{server_id} - {conn_id} (Query-id: {query_id}):\n{query}".format( u"Execute (with server cursor) for server #{server_id} - {conn_id} (Query-id: {query_id}):\n{query}".format(
server_id=self.manager.sid, server_id=self.manager.sid,
conn_id=self.conn_id, conn_id=self.conn_id,
query=query, query=query,
@ -511,7 +524,7 @@ Attempt to reconnect it failed with the error:
cur.close() cur.close()
errmsg = self._formatted_exception_msg(pe, formatted_exception_msg) errmsg = self._formatted_exception_msg(pe, formatted_exception_msg)
current_app.logger.error( current_app.logger.error(
"Failed to execute query ((with server cursor) for the server #{server_id} - {conn_id} (Query-id: {query_id}):\nError Message:{errmsg}".format( u"Failed to execute query ((with server cursor) for the server #{server_id} - {conn_id} (Query-id: {query_id}):\nError Message:{errmsg}".format(
server_id=self.manager.sid, server_id=self.manager.sid,
conn_id=self.conn_id, conn_id=self.conn_id,
query=query, query=query,
@ -568,7 +581,7 @@ Attempt to reconnect it failed with the error:
current_app.logger.log( current_app.logger.log(
25, 25,
"Execute (scalar) for server #{server_id} - {conn_id} (Query-id: {query_id}):\n{query}".format( u"Execute (scalar) for server #{server_id} - {conn_id} (Query-id: {query_id}):\n{query}".format(
server_id=self.manager.sid, server_id=self.manager.sid,
conn_id=self.conn_id, conn_id=self.conn_id,
query=query, query=query,
@ -582,7 +595,7 @@ Attempt to reconnect it failed with the error:
cur.close() cur.close()
errmsg = self._formatted_exception_msg(pe, formatted_exception_msg) errmsg = self._formatted_exception_msg(pe, formatted_exception_msg)
current_app.logger.error( current_app.logger.error(
"Failed to execute query (execute_scalar) for the server #{server_id} - {conn_id} (Query-id: {query_id}):\nError Message:{errmsg}".format( u"Failed to execute query (execute_scalar) for the server #{server_id} - {conn_id} (Query-id: {query_id}):\nError Message:{errmsg}".format(
server_id=self.manager.sid, server_id=self.manager.sid,
conn_id=self.conn_id, conn_id=self.conn_id,
query=query, query=query,
@ -618,7 +631,7 @@ Attempt to reconnect it failed with the error:
current_app.logger.log( current_app.logger.log(
25, 25,
"Execute (async) for server #{server_id} - {conn_id} (Query-id: {query_id}):\n{query}".format( u"Execute (async) for server #{server_id} - {conn_id} (Query-id: {query_id}):\n{query}".format(
server_id=self.manager.sid, server_id=self.manager.sid,
conn_id=self.conn_id, conn_id=self.conn_id,
query=query, query=query,
@ -632,7 +645,7 @@ Attempt to reconnect it failed with the error:
res = self._wait_timeout(cur.connection, ASYNC_WAIT_TIMEOUT) res = self._wait_timeout(cur.connection, ASYNC_WAIT_TIMEOUT)
except psycopg2.Error as pe: except psycopg2.Error as pe:
errmsg = self._formatted_exception_msg(pe, formatted_exception_msg) errmsg = self._formatted_exception_msg(pe, formatted_exception_msg)
current_app.logger.error(""" current_app.logger.error(u"""
Failed to execute query (execute_async) for the server #{server_id} - {conn_id} Failed to execute query (execute_async) for the server #{server_id} - {conn_id}
(Query-id: {query_id}):\nError Message:{errmsg} (Query-id: {query_id}):\nError Message:{errmsg}
""".format( """.format(
@ -668,7 +681,7 @@ Failed to execute query (execute_async) for the server #{server_id} - {conn_id}
current_app.logger.log( current_app.logger.log(
25, 25,
"Execute (void) for server #{server_id} - {conn_id} (Query-id: {query_id}):\n{query}".format( u"Execute (void) for server #{server_id} - {conn_id} (Query-id: {query_id}):\n{query}".format(
server_id=self.manager.sid, server_id=self.manager.sid,
conn_id=self.conn_id, conn_id=self.conn_id,
query=query, query=query,
@ -681,7 +694,7 @@ Failed to execute query (execute_async) for the server #{server_id} - {conn_id}
except psycopg2.Error as pe: except psycopg2.Error as pe:
cur.close() cur.close()
errmsg = self._formatted_exception_msg(pe, formatted_exception_msg) errmsg = self._formatted_exception_msg(pe, formatted_exception_msg)
current_app.logger.error(""" current_app.logger.error(u"""
Failed to execute query (execute_void) for the server #{server_id} - {conn_id} Failed to execute query (execute_void) for the server #{server_id} - {conn_id}
(Query-id: {query_id}):\nError Message:{errmsg} (Query-id: {query_id}):\nError Message:{errmsg}
""".format( """.format(
@ -708,7 +721,7 @@ Failed to execute query (execute_void) for the server #{server_id} - {conn_id}
query_id = random.randint(1, 9999999) query_id = random.randint(1, 9999999)
current_app.logger.log( current_app.logger.log(
25, 25,
"Execute (2darray) for server #{server_id} - {conn_id} (Query-id: {query_id}):\n{query}".format( u"Execute (2darray) for server #{server_id} - {conn_id} (Query-id: {query_id}):\n{query}".format(
server_id=self.manager.sid, server_id=self.manager.sid,
conn_id=self.conn_id, conn_id=self.conn_id,
query=query, query=query,
@ -721,7 +734,7 @@ Failed to execute query (execute_void) for the server #{server_id} - {conn_id}
cur.close() cur.close()
errmsg = self._formatted_exception_msg(pe, formatted_exception_msg) errmsg = self._formatted_exception_msg(pe, formatted_exception_msg)
current_app.logger.error( current_app.logger.error(
"Failed to execute query (execute_2darray) for the server #{server_id} - {conn_id} (Query-id: {query_id}):\nError Message:{errmsg}".format( u"Failed to execute query (execute_2darray) for the server #{server_id} - {conn_id} (Query-id: {query_id}):\nError Message:{errmsg}".format(
server_id=self.manager.sid, server_id=self.manager.sid,
conn_id=self.conn_id, conn_id=self.conn_id,
query=query, query=query,
@ -753,7 +766,7 @@ Failed to execute query (execute_void) for the server #{server_id} - {conn_id}
query_id = random.randint(1, 9999999) query_id = random.randint(1, 9999999)
current_app.logger.log( current_app.logger.log(
25, 25,
"Execute (dict) for server #{server_id} - {conn_id} (Query-id: {query_id}):\n{query}".format( u"Execute (dict) for server #{server_id} - {conn_id} (Query-id: {query_id}):\n{query}".format(
server_id=self.manager.sid, server_id=self.manager.sid,
conn_id=self.conn_id, conn_id=self.conn_id,
query=query, query=query,
@ -766,7 +779,7 @@ Failed to execute query (execute_void) for the server #{server_id} - {conn_id}
cur.close() cur.close()
errmsg = self._formatted_exception_msg(pe, formatted_exception_msg) errmsg = self._formatted_exception_msg(pe, formatted_exception_msg)
current_app.logger.error( current_app.logger.error(
"Failed to execute query (execute_dict) for the server #{server_id}- {conn_id} (Query-id: {query_id}):\nError Message:{errmsg}".format( u"Failed to execute query (execute_dict) for the server #{server_id}- {conn_id} (Query-id: {query_id}):\nError Message:{errmsg}".format(
server_id=self.manager.sid, server_id=self.manager.sid,
conn_id=self.conn_id, conn_id=self.conn_id,
query_id=query_id, query_id=query_id,
@ -1245,17 +1258,23 @@ class ServerManager(object):
"Server has no active connection. Please connect to the server." "Server has no active connection. Please connect to the server."
) )
if database is None: if database is not None:
if hasattr(str, 'decode') and \
not isinstance(database, unicode):
database = database.decode('utf-8')
else:
if did is None: if did is None:
database = self.db database = self.db
elif did in self.db_info: elif did in self.db_info:
database = self.db_info[did]['datname'] database = self.db_info[did]['datname']
if hasattr(str, 'decode'):
database = database.decode('utf-8')
else: else:
maintenance_db_id = 'DB:' + self.db maintenance_db_id = u'DB:{0}'.format(self.db)
if maintenance_db_id in self.connections: if maintenance_db_id in self.connections:
conn = self.connections[maintenance_db_id] conn = self.connections[maintenance_db_id]
if conn.connected(): if conn.connected():
status, res = conn.execute_dict(""" status, res = conn.execute_dict(u"""
SELECT SELECT
db.oid as did, db.datname, db.datallowconn, db.oid as did, db.datname, db.datallowconn,
pg_encoding_to_char(db.encoding) AS serverencoding, pg_encoding_to_char(db.encoding) AS serverencoding,
@ -1267,6 +1286,9 @@ WHERE db.oid = {0}""".format(did))
if status and len(res['rows']) > 0: if status and len(res['rows']) > 0:
for row in res['rows']: for row in res['rows']:
self.db_info[did] = row self.db_info[did] = row
if hasattr(str, 'decode'):
self.db_info[did]['datname'] = \
self.db_info[did]['datname'].decode('utf-8')
database = self.db_info[did]['datname'] database = self.db_info[did]['datname']
if did not in self.db_info: if did not in self.db_info:
@ -1277,8 +1299,8 @@ WHERE db.oid = {0}""".format(did))
if database is None: if database is None:
raise Exception(msg_active_conn) raise Exception(msg_active_conn)
my_id = ('CONN:' + str(conn_id)) if conn_id is not None else \ my_id = (u'CONN:{0}'.format(conn_id)) if conn_id is not None else \
('DB:' + str(database)) (u'DB:{0}'.format(database))
self.pinged = datetime.datetime.now() self.pinged = datetime.datetime.now()
@ -1335,13 +1357,15 @@ WHERE db.oid = {0}""".format(did))
if did is not None: if did is not None:
if did in self.db_info and 'datname' in self.db_info[did]: if did in self.db_info and 'datname' in self.db_info[did]:
database = self.db_info[did]['datname'] database = self.db_info[did]['datname']
if hasattr(str, 'decode'):
database = database.decode('utf-8')
if database is None: if database is None:
return False return False
else: else:
return False return False
my_id = ('CONN:' + str(conn_id)) if conn_id is not None else \ my_id = (u'CONN:{0}'.format(conn_id)) if conn_id is not None else \
('DB:' + str(database)) if database is not None else None (u'DB:{0}'.format(database)) if database is not None else None
if my_id is not None: if my_id is not None:
if my_id in self.connections: if my_id in self.connections:
@ -1564,14 +1588,22 @@ class Driver(BaseDriver):
@staticmethod @staticmethod
def qtLiteral(value): def qtLiteral(value):
try:
res = adapt(value).getquoted() res = adapt(value).getquoted()
except UnicodeEncodeError:
# We will handle special characters with utf8 encoding
adapted = adapt(value)
adapted.encoding = 'utf8'
res = adapted.getquoted()
# Returns in bytes, we need to convert it in string # Returns in bytes, we need to convert it in string
if isinstance(res, bytes): if isinstance(res, bytes):
return res.decode() try:
else: res = res.decode()
return res except UnicodeDecodeError:
res = res.decode('utf-8')
return res
@staticmethod @staticmethod
def ScanKeywordExtraLookup(key): def ScanKeywordExtraLookup(key):
@ -1607,17 +1639,12 @@ class Driver(BaseDriver):
@staticmethod @staticmethod
def needsQuoting(key, forTypes): def needsQuoting(key, forTypes):
value = key
# Python 3 does not require the decoding of value
if hasattr(str, 'decode'):
value = key.decode()
else:
value = key
valNoArray = value valNoArray = value
# check if the string is number or not # check if the string is number or not
if (isinstance(value, int)): if isinstance(value, int):
return True; return True
# certain types should not be quoted even though it contains a space. Evilness. # certain types should not be quoted even though it contains a space. Evilness.
elif forTypes and value[-2:] == u"[]": elif forTypes and value[-2:] == u"[]":
valNoArray = value[:-2] valNoArray = value[:-2]
@ -1691,8 +1718,14 @@ class Driver(BaseDriver):
for val in args: for val in args:
if type(val) == list: if type(val) == list:
return map(lambda w: Driver.qtIdent(conn, w), val) return map(lambda w: Driver.qtIdent(conn, w), val)
if hasattr(str, 'decode') and not isinstance(val, unicode):
# Handling for python2
try:
val = str(val).encode('utf-8')
except UnicodeDecodeError:
# If already unicode, most likely coming from db
val = str(val).decode('utf-8')
val = str(val)
if len(val) == 0: if len(val) == 0:
continue continue