summaryrefslogtreecommitdiff
path: root/webtest
diff options
context:
space:
mode:
authorLyndsy Simon <lyndsy@lyndsysimon.com>2013-10-07 14:35:15 -0400
committerLyndsy Simon <lyndsy@lyndsysimon.com>2013-10-07 14:35:15 -0400
commitb23f8f18b10bbed05cf4a814d93f7b3afa699e5c (patch)
treeec0d2d554394560e559a60c8cc0bb4b06aacfb04 /webtest
parent099bf9a2b0dca40945dd454a69c33562d75b4593 (diff)
downloadwebtest-b23f8f18b10bbed05cf4a814d93f7b3afa699e5c.tar.gz
Adds ability to specify an HTML parser
Diffstat (limited to 'webtest')
-rw-r--r--webtest/app.py8
-rw-r--r--webtest/forms.py4
-rw-r--r--webtest/response.py5
3 files changed, 12 insertions, 5 deletions
diff --git a/webtest/app.py b/webtest/app.py
index cc3be70..e58ba46 100644
--- a/webtest/app.py
+++ b/webtest/app.py
@@ -106,12 +106,16 @@ class TestApp(object):
A convenient shortcut for a dict of all cookies in
``cookiejar``.
+ :param parser_features:
+ Passed to BeautifulSoup when parsing responses.
+ :type parser_features:
+ string or list
"""
RequestClass = TestRequest
def __init__(self, app, extra_environ=None, relative_to=None,
- use_unicode=True, cookiejar=None):
+ use_unicode=True, cookiejar=None, parser_features=None):
if 'WEBTEST_TARGET_URL' in os.environ:
app = os.environ['WEBTEST_TARGET_URL']
if isinstance(app, string_types):
@@ -133,6 +137,8 @@ class TestApp(object):
self.extra_environ = extra_environ
self.use_unicode = use_unicode
self.cookiejar = cookiejar or http_cookiejar.CookieJar()
+ if parser_features:
+ self.RequestClass.ResponseClass.parser_features = parser_features
@property
def cookies(self):
diff --git a/webtest/forms.py b/webtest/forms.py
index 3269aa2..64fbf83 100644
--- a/webtest/forms.py
+++ b/webtest/forms.py
@@ -357,10 +357,10 @@ class Form(object):
FieldClass = Field
- def __init__(self, response, text):
+ def __init__(self, response, text, parser_features='html.parser'):
self.response = response
self.text = text
- self.html = BeautifulSoup(self.text, "html.parser")
+ self.html = BeautifulSoup(self.text, parser_features)
attrs = self.html('form')[0].attrs
self.action = attrs.get('action', '')
diff --git a/webtest/response.py b/webtest/response.py
index 5787c1c..b9f2c24 100644
--- a/webtest/response.py
+++ b/webtest/response.py
@@ -28,6 +28,7 @@ class TestResponse(webob.Response):
request = None
_forms_indexed = None
+ parser_features = 'html.parser'
@property
def forms(self):
@@ -75,7 +76,7 @@ class TestResponse(webob.Response):
forms_ = self._forms_indexed = {}
form_texts = [str(f) for f in self.html('form')]
for i, text in enumerate(form_texts):
- form = forms.Form(self, text)
+ form = forms.Form(self, text, self.parser_features)
forms_[i] = form
if form.id:
forms_[form.id] = form
@@ -423,7 +424,7 @@ class TestResponse(webob.Response):
raise AttributeError(
"Not an HTML response body (content-type: %s)"
% self.content_type)
- soup = BeautifulSoup(self.testbody, "html.parser")
+ soup = BeautifulSoup(self.testbody, self.parser_features)
return soup
@property