From 9d504ac00935493e5dc6e13b70ccfc07a2677d6c Mon Sep 17 00:00:00 2001
From: Diego Fuentes Palacios <43205584+Dfupa@users.noreply.github.com>
Date: Mon, 7 Sep 2020 15:36:25 +0200
Subject: [PATCH 1/2] Fixing webapp.py Python3 encoding incompatibility
Fixing Python3 encoding incompatibilities.
---
ete3/webplugin/webapp.py | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/ete3/webplugin/webapp.py b/ete3/webplugin/webapp.py
index 385122850..178da5183 100755
--- a/ete3/webplugin/webapp.py
+++ b/ete3/webplugin/webapp.py
@@ -314,7 +314,7 @@ def __call__(self, environ, start_response):
html += """
%s """ %\
(treeid, nodeid, i, aname)
html += ''
- return html
+ return [html.encode('utf-8')]
elif method == "action":
if not self._load_tree(treeid):
@@ -322,16 +322,16 @@ def __call__(self, environ, start_response):
if aindex is None:
# just refresh tree
- return self._get_tree_img(treeid=treeid)
+ return [self._get_tree_img(treeid=treeid).encode('utf-8')]
else:
aname, target, handler, checker, html_generator = self.actions[int(aindex)]
if target in set(["node", "face", "layout"]):
- return self._get_tree_img(treeid=treeid, pre_drawing_action=[target, handler, [nodeid]])
+ return [self._get_tree_img(treeid=treeid, pre_drawing_action=[target, handler, [nodeid]]).encode('utf-8')]
elif target in set(["search"]):
- return self._get_tree_img(treeid=treeid, pre_drawing_action=[target, handler, [search_term]])
+ return [self._get_tree_img(treeid=treeid, pre_drawing_action=[target, handler, [search_term]]).encode('utf-8')]
elif target in set(["refresh"]):
- return self._get_tree_img(treeid=treeid)
+ return [self._get_tree_img(treeid=treeid).encode('utf-8')]
return "Bad guy"
elif self._external_app_handler:
From 3801893f36700dc4c71b997044061c37f7a7dc01 Mon Sep 17 00:00:00 2001
From: Diego Fuentes Palacios <43205584+Dfupa@users.noreply.github.com>
Date: Thu, 1 Oct 2020 11:47:45 +0200
Subject: [PATCH 2/2] Update webapp.py
Reorganizing a bit of the code as well as fix some minor errors
---
ete3/webplugin/webapp.py | 57 ++++++++++++++++++----------------------
1 file changed, 26 insertions(+), 31 deletions(-)
diff --git a/ete3/webplugin/webapp.py b/ete3/webplugin/webapp.py
index 178da5183..b1a96886f 100755
--- a/ete3/webplugin/webapp.py
+++ b/ete3/webplugin/webapp.py
@@ -166,16 +166,15 @@ def _load_tree(self, treeid, tree=None, cache_file=None):
# if no tree is given, and not in memmory, it tries to loaded
# from previous sessions
if treeid not in self._treeid2tree:
- self._load_tree_from_path(self._treeid2cache[treeid])
+ self._load_tree_from_path(self._treeid2cache[treeid], treeid)
# Returns True if tree and indexes are loaded
return (treeid in self._treeid2tree) and (treeid in self._treeid2index)
- def _load_tree_from_path(self, pkl_path):
+ def _load_tree_from_path(self, pkl_path, treeid):
tree_path = os.path.join(self.CONFIG["temp_dir"], pkl_path)
if os.path.exists(tree_path):
- print(six.moves.cPickle.load(open(tree_path)))
- t = self._treeid2tree[treeid] = six.moves.cPickle.load(open(tree_path))
+ t = self._treeid2tree[treeid] = six.moves.cPickle.load(open(tree_path, 'rb'))
self._load_tree_index(treeid)
return True
else:
@@ -216,7 +215,6 @@ def _get_tree_img(self, treeid, pre_drawing_action=None):
handler(t, arguments[0])
elif atype == "layout":
self._treeid2layout[treeid] = handler
-
layout_fn = self._treeid2layout.get(treeid, self._layout)
mapid = "img_map_"+str(time.time())
img_map = _render_tree(t, img_path, self.CONFIG["DISPLAY"], layout = layout_fn,
@@ -230,25 +228,22 @@ def _get_tree_img(self, treeid, pre_drawing_action=None):
if hasattr(n, "_QtItem_"):
n._QtItem_ = None
delattr(n, "_QtItem_")
-
tree_actions = []
for aindex, (action, target, handler, checker, html_generator) in enumerate(self.actions):
if target in self.TREE_TARGET_ACTIONS and (not checker or checker(t)):
tree_actions.append(aindex)
-
try:
version_tag = __version__
except NameError:
version_tag = "ete3"
-
self._dump_tree_to_file(t, treeid)
-
ete_publi = '' %\
(version_tag)
img_html = """""" %\
(treeid, img_url, mapid, treeid, ','.join(map(str, tree_actions)))
tree_div_id = "ETE_tree_"+str(treeid)
+
return html_map+ ''%tree_div_id + img_html + ete_publi + "
"
# WSGI web application
@@ -292,28 +287,29 @@ def __call__(self, environ, start_response):
elif method == "get_menu":
if not self._load_tree(treeid):
- return "get_menu: Cannot load the tree: %s" %treeid
-
- if nodeid:
- tree_index = self._treeid2index[treeid]
- node = tree_index[nodeid]
- else:
- node = None
-
- if textface:
- header = str(textface).strip()
+ html = "get_menu: Cannot load the tree: %s" %treeid
else:
- header = "Menu"
- html = """""" %\
- (header)
- for i in map(int, actions.split(",")):
- aname, target, handler, checker, html_generator = self.actions[i]
- if html_generator:
- html += html_generator(i, treeid, nodeid, textface, node)
+ if nodeid:
+ tree_index = self._treeid2index[treeid]
+ node = tree_index[nodeid]
else:
- html += """- %s
""" %\
- (treeid, nodeid, i, aname)
- html += '
'
+ node = None
+ if textface:
+ header = str(textface).strip()
+ else:
+ header = "Menu"
+ html = """
+ """ % (header)
+ for i in map(int, actions.split(",")):
+
+ aname, target, handler, checker, html_generator = self.actions[i]
+ if html_generator:
+ html += html_generator(i, treeid, nodeid, textface, node)
+ else:
+ html += """- %s
""" %\
+ (treeid, nodeid, i, aname)
+ html += '
'
return [html.encode('utf-8')]
elif method == "action":
@@ -325,14 +321,13 @@ def __call__(self, environ, start_response):
return [self._get_tree_img(treeid=treeid).encode('utf-8')]
else:
aname, target, handler, checker, html_generator = self.actions[int(aindex)]
-
if target in set(["node", "face", "layout"]):
return [self._get_tree_img(treeid=treeid, pre_drawing_action=[target, handler, [nodeid]]).encode('utf-8')]
elif target in set(["search"]):
return [self._get_tree_img(treeid=treeid, pre_drawing_action=[target, handler, [search_term]]).encode('utf-8')]
elif target in set(["refresh"]):
return [self._get_tree_img(treeid=treeid).encode('utf-8')]
- return "Bad guy"
+ return str.encode("Bad guy")
elif self._external_app_handler:
return self._external_app_handler(environ, start_response, self.queries)