From f435d8ca994b1736d2e6a11ca1d9cecc43330e47 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 3 Mar 2011 15:55:52 +0100 Subject: [PATCH] Include xml2json_direct in main. Converted node.@attribute to node.attrs = {} bzr revid: fme@openerp.com-20110303145552-f4cbxu2oi01ykbxl --- addons/base/controllers/main.py | 50 +++++++++++++++++++--- addons/base/static/openerp/base.xml | 27 ++++++------ addons/base/static/openerp/openerp.base.js | 10 ++--- 3 files changed, 63 insertions(+), 24 deletions(-) diff --git a/addons/base/controllers/main.py b/addons/base/controllers/main.py index 97fbb5b04c9..9fa3990a0be 100644 --- a/addons/base/controllers/main.py +++ b/addons/base/controllers/main.py @@ -1,11 +1,49 @@ # -*- coding: utf-8 -*- -import json,os,sys,traceback - -import xml2json_direct +import json, os, sys, traceback import openerpweb +from xml.etree import ElementTree + +class Xml2Json: + # xml2json-direct + # Simple and straightforward XML-to-JSON converter in Python + # New BSD Licensed + # + # URL: http://code.google.com/p/xml2json-direct/ + @staticmethod + def convert_to_json(s): + return json.dumps(Xml2Json.convert_to_structure(s), sort_keys=True, indent=4) + + @staticmethod + def convert_to_structure(s): + root = ElementTree.fromstring(s) + return Xml2Json.convert_element(root) + + @staticmethod + def convert_element(el, skip_whitespaces=True): + res = {} + if el.tag[0]=="{": + ns, name = el.tag.rsplit("}",1) + res["tag"] = name + res["namespace"] = ns[1:] + else: + res["tag"] = el.tag + res["attrs"] = {} + for k,v in el.items(): + res["attrs"][k] = v + kids = [] + if el.text and (not skip_whitespaces or el.text.strip() != ''): + kids.append(el.text) + for kid in el: + kids.append(Xml2Json.convert_element(kid)) + if kid.tail and (not skip_whitespaces or kid.tail.strip() != ''): + kids.append(kid.tail) + if len(kids): + res["children"] = kids + return res + #---------------------------------------------------------- # OpenERP Web base Controllers #---------------------------------------------------------- @@ -152,7 +190,7 @@ class FormView(openerpweb.Controller): def load(self,req,model,view_id): m = req.session.model(model) r = m.fields_view_get(view_id,'form') - r["arch"]=xml2json_direct.convert_to_structure(r["arch"]) + r["arch"]=Xml2Json.convert_to_structure(r["arch"]) return {'fields_view':r} class ListView(openerpweb.Controller): @@ -161,7 +199,7 @@ class ListView(openerpweb.Controller): def load(self,req,model,view_id): m = req.session.model(model) r = m.fields_view_get(view_id,'tree') - r["arch"]=xml2json_direct.convert_to_structure(r["arch"]) + r["arch"]=Xml2Json.convert_to_structure(r["arch"]) return {'fields_view':r} class SearchView(openerpweb.Controller): @@ -170,7 +208,7 @@ class SearchView(openerpweb.Controller): def load(self,req,model,view_id): m = req.session.model(model) r = m.fields_view_get(view_id,'search') - r["arch"]=xml2json_direct.convert_to_structure(r["arch"]) + r["arch"]=Xml2Json.convert_to_structure(r["arch"]) return {'fields_view':r} class Action(openerpweb.Controller): diff --git a/addons/base/static/openerp/base.xml b/addons/base/static/openerp/base.xml index 4fc37ccbe67..beedaea82d2 100644 --- a/addons/base/static/openerp/base.xml +++ b/addons/base/static/openerp/base.xml @@ -64,7 +64,7 @@
-

+

@@ -94,9 +94,9 @@ --> - - - + + +
@@ -104,7 +104,7 @@
-

+

@@ -141,10 +141,10 @@ Also add a TODO about t-code="" --> - </td> @@ -161,13 +161,14 @@ <tr> + diff --git a/addons/base/static/openerp/openerp.base.js b/addons/base/static/openerp/openerp.base.js index 6c73297fd78..bdf17dde43a 100644 --- a/addons/base/static/openerp/openerp.base.js +++ b/addons/base/static/openerp/openerp.base.js @@ -559,7 +559,7 @@ openerp.base.ListView = openerp.base.Controller.extend({ var self = this; this.fields_view = data.fields_view; //this.log(this.fields_view); - this.name = ""+this.fields_view.arch["@string"]; + this.name = "" + this.fields_view.arch.attrs.string; this.$element.html(QWeb.render("ListView", {"fields_view": this.fields_view})); this.$table = this.$element.find("table"); this.cols = []; @@ -570,9 +570,9 @@ openerp.base.ListView = openerp.base.Controller.extend({ for(var i = 0; i < tree.length; i++) { var col = tree[i]; if(col.tag == "field") { - this.cols.push(col["@name"]); - this.colnames.push(col["@name"]); - this.colmodel.push({ name: col["@name"], index: col["@name"] }); + this.cols.push(col.attrs.name); + this.colnames.push(col.attrs.name); + this.colmodel.push({ name: col.attrs.name, index: col.attrs.name }); } } //this.log(this.cols); @@ -643,7 +643,7 @@ openerp.base.SearchView = openerp.base.Controller.extend({ }, on_loaded: function(data) { this.fields_view = data.fields_view; - //this.log(this.fields_view); + this.log(this.fields_view); this.input_ids = {}; this.$element.html(QWeb.render("SearchView", {"fields_view": this.fields_view})); this.$element.find("#search").bind('click',this.on_search);
-