]> git.parisson.com Git - telemeta.git/commitdiff
fix crem models DOM export and add support for embedding foreign keys
authorolivier <>
Tue, 19 Jan 2010 17:37:06 +0000 (17:37 +0000)
committerolivier <>
Tue, 19 Jan 2010 17:37:06 +0000 (17:37 +0000)
telemeta/models/crem.py
telemeta/tests/model_tests.py

index 3e5820a006540c3626e1e33b6eb8073722f03bd1..757e98a23decc264ea03465c62afa073e3ab93db 100755 (executable)
@@ -35,6 +35,7 @@
 
 from django.db import models
 import cremquery as query
+from xml.dom.minidom import getDOMImplementation
 
 class ModelCore(models.Model):
 
@@ -74,22 +75,33 @@ class MediaCore(ModelCore):
             fields_list.append({'name': field.name, 'value': getattr(self, field.name)})
         return fields_list
 
-    def get_dom_element_name(cls):
+    @classmethod
+    def get_dom_name(cls):
         "Convert the class name to a DOM element name"
         clsname = cls.__name__
         return clsname[0].lower() + clsname[1:]
-    get_dom_element_name = classmethod(get_dom_element_name)
+
+    @staticmethod
+    def get_dom_field_name(field_name):
+        "Convert the class name to a DOM element name"
+        tokens = field_name.split('_')
+        name = tokens[0]
+        for t in tokens[1:]:
+            name += t[0].upper() + t[1:]
+        return name
 
     def to_dom(self):
         "Return the DOM representation of this media object"
         impl = getDOMImplementation()
-        root = self.get_dom_element_name()
+        root = self.get_dom_name()
         doc = impl.createDocument(None, root, None)
         top = doc.documentElement
-        top.setAttribute("id", self.id)
+        top.setAttribute("id", str(self.id))
         fields = self.to_dict()
         for name, value in fields.iteritems():
-            element = doc.createElement(name)
+            element = doc.createElement(self.get_dom_field_name(name))
+            if isinstance(value, models.Model):
+                element.setAttribute('key', str(value.pk))
             value = unicode(value)
             element.appendChild(doc.createTextNode(value))
             top.appendChild(element)
index e90729950d6e9ffc0c548f8a5819686a7f7a7aa6..27d41517aa00da187bf585fd42666faef4110992 100644 (file)
@@ -254,4 +254,8 @@ class CollectionItemTestCase(unittest.TestCase):
             self.assertEquals(e.field.name, 'code')
         else:
             self.fail("No exception raised")
-        
+       
+    def testDomForeignKey(self):
+        doc = self.item_4.to_dom()
+        self.assertEquals(doc.getElementsByTagName('collection')[0].getAttribute('key'), str(self.persepolis.id))
+