diff --git a/.isort.cfg b/.isort.cfg index f1105d854..31b938dac 100644 --- a/.isort.cfg +++ b/.isort.cfg @@ -9,4 +9,4 @@ line_length=88 known_odoo=odoo known_odoo_addons=odoo.addons sections=FUTURE,STDLIB,THIRDPARTY,ODOO,ODOO_ADDONS,FIRSTPARTY,LOCALFOLDER -known_third_party=setuptools,xlsxwriter +known_third_party=qrcode,setuptools,werkzeug,xlsxwriter diff --git a/report_qr/__manifest__.py b/report_qr/__manifest__.py index b49174450..8c303eac9 100644 --- a/report_qr/__manifest__.py +++ b/report_qr/__manifest__.py @@ -2,17 +2,13 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). { - 'name': 'Web QR Manager', - 'version': '12.0.1.0.0', - 'author': 'Creu Blanca, ' - 'Odoo Community Association (OCA)', - 'category': 'Sales', - 'website': 'https://github.com/OCA/reporting-engine', - 'license': 'AGPL-3', - 'depends': [ - 'web', - ], - 'data': [ - ], - 'installable': True, + "name": "Web QR Manager", + "version": "12.0.1.0.0", + "author": "Creu Blanca, " "Odoo Community Association (OCA)", + "category": "Sales", + "website": "https://github.com/OCA/reporting-engine", + "license": "AGPL-3", + "depends": ["web"], + "data": [], + "installable": True, } diff --git a/report_qr/controllers/qr.py b/report_qr/controllers/qr.py index 50b74fef8..ed4cd6914 100644 --- a/report_qr/controllers/qr.py +++ b/report_qr/controllers/qr.py @@ -1,21 +1,22 @@ import werkzeug + from odoo import http from odoo.http import request class Home(http.Controller): - - @http.route('/report/qr', type='http', auth="public") - def report_qr(self, value, box_size=3, border=3, factory='png', **kwargs): + @http.route("/report/qr", type="http", auth="public") + def report_qr(self, value, box_size=3, border=3, factory="png", **kwargs): try: - barcode = request.env['ir.actions.report'].qr_generate( - value, box_size=box_size, border=border, - factory=factory, **kwargs) + barcode = request.env["ir.actions.report"].qr_generate( + value, box_size=box_size, border=border, factory=factory, **kwargs + ) except (ValueError, AttributeError): raise werkzeug.exceptions.HTTPException( - description='Cannot convert into barcode.') - if factory != 'png': + description="Cannot convert into barcode." + ) + if factory != "png": return request.make_response( - barcode, headers=[('Content-Type', 'image/svg+xml')]) - return request.make_response( - barcode, headers=[('Content-Type', 'image/png')]) + barcode, headers=[("Content-Type", "image/svg+xml")] + ) + return request.make_response(barcode, headers=[("Content-Type", "image/png")]) diff --git a/report_qr/models/ir_actions_report.py b/report_qr/models/ir_actions_report.py index 9fc4ec637..7114cdce4 100644 --- a/report_qr/models/ir_actions_report.py +++ b/report_qr/models/ir_actions_report.py @@ -1,20 +1,21 @@ -from odoo import api, models -import qrcode -from qrcode.image import svg, pil import io +import qrcode +from qrcode.image import pil, svg + +from odoo import api, models + class IrActionsReport(models.Model): - _inherit = 'ir.actions.report' + _inherit = "ir.actions.report" @api.model - def qr_generate(self, value, box_size=3, border=5, - factory='png', **kwargs): + def qr_generate(self, value, box_size=3, border=5, factory="png", **kwargs): factories = { - 'png': pil.PilImage, - 'svg': svg.SvgImage, - 'svg-fragment': svg.SvgFragmentImage, - 'svg-path': svg.SvgPathImage, + "png": pil.PilImage, + "svg": svg.SvgImage, + "svg-fragment": svg.SvgFragmentImage, + "svg-path": svg.SvgPathImage, } # Color parameters seem to be inverted in the library back_color = kwargs.pop("back_color", "black") @@ -23,12 +24,11 @@ class IrActionsReport(models.Model): # Defaults to png if the argument is unknown image_factory = factories.get(factory, pil.PilImage) qr = qrcode.QRCode( - box_size=box_size, border=border, - image_factory=image_factory, **kwargs) + box_size=box_size, border=border, image_factory=image_factory, **kwargs + ) qr.add_data(value) qr.make() - img = qr.make_image(fill_color=fill_color, - back_color=back_color) + img = qr.make_image(fill_color=fill_color, back_color=back_color) arr = io.BytesIO() img.save(arr) return arr.getvalue() diff --git a/report_qr/tests/test_report_qr.py b/report_qr/tests/test_report_qr.py index e6f5bf7a3..637731ac2 100644 --- a/report_qr/tests/test_report_qr.py +++ b/report_qr/tests/test_report_qr.py @@ -5,17 +5,16 @@ from odoo.tests.common import HttpCase class TestReportQr(HttpCase): - def test_qr_generation(self): - data = 'TEST' - image = self.url_open('/report/qr?value=%s' % data) - self.assertEqual(image.headers['Content-type'], 'image/png') + data = "TEST" + image = self.url_open("/report/qr?value=%s" % data) + self.assertEqual(image.headers["Content-type"], "image/png") def test_qr_overflow(self): """There is a QR limitation for 4296 characters, we will test that an Exception is raised""" - new_data = '' + new_data = "" for i in range(0, 1500): - new_data += 'TEST' + new_data += "TEST" with self.assertRaises(Exception): - self.env['ir.actions.report'].qr_generate(new_data) + self.env["ir.actions.report"].qr_generate(new_data)