From: <ps...@us...> - 2008-12-12 14:24:44
|
Revision: 1477 http://pywebsvcs.svn.sourceforge.net/pywebsvcs/?rev=1477&view=rev Author: psha Date: 2008-12-12 14:24:40 +0000 (Fri, 12 Dec 2008) Log Message: ----------- Implement TC.Union.text_to_data method Just like TC.Union.parse - try to parse by every member typecode and raise exception if none succeded. Needed by WS-Addressing for RelationshipType attribute http://www.w3.org/Submission/ws-addressing/#_Toc77464323 Modified Paths: -------------- trunk/zsi/ZSI/TC.py trunk/zsi/test/test_union.py Modified: trunk/zsi/ZSI/TC.py =================================================================== --- trunk/zsi/ZSI/TC.py 2008-12-12 08:05:39 UTC (rev 1476) +++ trunk/zsi/ZSI/TC.py 2008-12-12 14:24:40 UTC (rev 1477) @@ -1575,6 +1575,29 @@ return pyobj + def text_to_data(self, text, elt, ps): + """ Copy of parse method with some cleanups and logging""" + self.setMemberTypeCodes() + + for indx in range(len(self.memberTypeCodes)): + typecode = self.memberTypeCodes[indx] + self.logger.debug("Trying member %s", str(typecode.type)) + try: + pyobj = typecode.text_to_data(text, elt, ps) + except Exception, ex: + self.logger.debug("Fail to parse with %s: %s", typecode, ex) + continue + + if indx > 0: + self.memberTypeCodes.remove(typecode) + self.memberTypeCodes.insert(0, typecode) + break + else: + raise EvaluateException('No member matches data "%s" (while parsing %s)' % (text, str(self.type)), + ps.Backtrace(elt)) + + return pyobj + def get_formatted_content(self, pyobj, **kw): self.setMemberTypeCodes() for indx in range(len(self.memberTypeCodes)): Modified: trunk/zsi/test/test_union.py =================================================================== --- trunk/zsi/test/test_union.py 2008-12-12 08:05:39 UTC (rev 1476) +++ trunk/zsi/test/test_union.py 2008-12-12 14:24:40 UTC (rev 1477) @@ -8,7 +8,6 @@ from ZSI.wstools.Namespaces import WSA200403, SOAP from cStringIO import StringIO - # # Generated code class ns3: @@ -34,8 +33,13 @@ def __init__(self, pname, **kw): ZSI.TC.Union.__init__(self, pname, **kw) +class TestUnionTC(ZSI.TC.Union, TypeDefinition): + memberTypes = [(u'http://www.w3.org/2001/XMLSchema', u'long'), (u'http://www.w3.org/2001/XMLSchema', u'dateTime')] + schema = "urn:test:union" + type = (schema, "TestUnion") + def __init__(self, pname, **kw): + ZSI.TC.Union.__init__(self, pname, **kw) - class UnionTestCase(unittest.TestCase): "test Union TypeCode" @@ -61,8 +65,17 @@ # so string is going to parse the URI when we want anyURI self.failUnless(value == pyobj, 'Expected equivalent') + def check_union_text_to_data(self): + from ZSI.TC import EvaluateException + class _PS: + def Backtrace(self, *a, **kw): return "" + typecode = TestUnionTC("TestUnion") + self.assertEquals(100, typecode.text_to_data('100', None, None), "Fail to parse long") + date = typecode.text_to_data("2002-10-30T12:30:00Z", None, None) + self.assertEquals((2002, 10, 30), date[:3], "Fail to parse dateTime") + self.assertRaises(EvaluateException, typecode.text_to_data, "urn:string", None, _PS()) + - def makeTestSuite(): suite = unittest.TestSuite() suite.addTest(unittest.makeSuite(UnionTestCase, "check")) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |