From 48d75417ee61bb15a6f13e36ef4b9ca2e7f598c4 Mon Sep 17 00:00:00 2001 From: Matt <matthewlodge01@gmail.com> Date: Sat, 3 Mar 2018 11:51:24 +0000 Subject: [PATCH 1/2] fix for using <amazon:effect> SSML --- flask_ask/models.py | 7 ++++--- requirements.txt | 1 + 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/flask_ask/models.py b/flask_ask/models.py index bab1ee4..4c5d469 100644 --- a/flask_ask/models.py +++ b/flask_ask/models.py @@ -1,6 +1,6 @@ import inspect from flask import json -from xml.etree import ElementTree +from lxml import etree import aniso8601 from .core import session, context, current_stream, stream_cache, dbgdump from .cache import push_stream @@ -399,9 +399,10 @@ def _copyattr(src, dest, attr, convert=None): def _output_speech(speech): try: - xmldoc = ElementTree.fromstring(speech) + parser = etree.XMLParser(dtd_validation=False, load_dtd=False, recover=True) + xmldoc = etree.fromstring(speech, parser) if xmldoc.tag == 'speak': return {'type': 'SSML', 'ssml': speech} - except (UnicodeEncodeError, ElementTree.ParseError) as e: + except (UnicodeEncodeError, etree.ParseError) as e: pass return {'type': 'PlainText', 'text': speech} diff --git a/requirements.txt b/requirements.txt index b305822..a4b2730 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,4 +3,5 @@ Flask==0.12.1 pyOpenSSL==17.0.0 PyYAML==3.12 six==1.11.0 +lxml==4.1.1 From a4b9299e792dc4383b3769b45bb6808ab3cb89e3 Mon Sep 17 00:00:00 2001 From: Matt <matthewlodge01@gmail.com> Date: Sat, 3 Mar 2018 14:15:48 +0000 Subject: [PATCH 2/2] Fixed outputting strings as plaintext --- flask_ask/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flask_ask/models.py b/flask_ask/models.py index 4c5d469..334252b 100644 --- a/flask_ask/models.py +++ b/flask_ask/models.py @@ -403,6 +403,6 @@ def _output_speech(speech): xmldoc = etree.fromstring(speech, parser) if xmldoc.tag == 'speak': return {'type': 'SSML', 'ssml': speech} - except (UnicodeEncodeError, etree.ParseError) as e: + except (UnicodeEncodeError, etree.XMLSyntaxError, AttributeError) as e: pass return {'type': 'PlainText', 'text': speech}