From ac1d0742a04ff8c759c24a363062042bdd4606af Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Wed, 19 Jun 2013 12:53:35 +0200 Subject: [PATCH 1/2] [IMP] minor improvement in RegistryManager, useful for web client bzr revid: nicolas.vanhoren@openerp.com-20130619105335-w3xftm6g0llh1ade --- openerp/modules/registry.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/openerp/modules/registry.py b/openerp/modules/registry.py index 2569bf47aad..9d599ba3aac 100644 --- a/openerp/modules/registry.py +++ b/openerp/modules/registry.py @@ -286,6 +286,14 @@ class RegistryManager(object): @classmethod def check_registry_signaling(cls, db_name): + """ + Check if the modules have changed and performs all necessary operations to update + the registry of the corresponding database. + + + :returns: True if changes has been detected in the database and False otherwise. + """ + changed = False if openerp.multi_process and db_name in cls.registries: registry = cls.get(db_name) cr = registry.db.cursor() @@ -298,6 +306,7 @@ class RegistryManager(object): # Check if the model registry must be reloaded (e.g. after the # database has been updated by another process). if registry.base_registry_signaling_sequence != r: + changed = True _logger.info("Reloading the model registry after database signaling.") registry = cls.new(db_name) registry.base_registry_signaling_sequence = r @@ -305,6 +314,7 @@ class RegistryManager(object): # occured on another process). Don't clear right after a registry # has been reload. elif registry.base_cache_signaling_sequence != c: + changed = True _logger.info("Invalidating all model caches after database signaling.") registry.base_cache_signaling_sequence = c registry.clear_caches() @@ -318,6 +328,7 @@ class RegistryManager(object): column.digits_change(cr) finally: cr.close() + return changed @classmethod def signal_caches_change(cls, db_name): From 960252d09186aaf5247f13ef481129ef7f514d1d Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Wed, 19 Jun 2013 15:21:23 +0200 Subject: [PATCH 2/2] [IMP] mail: added JSON end-point to receive mails. bzr revid: vmt@openerp.com-20130619132123-efw3fyqqw33q0s4q --- addons/mail/controllers/main.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/addons/mail/controllers/main.py b/addons/mail/controllers/main.py index 4c6f6e56064..ef3a60987d6 100644 --- a/addons/mail/controllers/main.py +++ b/addons/mail/controllers/main.py @@ -1,4 +1,7 @@ import base64 + +import openerp +from openerp import SUPERUSER_ID import openerp.addons.web.http as oeweb from openerp.addons.web.controllers.main import content_disposition @@ -20,3 +23,18 @@ class MailController(oeweb.Controller): headers=[('Content-Type', 'application/octet-stream'), ('Content-Disposition', content_disposition(filename, req))]) return req.not_found() + + @oeweb.jsonrequest + def receive(self, req): + """ End-point to receive mail from an external SMTP server. """ + dbs = req.jsonrequest.get('databases') + for db in dbs: + message = dbs[db].decode('base64') + try: + registry = openerp.registry(db) + with registry.cursor() as cr: + mail_thread = registry['mail.thread'] + mail_thread.message_process(cr, SUPERUSER_ID, None, message) + except psycopg2.Error: + pass + return True