From cd26eb8e7c3b6062c0c52888fcee0e25d3573728 Mon Sep 17 00:00:00 2001 From: "Lucas Perais (lpe)" Date: Tue, 15 May 2018 13:24:25 +0200 Subject: [PATCH 1/3] [FIX] l10n_fr_fec: EcritureLib should not be empty Make an account move with two move lines. In those lines' label, just hit the space bar, and post your entry. Now, get the FEC report. Before this commit, the EcritureLib field was empty After, it has the value '/' closes #24734 --- addons/l10n_fr_fec/wizard/fec.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/addons/l10n_fr_fec/wizard/fec.py b/addons/l10n_fr_fec/wizard/fec.py index 673b450b789..2d159f96d86 100644 --- a/addons/l10n_fr_fec/wizard/fec.py +++ b/addons/l10n_fr_fec/wizard/fec.py @@ -288,7 +288,9 @@ class AccountFrFec(models.TransientModel): END AS PieceRef, TO_CHAR(am.date, 'YYYYMMDD') AS PieceDate, - CASE WHEN aml.name IS NULL THEN '/' ELSE replace(aml.name, '|', '/') END AS EcritureLib, + CASE WHEN aml.name IS NULL THEN '/' + WHEN aml.name SIMILAR TO '[\t|\s|\n]*' THEN '/' + ELSE replace(aml.name, '|', '/') END AS EcritureLib, replace(CASE WHEN aml.debit = 0 THEN '0,00' ELSE to_char(aml.debit, '000000000000000D99') END, '.', ',') AS Debit, replace(CASE WHEN aml.credit = 0 THEN '0,00' ELSE to_char(aml.credit, '000000000000000D99') END, '.', ',') AS Credit, CASE WHEN rec.name IS NULL THEN '' ELSE rec.name END AS EcritureLet, From 866d1e71900fc395a50340dc2ecc645782ad24c5 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 17 May 2018 12:51:29 +0200 Subject: [PATCH 2/3] [FIX] server: fix support for systemd socket activation in threaded server This patches fixes the untested and broken draft of inetd and systemd activation support in the threaded server. This patch also fixes the loss of the process environment in the `_reexec()` function when Odoo is respawning during the following events: - SIGHUP signal is received - one click install has been triggered - code reload needed when using `--dev=reload` --- openerp/service/server.py | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/openerp/service/server.py b/openerp/service/server.py index c3baace20dc..af01ea9d54f 100644 --- a/openerp/service/server.py +++ b/openerp/service/server.py @@ -91,9 +91,6 @@ class RequestHandler(werkzeug.serving.WSGIRequestHandler): me = threading.currentThread() me.name = 'openerp.service.http.request.%s' % (me.ident,) -# _reexec() should set LISTEN_* to avoid connection refused during reload time. It -# should also work with systemd socket activation. This is currently untested -# and not yet used. class ThreadedWSGIServerReloadable(LoggingBaseWSGIServerMixIn, werkzeug.serving.ThreadedWSGIServer): """ werkzeug Threaded WSGI Server patched to allow reusing a listen socket @@ -105,14 +102,15 @@ class ThreadedWSGIServerReloadable(LoggingBaseWSGIServerMixIn, werkzeug.serving. handler=RequestHandler) def server_bind(self): - envfd = os.environ.get('LISTEN_FDS') - if envfd and os.environ.get('LISTEN_PID') == str(os.getpid()): + SD_LISTEN_FDS_START = 3 + if os.environ.get('LISTEN_FDS') == '1' and os.environ.get('LISTEN_PID') == str(os.getpid()): self.reload_socket = True - self.socket = socket.fromfd(int(envfd), socket.AF_INET, socket.SOCK_STREAM) - # should we os.close(int(envfd)) ? it seem python duplicate the fd. + self.socket = socket.fromfd(SD_LISTEN_FDS_START, socket.AF_INET, socket.SOCK_STREAM) + _logger.info('HTTP service (werkzeug) running through socket activation') else: self.reload_socket = False super(ThreadedWSGIServerReloadable, self).server_bind() + _logger.info('HTTP service (werkzeug) running on %s:%s', self.server_name, self.server_port) def server_activate(self): if not self.reload_socket: @@ -254,7 +252,6 @@ class ThreadedServer(CommonServer): t = threading.Thread(target=self.http_thread, name="openerp.service.httpd") t.setDaemon(True) t.start() - _logger.info('HTTP service (werkzeug) running on %s:%s', self.interface, self.port) def start(self, stop=False): _logger.debug("Setting signal handlers") @@ -853,7 +850,8 @@ def _reexec(updated_modules=None): args += ["-u", ','.join(updated_modules)] if not args or args[0] != exe: args.insert(0, exe) - os.execv(sys.executable, args) + # We should keep the LISTEN_* environment variabled in order to support socket activation on reexec + os.execve(sys.executable, args, os.environ) def load_test_file_yml(registry, test_file): with registry.cursor() as cr: From 612fd33fb136d41cad6d9f9a10e52fdc6556533d Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Fri, 18 May 2018 16:15:55 +0200 Subject: [PATCH 3/3] [FIX] http: correct protocol parsing --- openerp/http.py | 1 + 1 file changed, 1 insertion(+) diff --git a/openerp/http.py b/openerp/http.py index c4c1f95fabf..05778f0d290 100644 --- a/openerp/http.py +++ b/openerp/http.py @@ -160,6 +160,7 @@ def redirect_with_hash(url, code=303): # See extensive test page at http://greenbytes.de/tech/tc/httpredirects/ if request.httprequest.user_agent.browser in ('firefox',): return werkzeug.utils.redirect(url, code) + url = url.strip() if urlparse.urlparse(url, scheme='http').scheme not in ('http', 'https'): url = 'http://' + url url = url.replace("'", "%27").replace("<", "%3C")