[IMP] report_qr: black, isort

pull/374/head
Joan Sisquella 2020-03-02 10:59:46 +01:00
parent fdefcfdbc4
commit 4e63a3788c
5 changed files with 42 additions and 46 deletions

View File

@ -9,4 +9,4 @@ line_length=88
known_odoo=odoo known_odoo=odoo
known_odoo_addons=odoo.addons known_odoo_addons=odoo.addons
sections=FUTURE,STDLIB,THIRDPARTY,ODOO,ODOO_ADDONS,FIRSTPARTY,LOCALFOLDER sections=FUTURE,STDLIB,THIRDPARTY,ODOO,ODOO_ADDONS,FIRSTPARTY,LOCALFOLDER
known_third_party=setuptools,xlsxwriter known_third_party=qrcode,setuptools,werkzeug,xlsxwriter

View File

@ -2,17 +2,13 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
{ {
'name': 'Web QR Manager', "name": "Web QR Manager",
'version': '12.0.1.0.0', "version": "12.0.1.0.0",
'author': 'Creu Blanca, ' "author": "Creu Blanca, " "Odoo Community Association (OCA)",
'Odoo Community Association (OCA)', "category": "Sales",
'category': 'Sales', "website": "https://github.com/OCA/reporting-engine",
'website': 'https://github.com/OCA/reporting-engine', "license": "AGPL-3",
'license': 'AGPL-3', "depends": ["web"],
'depends': [ "data": [],
'web', "installable": True,
],
'data': [
],
'installable': True,
} }

View File

@ -1,21 +1,22 @@
import werkzeug import werkzeug
from odoo import http from odoo import http
from odoo.http import request from odoo.http import request
class Home(http.Controller): class Home(http.Controller):
@http.route("/report/qr", type="http", auth="public")
@http.route('/report/qr', type='http', auth="public") def report_qr(self, value, box_size=3, border=3, factory="png", **kwargs):
def report_qr(self, value, box_size=3, border=3, factory='png', **kwargs):
try: try:
barcode = request.env['ir.actions.report'].qr_generate( barcode = request.env["ir.actions.report"].qr_generate(
value, box_size=box_size, border=border, value, box_size=box_size, border=border, factory=factory, **kwargs
factory=factory, **kwargs) )
except (ValueError, AttributeError): except (ValueError, AttributeError):
raise werkzeug.exceptions.HTTPException( raise werkzeug.exceptions.HTTPException(
description='Cannot convert into barcode.') description="Cannot convert into barcode."
if factory != 'png': )
if factory != "png":
return request.make_response( return request.make_response(
barcode, headers=[('Content-Type', 'image/svg+xml')]) barcode, headers=[("Content-Type", "image/svg+xml")]
return request.make_response( )
barcode, headers=[('Content-Type', 'image/png')]) return request.make_response(barcode, headers=[("Content-Type", "image/png")])

View File

@ -1,20 +1,21 @@
from odoo import api, models
import qrcode
from qrcode.image import svg, pil
import io import io
import qrcode
from qrcode.image import pil, svg
from odoo import api, models
class IrActionsReport(models.Model): class IrActionsReport(models.Model):
_inherit = 'ir.actions.report' _inherit = "ir.actions.report"
@api.model @api.model
def qr_generate(self, value, box_size=3, border=5, def qr_generate(self, value, box_size=3, border=5, factory="png", **kwargs):
factory='png', **kwargs):
factories = { factories = {
'png': pil.PilImage, "png": pil.PilImage,
'svg': svg.SvgImage, "svg": svg.SvgImage,
'svg-fragment': svg.SvgFragmentImage, "svg-fragment": svg.SvgFragmentImage,
'svg-path': svg.SvgPathImage, "svg-path": svg.SvgPathImage,
} }
# Color parameters seem to be inverted in the library # Color parameters seem to be inverted in the library
back_color = kwargs.pop("back_color", "black") back_color = kwargs.pop("back_color", "black")
@ -23,12 +24,11 @@ class IrActionsReport(models.Model):
# Defaults to png if the argument is unknown # Defaults to png if the argument is unknown
image_factory = factories.get(factory, pil.PilImage) image_factory = factories.get(factory, pil.PilImage)
qr = qrcode.QRCode( qr = qrcode.QRCode(
box_size=box_size, border=border, box_size=box_size, border=border, image_factory=image_factory, **kwargs
image_factory=image_factory, **kwargs) )
qr.add_data(value) qr.add_data(value)
qr.make() qr.make()
img = qr.make_image(fill_color=fill_color, img = qr.make_image(fill_color=fill_color, back_color=back_color)
back_color=back_color)
arr = io.BytesIO() arr = io.BytesIO()
img.save(arr) img.save(arr)
return arr.getvalue() return arr.getvalue()

View File

@ -5,17 +5,16 @@ from odoo.tests.common import HttpCase
class TestReportQr(HttpCase): class TestReportQr(HttpCase):
def test_qr_generation(self): def test_qr_generation(self):
data = 'TEST' data = "TEST"
image = self.url_open('/report/qr?value=%s' % data) image = self.url_open("/report/qr?value=%s" % data)
self.assertEqual(image.headers['Content-type'], 'image/png') self.assertEqual(image.headers["Content-type"], "image/png")
def test_qr_overflow(self): def test_qr_overflow(self):
"""There is a QR limitation for 4296 characters, we will test that an """There is a QR limitation for 4296 characters, we will test that an
Exception is raised""" Exception is raised"""
new_data = '' new_data = ""
for i in range(0, 1500): for i in range(0, 1500):
new_data += 'TEST' new_data += "TEST"
with self.assertRaises(Exception): with self.assertRaises(Exception):
self.env['ir.actions.report'].qr_generate(new_data) self.env["ir.actions.report"].qr_generate(new_data)