From eed4d586a026544facd35e3ca5184ef7f609c562 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A9ry=20Debongnie?= Date: Fri, 22 Jun 2018 10:26:40 +0200 Subject: [PATCH] [REF] *: rename web.pyeval into web.py_utils The pyeval name is quite confusing, given that there is already an eval and an evaluate function in py.js, and that the web.pyeval exports two evaluate functions. Since this file is more about odoo specific customization to py.js, it is renamed in py_utils to better express its intended use. --- addons/board/static/src/js/favorite_menu.js | 6 +- .../static/src/js/search.js | 4 +- addons/mail/static/src/js/discuss.js | 4 +- .../static/src/js/timesheet_plan.js | 4 +- addons/web/static/src/js/_deprecated/data.js | 16 +-- .../static/src/js/chrome/action_manager.js | 6 +- .../js/chrome/action_manager_act_window.js | 10 +- addons/web/static/src/js/chrome/sidebar.js | 4 +- addons/web/static/src/js/core/context.js | 4 +- addons/web/static/src/js/core/domain.js | 4 +- .../src/js/core/{pyeval.js => py_utils.js} | 2 +- .../static/src/js/views/basic/basic_view.js | 4 +- .../src/js/views/list/list_controller.js | 4 +- .../src/js/views/search/favorites_menu.js | 4 +- .../src/js/views/search/search_inputs.js | 8 +- .../static/src/js/views/search/search_view.js | 4 +- .../web/static/src/js/views/view_dialogs.js | 6 +- .../web/static/src/js/widgets/data_export.js | 4 +- .../{pyeval_tests.js => py_utils_tests.js} | 108 +++++++++--------- .../web/static/tests/helpers/mock_server.js | 6 +- addons/web/static/tests/views/form_tests.js | 4 +- addons/web/views/webclient_templates.xml | 4 +- 22 files changed, 110 insertions(+), 110 deletions(-) rename addons/web/static/src/js/core/{pyeval.js => py_utils.js} (99%) rename addons/web/static/tests/core/{pyeval_tests.js => py_utils_tests.js} (93%) diff --git a/addons/board/static/src/js/favorite_menu.js b/addons/board/static/src/js/favorite_menu.js index 112b4d634fa..cdb531914c9 100644 --- a/addons/board/static/src/js/favorite_menu.js +++ b/addons/board/static/src/js/favorite_menu.js @@ -6,7 +6,7 @@ var Context = require('web.Context'); var core = require('web.core'); var Domain = require('web.Domain'); var FavoriteMenu = require('web.FavoriteMenu'); -var pyeval = require('web.pyeval'); +var pyUtils = require('web.py_utils'); var _t = core._t; var QWeb = core.qweb; @@ -64,7 +64,7 @@ FavoriteMenu.include({ }); context.add({ - group_by: pyeval.eval('groupbys', search_data.groupbys || []) + group_by: pyUtils.eval('groupbys', search_data.groupbys || []) }); // AAB: trigger_up an event that will be intercepted by the controller, // as soon as the controller is the parent of the control panel @@ -77,7 +77,7 @@ FavoriteMenu.include({ var currentAction = am.getCurrentAction(); var controller = am.getCurrentController(); context.add(controller.widget.getContext()); - var c = pyeval.eval('context', context); + var c = pyUtils.eval('context', context); for (var k in c) { if (c.hasOwnProperty(k) && /^search_default_/.test(k)) { delete c[k]; diff --git a/addons/google_spreadsheet/static/src/js/search.js b/addons/google_spreadsheet/static/src/js/search.js index 20b7c804f33..2177407520b 100644 --- a/addons/google_spreadsheet/static/src/js/search.js +++ b/addons/google_spreadsheet/static/src/js/search.js @@ -6,7 +6,7 @@ var core = require('web.core'); var data = require('web.data'); var Domain = require('web.Domain'); var FavoriteMenu = require('web.FavoriteMenu'); -var pyeval = require('web.pyeval'); +var pyUtils = require('web.py_utils'); var QWeb = core.qweb; @@ -30,7 +30,7 @@ FavoriteMenu.include({ list_view = _.findWhere(controller.widget.actionViews, {type: 'list'}), list_view_id = list_view ? list_view.viewID : false, domain = [], - groupbys = pyeval.eval('groupbys', sv_data.groupbys).join(" "), + groupbys = pyUtils.eval('groupbys', sv_data.groupbys).join(" "), ds = new data.DataSet(this, 'google.drive.config'); _.each(sv_data.domains, function (d) { diff --git a/addons/mail/static/src/js/discuss.js b/addons/mail/static/src/js/discuss.js index ba0ad31a849..47af7ca3f08 100644 --- a/addons/mail/static/src/js/discuss.js +++ b/addons/mail/static/src/js/discuss.js @@ -12,7 +12,7 @@ var core = require('web.core'); var data = require('web.data'); var Dialog = require('web.Dialog'); var dom = require('web.dom'); -var pyeval = require('web.pyeval'); +var pyUtils = require('web.py_utils'); var SearchView = require('web.SearchView'); var session = require('web.session'); @@ -1320,7 +1320,7 @@ var Discuss = AbstractAction.extend(ControlPanelMixin, { _onSearch: function (ev) { ev.stopPropagation(); var session = this.getSession(); - var result = pyeval.eval_domains_and_contexts({ + var result = pyUtils.eval_domains_and_contexts({ domains: ev.data.domains, contexts: [session.user_context], }); diff --git a/addons/sale_timesheet/static/src/js/timesheet_plan.js b/addons/sale_timesheet/static/src/js/timesheet_plan.js index 6596bd4ea88..afebfac23fe 100644 --- a/addons/sale_timesheet/static/src/js/timesheet_plan.js +++ b/addons/sale_timesheet/static/src/js/timesheet_plan.js @@ -5,7 +5,7 @@ var AbstractAction = require('web.AbstractAction'); var ControlPanelMixin = require('web.ControlPanelMixin'); var core = require('web.core'); var data = require('web.data'); -var pyeval = require('web.pyeval'); +var pyUtils = require('web.py_utils'); var SearchView = require('web.SearchView'); var _t = core._t; @@ -297,7 +297,7 @@ var ProjectPlan = AbstractAction.extend(ControlPanelMixin, { event.stopPropagation(); var session = this.getSession(); // group by are disabled, so we don't take care of them - var result = pyeval.eval_domains_and_contexts({ + var result = pyUtils.eval_domains_and_contexts({ domains: event.data.domains, contexts: [session.user_context].concat(event.data.contexts) }); diff --git a/addons/web/static/src/js/_deprecated/data.js b/addons/web/static/src/js/_deprecated/data.js index eb70f330076..fd19ff61af7 100644 --- a/addons/web/static/src/js/_deprecated/data.js +++ b/addons/web/static/src/js/_deprecated/data.js @@ -7,7 +7,7 @@ var concurrency = require('web.concurrency'); var mixins = require('web.mixins'); var session = require('web.session'); var translation = require('web.translation'); -var pyeval = require('web.pyeval'); +var pyUtils = require('web.py_utils'); var _t = translation._t; @@ -85,9 +85,9 @@ var Query = Class.extend({ return session.rpc('/web/dataset/search_read', { model: this._model.name, fields: this._fields || false, - domain: pyeval.eval('domains', + domain: pyUtils.eval('domains', [this._model.domain(this._filter)]), - context: pyeval.eval('contexts', + context: pyUtils.eval('contexts', [this._model.context(this._context)]), offset: this._offset, limit: this._limit, @@ -138,7 +138,7 @@ var Query = Class.extend({ * @returns {jQuery.Deferred> | null} */ group_by: function (grouping) { - var ctx = pyeval.eval( + var ctx = pyUtils.eval( 'context', this._model.context(this._context)); // undefined passed in explicitly (!) @@ -609,7 +609,7 @@ var DataSet = Class.extend(mixins.PropertiesMixin, { return session.rpc('/web/dataset/resequence', { model: this.model, ids: ids, - context: pyeval.eval( + context: pyUtils.eval( 'context', this.get_context(options.context)), }).then(function (results) { return results; @@ -797,7 +797,7 @@ var Model = Class.extend({ * Call a method (over RPC) on the bound OpenERP model. * * @param {String} method name of the method to call - * @param {Array} [args] positional arguments + * @param {Array} [args] positipyEvalonal arguments * @param {Object} [kwargs] keyword arguments * @param {Object} [options] additional options for the rpc() method * @returns {jQuery.Deferred<>} call result @@ -810,7 +810,7 @@ var Model = Class.extend({ kwargs = args; args = []; } - pyeval.ensure_evaluated(args, kwargs); + pyUtils.ensure_evaluated(args, kwargs); var call_kw = '/web/dataset/call_kw/' + this.name + '/' + method; return session.rpc(call_kw, { model: this.name, @@ -820,7 +820,7 @@ var Model = Class.extend({ }, options); }, call_button: function (method, args) { - pyeval.ensure_evaluated(args, {}); + pyUtils.ensure_evaluated(args, {}); return session.rpc('/web/dataset/call_button', { model: this.name, method: method, diff --git a/addons/web/static/src/js/chrome/action_manager.js b/addons/web/static/src/js/chrome/action_manager.js index f98447c8983..2eb698b5424 100644 --- a/addons/web/static/src/js/chrome/action_manager.js +++ b/addons/web/static/src/js/chrome/action_manager.js @@ -19,7 +19,7 @@ var core = require('web.core'); var Dialog = require('web.Dialog'); var dom = require('web.dom'); var framework = require('web.framework'); -var pyeval = require('web.pyeval'); +var pyUtils = require('web.py_utils'); var Widget = require('web.Widget'); var _t = core._t; @@ -781,9 +781,9 @@ var ActionManager = Widget.extend({ _preprocessAction: function (action, options) { // ensure that the context and domain are evaluated var context = new Context(this.userContext, options.additional_context, action.context); - action.context = pyeval.eval('context', context); + action.context = pyUtils.eval('context', context); if (action.domain) { - action.domain = pyeval.eval('domain', action.domain, action.context); + action.domain = pyUtils.eval('domain', action.domain, action.context); } action._originalAction = JSON.stringify(action); diff --git a/addons/web/static/src/js/chrome/action_manager_act_window.js b/addons/web/static/src/js/chrome/action_manager_act_window.js index e040096f60b..0b18b04172a 100644 --- a/addons/web/static/src/js/chrome/action_manager_act_window.js +++ b/addons/web/static/src/js/chrome/action_manager_act_window.js @@ -11,7 +11,7 @@ var config = require('web.config'); var Context = require('web.Context'); var core = require('web.core'); var data = require('web.data'); // this will be removed at some point -var pyeval = require('web.pyeval'); +var pyUtils = require('web.py_utils'); var SearchView = require('web.SearchView'); var view_registry = require('web.view_registry'); @@ -522,7 +522,7 @@ ActionManager.include({ var domains = searchData.domains; var groupbys = searchData.groupbys; var action_context = action.context || {}; - var results = pyeval.eval_domains_and_contexts({ + var results = pyUtils.eval_domains_and_contexts({ domains: [action.domain || []].concat(domains || []), contexts: [action_context].concat(contexts || []), group_by_seq: groupbys || [], @@ -703,7 +703,7 @@ ActionManager.include({ var actionData = ev.data.action_data; var env = ev.data.env; var context = new Context(env.context, actionData.context || {}); - var recordID = env.currentID || null; // pyeval handles null value, not undefined + var recordID = env.currentID || null; // pyUtils handles null value, not undefined var def; // determine the action to execute according to the actionData @@ -733,7 +733,7 @@ ActionManager.include({ }); } else if (actionData.type === 'action') { // execute a given action, so load it first - def = this._loadAction(actionData.name, _.extend(pyeval.eval('context', context), { + def = this._loadAction(actionData.name, _.extend(pyUtils.eval('context', context), { active_model: env.model, active_ids: env.resIDs, active_id: recordID, @@ -751,7 +751,7 @@ ActionManager.include({ // code below handles the first case i.e 'effect' attribute on button. var effect = false; if (actionData.effect) { - effect = pyeval.py_eval(actionData.effect); + effect = pyUtils.py_eval(actionData.effect); } if (action && action.constructor === Object) { diff --git a/addons/web/static/src/js/chrome/sidebar.js b/addons/web/static/src/js/chrome/sidebar.js index bf9e3668c35..47d598aaeb8 100644 --- a/addons/web/static/src/js/chrome/sidebar.js +++ b/addons/web/static/src/js/chrome/sidebar.js @@ -3,7 +3,7 @@ odoo.define('web.Sidebar', function (require) { var Context = require('web.Context'); var core = require('web.core'); -var pyeval = require('web.pyeval'); +var pyUtils = require('web.py_utils'); var Widget = require('web.Widget'); var QWeb = core.qweb; @@ -146,7 +146,7 @@ var Sidebar = Widget.extend({ activeIdsContext.active_domain = env.domain; } - var context = pyeval.eval('context', new Context(env.context, activeIdsContext)); + var context = pyUtils.eval('context', new Context(env.context, activeIdsContext)); self._rpc({ route: '/web/action/load', params: { diff --git a/addons/web/static/src/js/core/context.js b/addons/web/static/src/js/core/context.js index 53254bd718a..a7ce801708d 100644 --- a/addons/web/static/src/js/core/context.js +++ b/addons/web/static/src/js/core/context.js @@ -2,7 +2,7 @@ odoo.define('web.Context', function (require) { "use strict"; var Class = require('web.Class'); -var pyeval = require('web.pyeval'); +var pyUtils = require('web.py_utils'); var Context = Class.extend({ init: function () { @@ -24,7 +24,7 @@ var Context = Class.extend({ return this; }, eval: function () { - return pyeval.eval('context', this); + return pyUtils.eval('context', this); }, /** * Set the evaluation context to be used when we actually eval. diff --git a/addons/web/static/src/js/core/domain.js b/addons/web/static/src/js/core/domain.js index 8ce570b8605..86e1f85a634 100644 --- a/addons/web/static/src/js/core/domain.js +++ b/addons/web/static/src/js/core/domain.js @@ -2,7 +2,7 @@ odoo.define("web.Domain", function (require) { "use strict"; var collections = require("web.collections"); -var pyeval = require("web.pyeval"); +var pyUtils = require("web.py_utils"); /** * The Domain Class allows to work with a domain as a tree and provides tools @@ -240,7 +240,7 @@ var Domain = collections.Tree.extend({ */ stringToArray: function (domain, evalContext) { if (!_.isString(domain)) return _.clone(domain); - return pyeval.eval("domain", domain ? domain.replace(/%%/g, '%') : "[]", evalContext); + return pyUtils.eval("domain", domain ? domain.replace(/%%/g, '%') : "[]", evalContext); }, /** * Makes implicit "&" operators explicit in the given JS prefix-array diff --git a/addons/web/static/src/js/core/pyeval.js b/addons/web/static/src/js/core/py_utils.js similarity index 99% rename from addons/web/static/src/js/core/pyeval.js rename to addons/web/static/src/js/core/py_utils.js index 47d6d07bf64..8590965cee2 100644 --- a/addons/web/static/src/js/core/pyeval.js +++ b/addons/web/static/src/js/core/py_utils.js @@ -1,4 +1,4 @@ -odoo.define('web.pyeval', function (require) { +odoo.define('web.py_utils', function (require) { "use strict"; var core = require('web.core'); diff --git a/addons/web/static/src/js/views/basic/basic_view.js b/addons/web/static/src/js/views/basic/basic_view.js index 2c4ed711223..cb4afe73476 100644 --- a/addons/web/static/src/js/views/basic/basic_view.js +++ b/addons/web/static/src/js/views/basic/basic_view.js @@ -15,7 +15,7 @@ var BasicController = require('web.BasicController'); var BasicModel = require('web.BasicModel'); var config = require('web.config'); var fieldRegistry = require('web.field_registry'); -var pyeval = require('web.pyeval'); +var pyUtils = require('web.py_utils'); var utils = require('web.utils'); var BasicView = AbstractView.extend({ @@ -222,7 +222,7 @@ var BasicView = AbstractView.extend({ }); if (!_.isObject(attrs.options)) { // parent arch could have already been processed (TODO this should not happen) - attrs.options = attrs.options ? pyeval.py_eval(attrs.options) : {}; + attrs.options = attrs.options ? pyUtils.py_eval(attrs.options) : {}; } if (attrs.on_change && !field.onChange) { diff --git a/addons/web/static/src/js/views/list/list_controller.js b/addons/web/static/src/js/views/list/list_controller.js index ae1a8f7305b..a210c07a885 100644 --- a/addons/web/static/src/js/views/list/list_controller.js +++ b/addons/web/static/src/js/views/list/list_controller.js @@ -11,7 +11,7 @@ var core = require('web.core'); var BasicController = require('web.BasicController'); var DataExport = require('web.DataExport'); var Dialog = require('web.Dialog'); -var pyeval = require('web.pyeval'); +var pyUtils = require('web.py_utils'); var Sidebar = require('web.Sidebar'); var _t = core._t; @@ -67,7 +67,7 @@ var ListController = BasicController.extend({ if (this.$('thead .o_list_record_selector input').prop('checked')) { var searchData = this.searchView.build_search_data(); var userContext = this.getSession().user_context; - var results = pyeval.eval_domains_and_contexts({ + var results = pyUtils.eval_domains_and_contexts({ domains: searchData.domains, contexts: [userContext].concat(searchData.contexts), group_by_seq: searchData.groupbys || [] diff --git a/addons/web/static/src/js/views/search/favorites_menu.js b/addons/web/static/src/js/views/search/favorites_menu.js index f0962e6177e..bd622797c49 100644 --- a/addons/web/static/src/js/views/search/favorites_menu.js +++ b/addons/web/static/src/js/views/search/favorites_menu.js @@ -4,7 +4,7 @@ odoo.define('web.FavoriteMenu', function (require) { var config = require('web.config'); var core = require('web.core'); var data_manager = require('web.data_manager'); -var pyeval = require('web.pyeval'); +var pyUtils = require('web.py_utils'); var session = require('web.session'); var Widget = require('web.Widget'); @@ -105,7 +105,7 @@ return Widget.extend({ controllerContext = ctx; }, }); - var results = pyeval.eval_domains_and_contexts({ + var results = pyUtils.eval_domains_and_contexts({ domains: search.domains, contexts: [user_context].concat(search.contexts.concat(controllerContext || [])), group_by_seq: search.groupbys || [], diff --git a/addons/web/static/src/js/views/search/search_inputs.js b/addons/web/static/src/js/views/search/search_inputs.js index 00d4d6281a0..d3f36254819 100644 --- a/addons/web/static/src/js/views/search/search_inputs.js +++ b/addons/web/static/src/js/views/search/search_inputs.js @@ -5,7 +5,7 @@ var Context = require('web.Context'); var core = require('web.core'); var Domain = require('web.Domain'); var field_utils = require('web.field_utils'); -var pyeval = require('web.pyeval'); +var pyUtils = require('web.py_utils'); var time = require('web.time'); var utils = require('web.utils'); var Widget = require('web.Widget'); @@ -416,7 +416,7 @@ var ManyToOneField = CharField.extend({ expand: function (needle) { var self = this; // FIXME: "concurrent" searches (multiple requests, mis-ordered responses) - var context = pyeval.eval( + var context = pyUtils.eval( 'contexts', [this.searchview.dataset.get_context()]); var args = this.attrs.domain; if (typeof args === 'string') { @@ -458,7 +458,7 @@ var ManyToOneField = CharField.extend({ // to handle this as if it were a single value. value = value[0]; } - var context = pyeval.eval('contexts', [this.searchview.dataset.get_context()]); + var context = pyUtils.eval('contexts', [this.searchview.dataset.get_context()]); return this._rpc({ model: this.attrs.relation, @@ -524,7 +524,7 @@ var FilterGroup = Input.extend(/** @lends instance.web.search.FilterGroup# */{ if (!(this instanceof GroupbyGroup) && _(filters).all(function (f) { if (!f.attrs.context) { return false; } - var c = pyeval.eval('context', f.attrs.context); + var c = pyUtils.eval('context', f.attrs.context); return !_.isEmpty(c.group_by);})) { return new GroupbyGroup(filters, parent, intervalMapping); } diff --git a/addons/web/static/src/js/views/search/search_view.js b/addons/web/static/src/js/views/search/search_view.js index 098df30c46a..e5a00434745 100644 --- a/addons/web/static/src/js/views/search/search_view.js +++ b/addons/web/static/src/js/views/search/search_view.js @@ -7,7 +7,7 @@ var core = require('web.core'); var FavoriteMenu = require('web.FavoriteMenu'); var FiltersMenu = require('web.FiltersMenu'); var GroupByMenu = require('web.GroupByMenu'); -var pyeval = require('web.pyeval'); +var pyUtils = require('web.py_utils'); var search_inputs = require('web.search_inputs'); var utils = require('web.utils'); var Widget = require('web.Widget'); @@ -683,7 +683,7 @@ var SearchView = Widget.extend({ var category = 'filters'; if (item.attrs.context) { try { - var context = pyeval.eval('context', item.attrs.context); + var context = pyUtils.eval('context', item.attrs.context); if (context.group_by) { category = 'group_by'; item.attrs.fieldName = context.group_by.split(':')[0]; diff --git a/addons/web/static/src/js/views/view_dialogs.js b/addons/web/static/src/js/views/view_dialogs.js index 55f9a2e85d7..ed0adf0ff3b 100644 --- a/addons/web/static/src/js/views/view_dialogs.js +++ b/addons/web/static/src/js/views/view_dialogs.js @@ -7,7 +7,7 @@ var Dialog = require('web.Dialog'); var dom = require('web.dom'); var ListController = require('web.ListController'); var ListView = require('web.ListView'); -var pyeval = require('web.pyeval'); +var pyUtils = require('web.py_utils'); var SearchView = require('web.SearchView'); var view_registry = require('web.view_registry'); @@ -293,7 +293,7 @@ var SelectCreateDialog = ViewDialog.extend({ var user_context = this.getSession().user_context; var _super = this._super.bind(this); - var context = pyeval.eval_domains_and_contexts({ + var context = pyUtils.eval_domains_and_contexts({ domains: [], contexts: [user_context, this.context] }).context; @@ -397,7 +397,7 @@ var SelectCreateDialog = ViewDialog.extend({ }); }, _process_search_data: function (domains, contexts, groupbys) { - var results = pyeval.eval_domains_and_contexts({ + var results = pyUtils.eval_domains_and_contexts({ domains: [this.domain].concat(domains), contexts: [this.context].concat(contexts), group_by_seq: groupbys || [], diff --git a/addons/web/static/src/js/widgets/data_export.js b/addons/web/static/src/js/widgets/data_export.js index 68c8b23af13..8a09f7fa034 100644 --- a/addons/web/static/src/js/widgets/data_export.js +++ b/addons/web/static/src/js/widgets/data_export.js @@ -6,7 +6,7 @@ var crash_manager = require('web.crash_manager'); var data = require('web.data'); var Dialog = require('web.Dialog'); var framework = require('web.framework'); -var pyeval = require('web.pyeval'); +var pyUtils = require('web.py_utils'); var QWeb = core.qweb; var _t = core._t; @@ -467,7 +467,7 @@ var DataExport = Dialog.extend({ fields: exported_fields, ids: this.ids_to_export, domain: this.domain, - context: pyeval.eval('contexts', [this.record.getContext()]), + context: pyUtils.eval('contexts', [this.record.getContext()]), import_compat: !!this.$import_compat_radios.filter(':checked').val(), })}, complete: framework.unblockUI, diff --git a/addons/web/static/tests/core/pyeval_tests.js b/addons/web/static/tests/core/py_utils_tests.js similarity index 93% rename from addons/web/static/tests/core/pyeval_tests.js rename to addons/web/static/tests/core/py_utils_tests.js index 95d8783ad96..f53c4dca8f6 100644 --- a/addons/web/static/tests/core/pyeval_tests.js +++ b/addons/web/static/tests/core/py_utils_tests.js @@ -1,8 +1,8 @@ -odoo.define('web.pyEval_tests', function(require) { +odoo.define('web.py_utils_tests', function(require) { "use strict"; var Context = require('web.Context'); -var pyEval = require('web.pyeval'); +var pyUtils = require('web.py_utils'); var time = require('web.time'); QUnit.module('core', function () { @@ -12,9 +12,9 @@ QUnit.module('core', function () { QUnit.test('simple python expression', function(assert) { assert.expect(2); - var result = pyEval.py_eval("True and False"); + var result = pyUtils.py_eval("True and False"); assert.strictEqual(result, false, "should properly evaluate basic expression"); - result = pyEval.py_eval("a + b", {a: 1, b: 41}); + result = pyUtils.py_eval("a + b", {a: 1, b: 41}); assert.strictEqual(result, 42, "should properly evaluate basic sum"); }); @@ -38,7 +38,7 @@ QUnit.module('core', function () { function makeTimeCheck (assert) { - var context = pyEval.context(); + var context = pyUtils.context(); return function (expr, func, message) { // evaluate expr between two calls to new Date(), and check that // the result is between the transformed dates @@ -51,7 +51,7 @@ QUnit.module('core', function () { // Port from pypy/lib_pypy/test_datetime.py function makeEq(assert, c2) { - var ctx = pyEval.context(); + var ctx = pyUtils.context(); var c = _.extend({ td: ctx.datetime.timedelta }, c2 || {}); return function (a, b, message) { assert.ok(py.eval(a + ' == ' + b, c), message); @@ -81,7 +81,7 @@ QUnit.module('core', function () { QUnit.test('context_today', function (assert) { assert.expect(1); - var check = makeTimeCheck(assert, pyEval); + var check = makeTimeCheck(assert, pyUtils); check("context_today().strftime('%Y-%m-%d')", function(d) { return String(_.str.sprintf('%04d-%02d-%02d', @@ -119,7 +119,7 @@ QUnit.module('core', function () { QUnit.test('timedelta.test_computations', function (assert) { assert.expect(28); - var c = pyEval.context(); + var c = pyUtils.context(); var zero = py.float.fromJSON(0); var eq = makeEq(assert, { // one week @@ -174,7 +174,7 @@ QUnit.module('core', function () { QUnit.test('timedelta.test_basic_attributes', function (assert) { assert.expect(3); - var ctx = pyEval.context(); + var ctx = pyUtils.context(); assert.strictEqual(py.eval('datetime.timedelta(1, 7, 31).days', ctx), 1); assert.strictEqual(py.eval('datetime.timedelta(1, 7, 31).seconds', ctx), 7); assert.strictEqual(py.eval('datetime.timedelta(1, 7, 31).microseconds', ctx), 31); @@ -183,7 +183,7 @@ QUnit.module('core', function () { QUnit.test('timedelta.test_total_seconds', function (assert) { assert.expect(6); - var c = { timedelta: pyEval.context().datetime.timedelta }; + var c = { timedelta: pyUtils.context().datetime.timedelta }; assert.strictEqual(py.eval('timedelta(365).total_seconds()', c), 31536000); assert.strictEqual( py.eval('timedelta(seconds=123456.789012).total_seconds()', c), @@ -201,7 +201,7 @@ QUnit.module('core', function () { QUnit.test('timedelta.test_str', function (assert) { assert.expect(10); - var c = { td: pyEval.context().datetime.timedelta }; + var c = { td: pyUtils.context().datetime.timedelta }; assert.strictEqual(py.eval('str(td(1))', c), "1 day, 0:00:00"); assert.strictEqual(py.eval('str(td(-1))', c), "-1 day, 0:00:00"); @@ -228,7 +228,7 @@ QUnit.module('core', function () { assert.expect(3); var td = py.PY_call( - pyEval.context().datetime.timedelta, + pyUtils.context().datetime.timedelta, {microseconds: py.float.fromJSON(-1)}); assert.strictEqual(td.days, -1); assert.strictEqual(td.seconds, 24 * 3600 - 1); @@ -238,7 +238,7 @@ QUnit.module('core', function () { QUnit.test('timedelta.test_bool', function (assert) { assert.expect(5); - var c = { td: pyEval.context().datetime.timedelta }; + var c = { td: pyUtils.context().datetime.timedelta }; assert.ok(py.eval('bool(td(1))', c)); assert.ok(py.eval('bool(td(0, 1))', c)); assert.ok(py.eval('bool(td(0, 0, 1))', c)); @@ -249,7 +249,7 @@ QUnit.module('core', function () { QUnit.test('date.test_computations', function (assert) { assert.expect(31); - var d = pyEval.context().datetime; + var d = pyUtils.context().datetime; var a = d.date.fromJSON(2002, 1, 31); var b = d.date.fromJSON(1956, 1, 31); @@ -333,23 +333,23 @@ QUnit.module('core', function () { assert.strictEqual( py.eval("(datetime.date(2012, 2, 15) + relativedelta(days=-1)).strftime('%Y-%m-%d 23:59:59')", - pyEval.context()), + pyUtils.context()), "2012-02-14 23:59:59"); assert.strictEqual( py.eval("(datetime.date(2012, 2, 15) + relativedelta(days=1)).strftime('%Y-%m-%d')", - pyEval.context()), + pyUtils.context()), "2012-02-16"); assert.strictEqual( py.eval("(datetime.date(2012, 2, 15) + relativedelta(days=-1)).strftime('%Y-%m-%d')", - pyEval.context()), + pyUtils.context()), "2012-02-14"); assert.strictEqual( py.eval("(datetime.date(2012, 2, 1) + relativedelta(days=-1)).strftime('%Y-%m-%d')", - pyEval.context()), + pyUtils.context()), '2012-01-31'); assert.strictEqual( py.eval("(datetime.date(2015,2,5)+relativedelta(days=-6,weekday=0)).strftime('%Y-%m-%d')", - pyEval.context()), + pyUtils.context()), '2015-02-02'); }); @@ -358,19 +358,19 @@ QUnit.module('core', function () { assert.expect(4); assert.strictEqual( py.eval("(datetime.datetime(2017, 2, 15, 1, 7, 31) + datetime.timedelta(days=1)).strftime('%Y-%m-%d %H:%M:%S')", - pyEval.context()), + pyUtils.context()), "2017-02-16 01:07:31"); assert.strictEqual( py.eval("(datetime.datetime(2012, 2, 15, 1, 7, 31) - datetime.timedelta(hours=1)).strftime('%Y-%m-%d %H:%M:%S')", - pyEval.context()), + pyUtils.context()), "2012-02-15 00:07:31"); assert.strictEqual( py.eval("(datetime.datetime(2012, 2, 15, 1, 7, 31) + datetime.timedelta(hours=-1)).strftime('%Y-%m-%d %H:%M:%S')", - pyEval.context()), + pyUtils.context()), "2012-02-15 00:07:31"); assert.strictEqual( py.eval("(datetime.datetime(2012, 2, 15, 1, 7, 31) + datetime.timedelta(minutes=100)).strftime('%Y-%m-%d %H:%M:%S')", - pyEval.context()), + pyUtils.context()), "2012-02-15 02:47:31"); }); @@ -379,7 +379,7 @@ QUnit.module('core', function () { var result = py.eval( 'datetime.datetime(2012, 2, 15, 1, 7, 31)', - pyEval.context()); + pyUtils.context()); assert.ok(result instanceof Date); assert.strictEqual(result.getFullYear(), 2012); @@ -397,14 +397,14 @@ QUnit.module('core', function () { 'datetime.datetime.combine(datetime.date(2012, 2, 15),' + ' datetime.time(1, 7, 13))' + ' .strftime("%Y-%m-%d %H:%M:%S")', - pyEval.context()); + pyUtils.context()); assert.strictEqual(result, "2012-02-15 01:07:13"); result = py.eval( 'datetime.datetime.combine(datetime.date(2012, 2, 15),' + ' datetime.time())' + ' .strftime("%Y-%m-%d %H:%M:%S")', - pyEval.context()); + pyUtils.context()); assert.strictEqual(result, '2012-02-15 00:00:00'); }); @@ -415,7 +415,7 @@ QUnit.module('core', function () { 'datetime.datetime(2012, 2, 15, 1, 7, 13)' + ' .replace(hour=0, minute=0, second=0)' + ' .strftime("%Y-%m-%d %H:%M:%S")', - pyEval.context()); + pyUtils.context()); assert.strictEqual(result, "2012-02-15 00:00:00"); }); @@ -433,7 +433,7 @@ QUnit.module('core', function () { QUnit.test('empty, basic', function (assert) { assert.expect(3); - var result = pyEval.eval_domains_and_contexts({ + var result = pyUtils.eval_domains_and_contexts({ contexts: [this.user_context], domains: [], }); @@ -480,7 +480,7 @@ QUnit.module('core', function () { }, { "active_id": 9, "active_ids": [ 9 ], "active_model": "mail.compose.message" } ]; - var result = pyEval.eval_domains_and_contexts({ + var result = pyUtils.eval_domains_and_contexts({ contexts: ctx, domins: [], }); @@ -527,7 +527,7 @@ QUnit.module('core', function () { "__eval_context": null, "__ref": "compound_context" }]; - var result = pyEval.eval_domains_and_contexts({ + var result = pyUtils.eval_domains_and_contexts({ contexts: ctx, domains: [], }); @@ -547,7 +547,7 @@ QUnit.module('core', function () { QUnit.test('domain with time', function (assert) { assert.expect(1); - var result = pyEval.eval_domains_and_contexts({ + var result = pyUtils.eval_domains_and_contexts({ domains: [ [['type', '=', 'contract']], ["|", ["state", "in", ["open", "draft"]], [["type", "=", "contract"], ["state", "=", "pending"]]], @@ -581,13 +581,13 @@ QUnit.module('core', function () { __debug: "[('company_id', '=', context.get('company_id',False))]" }; - var result1 = pyEval.eval_domains_and_contexts({ + var result1 = pyUtils.eval_domains_and_contexts({ domains: [d], contexts: [], }); assert.deepEqual(result1.domain, [['company_id', '=', false]]); - var result2 = pyEval.eval_domains_and_contexts({ + var result2 = pyUtils.eval_domains_and_contexts({ domains: [d], contexts: [], eval_context: {company_id: 42}, @@ -602,7 +602,7 @@ QUnit.module('core', function () { var c = "{'default_opportunity_id': active_id, 'default_duration': 1.0, 'lng': lang}"; var cc = new Context(c); cc.set_eval_context({active_id: 42}); - var result = pyEval.eval_domains_and_contexts({ + var result = pyUtils.eval_domains_and_contexts({ domains:[], contexts: [this.user_context, cc] }); @@ -620,7 +620,7 @@ QUnit.module('core', function () { assert.expect(1); var d = "[('state','!=','cancel'),('opening_date','>',context_today().strftime('%Y-%m-%d'))]"; - var result = pyEval.eval_domains_and_contexts({ + var result = pyUtils.eval_domains_and_contexts({ domains: [d], contexts: [], }); @@ -638,7 +638,7 @@ QUnit.module('core', function () { assert.expect(1); var d = "[('type','=','in'),('day','<=', time.strftime('%Y-%m-%d')),('day','>',(context_today()-datetime.timedelta(days=15)).strftime('%Y-%m-%d'))]"; - var result = pyEval.eval_domains_and_contexts({ + var result = pyUtils.eval_domains_and_contexts({ domains: [d], contexts: [], }); @@ -676,7 +676,7 @@ QUnit.module('core', function () { {"__ref": "context", "__debug": "{'default_ref': 'stock.picking.out,'+str(context.get('active_id', False))}", "__id": "54d6ad1d6c45"} ], "__eval_context": null} ]; - var result = pyEval.eval_domains_and_contexts({ + var result = pyUtils.eval_domains_and_contexts({ domains: [], contexts: cs, }); @@ -706,13 +706,13 @@ QUnit.module('core', function () { __debug: '{"foo": context.get("bar", "qux")}' }]; assert.deepEqual( - pyEval.eval('contexts', context_to_eval, {bar: "ok"}), + pyUtils.eval('contexts', context_to_eval, {bar: "ok"}), {foo: 'ok'}); assert.deepEqual( - pyEval.eval('contexts', context_to_eval, {bar: false}), + pyUtils.eval('contexts', context_to_eval, {bar: false}), {foo: false}); assert.deepEqual( - pyEval.eval('contexts', context_to_eval), + pyUtils.eval('contexts', context_to_eval), {foo: 'qux'}); }); @@ -722,7 +722,7 @@ QUnit.module('core', function () { // Context n should have base evaluation context + all of contexts // 0..n-1 in its own evaluation context var active_id = 4; - var result = pyEval.eval('contexts', [ + var result = pyUtils.eval('contexts', [ { "__contexts": [ { @@ -769,7 +769,7 @@ QUnit.module('core', function () { QUnit.test('non-literal_eval_contexts', function (assert) { assert.expect(1); - var result = pyEval.eval('contexts', [{ + var result = pyUtils.eval('contexts', [{ "__ref": "compound_context", "__contexts": [ {"__ref": "context", "__debug": "{'type':parent.type}", @@ -851,7 +851,7 @@ QUnit.module('core', function () { QUnit.test('return-input-value', function (assert) { assert.expect(1); - var result = pyEval.eval('contexts', [{ + var result = pyUtils.eval('contexts', [{ __ref: 'compound_context', __contexts: ["{'line_id': line_id , 'journal_id': journal_id }"], __eval_context: { @@ -921,9 +921,9 @@ QUnit.module('core', function () { assert.expect(1); var current_date = time.date_to_str(new Date()); - var result = pyEval.eval('domains', + var result = pyUtils.eval('domains', [[],{"__ref":"domain","__debug":"[('name','>=',current_date),('name','<=',current_date)]","__id":"5dedcfc96648"}], - pyEval.context()); + pyUtils.context()); assert.deepEqual(result, [ ['name', '>=', current_date], ['name', '<=', current_date] @@ -938,13 +938,13 @@ QUnit.module('core', function () { __debug: '[("foo", "=", context.get("bar", "qux"))]' }, [['bar', '>=', 42]]]; assert.deepEqual( - pyEval.eval('domains', domains_to_eval, {bar: "ok"}), + pyUtils.eval('domains', domains_to_eval, {bar: "ok"}), [['foo', '=', 'ok'], ['bar', '>=', 42]]); assert.deepEqual( - pyEval.eval('domains', domains_to_eval, {bar: false}), + pyUtils.eval('domains', domains_to_eval, {bar: false}), [['foo', '=', false], ['bar', '>=', 42]]); assert.deepEqual( - pyEval.eval('domains', domains_to_eval), + pyUtils.eval('domains', domains_to_eval), [['foo', '=', 'qux'], ['bar', '>=', 42]]); }); @@ -953,7 +953,7 @@ QUnit.module('core', function () { QUnit.test('groupbys_00', function (assert) { assert.expect(1); - var result = pyEval.eval('groupbys', [ + var result = pyUtils.eval('groupbys', [ {group_by: 'foo'}, {group_by: ['bar', 'qux']}, {group_by: null}, @@ -965,7 +965,7 @@ QUnit.module('core', function () { QUnit.test('groupbys_01', function (assert) { assert.expect(1); - var result = pyEval.eval('groupbys', [ + var result = pyUtils.eval('groupbys', [ {group_by: 'foo'}, { __ref: 'context', __debug: '{"group_by": "bar"}' }, {group_by: 'grault'} @@ -976,7 +976,7 @@ QUnit.module('core', function () { QUnit.test('groupbys_02', function (assert) { assert.expect(1); - var result = pyEval.eval('groupbys', [ + var result = pyUtils.eval('groupbys', [ {group_by: 'foo'}, { __ref: 'compound_context', @@ -991,7 +991,7 @@ QUnit.module('core', function () { QUnit.test('groupbys_03', function (assert) { assert.expect(1); - var result = pyEval.eval('groupbys', [ + var result = pyUtils.eval('groupbys', [ {group_by: 'foo'}, { __ref: 'compound_context', @@ -1008,7 +1008,7 @@ QUnit.module('core', function () { QUnit.test('groupbys_04', function (assert) { assert.expect(1); - var result = pyEval.eval('groupbys', [ + var result = pyUtils.eval('groupbys', [ {group_by: 'foo'}, { __ref: 'compound_context', @@ -1025,7 +1025,7 @@ QUnit.module('core', function () { QUnit.test('groupbys_05', function (assert) { assert.expect(1); - var result = pyEval.eval('groupbys', [ + var result = pyUtils.eval('groupbys', [ {group_by: 'foo'}, { __ref: 'context', __debug: '{"group_by": value}' }, {group_by: 'grault'} diff --git a/addons/web/static/tests/helpers/mock_server.js b/addons/web/static/tests/helpers/mock_server.js index 5e82766b051..81d8ec91bfd 100644 --- a/addons/web/static/tests/helpers/mock_server.js +++ b/addons/web/static/tests/helpers/mock_server.js @@ -3,7 +3,7 @@ odoo.define('web.MockServer', function (require) { var Class = require('web.Class'); var Domain = require('web.Domain'); -var pyeval = require('web.pyeval'); +var pyUtils = require('web.py_utils'); var MockServer = Class.extend({ /** @@ -235,7 +235,7 @@ var MockServer = Class.extend({ // 'transfer_node_to_modifiers' simulation var attrs = node.getAttribute('attrs'); if (attrs) { - attrs = pyeval.py_eval(attrs); + attrs = pyUtils.py_eval(attrs); _.extend(modifiers, attrs); } @@ -250,7 +250,7 @@ var MockServer = Class.extend({ var mod = node.getAttribute(a); if (mod) { var pyevalContext = window.py.dict.fromJSON(context || {}); - var v = pyeval.py_eval(mod, {context: pyevalContext}) ? true: false; + var v = pyUtils.py_eval(mod, {context: pyevalContext}) ? true: false; if (inTreeView && a === 'invisible') { modifiers.column_invisible = v; } else if (v || !(a in modifiers) || !_.isArray(modifiers[a])) { diff --git a/addons/web/static/tests/views/form_tests.js b/addons/web/static/tests/views/form_tests.js index 4ffdd72b089..035c815ae95 100644 --- a/addons/web/static/tests/views/form_tests.js +++ b/addons/web/static/tests/views/form_tests.js @@ -9,7 +9,7 @@ var fieldRegistry = require('web.field_registry'); var FormView = require('web.FormView'); var mixins = require('web.mixins'); var NotificationService = require('web.NotificationService'); -var pyeval = require('web.pyeval'); +var pyUtils = require('web.py_utils'); var testUtils = require('web.test_utils'); var widgetRegistry = require('web.widget_registry'); var Widget = require('web.Widget'); @@ -6477,7 +6477,7 @@ QUnit.module('Views', { '', intercepts: { execute_action: function (event) { - var effectDescription = pyeval.py_eval(event.data.action_data.effect); + var effectDescription = pyUtils.py_eval(event.data.action_data.effect); assert.deepEqual(effectDescription, {message: 'Congrats!'}, "should have correct effect description"); } } diff --git a/addons/web/views/webclient_templates.xml b/addons/web/views/webclient_templates.xml index ed40fb36625..ffbbf4ff55e 100644 --- a/addons/web/views/webclient_templates.xml +++ b/addons/web/views/webclient_templates.xml @@ -178,7 +178,7 @@ - + @@ -533,7 +533,7 @@ - +