[IMP] report_qr: black, isort
parent
1a52e3dab5
commit
ba66252734
|
@ -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,
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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")])
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue