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 @@