From cfcafee87cf8dc9e450c239d35512042e9670dd5 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Fri, 11 Oct 2013 11:54:24 +0200 Subject: [PATCH 01/27] [IMP] Added some documentation in the framwork. bzr revid: nicolas.vanhoren@openerp.com-20131011095424-midppkv5czebt1f2 --- addons/web/static/src/js/openerpframework.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/addons/web/static/src/js/openerpframework.js b/addons/web/static/src/js/openerpframework.js index 027452b42fb..062ecb8fe80 100644 --- a/addons/web/static/src/js/openerpframework.js +++ b/addons/web/static/src/js/openerpframework.js @@ -138,6 +138,7 @@ var openerp = {}; throw new Error("You can only instanciate objects with the 'new' operator"); } // All construction is actually done in the init method + this._super = null; if (!initializing && this.init) { var ret = this.init.apply(this, arguments); if (ret) { return ret; } @@ -385,6 +386,14 @@ var Events = openerp.Class.extend({ } }); +/** + Mixin containing an event system. Events are also registered by specifying the target object + (the object which will receive the event when it is raised). Both the event-emitting object + and the target object store or reference to each other. This is used to correctly remove all + reference to the event handler when any of the object is destroyed (when the destroy() method + from ParentedMixin is called). Removing those references is necessary to avoid memory leak + and phantom events (events which are raised and sent to a previously destroyed object). +*/ openerp.EventDispatcherMixin = _.extend({}, openerp.ParentedMixin, { __eventDispatcherMixin: true, init: function() { From e059b1c5c0efde36893e16dea9b8b5f6dd1694ac Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Fri, 11 Oct 2013 14:34:16 +0200 Subject: [PATCH 02/27] Added test with openerp sessions bzr revid: nicolas.vanhoren@openerp.com-20131011123416-wsfr0g1pusa0wftp --- addons/web/static/test/jsonrpc.js | 30 ++++++++++++------------------ 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/addons/web/static/test/jsonrpc.js b/addons/web/static/test/jsonrpc.js index a8b901d3b1c..f8a1d325375 100644 --- a/addons/web/static/test/jsonrpc.js +++ b/addons/web/static/test/jsonrpc.js @@ -113,25 +113,16 @@ function (test) { });*/ }); - -// desactivated because I can't manage to make these work in the runbot -/* var login = "admin"; var password = "admin"; -var db = null; ropenerp.testing.section('jsonrpc-auth', { - setup: function() { - var session = new openerp.Session(); - return session.session_reload().then(function() { - db = session.db; - ok(db, "db must be valid"); - }); - }, + rpc: "rpc", }, function (test) { - test('basic-auth', {asserts: 4}, function () { - var session = new openerp.Session(); + test('basic-auth', {asserts: 3}, function () { + var db = ropenerp.session.db; + var session = new openerp.Session(null, null, {override_session: true}); equal(session.uid, undefined, "uid is expected to be undefined"); return session.session_authenticate(db, login, password).then(function() { equal(session.uid, 1, "Admin's uid must be 1"); @@ -145,14 +136,16 @@ function (test) { }); }); }); - test('share-sessions', {asserts: 7}, function () { - var session = new openerp.Session(); + test('share-sessions', {asserts: 6}, function () { + var db = ropenerp.session.db; + var session = new openerp.Session(null, null, {override_session: true}); var session2; return session.session_authenticate(db, login, password).then(function() { equal(session.uid, 1, "Admin's uid must be 1"); session2 = new openerp.Session(null, null, {session_id: session.session_id}); equal(session2.uid, undefined, "uid should be undefined"); equal(session2.override_session, true, "overwrite_session should be true"); + console.log("session_id", session.session_id); return session2.session_reload(); }).then(function() { equal(session2.uid, session.uid); @@ -167,8 +160,9 @@ function (test) { }); }); }); - test('models', {asserts: 3}, function () { - var session = new openerp.Session(); + test('models', {asserts: 2}, function () { + var db = ropenerp.session.db; + var session = new openerp.Session(null, null, {override_session: true}); return session.session_authenticate(db, login, password).then(function() { return session.model("res.users").call("search_read", {fields: ["login"], domain: [["id", "=", 1]]}); }).then(function(result) { @@ -176,6 +170,6 @@ function (test) { equal(result[0].login, "admin", "Must have admin's login"); }); }); -});*/ +}); })(); From 083d3fc91e149dae323e664b0ec1ff581125450b Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Fri, 11 Oct 2013 15:30:54 +0200 Subject: [PATCH 03/27] Added tests about timeouts and implemented it in jsonprpc2 bzr revid: nicolas.vanhoren@openerp.com-20131011133054-0dx3wxqcqbdocnlf --- addons/web/static/src/js/openerpframework.js | 20 ++++++++++- addons/web/static/test/jsonrpc.js | 36 ++++++++++++++++++++ 2 files changed, 55 insertions(+), 1 deletion(-) diff --git a/addons/web/static/src/js/openerpframework.js b/addons/web/static/src/js/openerpframework.js index 062ecb8fe80..ab10d304b30 100644 --- a/addons/web/static/src/js/openerpframework.js +++ b/addons/web/static/src/js/openerpframework.js @@ -817,7 +817,7 @@ var genericJsonRpc = function(fct_name, params, fct) { return result.result; } }, function() { - console.error("JsonRPC communication error", _.toArray(arguments)); + //console.error("JsonRPC communication error", _.toArray(arguments)); var def = $.Deferred(); return def.reject.apply(def, ["communication"].concat(_.toArray(arguments))); }); @@ -899,11 +899,29 @@ openerp.jsonpRpc = function(url, fct_name, params, settings) { }); // append the iframe to the DOM (will trigger the first load) $form.after($iframe); + if (settings.timeout) { + realSetTimeout(function() { + deferred.reject({}); + }, settings.timeout); + } return deferred; } }); }; +var realSetTimeout = function(fct, millis) { + var finished = new Date().getTime() + millis; + var wait = function() { + var current = new Date().getTime(); + if (current < finished) { + setTimeout(wait, finished - current); + } else { + fct(); + } + }; + setTimeout(wait, millis); +}; + openerp.Session = openerp.Class.extend(openerp.PropertiesMixin, { triggers: { 'request': 'Request sent', diff --git a/addons/web/static/test/jsonrpc.js b/addons/web/static/test/jsonrpc.js index f8a1d325375..93aa9894455 100644 --- a/addons/web/static/test/jsonrpc.js +++ b/addons/web/static/test/jsonrpc.js @@ -111,6 +111,42 @@ function (test) { notEqual(result, origin_tmp, "Values in the different sessions should be different"); }); });*/ + test('timeout-jsonrpc', {asserts: 1}, function () { + var session = new openerp.Session(); + return session.rpc("/gen_session_id", {}, {timeout: 1}).then(function() { + ok(false, "the request incorrectly succeeded"); + return $.when(); + }, function(a, e) { + e.preventDefault(); + ok(true, "the request correctly failed"); + return $.when(); + }); + }); + test('timeout-jsonprpc', {asserts: 1}, function () { + var session = new openerp.Session(); + session.origin_server = false; + return session.rpc("/gen_session_id", {}, {timeout: 1}).then(function() { + ok(false, "the request incorrectly succeeded"); + return $.when(); + }, function(a, e) { + e.preventDefault(); + ok(true, "the request correctly failed"); + return $.when(); + }); + }); + // desactivated because the phantomjs runner crash + test('timeout-jsonprpc2', {asserts: 1}, function () { + var session = new openerp.Session(); + session.origin_server = false; + return session.rpc("/gen_session_id", {}, {force2step: true, timeout: 1}).then(function() { + ok(false, "the request incorrectly succeeded"); + return $.when(); + }, function(a, e) { + e.preventDefault(); + ok(true, "the request correctly failed"); + return $.when(); + }); + }); }); var login = "admin"; From 6475f3225d71047ce1e60438ada3781fce5f1553 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Fri, 11 Oct 2013 15:32:08 +0200 Subject: [PATCH 04/27] Removed jsonprpc2 test because it fails in phantomjs bzr revid: nicolas.vanhoren@openerp.com-20131011133208-gjz0iprk63447qub --- addons/web/static/test/jsonrpc.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/web/static/test/jsonrpc.js b/addons/web/static/test/jsonrpc.js index 93aa9894455..46b7ceeac6e 100644 --- a/addons/web/static/test/jsonrpc.js +++ b/addons/web/static/test/jsonrpc.js @@ -135,7 +135,7 @@ function (test) { }); }); // desactivated because the phantomjs runner crash - test('timeout-jsonprpc2', {asserts: 1}, function () { + /*test('timeout-jsonprpc2', {asserts: 1}, function () { var session = new openerp.Session(); session.origin_server = false; return session.rpc("/gen_session_id", {}, {force2step: true, timeout: 1}).then(function() { @@ -146,7 +146,7 @@ function (test) { ok(true, "the request correctly failed"); return $.when(); }); - }); + });*/ }); var login = "admin"; From d2eb959710137f6ecb4f91d06d4e22bfda3b6de9 Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Sun, 13 Oct 2013 04:13:22 +0200 Subject: [PATCH 05/27] [FIX] ensure the use the registry signaling for registries loaded with -d bzr revid: al@openerp.com-20131013021322-5ej7ovpcrf7ilnn5 --- openerp/cli/server.py | 5 +++++ openerp/service/server.py | 1 - 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/openerp/cli/server.py b/openerp/cli/server.py index 24987c098e4..97737a38c3f 100644 --- a/openerp/cli/server.py +++ b/openerp/cli/server.py @@ -168,6 +168,11 @@ def main(args): import_translation() sys.exit(0) + # This needs to be done now to ensure the use of the multiprocessing + # signaling mecanism for registries loaded with -d + if config['workers']: + openerp.multi_process = True + # preload registryies, needed for -u --stop_after_init rc = 0 if config['db_name']: diff --git a/openerp/service/server.py b/openerp/service/server.py index 80a7155926b..7fa6dae0015 100644 --- a/openerp/service/server.py +++ b/openerp/service/server.py @@ -828,7 +828,6 @@ def start(): global server load_server_wide_modules() if config['workers']: - openerp.multi_process = True server = PreforkServer(openerp.service.wsgi_server.application) elif openerp.evented: server = GeventServer(openerp.service.wsgi_server.application) From 81e03814e88c198f1bd04c36bb29085f4a9810db Mon Sep 17 00:00:00 2001 From: Martin Trigaux Date: Mon, 14 Oct 2013 11:40:25 +0200 Subject: [PATCH 06/27] [IMP] base_setup: adapt fonts to many2one instead of list bzr revid: mat@openerp.com-20131014094025-05989gbpdghu2rwt --- addons/base_setup/res_config.py | 7 ++----- addons/base_setup/res_config_view.xml | 1 + 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/addons/base_setup/res_config.py b/addons/base_setup/res_config.py index bbb54e4538a..ea640a74859 100644 --- a/addons/base_setup/res_config.py +++ b/addons/base_setup/res_config.py @@ -26,9 +26,6 @@ from openerp.report.render.rml2pdf import customfonts class base_config_settings(osv.osv_memory): _name = 'base.config.settings' _inherit = 'res.config.settings' - - def _get_font(self, cr, uid, context=None): - return sorted(customfonts.RegisterCustomFonts()) _columns = { 'module_multi_company': fields.boolean('Manage multiple companies', @@ -44,11 +41,11 @@ class base_config_settings(osv.osv_memory): 'module_base_import': fields.boolean("Allow users to import data from CSV files"), 'module_google_drive': fields.boolean('Attach Google documents to any record', help="""This installs the module google_docs."""), - 'font': fields.selection(_get_font, "Select Font", help="Set your favorite font into company header"), + 'font': fields.many2one('res.font', string="Report Font", help="Set the font into the report header, it will be used for every RML report of the user company"), } _defaults= { - 'font': lambda self,cr,uid,c: self.pool.get('res.users').browse(cr, uid, uid, c).company_id.font or 'Helvetica', + 'font': lambda self,cr,uid,c: self.pool.get('res.users').browse(cr, uid, uid, c).company_id.font.id, } def open_company(self, cr, uid, ids, context=None): diff --git a/addons/base_setup/res_config_view.xml b/addons/base_setup/res_config_view.xml index e0434480a37..a235d98bdde 100644 --- a/addons/base_setup/res_config_view.xml +++ b/addons/base_setup/res_config_view.xml @@ -95,6 +95,7 @@
+
From b3a8a4493dbfe1efe59a47efcfc24b85e0353e67 Mon Sep 17 00:00:00 2001 From: Martin Trigaux Date: Mon, 14 Oct 2013 11:41:22 +0200 Subject: [PATCH 07/27] [IMP] fonts: adapt fonts to many2one instead of list bzr revid: mat@openerp.com-20131014094122-6ndc5scni2xyzksy --- openerp/addons/base/res/__init__.py | 1 + openerp/addons/base/res/res_company.py | 17 +-- openerp/addons/base/res/res_company_view.xml | 1 + openerp/addons/base/res/res_font.py | 145 +++++++++++++++++++ 4 files changed, 155 insertions(+), 9 deletions(-) create mode 100644 openerp/addons/base/res/res_font.py diff --git a/openerp/addons/base/res/__init__.py b/openerp/addons/base/res/__init__.py index 50807e20116..041a42f9f14 100644 --- a/openerp/addons/base/res/__init__.py +++ b/openerp/addons/base/res/__init__.py @@ -29,6 +29,7 @@ import res_company import res_users import res_request import res_lang +import res_font import ir_property # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/openerp/addons/base/res/res_company.py b/openerp/addons/base/res/res_company.py index d61963dbce4..e922cfbbe1e 100644 --- a/openerp/addons/base/res/res_company.py +++ b/openerp/addons/base/res/res_company.py @@ -112,9 +112,6 @@ class res_company(osv.osv): def _get_companies_from_partner(self, cr, uid, ids, context=None): return self.pool['res.company'].search(cr, uid, [('partner_id', 'in', ids)], context=context) - - def _get_font(self, cr, uid, context=None): - return sorted(customfonts.RegisterCustomFonts()) _columns = { 'name': fields.related('partner_id', 'name', string='Company Name', size=128, required=True, store=True, type='char'), @@ -128,7 +125,7 @@ class res_company(osv.osv): 'rml_footer': fields.text('Report Footer', help="Footer text displayed at the bottom of all reports."), 'rml_footer_readonly': fields.related('rml_footer', type='text', string='Report Footer', readonly=True), 'custom_footer': fields.boolean('Custom Footer', help="Check this to define the report footer manually. Otherwise it will be filled in automatically."), - 'font': fields.selection(_get_font, "Font",help="Set the font into the report header, will be used for every RML report of the company"), + 'font': fields.many2one('res.font', string="Font",help="Set the font into the report header, will be used for every RML report of the company"), 'logo': fields.related('partner_id', 'image', string="Logo", type="binary"), 'logo_web': fields.function(_get_logo_web, string="Logo Web", type="binary", store={ 'res.company': (lambda s, c, u, i, x: i, ['partner_id'], 10), @@ -192,10 +189,11 @@ class res_company(osv.osv): default_para = re.sub('fontName.?=.?".*"', 'fontName="%s"'% font,header) return re.sub('("%s"\g<3>'% font,default_para) + fontname = self.pool.get('res.font').browse(cr, uid, font, context=context).name return {'value':{ - 'rml_header': _change_header(rml_header,font), - 'rml_header2':_change_header(rml_header2,font), - 'rml_header3':_change_header(rml_header3,font) + 'rml_header': _change_header(rml_header,fontname), + 'rml_header2':_change_header(rml_header2,fontname), + 'rml_header3':_change_header(rml_header3,fontname) }} def on_change_country(self, cr, uid, ids, country_id, context=None): @@ -388,6 +386,9 @@ class res_company(osv.osv): return {'value': {'rml_header': self._header_letter}} return {'value': {'rml_header': self._header_a4}} + def act_discover_fonts(self, cr, uid, ids, context=None): + return self.pool.get("res.font").act_discover_fonts(cr, uid, ids, context) + _defaults = { 'currency_id': _get_euro, 'paper_format': 'a4', @@ -395,12 +396,10 @@ class res_company(osv.osv): 'rml_header2': _header2, 'rml_header3': _header3, 'logo':_get_logo, - 'font':'Helvetica', } _constraints = [ (osv.osv._check_recursion, 'Error! You can not create recursive companies.', ['parent_id']) ] - # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/openerp/addons/base/res/res_company_view.xml b/openerp/addons/base/res/res_company_view.xml index e9acf7940b3..ebf6cb534b3 100644 --- a/openerp/addons/base/res/res_company_view.xml +++ b/openerp/addons/base/res/res_company_view.xml @@ -81,6 +81,7 @@ +