[Checkins] SVN: traject/trunk/ Fix a bug with the combination of locating and converters.

Martijn Faassen faassen at startifact.com
Mon Jan 18 16:05:20 EST 2010


Log message for revision 108229:
  Fix a bug with the combination of locating and converters.
  

Changed:
  U   traject/trunk/CHANGES.txt
  U   traject/trunk/src/traject/_traject.py
  U   traject/trunk/src/traject/tests.py

-=-
Modified: traject/trunk/CHANGES.txt
===================================================================
--- traject/trunk/CHANGES.txt	2010-01-18 20:31:40 UTC (rev 108228)
+++ traject/trunk/CHANGES.txt	2010-01-18 21:05:19 UTC (rev 108229)
@@ -1,12 +1,12 @@
 CHANGES
 *******
 
-0.11 (unreleased)
-=================
+0.10.1 (unreleased)
+===================
 
-- Nothing changed yet.
+- Fix bug in converter logic: it broke in certain cases
+  when traject.locate was used.
 
-
 0.10 (2009-11-26)
 =================
 

Modified: traject/trunk/src/traject/_traject.py
===================================================================
--- traject/trunk/src/traject/_traject.py	2010-01-18 20:31:40 UTC (rev 108228)
+++ traject/trunk/src/traject/_traject.py	2010-01-18 21:05:19 UTC (rev 108229)
@@ -262,6 +262,8 @@
     
             if gen_name == ':':
                 name = name[1:]
+                if ':' in name:
+                    name, converter_name = name.split(':')
                 name = variables.pop(name)  
             model.__name__ = unicode(name)
     

Modified: traject/trunk/src/traject/tests.py
===================================================================
--- traject/trunk/src/traject/tests.py	2010-01-18 20:31:40 UTC (rev 108228)
+++ traject/trunk/src/traject/tests.py	2010-01-18 21:05:19 UTC (rev 108229)
@@ -727,6 +727,24 @@
         obj = patterns.resolve(root, 'a/1.1', default)
         self.assertEquals(1.1, obj.v)
 
+
+    def test_converter_locate(self):
+        patterns = traject.Patterns()
+        class Obj(object):
+            def __init__(self, v):
+                self.v = v
+        patterns.register(Root, 'a/:v:int', Obj)
+        def args(obj):
+            return {'v': obj.v}
+        patterns.register_inverse(Root, Obj, 'a/:v:int', args)
+
+        root = Root()
+        obj = Obj(3)
+        
+        patterns.locate(root, obj, default)
+        self.assertEquals('3', obj.__name__)
+        self.assertEquals(root, obj.__parent__.__parent__)
+        
     # XXX need a test for trailing slash?
 
     # XXX could already introspect function to see whether we can properly



More information about the checkins mailing list