diff options
| author | Xavier Morel <xmo@odoo.com> | 2020-10-14 13:04:53 +0000 |
|---|---|---|
| committer | Xavier Morel <xmo@odoo.com> | 2020-10-14 13:35:36 +0000 |
| commit | 6b04dbcd4204a75d6bd68fc0b3010a2297779b32 (patch) | |
| tree | 7c5f61f811ff4d4ef83b087e9919a93db846dca5 | |
| parent | 12030dde4fcc63b6bcb037084c21c24b23a91ff4 (diff) | |
[FIX] core: PyPDF2 suppresses warnings
By default, PdfFileReader will monkeypatch the `warnings` module even
if it has no reason whatsoever to do so and suppress the
`captureWarnings` behavior.
This means as soon as we've loaded a PDF file, `warnings.warn` don't
trigger `logging` warnings anymore, and become invisible.
This can lead to non-deterministic behaviors depending as warnings may
or may not be suppressed depending when they occur relative to loading
a PDF e.g. load a module which runs a test which loads a PDF before a
module triggering a warning and the warning won't be visible, other
way around it will.
Except ofc while we have an override to PdfFileReader it's not
used *everywhere*, so need to monkeypatch the init.
closes odoo/odoo#60002
Signed-off-by: Xavier Morel (xmo) <xmo@odoo.com>
| -rw-r--r-- | odoo/tools/pdf.py | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/odoo/tools/pdf.py b/odoo/tools/pdf.py index dadae1df522..66608c4b1ff 100644 --- a/odoo/tools/pdf.py +++ b/odoo/tools/pdf.py @@ -67,6 +67,12 @@ def rotate_pdf(pdf): writer.write(_buffer) return _buffer.getvalue() +# by default PdfFileReader will overwrite warnings.showwarning which is what +# logging.captureWarnings does, meaning it essentially reverts captureWarnings +# every time it's called which is undesirable +old_init = PdfFileReader.__init__ +PdfFileReader.__init__ = lambda self, stream, strict=True, warndest=None, overwriteWarnings=True: \ + old_init(self, stream=stream, strict=strict, warndest=None, overwriteWarnings=False) class OdooPdfFileReader(PdfFileReader): # OVERRIDE of PdfFileReader to add the management of multiple embedded files. |
