Fix unicode handling in the external process tools and show the complete command in the process viewer. Fixes #2963. Fixes #3157.

pull/9/head
Khushboo Vashi 2018-03-13 16:45:20 -04:00 committed by Dave Page
parent 876ce1799a
commit 802269910c
3 changed files with 38 additions and 9 deletions

View File

@ -78,10 +78,20 @@ class BatchProcess(object):
_("Could not find a process with the specified ID.")
)
try:
tmp_desc = loads(p.desc.encode('latin-1')) if \
IS_PY2 and hasattr(p.desc, 'encode') else loads(p.desc)
except UnicodeDecodeError:
tmp_desc = loads(p.desc.encode('utf-8')) if \
IS_PY2 and hasattr(p.desc, 'encode') else loads(p.desc)
except Exception as e:
tmp_desc = loads(p.desc.encode('utf-8', 'ignore')) if \
IS_PY2 and hasattr(p.desc, 'encode') else loads(p.desc)
# ID
self.id = _id
# Description
self.desc = loads(p.desc)
self.desc = tmp_desc
# Status Acknowledged time
self.atime = p.acknowledge
# Command
@ -171,6 +181,16 @@ class BatchProcess(object):
csv_writer.writerow(_args)
args_val = args_csv_io.getvalue().strip(str('\r\n'))
tmp_desc = dumps(self.desc)
try:
tmp_desc =tmp_desc.decode('utf-8') if\
IS_PY2 and hasattr(tmp_desc, 'decode') else tmp_desc
except UnicodeDecodeError:
tmp_desc = tmp_desc.decode('latin-1') if \
IS_PY2 and hasattr(tmp_desc, 'decode') else tmp_desc
except Exception:
tmp_desc = tmp_desc.decode('utf-8', 'ignore') if \
IS_PY2 and hasattr(tmp_desc, 'decode') else tmp_desc
j = Process(
pid=int(id),
@ -178,7 +198,7 @@ class BatchProcess(object):
arguments=args_val.decode('utf-8', 'replace')
if IS_PY2 and hasattr(args_val, 'decode') else args_val,
logdir=log_dir,
desc=dumps(self.desc),
desc=tmp_desc,
user_id=current_user.id
)
db.session.add(j)
@ -534,7 +554,17 @@ class BatchProcess(object):
etime = parser.parse(p.end_time or get_current_time())
execution_time = (etime - stime).total_seconds()
desc = loads(p.desc)
desc = ""
try:
desc = loads(p.desc.encode('latin-1')) if \
IS_PY2 and hasattr(p.desc, 'encode') else loads(p.desc)
except UnicodeDecodeError:
desc = loads(p.desc.encode('utf-8')) if \
IS_PY2 and hasattr(p.desc, 'encode') else loads(p.desc)
except Exception:
desc = loads(p.desc.encode('utf-8', 'ignore')) if \
IS_PY2 and hasattr(p.desc, 'encode') else loads(p.desc)
details = desc
if isinstance(desc, IProcessDesc):

View File

@ -248,7 +248,7 @@ define('misc.bgprocess', [
if (!self.notifier) {
var header = $('<div></div>', {
class: 'h5 pg-bg-notify-header',
}).append($('<span></span>').text(self.desc)),
}).append($('<span></span>').text(_.unescape(self.desc))),
content = $('<div class="pg-bg-bgprocess row"></div>').append(
header
).append(
@ -366,7 +366,7 @@ define('misc.bgprocess', [
self.logs[0].scrollTop = self.logs[0].scrollHeight;
});
// set bgprocess detailed description
$header.find('.bg-detailed-desc').html(self.detailed_desc);
$header.find('.bg-detailed-desc').html(_.unescape(self.detailed_desc));
}
// set bgprocess start time
@ -562,4 +562,4 @@ define('misc.bgprocess', [
});
return pgBrowser.BackgroundProcessObsorver;
});
});

View File

@ -97,11 +97,9 @@ class BackupMessage(IProcessDesc):
def cmdArg(x):
if x:
# x = html.safe_str(x)
x = x.replace('\\', '\\\\')
x = x.replace('"', '\\"')
x = x.replace('""', '\\"')
return ' "' + x + '"'
return ''
@ -111,6 +109,7 @@ class BackupMessage(IProcessDesc):
else:
self.cmd += cmdArg(arg)
@property
def message(self):
# Fetch the server details like hostname, port, roles etc
@ -189,7 +188,7 @@ class BackupMessage(IProcessDesc):
res += '</div><div class="h5">'
res += _("Running command:")
res += '</b><br><span class="pg-bg-cmd enable-selection">'
res += html.safe_str(self.cmd)
res += html.safe_str(cmd + self.cmd)
res += '</span></div>'
return res