Add simple tests and fix call to fusion server
parent
e40e810485
commit
0a8c0b67c6
|
@ -24,11 +24,11 @@ The py3o.template package is required; install it with:
|
||||||
},
|
},
|
||||||
'data': [
|
'data': [
|
||||||
'security/ir.model.access.csv',
|
'security/ir.model.access.csv',
|
||||||
|
|
||||||
'views/menu.xml',
|
'views/menu.xml',
|
||||||
'views/py3o_template.xml',
|
'views/py3o_template.xml',
|
||||||
'views/py3o_server.xml',
|
'views/py3o_server.xml',
|
||||||
'views/ir_report.xml',
|
'views/ir_report.xml',
|
||||||
|
'demo/report_py3o.xml',
|
||||||
],
|
],
|
||||||
'installable': True,
|
'installable': True,
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
,lmi,nbacsonelmi,04.10.2016 15:56,file:///home/lmi/.config/libreoffice/4;
|
|
@ -0,0 +1,28 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Copyright 2016 ACSONE SA/NV
|
||||||
|
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
|
||||||
|
|
||||||
|
<odoo>
|
||||||
|
|
||||||
|
<record id="res_users_report_py3o" model="ir.actions.report.xml">
|
||||||
|
<field name="name">Py3o Demo Report</field>
|
||||||
|
<field name="type">ir.actions.report.xml</field>
|
||||||
|
<field name="model">res.users</field>
|
||||||
|
<field name="report_name">py3o_user_info</field>
|
||||||
|
<field name="report_type">py3o</field>
|
||||||
|
<field name="py3o_filetype">odt</field>
|
||||||
|
<field name="py3o_is_local_fusion" eval="1"/>
|
||||||
|
<field name="py3o_filetype">odt</field>
|
||||||
|
<field name="module">report_py3o</field>
|
||||||
|
<field name="py3o_template_fallback">demo/res_user.odt</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_users_report_py3o_print_action" model="ir.values">
|
||||||
|
<field eval="'action'" name="key" />
|
||||||
|
<field eval="'client_print_multi'" name="key2" />
|
||||||
|
<field name="model">res.users</field>
|
||||||
|
<field name="name">Py3o Demo Report</field>
|
||||||
|
<field eval="'ir.actions.report.xml,'+str(res_users_report_py3o)" name="value" />
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
Binary file not shown.
|
@ -102,7 +102,7 @@ msgid "No Py3o server configuration found"
|
||||||
msgstr "Pas de configuration trouvée du serveur Py3o"
|
msgstr "Pas de configuration trouvée du serveur Py3o"
|
||||||
|
|
||||||
#. module: report_py3o
|
#. module: report_py3o
|
||||||
#: field:ir.actions.report.xml,py3o_fusion_filetype:0
|
#: field:ir.actions.report.xml,py3o_filetype:0
|
||||||
msgid "Output Format"
|
msgid "Output Format"
|
||||||
msgstr "Format de sortie"
|
msgstr "Format de sortie"
|
||||||
|
|
||||||
|
|
|
@ -19,17 +19,17 @@ class ReportXml(models.Model):
|
||||||
_inherit = 'ir.actions.report.xml'
|
_inherit = 'ir.actions.report.xml'
|
||||||
|
|
||||||
@api.one
|
@api.one
|
||||||
@api.constrains("py3o_fusion_filetype", "report_type")
|
@api.constrains("py3o_filetype", "report_type")
|
||||||
def _check_py3o_fusion_filetype(self):
|
def _check_py3o_filetype(self):
|
||||||
if self.report_type == "py3o" and not self.py3o_fusion_filetype:
|
if self.report_type == "py3o" and not self.py3o_filetype:
|
||||||
raise ValidationError(
|
raise ValidationError(
|
||||||
"Field 'Output Format' is required for Py3O report")
|
"Field 'Output Format' is required for Py3O report")
|
||||||
|
|
||||||
@api.one
|
@api.one
|
||||||
@api.constrains("py3o_is_local_fusion", "py3o_server_id",
|
@api.constrains("py3o_is_local_fusion", "py3o_server_id",
|
||||||
"py3o_fusion_filetype")
|
"py3o_filetype")
|
||||||
def _check_py3o_server_id(self):
|
def _check_py3o_server_id(self):
|
||||||
is_native = Formats().get_format(self.py3o_fusion_filetype)
|
is_native = Formats().get_format(self.py3o_filetype)
|
||||||
if ((not is_native or not self.py3o_is_local_fusion) and
|
if ((not is_native or not self.py3o_is_local_fusion) and
|
||||||
not self.py3o_server_id):
|
not self.py3o_server_id):
|
||||||
raise ValidationError(
|
raise ValidationError(
|
||||||
|
@ -37,7 +37,7 @@ class ReportXml(models.Model):
|
||||||
"Please specify a Fusion Server")
|
"Please specify a Fusion Server")
|
||||||
|
|
||||||
@api.model
|
@api.model
|
||||||
def _get_py3o_fusion_filetypes(self):
|
def _get_py3o_filetypes(self):
|
||||||
formats = Formats()
|
formats = Formats()
|
||||||
names = formats.get_known_format_names()
|
names = formats.get_known_format_names()
|
||||||
selections = []
|
selections = []
|
||||||
|
@ -48,8 +48,8 @@ class ReportXml(models.Model):
|
||||||
selections.append((name, description))
|
selections.append((name, description))
|
||||||
return selections
|
return selections
|
||||||
|
|
||||||
py3o_fusion_filetype = fields.Selection(
|
py3o_filetype = fields.Selection(
|
||||||
selection="_get_py3o_fusion_filetypes",
|
selection="_get_py3o_filetypes",
|
||||||
string="Output Format")
|
string="Output Format")
|
||||||
py3o_template_id = fields.Many2one(
|
py3o_template_id = fields.Many2one(
|
||||||
'py3o.template',
|
'py3o.template',
|
||||||
|
|
|
@ -143,26 +143,27 @@ class Py3oParser(report_sxw):
|
||||||
localcontext = parser_instance.localcontext
|
localcontext = parser_instance.localcontext
|
||||||
if report_xml.py3o_is_local_fusion:
|
if report_xml.py3o_is_local_fusion:
|
||||||
template.render(localcontext)
|
template.render(localcontext)
|
||||||
input = out_stream.getvalue()
|
in_stream = out_stream
|
||||||
|
datadict = {}
|
||||||
else:
|
else:
|
||||||
expressions = template.get_all_user_python_expression()
|
expressions = template.get_all_user_python_expression()
|
||||||
py_expression = template.convert_py3o_to_python_ast(expressions)
|
py_expression = template.convert_py3o_to_python_ast(expressions)
|
||||||
convertor = Py3oConvertor()
|
convertor = Py3oConvertor()
|
||||||
data_struct = convertor(py_expression)
|
data_struct = convertor(py_expression)
|
||||||
input = data_struct.render(localcontext)
|
datadict = data_struct.render(localcontext)
|
||||||
|
|
||||||
filetype = report_xml.py3o_fusion_filetype
|
filetype = report_xml.py3o_filetype
|
||||||
is_native = Formats().get_format(filetype).native
|
is_native = Formats().get_format(filetype).native
|
||||||
if is_native:
|
if is_native:
|
||||||
res = input
|
res = out_stream.getvalue()
|
||||||
else: # Call py3o.server to render the template in the desired format
|
else: # Call py3o.server to render the template in the desired format
|
||||||
in_stream.seek(0)
|
in_stream.seek(0)
|
||||||
files = {
|
files = {
|
||||||
'tmpl_file': in_stream,
|
'tmpl_file': in_stream,
|
||||||
}
|
}
|
||||||
fields = {
|
fields = {
|
||||||
"targetformat": filetype.fusion_ext,
|
"targetformat": filetype,
|
||||||
"datadict": json.dumps(input),
|
"datadict": json.dumps(datadict),
|
||||||
"image_mapping": "{}",
|
"image_mapping": "{}",
|
||||||
}
|
}
|
||||||
r = requests.post(
|
r = requests.post(
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
from . import test_report_py3o
|
|
@ -0,0 +1,27 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Copyright 2016 ACSONE SA/NV
|
||||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).).
|
||||||
|
|
||||||
|
|
||||||
|
import mock
|
||||||
|
|
||||||
|
from openerp.tests.common import TransactionCase
|
||||||
|
import openerp.tests
|
||||||
|
|
||||||
|
|
||||||
|
@openerp.tests.common.at_install(False)
|
||||||
|
@openerp.tests.common.post_install(True)
|
||||||
|
class TestReportPy3o(TransactionCase):
|
||||||
|
|
||||||
|
def test_reports(self):
|
||||||
|
domain = [('report_type', '=', 'py3o'),
|
||||||
|
('report_name', '=', 'py3o_user_info')]
|
||||||
|
reports = self.env['ir.actions.report.xml'].search(domain)
|
||||||
|
self.assertEqual(1, len(reports))
|
||||||
|
for r in reports:
|
||||||
|
with mock.patch('openerp.addons.report_py3o.py3o_parser.'
|
||||||
|
'Py3oParser.create_single_pdf') as patched_pdf:
|
||||||
|
r.render_report(self.env.user.ids,
|
||||||
|
r.report_name,
|
||||||
|
{})
|
||||||
|
self.assertEqual(1, patched_pdf.call_count)
|
|
@ -14,7 +14,7 @@
|
||||||
attrs="{'invisible': [('report_type', '!=', 'py3o')]}">
|
attrs="{'invisible': [('report_type', '!=', 'py3o')]}">
|
||||||
|
|
||||||
<group>
|
<group>
|
||||||
<field name="py3o_fusion_filetype" />
|
<field name="py3o_filetype" />
|
||||||
<field name="py3o_is_local_fusion"/>
|
<field name="py3o_is_local_fusion"/>
|
||||||
<field name="py3o_server_id" />
|
<field name="py3o_server_id" />
|
||||||
<field name="py3o_template_id" />
|
<field name="py3o_template_id" />
|
||||||
|
|
Loading…
Reference in New Issue