[Product-Developers] plone.testing: how to create a POST request containing a file

Kees Hink keeshink at gmail.com
Fri May 11 12:58:06 UTC 2012


The doc for zope.testbrowser suggests [1] you can generate a POST like this:
    >>> browser.post(import_view, '<?xml version=1.0?>',
content_type='application/xml')
Is there something similar in plone.testing?

When i just use the browser.open method as described [2], i get: 
"TypeError: cannot concatenate
'str' and 'dict' objects" [3]
A pdb shows that in testbrowser/testing.py", line 75, "body" is
actually a dictionary:
(Pdb) body
{'body': '<?xml version=1.0?>', 'content-type': 'application/xml'}

Can i create a post request with xml data in plone.testing?

The background is that i want to create a view that accepts HTTP 
requests with XML data, from which content is to be created. Maybe 
there's an easier way for that?

I'll now look into the tests for Plone's File content type, probably 
that has some useful pointers as well.

Kees

[1] 
http://pypi.python.org/pypi/zope.testbrowser#submitting-a-posts-body-directly

[2] Plone 4.2b2, zope.testbrowser 3.11.1, plone.testing 4.0.3, 
plone.app.testing 4.0.2

[3]
Failed example:
     browser.post(import_view, data)
Exception raised:
     Traceback (most recent call last):
       File "/usr/lib/python2.6/doctest.py", line 1253, in __run
         compileflags, 1) in test.globs
       File "<doctest functional_k4import.txt[21]>", line 1, in <module>
         browser.post(import_view, data)
       File 
"/home/kees/.buildout/eggs/zope.testbrowser-3.11.1-py2.6.egg/zope/testbrowser/browser.py", 
line 264, in post
         return self.open(url, data)
       File 
"/home/kees/.buildout/eggs/zope.testbrowser-3.11.1-py2.6.egg/zope/testbrowser/browser.py", 
line 240, in open
         self.mech_browser.open(url, data)
       File 
"/home/kees/.buildout/eggs/mechanize-0.2.5-py2.6.egg/mechanize/_mechanize.py", 
line 203, in open
         return self._mech_open(url, data, timeout=timeout)
       File 
"/home/kees/.buildout/eggs/mechanize-0.2.5-py2.6.egg/mechanize/_mechanize.py", 
line 230, in _mech_open
         response = UserAgentBase.open(self, request, data)
       File 
"/home/kees/.buildout/eggs/mechanize-0.2.5-py2.6.egg/mechanize/_opener.py", 
line 193, in open
         response = urlopen(self, req, data)
       File 
"/home/kees/.buildout/eggs/mechanize-0.2.5-py2.6.egg/mechanize/_urllib2_fork.py", 
line 344, in _open
         '_open', req)
       File 
"/home/kees/.buildout/eggs/mechanize-0.2.5-py2.6.egg/mechanize/_urllib2_fork.py", 
line 332, in _call_chain
         result = func(*args)
       File 
"/home/kees/.buildout/eggs/plone.testing-4.0.3-py2.6.egg/plone/testing/_z2_testbrowser.py", 
line 64, in http_open
         return self.do_open(connectionFactory, req)
       File "/usr/lib/python2.6/urllib2.py", line 1156, in do_open
         h.request(req.get_method(), req.get_selector(), req.data, headers)
       File 
"/home/kees/.buildout/eggs/zope.testbrowser-3.11.1-py2.6.egg/zope/testbrowser/testing.py", 
line 75, in request
         + headers + '\n' + body)
     TypeError: cannot concatenate 'str' and 'dict' objects



More information about the Product-Developers mailing list