diff --git a/addons/web/common/nonliterals.py b/addons/web/common/nonliterals.py index 8128b88fd67..4ee6d122f44 100644 --- a/addons/web/common/nonliterals.py +++ b/addons/web/common/nonliterals.py @@ -45,29 +45,20 @@ class NonLiteralEncoder(simplejson.encoder.JSONEncoder): raise TypeError('Could not encode unknown non-literal %s' % object) _ALLOWED_KEYS = frozenset(['__ref', "__id", '__domains', '__debug', - '__contexts', '__eval_context', 'own_values']) + '__contexts', '__eval_context']) def non_literal_decoder(dct): """ Decodes JSON dicts into :class:`Domain` and :class:`Context` based on magic attribute tags. - - Also handles private context section for the domain or section via the - ``own_values`` dict key. """ if '__ref' in dct: for x in dct: if x not in _ALLOWED_KEYS: raise ValueError("'%s' key not allowed in non literal domain/context" % x) if dct['__ref'] == 'domain': - domain = Domain(None, key=dct['__id']) - if 'own_values' in dct: - domain.own = dct['own_values'] - return domain + return Domain(None, key=dct['__id']) elif dct['__ref'] == 'context': - context = Context(None, key=dct['__id']) - if 'own_values' in dct: - context.own = dct['own_values'] - return context + return Context(None, key=dct['__id']) elif dct["__ref"] == "compound_domain": cdomain = CompoundDomain() for el in dct["__domains"]: @@ -111,7 +102,6 @@ class Domain(BaseDomain): "and a domain string") self.session = session - self.own = {} if domain_string: self.key = binascii.hexlify( hashlib.sha256(domain_string).digest()[:SHORT_HASH_BYTES_SIZE]) @@ -131,8 +121,7 @@ class Domain(BaseDomain): evaluated result. """ ctx = self.session.evaluation_context(context) - if self.own: - ctx.update(self.own) + try: return eval(self.get_domain_string(), SuperDict(ctx)) except NameError as e: @@ -159,7 +148,7 @@ class Context(BaseContext): "and a domain string") self.session = session - self.own = {} + if context_string: self.key = binascii.hexlify( hashlib.sha256(context_string).digest()[:SHORT_HASH_BYTES_SIZE]) @@ -179,8 +168,7 @@ class Context(BaseContext): evaluated result. """ ctx = self.session.evaluation_context(context) - if self.own: - ctx.update(self.own) + try: return eval(self.get_context_string(), SuperDict(ctx)) except NameError as e: diff --git a/addons/web/static/lib/py.js/.hg_archival.txt b/addons/web/static/lib/py.js/.hg_archival.txt index f5355e28a12..35e98c8501d 100644 --- a/addons/web/static/lib/py.js/.hg_archival.txt +++ b/addons/web/static/lib/py.js/.hg_archival.txt @@ -1,5 +1,5 @@ repo: 076b192d0d8ab2b92d1dbcfa3da055382f30eaea -node: 5adb2d9c89e53a6445e3799f9c4dc9110458c149 +node: 1758bfec1ec1dcff95dcc4c72269cc0e3d000afd branch: default latesttag: 0.5 -latesttagdistance: 9 +latesttagdistance: 11 diff --git a/addons/web/static/lib/py.js/lib/py.js b/addons/web/static/lib/py.js/lib/py.js index 3c0b13d0717..a8c952679af 100644 --- a/addons/web/static/lib/py.js/lib/py.js +++ b/addons/web/static/lib/py.js/lib/py.js @@ -384,6 +384,21 @@ var py = {}; return new py.def(val); } + switch(val.constructor) { + case Object: + var o = new py.object(); + for (var prop in val) { + if (val.hasOwnProperty(prop)) { + o[prop] = val[prop]; + } + } + return o; + case Array: + var a = new py.list(); + a.values = val; + return a; + } + throw new Error("Could not convert " + val + " to a pyval"); } // Builtins @@ -448,7 +463,7 @@ var py = {}; __getattribute__: function (name) { if (name in this) { var val = this[name]; - if ('__get__' in val) { + if (typeof val === 'object' && '__get__' in val) { // TODO: second argument should be class return val.__get__(this); } @@ -627,6 +642,9 @@ var py = {}; } return py.False; }, + __getitem__: function (index) { + return PY_ensurepy(this.values[index.toJSON()]); + }, toJSON: function () { var out = []; for (var i=0; i - + + + @@ -51,4 +53,5 @@ + diff --git a/addons/web_dashboard/static/src/js/dashboard.js b/addons/web_dashboard/static/src/js/dashboard.js index bae74276a24..5511094b1ee 100644 --- a/addons/web_dashboard/static/src/js/dashboard.js +++ b/addons/web_dashboard/static/src/js/dashboard.js @@ -294,7 +294,6 @@ openerp.web_dashboard.ConfigOverview = openerp.web.View.extend({ this.dataset = new openerp.web.DataSetSearch(this, 'ir.actions.todo'); }, start: function () { - this._super(); var self = this; return this.user.read_index(['groups_id']).pipe(function(record) { var todos_filter = [ @@ -383,7 +382,6 @@ openerp.web_dashboard.Widget = openerp.web.View.extend(/** @lends openerp.web_da this.widget_id = options.widget_id; }, start: function () { - this._super(); var ds = new openerp.web.DataSet(this, 'res.widget'); return ds.read_ids([this.widget_id], ['title']).then(this.on_widget_loaded); }, diff --git a/addons/web_diagram/static/src/js/diagram.js b/addons/web_diagram/static/src/js/diagram.js index 41b3c4844db..a38031ed4f3 100644 --- a/addons/web_diagram/static/src/js/diagram.js +++ b/addons/web_diagram/static/src/js/diagram.js @@ -22,7 +22,6 @@ openerp.web.DiagramView = openerp.web.View.extend({ this.ids = this.dataset.ids; }, start: function() { - this._super(); return this.rpc("/web_diagram/diagram/load", {"model": this.model, "view_id": this.view_id}, this.on_loaded); }, diff --git a/addons/web_gantt/static/src/js/gantt.js b/addons/web_gantt/static/src/js/gantt.js index 9f49ba7bd5e..132d95e309e 100644 --- a/addons/web_gantt/static/src/js/gantt.js +++ b/addons/web_gantt/static/src/js/gantt.js @@ -10,20 +10,19 @@ openerp.web.views.add('gantt', 'openerp.web_gantt.GanttView'); openerp.web_gantt.GanttView = openerp.web.View.extend({ display_name: _lt('Gantt'), template: "GanttView", + view_type: "gantt", init: function() { this._super.apply(this, arguments); this.has_been_loaded = $.Deferred(); this.chart_id = _.uniqueId(); }, - start: function() { - return $.when(this.rpc("/web/view/load", {"model": this.dataset.model, "view_id": this.view_id, "view_type": "gantt"}), - this.rpc("/web/searchview/fields_get", {"model": this.dataset.model})).pipe(this.on_loaded); - }, - on_loaded: function(fields_view, fields_get) { - this.fields_view = fields_view[0]; - this.fields = fields_get[0].fields; - - this.has_been_loaded.resolve(); + on_loaded: function(fields_view_get, fields_get) { + var self = this; + this.fields_view = fields_view_get; + return this.rpc("/web/searchview/fields_get", {"model": this.dataset.model}).pipe(function(fields_get) { + self.fields = fields_get.fields; + self.has_been_loaded.resolve(); + }); }, do_search: function (domains, contexts, group_bys) { var self = this; diff --git a/addons/web_graph/static/src/js/graph.js b/addons/web_graph/static/src/js/graph.js index d962c7d6752..a55d8f15fbf 100644 --- a/addons/web_graph/static/src/js/graph.js +++ b/addons/web_graph/static/src/js/graph.js @@ -17,6 +17,7 @@ var QWeb = openerp.web.qweb, openerp.web.views.add('graph', 'openerp.web_graph.GraphView'); openerp.web_graph.GraphView = openerp.web.View.extend({ display_name: _lt('Graph'), + view_type: "graph", init: function(parent, dataset, view_id, options) { this._super(parent); @@ -39,27 +40,13 @@ openerp.web_graph.GraphView = openerp.web.View.extend({ } this._super(); }, - start: function() { + on_loaded: function(fields_view_get) { var self = this; - this._super(); - var loaded; - if (this.embedded_view) { - loaded = $.when([self.embedded_view]); - } else { - loaded = this.rpc('/web/view/load', { - model: this.dataset.model, - view_id: this.view_id, - view_type: 'graph' - }); - } - return $.when( - this.dataset.call_and_eval('fields_get', [false, {}], null, 1), - loaded) - .then(function (fields_result, view_result) { - self.fields = fields_result[0]; - self.fields_view = view_result[0]; - self.on_loaded(self.fields_view); - }); + self.fields_view = fields_view_get; + return this.dataset.call_and_eval('fields_get', [false, {}], null, 1).pipe(function(fields_result) { + self.fields = fields_result; + return self.on_loaded_2(); + }); }, /** * Returns all object fields involved in the graph view @@ -72,7 +59,7 @@ openerp.web_graph.GraphView = openerp.web.View.extend({ } return fs; }, - on_loaded: function() { + on_loaded_2: function() { this.chart = this.fields_view.arch.attrs.type || 'pie'; this.orientation = this.fields_view.arch.attrs.orientation || 'vertical'; @@ -91,6 +78,7 @@ openerp.web_graph.GraphView = openerp.web.View.extend({ }, this); this.ordinate = this.columns[0].name; this.is_loaded.resolve(); + return $.when(); }, schedule_chart: function(results) { var self = this; diff --git a/addons/web_kanban/static/src/js/kanban.js b/addons/web_kanban/static/src/js/kanban.js index 2993954e3aa..424212e8393 100644 --- a/addons/web_kanban/static/src/js/kanban.js +++ b/addons/web_kanban/static/src/js/kanban.js @@ -9,6 +9,7 @@ openerp.web_kanban.KanbanView = openerp.web.View.extend({ template: "KanbanView", display_name: _lt('Kanban'), default_nr_columns: 3, + view_type: "kanban", init: function (parent, dataset, view_id, options) { this._super(parent); this.set_default_options(options); @@ -34,23 +35,14 @@ openerp.web_kanban.KanbanView = openerp.web.View.extend({ this.currently_dragging = {}; this.limit = options.limit || 80; }, - start: function() { - this._super(); + on_loaded: function(data) { this.$element.find('button.oe_kanban_button_new').click(this.do_add_record); this.$groups = this.$element.find('.oe_kanban_groups tr'); - var context = new openerp.web.CompoundContext(this.dataset.get_context()); - return this.rpc('/web/view/load', { - 'model': this.dataset.model, - 'view_id': this.view_id, - 'view_type': 'kanban', - context: context - }, this.on_loaded); - }, - on_loaded: function(data) { this.fields_view = data; this.fields_keys = _.keys(this.fields_view.fields); this.add_qweb_template(); this.has_been_loaded.resolve(); + return $.when(); }, add_qweb_template: function() { for (var i=0, ii=this.fields_view.arch.children.length; i < ii; i++) {