From 929e2309a4024cf72e782e42406278555c0428e5 Mon Sep 17 00:00:00 2001 From: fshah Date: Thu, 28 Jan 2021 11:15:00 +0530 Subject: [PATCH] [13.0][MIG] report_qweb_pdf_watermark --- report_qweb_pdf_watermark/README.rst | 6 ++ report_qweb_pdf_watermark/__init__.py | 2 +- report_qweb_pdf_watermark/__manifest__.py | 19 ++--- report_qweb_pdf_watermark/demo/report.xml | 4 +- report_qweb_pdf_watermark/models/__init__.py | 1 + report_qweb_pdf_watermark/models/report.py | 79 +++++++++++-------- report_qweb_pdf_watermark/tests/__init__.py | 1 + .../tests/test_report_qweb_pdf_watermark.py | 1 + .../views/ir_actions_report_xml.xml | 13 ++- .../views/layout_templates.xml | 8 +- 10 files changed, 77 insertions(+), 57 deletions(-) diff --git a/report_qweb_pdf_watermark/README.rst b/report_qweb_pdf_watermark/README.rst index 2b60389e..0201b08b 100644 --- a/report_qweb_pdf_watermark/README.rst +++ b/report_qweb_pdf_watermark/README.rst @@ -62,6 +62,11 @@ Changelog * [MIG] Migration to V12. +13.0.1.0.0 (2021-01-27) +~~~~~~~~~~~~~~~~~~~~~~~ + +* [MIG] Migration to V13. + Bug Tracker =========== @@ -87,6 +92,7 @@ Contributors * Stefan Rijnhart * Rod Schouteden * Robin Goots +* Foram Shah Maintainers ~~~~~~~~~~~ diff --git a/report_qweb_pdf_watermark/__init__.py b/report_qweb_pdf_watermark/__init__.py index 5c170507..4ecaf9b2 100644 --- a/report_qweb_pdf_watermark/__init__.py +++ b/report_qweb_pdf_watermark/__init__.py @@ -1,4 +1,4 @@ # © 2016 Therp BV # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from . import models +from . import models # pyflakes.ignore diff --git a/report_qweb_pdf_watermark/__manifest__.py b/report_qweb_pdf_watermark/__manifest__.py index 9c4f1d44..c4a246d0 100644 --- a/report_qweb_pdf_watermark/__manifest__.py +++ b/report_qweb_pdf_watermark/__manifest__.py @@ -2,28 +2,19 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). { "name": "Pdf watermark", - "version": "12.0.1.0.1", - "author": "Therp BV, " - "Odoo Community Association (OCA)", + "version": "13.0.1.0.0", + "author": "Therp BV, " "Odoo Community Association (OCA)", "license": "AGPL-3", "category": "Technical Settings", "summary": "Add watermarks to your QWEB PDF reports", "website": "https://github.com/oca/reporting-engine", - "depends": [ - 'web', - ], + "depends": ["web"], "data": [ "demo/report.xml", "views/ir_actions_report_xml.xml", "views/layout_templates.xml", ], - "demo": [ - "demo/report.xml" - ], + "demo": ["demo/report.xml"], "installable": True, - 'external_dependencies': { - 'python': [ - 'PyPDF2', - ], - }, + "external_dependencies": {"python": ["PyPDF2"]}, } diff --git a/report_qweb_pdf_watermark/demo/report.xml b/report_qweb_pdf_watermark/demo/report.xml index 1e07ba61..df7e944d 100644 --- a/report_qweb_pdf_watermark/demo/report.xml +++ b/report_qweb_pdf_watermark/demo/report.xml @@ -1,4 +1,4 @@ - + + /> docs[:1].company_id.logo diff --git a/report_qweb_pdf_watermark/models/__init__.py b/report_qweb_pdf_watermark/models/__init__.py index 76c93996..5db6f5b4 100644 --- a/report_qweb_pdf_watermark/models/__init__.py +++ b/report_qweb_pdf_watermark/models/__init__.py @@ -1,3 +1,4 @@ # © 2016 Therp BV # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + from . import report diff --git a/report_qweb_pdf_watermark/models/report.py b/report_qweb_pdf_watermark/models/report.py index b0f5b467..39e4e9d2 100644 --- a/report_qweb_pdf_watermark/models/report.py +++ b/report_qweb_pdf_watermark/models/report.py @@ -1,16 +1,18 @@ # © 2016 Therp BV # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from base64 import b64decode +from io import BytesIO from logging import getLogger + from PIL import Image -from io import BytesIO + +from odoo import api, fields, models, tools try: # we need this to be sure PIL has loaded PDF support from PIL import PdfImagePlugin # noqa: F401 except ImportError: pass -from odoo import api, models, fields, tools logger = getLogger(__name__) @@ -18,42 +20,53 @@ try: from PyPDF2 import PdfFileWriter, PdfFileReader # pylint: disable=W0404 from PyPDF2.utils import PdfReadError # pylint: disable=W0404 except ImportError: - logger.debug('Can not import PyPDF2') + logger.debug("Can not import PyPDF2") class Report(models.Model): - _inherit = 'ir.actions.report' + _inherit = "ir.actions.report" - pdf_watermark = fields.Binary('Watermark') + pdf_watermark = fields.Binary("Watermark") pdf_watermark_expression = fields.Char( - 'Watermark expression', help='An expression yielding the base64 ' - 'encoded data to be used as watermark. \n' - 'You have access to variables `env` and `docs`') + "Watermark expression", + help="An expression yielding the base64 " + "encoded data to be used as watermark. \n" + "You have access to variables `env` and `docs`", + ) - @api.multi def render_qweb_pdf(self, res_ids=None, data=None): - if not self.env.context.get('res_ids'): - return super( - Report, self.with_context(res_ids=res_ids) - ).render_qweb_pdf(res_ids=res_ids, data=data) + if not self.env.context.get("res_ids"): + return super(Report, self.with_context(res_ids=res_ids)).render_qweb_pdf( + res_ids=res_ids, data=data + ) return super(Report, self).render_qweb_pdf(res_ids=res_ids, data=data) @api.model - def _run_wkhtmltopdf(self, bodies, header=None, footer=None, - landscape=False, specific_paperformat_args=None, - set_viewport_size=False): + def _run_wkhtmltopdf( + self, + bodies, + header=None, + footer=None, + landscape=False, + specific_paperformat_args=None, + set_viewport_size=False, + ): result = super(Report, self)._run_wkhtmltopdf( - bodies, header=header, footer=footer, landscape=landscape, + bodies, + header=header, + footer=footer, + landscape=landscape, specific_paperformat_args=specific_paperformat_args, - set_viewport_size=set_viewport_size) + set_viewport_size=set_viewport_size, + ) - docids = self.env.context.get('res_ids', False) + docids = self.env.context.get("res_ids", False) watermark = None if self.pdf_watermark: watermark = b64decode(self.pdf_watermark) elif docids: watermark = tools.safe_eval( - self.pdf_watermark_expression or 'None', + self.pdf_watermark_expression or "None", dict(env=self.env, docs=self.env[self.model].browse(docids)), ) if watermark: @@ -72,30 +85,28 @@ class Report(models.Model): Image.init() image = Image.open(BytesIO(watermark)) pdf_buffer = BytesIO() - if image.mode != 'RGB': - image = image.convert('RGB') - resolution = image.info.get( - 'dpi', self.paperformat_id.dpi or 90 - ) + if image.mode != "RGB": + image = image.convert("RGB") + resolution = image.info.get("dpi", self.paperformat_id.dpi or 90) if isinstance(resolution, tuple): resolution = resolution[0] - image.save(pdf_buffer, 'pdf', resolution=resolution) + image.save(pdf_buffer, "pdf", resolution=resolution) pdf_watermark = PdfFileReader(pdf_buffer) - except: - logger.exception('Failed to load watermark') + except Exception as e: + logger.exception("Failed to load watermark", e) if not pdf_watermark: - logger.error( - 'No usable watermark found, got %s...', watermark[:100] - ) + logger.error("No usable watermark found, got %s...", watermark[:100]) return result if pdf_watermark.numPages < 1: - logger.error('Your watermark pdf does not contain any pages') + logger.error("Your watermark pdf does not contain any pages") return result if pdf_watermark.numPages > 1: - logger.debug('Your watermark pdf contains more than one page, ' - 'all but the first one will be ignored') + logger.debug( + "Your watermark pdf contains more than one page, " + "all but the first one will be ignored" + ) for page in PdfFileReader(BytesIO(result)).pages: watermark_page = pdf.addBlankPage( diff --git a/report_qweb_pdf_watermark/tests/__init__.py b/report_qweb_pdf_watermark/tests/__init__.py index 2693e767..1934090d 100644 --- a/report_qweb_pdf_watermark/tests/__init__.py +++ b/report_qweb_pdf_watermark/tests/__init__.py @@ -1,3 +1,4 @@ # © 2016 Therp BV # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + from . import test_report_qweb_pdf_watermark diff --git a/report_qweb_pdf_watermark/tests/test_report_qweb_pdf_watermark.py b/report_qweb_pdf_watermark/tests/test_report_qweb_pdf_watermark.py index 545b01cd..ce8645d2 100644 --- a/report_qweb_pdf_watermark/tests/test_report_qweb_pdf_watermark.py +++ b/report_qweb_pdf_watermark/tests/test_report_qweb_pdf_watermark.py @@ -1,6 +1,7 @@ # © 2016 Therp BV # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from PIL import Image + from odoo.tests.common import HttpCase diff --git a/report_qweb_pdf_watermark/views/ir_actions_report_xml.xml b/report_qweb_pdf_watermark/views/ir_actions_report_xml.xml index d923dbc9..fd3fbcb8 100644 --- a/report_qweb_pdf_watermark/views/ir_actions_report_xml.xml +++ b/report_qweb_pdf_watermark/views/ir_actions_report_xml.xml @@ -1,12 +1,19 @@ - + ir.actions.report - - + + diff --git a/report_qweb_pdf_watermark/views/layout_templates.xml b/report_qweb_pdf_watermark/views/layout_templates.xml index a295571a..50819c37 100644 --- a/report_qweb_pdf_watermark/views/layout_templates.xml +++ b/report_qweb_pdf_watermark/views/layout_templates.xml @@ -1,10 +1,12 @@ - +