diff options
Diffstat (limited to 'addons/web/static/src/js/corelib.js')
| -rw-r--r-- | addons/web/static/src/js/corelib.js | 299 |
1 files changed, 3 insertions, 296 deletions
diff --git a/addons/web/static/src/js/corelib.js b/addons/web/static/src/js/corelib.js index 0a6f4ed3a29..55984162a55 100644 --- a/addons/web/static/src/js/corelib.js +++ b/addons/web/static/src/js/corelib.js @@ -948,296 +948,6 @@ instance.web.JsonRPC = instance.web.Class.extend(instance.web.PropertiesMixin, { this.server = this.origin; // keep chs happy this.rpc_function = (this.origin == window_origin) ? this.rpc_json : this.rpc_jsonp; }, - test_eval_get_context: function () { - var asJS = function (arg) { - if (arg instanceof py.object) { - return arg.toJSON(); - } - return arg; - }; - - var datetime = new py.object(); - datetime.datetime = new py.type(function datetime() { - throw new Error('datetime.datetime not implemented'); - }); - var date = datetime.date = new py.type(function date(y, m, d) { - if (y instanceof Array) { - d = y[2]; - m = y[1]; - y = y[0]; - } - this.year = asJS(y); - this.month = asJS(m); - this.day = asJS(d); - }, py.object, { - strftime: function (args) { - var f = asJS(args[0]), self = this; - return new py.str(f.replace(/%([A-Za-z])/g, function (m, c) { - switch (c) { - case 'Y': return self.year; - case 'm': return _.str.sprintf('%02d', self.month); - case 'd': return _.str.sprintf('%02d', self.day); - } - throw new Error('ValueError: No known conversion for ' + m); - })); - } - }); - date.__getattribute__ = function (name) { - if (name === 'today') { - return date.today; - } - throw new Error("AttributeError: object 'date' has no attribute '" + name +"'"); - }; - date.today = new py.def(function () { - var d = new Date(); - return new date(d.getFullYear(), d.getMonth() + 1, d.getDate()); - }); - datetime.time = new py.type(function time() { - throw new Error('datetime.time not implemented'); - }); - - var time = new py.object(); - time.strftime = new py.def(function (args) { - return date.today.__call__().strftime(args); - }); - - var relativedelta = new py.type(function relativedelta(args, kwargs) { - if (!_.isEmpty(args)) { - throw new Error('Extraction of relative deltas from existing datetimes not supported'); - } - this.ops = kwargs; - }, py.object, { - __add__: function (other) { - if (!(other instanceof datetime.date)) { - return py.NotImplemented; - } - // TODO: test this whole mess - var year = asJS(this.ops.year) || asJS(other.year); - if (asJS(this.ops.years)) { - year += asJS(this.ops.years); - } - - var month = asJS(this.ops.month) || asJS(other.month); - if (asJS(this.ops.months)) { - month += asJS(this.ops.months); - // FIXME: no divmod in JS? - while (month < 1) { - year -= 1; - month += 12; - } - while (month > 12) { - year += 1; - month -= 12; - } - } - - var lastMonthDay = new Date(year, month, 0).getDate(); - var day = asJS(this.ops.day) || asJS(other.day); - if (day > lastMonthDay) { day = lastMonthDay; } - var days_offset = ((asJS(this.ops.weeks) || 0) * 7) + (asJS(this.ops.days) || 0); - if (days_offset) { - day = new Date(year, month-1, day + days_offset).getDate(); - } - // TODO: leapdays? - // TODO: hours, minutes, seconds? Not used in XML domains - // TODO: weekday? - return new datetime.date(year, month, day); - }, - __radd__: function (other) { - return this.__add__(other); - }, - - __sub__: function (other) { - if (!(other instanceof datetime.date)) { - return py.NotImplemented; - } - // TODO: test this whole mess - var year = asJS(this.ops.year) || asJS(other.year); - if (asJS(this.ops.years)) { - year -= asJS(this.ops.years); - } - - var month = asJS(this.ops.month) || asJS(other.month); - if (asJS(this.ops.months)) { - month -= asJS(this.ops.months); - // FIXME: no divmod in JS? - while (month < 1) { - year -= 1; - month += 12; - } - while (month > 12) { - year += 1; - month -= 12; - } - } - - var lastMonthDay = new Date(year, month, 0).getDate(); - var day = asJS(this.ops.day) || asJS(other.day); - if (day > lastMonthDay) { day = lastMonthDay; } - var days_offset = ((asJS(this.ops.weeks) || 0) * 7) + (asJS(this.ops.days) || 0); - if (days_offset) { - day = new Date(year, month-1, day - days_offset).getDate(); - } - // TODO: leapdays? - // TODO: hours, minutes, seconds? Not used in XML domains - // TODO: weekday? - return new datetime.date(year, month, day); - }, - __rsub__: function (other) { - return this.__sub__(other); - } - }); - - return { - uid: new py.float(this.uid), - datetime: datetime, - time: time, - relativedelta: relativedelta, - current_date: date.today.__call__().strftime(['%Y-%m-%d']) - }; - }, - /** - * FIXME: Huge testing hack, especially the evaluation context, rewrite + test for real before switching - */ - test_eval: function (source, expected) { - var match_template = '<ul>' + - '<li>Source: %(source)s</li>' + - '<li>Local: %(local)s</li>' + - '<li>Remote: %(remote)s</li>' + - '</ul>', - fail_template = '<ul>' + - '<li>Error: %(error)s</li>' + - '<li>Source: %(source)s</li>' + - '</ul>'; - try { - // see Session.eval_context in Python - var ctx = this.test_eval_contexts( - ([this.context] || []).concat(source.contexts)); - if (!_.isEqual(ctx, expected.context)) { - instance.webclient.notification.warn('Context mismatch, report to xmo', - _.str.sprintf(match_template, { - source: JSON.stringify(source.contexts), - local: JSON.stringify(ctx), - remote: JSON.stringify(expected.context) - }), true); - } - } catch (e) { - instance.webclient.notification.warn('Context fail, report to xmo', - _.str.sprintf(fail_template, { - error: e.message, - source: JSON.stringify(source.contexts) - }), true); - } - - try { - var dom = this.test_eval_domains(source.domains, this.test_eval_get_context()); - if (!_.isEqual(dom, expected.domain)) { - instance.webclient.notification.warn('Domains mismatch, report to xmo', - _.str.sprintf(match_template, { - source: JSON.stringify(source.domains), - local: JSON.stringify(dom), - remote: JSON.stringify(expected.domain) - }), true); - } - } catch (e) { - instance.webclient.notification.warn('Domain fail, report to xmo', - _.str.sprintf(fail_template, { - error: e.message, - source: JSON.stringify(source.domains) - }), true); - } - - try { - var groups = this.test_eval_groupby(source.group_by_seq); - if (!_.isEqual(groups, expected.group_by)) { - instance.webclient.notification.warn('GroupBy mismatch, report to xmo', - _.str.sprintf(match_template, { - source: JSON.stringify(source.group_by_seq), - local: JSON.stringify(groups), - remote: JSON.stringify(expected.group_by) - }), true); - } - } catch (e) { - instance.webclient.notification.warn('GroupBy fail, report to xmo', - _.str.sprintf(fail_template, { - error: e.message, - source: JSON.stringify(source.group_by_seq) - }), true); - } - }, - test_eval_contexts: function (contexts, evaluation_context) { - evaluation_context = evaluation_context || {}; - var self = this; - return _(contexts).reduce(function (result_context, ctx) { - // __eval_context evaluations can lead to some of `contexts`'s - // values being null, skip them as well as empty contexts - if (_.isEmpty(ctx)) { return result_context; } - var evaluated = ctx; - switch(ctx.__ref) { - case 'context': - evaluated = py.eval(ctx.__debug, evaluation_context); - break; - case 'compound_context': - var eval_context = self.test_eval_contexts([ctx.__eval_context]); - evaluated = self.test_eval_contexts( - ctx.__contexts, _.extend({}, evaluation_context, eval_context)); - break; - } - // add newly evaluated context to evaluation context for following - // siblings - _.extend(evaluation_context, evaluated); - return _.extend(result_context, evaluated); - }, _.extend({}, this.user_context)); - }, - test_eval_domains: function (domains, evaluation_context) { - var result_domain = [], self = this; - _(domains).each(function (dom) { - switch(dom.__ref) { - case 'domain': - result_domain.push.apply( - result_domain, py.eval(dom.__debug, evaluation_context)); - break; - case 'compound_domain': - var eval_context = self.test_eval_contexts([dom.__eval_context]); - result_domain.push.apply( - result_domain, self.test_eval_domains( - dom.__domains, _.extend( - {}, evaluation_context, eval_context))); - break; - default: - result_domain.push.apply( - result_domain, dom); - } - }); - return result_domain; - }, - test_eval_groupby: function (contexts) { - var result_group = [], self = this; - _(contexts).each(function (ctx) { - var group; - switch(ctx.__ref) { - case 'context': - group = py.eval(ctx.__debug).group_by; - break; - case 'compound_context': - group = self.test_eval_contexts( - ctx.__contexts, ctx.__eval_context).group_by; - break; - default: - group = ctx.group_by - } - if (!group) { return; } - if (typeof group === 'string') { - result_group.push(group); - } else if (group instanceof Array) { - result_group.push.apply(result_group, group); - } else { - throw new Error('Got invalid groupby {{' - + JSON.stringify(group) + '}}'); - } - }); - return result_group; - }, /** * Executes an RPC call, registering the provided callbacks. * @@ -1271,22 +981,19 @@ instance.web.JsonRPC = instance.web.Class.extend(instance.web.PropertiesMixin, { var deferred = $.Deferred(); if (! options.shadow) this.trigger('request', url, payload); - var request = this.rpc_function(url, payload).done( + + this.rpc_function(url, payload).then( function (response, textStatus, jqXHR) { if (! options.shadow) self.trigger('response', response); if (!response.error) { - if (url.url === '/web/session/eval_domain_and_context') { - self.test_eval(params, response.result); - } deferred.resolve(response["result"], textStatus, jqXHR); } else if (response.error.data.type === "session_invalid") { self.uid = false; } else { deferred.reject(response.error, $.Event()); } - } - ).fail( + }, function(jqXHR, textStatus, errorThrown) { if (! options.shadow) self.trigger('response_failed', jqXHR); |
