admin: add required encoding for graphviz subprocess (#36515)

This commit is contained in:
Frédéric Péters 2019-11-13 17:39:44 +01:00
parent 697949b551
commit 8831c91a51
1 changed files with 8 additions and 4 deletions

View File

@ -23,6 +23,8 @@ from subprocess import Popen, PIPE
import textwrap
import xml.etree.ElementTree as ET
from django.utils import six
from django.utils.encoding import force_bytes, force_text
from django.utils.six import StringIO
from quixote import redirect, get_publisher
@ -116,7 +118,7 @@ def graphviz_post_treatment(content, colours, include=False):
remove_tag(root, TITLE)
for child in root:
adjust_style(child, child, colours)
return ET.tostring(tree)
return force_text(ET.tostring(tree))
def graphviz(workflow, url_prefix='', select=None, svg=True,
include=False):
@ -179,9 +181,11 @@ def graphviz(workflow, url_prefix='', select=None, svg=True,
done[next_id] = True
label = item.get_jump_label(target_id=next_id)
label = label.replace('"', '\\"')
label = label.decode('utf8')
if six.PY2:
label = label.decode('utf8')
label = textwrap.fill(label, 20, break_long_words=False)
label = label.encode('utf8')
if six.PY2:
label = label.encode('utf8')
label = label.replace('\n', '\\n')
print('[label="%s"' % label, end=' ', file=out)
print(',URL="%s%s"]' % (url_prefix, url), file=out)
@ -191,7 +195,7 @@ def graphviz(workflow, url_prefix='', select=None, svg=True,
if svg:
try:
process = Popen(['dot', '-Tsvg'], stdin=PIPE, stdout=PIPE)
out, err = process.communicate(out)
out, err = process.communicate(force_bytes(out))
if process.returncode != 0:
return ''
except OSError: