Log message for revision 37987: - Collector #1871: Applied patch to support lists with records using ZTUtils.make_query()
Changed: U Zope/trunk/doc/CHANGES.txt U Zope/trunk/lib/python/ZTUtils/Zope.py A Zope/trunk/lib/python/ZTUtils/tests/testZope.py -=- Modified: Zope/trunk/doc/CHANGES.txt =================================================================== --- Zope/trunk/doc/CHANGES.txt 2005-08-18 11:03:22 UTC (rev 37986) +++ Zope/trunk/doc/CHANGES.txt 2005-08-18 11:04:13 UTC (rev 37987) @@ -49,6 +49,9 @@ Bugs fixed + - Collector #1871: Applied patch to support lists with records using + ZTUtils.make_query() + - ZCatalog: refreshCatalog() could not be called safely from a ZEO client script Modified: Zope/trunk/lib/python/ZTUtils/Zope.py =================================================================== --- Zope/trunk/lib/python/ZTUtils/Zope.py 2005-08-18 11:03:22 UTC (rev 37986) +++ Zope/trunk/lib/python/ZTUtils/Zope.py 2005-08-18 11:04:13 UTC (rev 37987) @@ -235,8 +235,14 @@ elif hasattr(v, 'items'): sublist = [] for sk, sv in v.items(): - sm = simple_marshal(sv) - sublist.append(('%s.%s' % (k, sk), '%s:record' % sm, sv)) + if isinstance(sv, list): + for ssv in sv: + sm = simple_marshal(ssv) + sublist.append(('%s.%s' % (k, sk), + '%s:list:record' % sm, ssv)) + else: + sm = simple_marshal(sv) + sublist.append(('%s.%s' % (k, sk), '%s:record' % sm, sv)) elif isinstance(v, list): sublist = [] for sv in v: Added: Zope/trunk/lib/python/ZTUtils/tests/testZope.py =================================================================== --- Zope/trunk/lib/python/ZTUtils/tests/testZope.py 2005-08-18 11:03:22 UTC (rev 37986) +++ Zope/trunk/lib/python/ZTUtils/tests/testZope.py 2005-08-18 11:04:13 UTC (rev 37987) @@ -0,0 +1,58 @@ +import os, sys + +from unittest import TestCase, makeSuite, main + +import string +import urllib +from ZTUtils.Zope import make_query, complex_marshal +from DateTime import DateTime + +class QueryTests(TestCase): + + def testMarshallLists(self): + '''Test marshalling lists''' + test_date = DateTime() + list_ = [1, test_date, 'str'] + result = complex_marshal([('list',list_),]) + assert result == [('list', ':int:list', 1), + ('list', ':date:list', test_date), + ('list', ':list', 'str')] + + def testMarshallRecords(self): + '''Test marshalling records''' + test_date = DateTime() + record = {'arg1': 1, 'arg2': test_date, 'arg3': 'str'} + result = complex_marshal([('record',record),]) + assert result == [('record.arg1', ':int:record', 1), + ('record.arg2', ':date:record', test_date), + ('record.arg3', ':record', 'str')] + + def testMarshallListsInRecords(self): + '''Test marshalling lists inside of records''' + test_date = DateTime() + record = {'arg1': [1, test_date, 'str'], 'arg2': 1} + result = complex_marshal([('record',record),]) + assert result == [('record.arg1', ':int:list:record', 1), + ('record.arg1', ':date:list:record', test_date), + ('record.arg1', ':list:record', 'str'), + ('record.arg2', ':int:record', 1)] + + def testMakeComplexQuery(self): + '''Test that make_query returns sane results''' + test_date = DateTime() + quote_date = urllib.quote(str(test_date)) + record = {'arg1': [1, test_date, 'str'], 'arg2': 1} + list_ = [1, test_date, 'str'] + date = test_date + int_ = 1 + str_ = 'str' + query = make_query(date=test_date, integer=int_, listing=list_, + record=record, string=str_) + assert query == 'date:date=%s&integer:int=1&listing:int:list=1&listing:date:list=%s&listing:list=str&string=str&record.arg1:int:list:record=1&record.arg1:date:list:record=%s&record.arg1:list:record=str&record.arg2:int:record=1'%(quote_date,quote_date,quote_date) + + +def test_suite(): + return makeSuite(QueryTests) + +if __name__=='__main__': + main() _______________________________________________ Zope-Checkins maillist - Zope-Checkins@zope.org http://mail.zope.org/mailman/listinfo/zope-checkins