Changeset 20

Show
Ignore:
Timestamp:
02/28/07 10:40:14 (2 years ago)
Author:
kevin
Message:

plain http requests can now post XML

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/tgwebservices/controllers.py

    r19 r20  
    226226         
    227227        def newfunc(self, **kw): 
     228            request = cherrypy.request 
    228229            if "xml_body" in kw and len(kw) == 1: 
    229230                body = kw.pop("xml_body") 
     231                kw = _handle_xml_params(body, input_types) 
     232            elif request.headers.get("Content-Type", "") \ 
     233                 .startswith("text/xml"): 
     234                try: 
     235                    clen = int(request.headers.get('Content-Length')) or 0 
     236                    data = request.body.read(clen) 
     237                    body = et.fromstring(data) 
     238                except SyntaxError: 
     239                    raise validators.Invalid("Request XML is invalid", "",  
     240                                             None) 
    230241                kw = _handle_xml_params(body, input_types) 
    231242            else: 
  • trunk/tgwebservices/tests/fixtures.py

    r1 r20  
    8787    def getcomprop(self): 
    8888        return ComplexProperty() 
     89     
     90    @wsexpose(FancyValue) 
     91    @wsvalidate(FancyValue) 
     92    def tenyearsolder(self, person): 
     93        person.age = person.age + 10 
     94        return person 
    8995 
    9096class InnerService(WebServicesController): 
  • trunk/tgwebservices/tests/test_xml.py

    r1 r20  
    11"""Tests for HTTP+XML services""" 
     2 
     3import cStringIO as StringIO 
    24 
    35import cherrypy 
     
    1820    print output 
    1921    assert output == """<result><faultcode>Client</faultcode><faultstring>foo is not a valid parameter (valid values are: ['value'])</faultstring></result>""" 
     22 
     23def test_complex_input(): 
     24    cherrypy.root = ComplexService("http://foo.bar.baz/") 
     25    request = """<request> 
     26    <person><name>Fred</name><age>22</age></person> 
     27</request>""" 
     28    testutil.create_request("/tenyearsolder", rfile=StringIO.StringIO(request),  
     29                            method="POST",  
     30                            headers={"Content-Length" : str(len(request)), 
     31                                     "Content-Type" :  
     32                                        "text/xml; charset=utf-8"}) 
     33    output = cherrypy.response.body[0] 
     34    print output 
     35    assert output == """<result><age>32</age><computed>Hello!</computed>""" \ 
     36                     """<name>Fred</name></result>"""