Improve entity json export (closes #2559931) stable
authorSylvain Thénault <sylvain.thenault@logilab.fr>
Thu, 17 Jan 2013 14:39:51 +0100
branchstable
changeset 8651 353bbd17a8b6
parent 8650 9a6e80bfad9d
child 8652 7812093e21f7
Improve entity json export (closes #2559931) Make output from __json_encode__ predictable; use it in the ejsonexport view.
entity.py
web/views/json.py
--- a/entity.py	Thu Jan 17 14:40:57 2013 +0100
+++ b/entity.py	Thu Jan 17 14:39:51 2013 +0100
@@ -539,8 +539,10 @@
         """custom json dumps hook to dump the entity's eid
         which is not part of dict structure itself
         """
+        self.complete()
         dumpable = self.cw_attr_cache.copy()
         dumpable['eid'] = self.eid
+        dumpable['__cwetype__'] = self.__regid__
         return dumpable
 
     def cw_adapt_to(self, interface):
--- a/web/views/json.py	Thu Jan 17 14:40:57 2013 +0100
+++ b/web/views/json.py	Thu Jan 17 14:39:51 2013 +0100
@@ -111,12 +111,7 @@
     title = _('json-entities-export-view')
 
     def call(self):
-        entities = []
-        for entity in self.cw_rset.entities():
-            entity.complete() # fetch all attributes
-            # hack to add extra metadata
-            entity.cw_attr_cache.update({
-                    '__cwetype__': entity.__regid__,
-                    })
-            entities.append(entity)
-        self.wdata(entities)
+        if self.cw_rset is None:
+            self.wdata([self.cw_extra_kwargs.get('entity')])
+        else:
+            self.wdata(list(self.cw_rset.entities()))