From e40553857112cdfc88d4a0a85c778f5485bc4da3 Mon Sep 17 00:00:00 2001 From: Cyril VINH-TUNG Date: Wed, 12 Oct 2022 11:27:53 -1000 Subject: [PATCH] [IMP] report_fillpdf: black, isort, prettier --- report_fillpdf/__manifest__.py | 43 +++++----- report_fillpdf/controllers/main.py | 42 +++++----- report_fillpdf/models/ir_report.py | 26 +++--- report_fillpdf/report/report_fill_pdf.py | 42 +++++----- report_fillpdf/report/report_partner_pdf.py | 9 +-- .../static/src/js/report/qwebactionmanager.js | 79 ++++++++++--------- report_fillpdf/tests/test_report.py | 8 +- report_fillpdf/views/webclient_templates.xml | 5 +- requirements.txt | 1 + .../report_fillpdf/odoo/addons/report_fillpdf | 1 + setup/report_fillpdf/setup.cfg | 2 + setup/report_fillpdf/setup.py | 6 ++ 12 files changed, 144 insertions(+), 120 deletions(-) create mode 120000 setup/report_fillpdf/odoo/addons/report_fillpdf create mode 100644 setup/report_fillpdf/setup.cfg create mode 100644 setup/report_fillpdf/setup.py diff --git a/report_fillpdf/__manifest__.py b/report_fillpdf/__manifest__.py index 74d433d3b..78e061542 100644 --- a/report_fillpdf/__manifest__.py +++ b/report_fillpdf/__manifest__.py @@ -1,32 +1,31 @@ # Copyright 2017 Creu Blanca # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). { - 'name': "Base report PDF Filler", - - 'summary': """ + "name": "Base report PDF Filler", + "summary": """ Base module that fills PDFs""", - 'author': 'Creu Blanca,' - 'Odoo Community Association (OCA)', - 'website': "http://github.com/oca/reporting-engine", - 'category': 'Reporting', - 'version': '11.0.1.0.1', - 'license': 'AGPL-3', - 'external_dependencies': { - 'python': [ - 'fdfgen', + "author": "Creu Blanca," "Odoo Community Association (OCA)", + "website": "https://github.com/OCA/reporting-engine", + "category": "Reporting", + "version": "11.0.1.0.1", + "license": "AGPL-3", + "external_dependencies": { + "python": [ + "fdfgen", + ], + "bin": [ + "pdftk", ], - 'bin': [ - 'pdftk', - ] }, - 'depends': [ - 'base', 'web', + "depends": [ + "base", + "web", ], - 'data': [ - 'views/webclient_templates.xml', + "data": [ + "views/webclient_templates.xml", ], - 'demo': [ - 'demo/report.xml', + "demo": [ + "demo/report.xml", ], - 'installable': True, + "installable": True, } diff --git a/report_fillpdf/controllers/main.py b/report_fillpdf/controllers/main.py index 2b7a96fc2..0f7b50012 100644 --- a/report_fillpdf/controllers/main.py +++ b/report_fillpdf/controllers/main.py @@ -1,41 +1,39 @@ # Copyright (C) 2017 Creu Blanca # License AGPL-3.0 or later (https://www.gnuorg/licenses/agpl.html). -from odoo.addons.web.controllers import main as report -from odoo.http import content_disposition, route, request - import json +from odoo.http import content_disposition, request, route + +from odoo.addons.web.controllers import main as report + class ReportController(report.ReportController): @route() def report_routes(self, reportname, docids=None, converter=None, **data): - if converter == 'fillpdf': - report = request.env['ir.actions.report']._get_report_from_name( - reportname) + if converter == "fillpdf": + report = request.env["ir.actions.report"]._get_report_from_name(reportname) context = dict(request.env.context) if docids: - docids = [int(i) for i in docids.split(',')] - if data.get('options'): - data.update(json.loads(data.pop('options'))) - if data.get('context'): + docids = [int(i) for i in docids.split(",")] + if data.get("options"): + data.update(json.loads(data.pop("options"))) + if data.get("context"): # Ignore 'lang' here, because the context in data is the one # from the webclient *but* if the user explicitely wants to # change the lang, this mechanism overwrites it. - data['context'] = json.loads(data['context']) - if data['context'].get('lang'): - del data['context']['lang'] - context.update(data['context']) - pdf = report.with_context(context).render_fillpdf( - docids, data=data - )[0] + data["context"] = json.loads(data["context"]) + if data["context"].get("lang"): + del data["context"]["lang"] + context.update(data["context"]) + pdf = report.with_context(context).render_fillpdf(docids, data=data)[0] pdfhttpheaders = [ - ('Content-Type', 'application/pdf'), - ('Content-Length', len(pdf)), + ("Content-Type", "application/pdf"), + ("Content-Length", len(pdf)), ( - 'Content-Disposition', - content_disposition(report.report_file + '.pdf') - ) + "Content-Disposition", + content_disposition(report.report_file + ".pdf"), + ), ] return request.make_response(pdf, headers=pdfhttpheaders) return super(ReportController, self).report_routes( diff --git a/report_fillpdf/models/ir_report.py b/report_fillpdf/models/ir_report.py index 50ea2c8fd..677bc362c 100644 --- a/report_fillpdf/models/ir_report.py +++ b/report_fillpdf/models/ir_report.py @@ -1,33 +1,35 @@ # Copyright 2017 Creu Blanca # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). -from odoo import api, fields, models, _ +from odoo import _, api, fields, models from odoo.exceptions import UserError class ReportAction(models.Model): - _inherit = 'ir.actions.report' + _inherit = "ir.actions.report" report_type = fields.Selection(selection_add=[("fillpdf", "PDF Filler")]) @api.model def render_fillpdf(self, docids, data): - report_model_name = 'report.%s' % self.report_name + report_model_name = "report.%s" % self.report_name report_model = self.env.get(report_model_name) if report_model is None: - raise UserError(_('%s model was not found' % report_model_name)) - return report_model.with_context({ - 'active_model': self.model - }).fill_report(docids, data) + raise UserError(_("%s model was not found" % report_model_name)) + return report_model.with_context({"active_model": self.model}).fill_report( + docids, data + ) @api.model def _get_report_from_name(self, report_name): res = super(ReportAction, self)._get_report_from_name(report_name) if res: return res - report_obj = self.env['ir.actions.report'] - qwebtypes = ['fillpdf'] - conditions = [('report_type', 'in', qwebtypes), - ('report_name', '=', report_name)] - context = self.env['res.users'].context_get() + report_obj = self.env["ir.actions.report"] + qwebtypes = ["fillpdf"] + conditions = [ + ("report_type", "in", qwebtypes), + ("report_name", "=", report_name), + ] + context = self.env["res.users"].context_get() return report_obj.with_context(context).search(conditions, limit=1) diff --git a/report_fillpdf/report/report_fill_pdf.py b/report_fillpdf/report/report_fill_pdf.py index 542356a2b..b51eb2f1c 100644 --- a/report_fillpdf/report/report_fill_pdf.py +++ b/report_fillpdf/report/report_fill_pdf.py @@ -2,31 +2,36 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). -from io import BytesIO -import os -from contextlib import closing import logging +import os import tempfile -from subprocess import Popen, PIPE +from contextlib import closing +from io import BytesIO +from subprocess import PIPE, Popen + from odoo import api, models, tools _logger = logging.getLogger(__name__) try: from fdfgen import forge_fdf - EXTERNAL_DEPENDENCY_BINARY_PDFTK = tools.find_in_path('pdftk') + + EXTERNAL_DEPENDENCY_BINARY_PDFTK = tools.find_in_path("pdftk") except (ImportError, IOError) as err: - _logger.debug('Error while importing: %s.' % err) + _logger.debug("Error while importing: %s." % err) EXTERNAL_DEPENDENCY_BINARY_PDFTK = "" class ReportFillPDFAbstract(models.AbstractModel): - _name = 'report.report_fillpdf.abstract' + _name = "report.report_fillpdf.abstract" def fill_report(self, docids, data): - objs = self.env[self.env.context.get('active_model')].browse(docids) - return self.fill_pdf_form( - self.get_form(data, objs), - self.get_document_values(data, objs)), 'pdf' + objs = self.env[self.env.context.get("active_model")].browse(docids) + return ( + self.fill_pdf_form( + self.get_form(data, objs), self.get_document_values(data, objs) + ), + "pdf", + ) @api.model def get_original_document_path(self, data, objs): @@ -34,7 +39,7 @@ class ReportFillPDFAbstract(models.AbstractModel): @api.model def get_form(self, data, objs): - with open(self.get_original_document_path(data, objs), 'rb') as file: + with open(self.get_original_document_path(data, objs), "rb") as file: result = file.read() return result @@ -45,17 +50,18 @@ class ReportFillPDFAbstract(models.AbstractModel): @api.model def fill_pdf_form(self, form, vals): fdf = forge_fdf("", vals.items(), [], [], []) - document_fd, document_path = tempfile.mkstemp( - suffix='.pdf', prefix='') - with closing(os.fdopen(document_fd, 'wb')) as body_file: + document_fd, document_path = tempfile.mkstemp(suffix=".pdf", prefix="") + with closing(os.fdopen(document_fd, "wb")) as body_file: body_file.write(form) args = [ EXTERNAL_DEPENDENCY_BINARY_PDFTK, document_path, - "fill_form", "-", - "output", "-", + "fill_form", + "-", + "output", + "-", "dont_ask", - "flatten" + "flatten", ] p = Popen(args, stdin=PIPE, stdout=PIPE, stderr=PIPE) stdout, stderr = p.communicate(fdf) diff --git a/report_fillpdf/report/report_partner_pdf.py b/report_fillpdf/report/report_partner_pdf.py index 36a190ddf..5b13ae88b 100644 --- a/report_fillpdf/report/report_partner_pdf.py +++ b/report_fillpdf/report/report_partner_pdf.py @@ -6,15 +6,14 @@ from odoo.modules import get_resource_path class PartnerPDF(models.AbstractModel): - _name = 'report.report_fillpdf.partner_fillpdf' - _inherit = 'report.report_fillpdf.abstract' + _name = "report.report_fillpdf.partner_fillpdf" + _inherit = "report.report_fillpdf.abstract" @api.model def get_original_document_path(self, data, objs): - return get_resource_path( - 'report_fillpdf', 'static/src/pdf', 'partner_pdf.pdf') + return get_resource_path("report_fillpdf", "static/src/pdf", "partner_pdf.pdf") @api.model def get_document_values(self, data, objs): objs.ensure_one() - return {'name': objs.name} + return {"name": objs.name} diff --git a/report_fillpdf/static/src/js/report/qwebactionmanager.js b/report_fillpdf/static/src/js/report/qwebactionmanager.js index 7cf77b47d..176ed4b0f 100644 --- a/report_fillpdf/static/src/js/report/qwebactionmanager.js +++ b/report_fillpdf/static/src/js/report/qwebactionmanager.js @@ -1,42 +1,49 @@ // © 2017 Creu Blanca // License AGPL-3.0 or later (https://www.gnuorg/licenses/agpl.html). -odoo.define('report_fillpdf.report', function(require){ -'use strict'; +odoo.define("report_fillpdf.report", function (require) { + "use strict"; -var ActionManager= require('web.ActionManager'); -var crash_manager = require('web.crash_manager'); -var framework = require('web.framework'); + var ActionManager = require("web.ActionManager"); + var crash_manager = require("web.crash_manager"); + var framework = require("web.framework"); -ActionManager.include({ - ir_actions_report: function (action, options){ - var self = this; - var cloned_action = _.clone(action); - if (cloned_action.report_type === 'fillpdf') { - framework.blockUI(); - var report_fillpdf_url = 'report/fillpdf/' + cloned_action.report_name; - if(cloned_action.context.active_ids){ - report_fillpdf_url += '/' + cloned_action.context.active_ids.join(','); - }else{ - report_fillpdf_url += '?options=' + encodeURIComponent(JSON.stringify(cloned_action.data)); - report_fillpdf_url += '&context=' + encodeURIComponent(JSON.stringify(cloned_action.context)); - } - self.getSession().get_file({ - url: report_fillpdf_url, - data: {data: JSON.stringify([ - report_fillpdf_url, - cloned_action.report_type - ])}, - error: crash_manager.rpc_error.bind(crash_manager), - success: function (){ - if(cloned_action && options && !cloned_action.dialog){ - options.on_close(); - } + ActionManager.include({ + ir_actions_report: function (action, options) { + var self = this; + var cloned_action = _.clone(action); + if (cloned_action.report_type === "fillpdf") { + framework.blockUI(); + var report_fillpdf_url = "report/fillpdf/" + cloned_action.report_name; + if (cloned_action.context.active_ids) { + report_fillpdf_url += + "/" + cloned_action.context.active_ids.join(","); + } else { + report_fillpdf_url += + "?options=" + + encodeURIComponent(JSON.stringify(cloned_action.data)); + report_fillpdf_url += + "&context=" + + encodeURIComponent(JSON.stringify(cloned_action.context)); } - }); - framework.unblockUI(); - return; - } - return self._super(action, options); - } -}); + self.getSession().get_file({ + url: report_fillpdf_url, + data: { + data: JSON.stringify([ + report_fillpdf_url, + cloned_action.report_type, + ]), + }, + error: crash_manager.rpc_error.bind(crash_manager), + success: function () { + if (cloned_action && options && !cloned_action.dialog) { + options.on_close(); + } + }, + }); + framework.unblockUI(); + return; + } + return self._super(action, options); + }, + }); }); diff --git a/report_fillpdf/tests/test_report.py b/report_fillpdf/tests/test_report.py index 6270894a8..36601c1b4 100644 --- a/report_fillpdf/tests/test_report.py +++ b/report_fillpdf/tests/test_report.py @@ -6,9 +6,9 @@ from odoo.tests import common class TestReport(common.TransactionCase): def test_report(self): - report_object = self.env['ir.actions.report'] - report_name = 'report_fillpdf.partner_fillpdf' + report_object = self.env["ir.actions.report"] + report_name = "report_fillpdf.partner_fillpdf" report = report_object._get_report_from_name(report_name) - docs = self.env['res.company'].search([], limit=1).partner_id - self.assertEqual(report.report_type, 'fillpdf') + docs = self.env["res.company"].search([], limit=1).partner_id + self.assertEqual(report.report_type, "fillpdf") report.render(docs.ids, {}) diff --git a/report_fillpdf/views/webclient_templates.xml b/report_fillpdf/views/webclient_templates.xml index df0e00a6d..72050a270 100644 --- a/report_fillpdf/views/webclient_templates.xml +++ b/report_fillpdf/views/webclient_templates.xml @@ -6,7 +6,10 @@ -->