Log message for revision 37986:
  
        - Collector #1871: Applied patch to support lists with records using 
          ZTUtils.make_query()
  

Changed:
  U   Zope/branches/Zope-2_8-branch/doc/CHANGES.txt
  U   Zope/branches/Zope-2_8-branch/lib/python/ZTUtils/Zope.py
  A   Zope/branches/Zope-2_8-branch/lib/python/ZTUtils/tests/testZope.py

-=-
Modified: Zope/branches/Zope-2_8-branch/doc/CHANGES.txt
===================================================================
--- Zope/branches/Zope-2_8-branch/doc/CHANGES.txt       2005-08-18 07:57:37 UTC 
(rev 37985)
+++ Zope/branches/Zope-2_8-branch/doc/CHANGES.txt       2005-08-18 11:03:22 UTC 
(rev 37986)
@@ -26,6 +26,9 @@
 
     Bugs Fixed
 
+      - Collector #1871: Applied patch to support lists with records using 
+        ZTUtils.make_query()
+
       - AccessControl: creating a new user through "zpasswd inituser" did not
         work properly with a top-level user folder with enabled password
         encryption.

Modified: Zope/branches/Zope-2_8-branch/lib/python/ZTUtils/Zope.py
===================================================================
--- Zope/branches/Zope-2_8-branch/lib/python/ZTUtils/Zope.py    2005-08-18 
07:57:37 UTC (rev 37985)
+++ Zope/branches/Zope-2_8-branch/lib/python/ZTUtils/Zope.py    2005-08-18 
11:03:22 UTC (rev 37986)
@@ -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/branches/Zope-2_8-branch/lib/python/ZTUtils/tests/testZope.py
===================================================================
--- Zope/branches/Zope-2_8-branch/lib/python/ZTUtils/tests/testZope.py  
2005-08-18 07:57:37 UTC (rev 37985)
+++ Zope/branches/Zope-2_8-branch/lib/python/ZTUtils/tests/testZope.py  
2005-08-18 11:03:22 UTC (rev 37986)
@@ -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

Reply via email to