From ef552edd7afc4dd63506339017017047e89f9e2d Mon Sep 17 00:00:00 2001 From: Michael Chin <chnmch@amazon.com> Date: Thu, 3 Mar 2022 17:53:06 -0800 Subject: [PATCH] Fix ASCII encoding error in Profile/Explain generation --- src/graph_notebook/magics/graph_magic.py | 28 ++++++++++++++++-------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/src/graph_notebook/magics/graph_magic.py b/src/graph_notebook/magics/graph_magic.py index 6d3482cf..a6d9bda0 100644 --- a/src/graph_notebook/magics/graph_magic.py +++ b/src/graph_notebook/magics/graph_magic.py @@ -320,14 +320,17 @@ def sparql(self, line='', cell='', local_ns: dict = None): if mode == QueryMode.EXPLAIN: res = self.client.sparql_explain(cell, args.explain_type, args.explain_format, path=path) res.raise_for_status() - explain = res.content.decode('utf-8') + explain_bytes = res.content.replace(b'\xcc', b'-') + explain_bytes = explain_bytes.replace(b'\xb6', b'') + explain = explain_bytes.decode('utf-8') store_to_ns(args.store_to, explain, local_ns) if not args.silent: sparql_metadata = build_sparql_metadata_from_query(query_type='explain', res=res) titles.append('Explain') - explain_bytes = explain.encode('ascii') + explain_bytes = explain.encode('ascii', 'ignore') base64_str = base64.b64encode(explain_bytes).decode('ascii') - first_tab_html = sparql_explain_template.render(table=explain, link=f"data:text/html;base64,{base64_str}") + first_tab_html = sparql_explain_template.render(table=explain, + link=f"data:text/html;base64,{base64_str}") else: query_type = get_query_type(cell) headers = {} if query_type not in ['SELECT', 'CONSTRUCT', 'DESCRIBE'] else { @@ -536,14 +539,18 @@ def gremlin(self, line, cell, local_ns: dict = None): if mode == QueryMode.EXPLAIN: res = self.client.gremlin_explain(cell) res.raise_for_status() - query_res = res.content.decode('utf-8') + # Replace strikethrough character bytes, can't be encoded to ASCII + explain_bytes = res.content.replace(b'\xcc', b'-') + explain_bytes = explain_bytes.replace(b'\xb6', b'') + query_res = explain_bytes.decode('utf-8') if not args.silent: gremlin_metadata = build_gremlin_metadata_from_query(query_type='explain', results=query_res, res=res) titles.append('Explain') if 'Neptune Gremlin Explain' in query_res: - explain_bytes = query_res.encode('ascii') + explain_bytes = query_res.encode('ascii', 'ignore') base64_str = base64.b64encode(explain_bytes).decode('ascii') - first_tab_html = gremlin_explain_profile_template.render(content=query_res, link=f"data:text/html;base64,{base64_str}") + first_tab_html = gremlin_explain_profile_template.render(content=query_res, + link=f"data:text/html;base64,{base64_str}") else: first_tab_html = pre_container_template.render(content='No explain found') elif mode == QueryMode.PROFILE: @@ -561,14 +568,17 @@ def gremlin(self, line, cell, local_ns: dict = None): "profile.indexOps": args.profile_indexOps} res = self.client.gremlin_profile(query=cell, args=profile_args) res.raise_for_status() - query_res = res.content.decode('utf-8') + profile_bytes = res.content.replace(b'\xcc', b'-') + profile_bytes = profile_bytes.replace(b'\xb6', b'') + query_res = profile_bytes.decode('utf-8') if not args.silent: gremlin_metadata = build_gremlin_metadata_from_query(query_type='profile', results=query_res, res=res) titles.append('Profile') if 'Neptune Gremlin Profile' in query_res: - explain_bytes = query_res.encode('ascii') + explain_bytes = query_res.encode('ascii', 'ignore') base64_str = base64.b64encode(explain_bytes).decode('ascii') - first_tab_html = gremlin_explain_profile_template.render(content=query_res, link=f"data:text/html;base64,{base64_str}") + first_tab_html = gremlin_explain_profile_template.render(content=query_res, + link=f"data:text/html;base64,{base64_str}") else: first_tab_html = pre_container_template.render(content='No profile found') else: