Easier XSD checking reports.
Any report inheriting this AbstractModel can check its XML results against any XSD.pull/663/head
parent
fdff0c4d8b
commit
406b107ad4
|
@ -13,6 +13,7 @@ Installation
|
||||||
|
|
||||||
To install this module, you need to:
|
To install this module, you need to:
|
||||||
|
|
||||||
|
* Install lxml_ in Odoo's ``$PYTHONPATH``.
|
||||||
* Install the repository `reporting-engine`_.
|
* Install the repository `reporting-engine`_.
|
||||||
|
|
||||||
Configuration
|
Configuration
|
||||||
|
@ -80,3 +81,4 @@ To contribute to this module, please visit http://odoo-community.org.
|
||||||
.. _reporting-engine: https://github.com/OCA/reporting-engine
|
.. _reporting-engine: https://github.com/OCA/reporting-engine
|
||||||
.. _instructions to create reports: https://www.odoo.com/documentation/8.0/reference/reports.html
|
.. _instructions to create reports: https://www.odoo.com/documentation/8.0/reference/reports.html
|
||||||
.. _custom report: https://www.odoo.com/documentation/8.0/reference/reports.html#custom-reports
|
.. _custom report: https://www.odoo.com/documentation/8.0/reference/reports.html#custom-reports
|
||||||
|
.. _lxml: http://lxml.de/
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
# You should have received a copy of the GNU Affero General Public License
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
from lxml import etree
|
||||||
from openerp import api, fields, models
|
from openerp import api, fields, models
|
||||||
|
|
||||||
|
|
||||||
|
@ -68,3 +69,33 @@ class ReportGenerator(models.Model):
|
||||||
return self.env["ir.actions.report.xml"].search(
|
return self.env["ir.actions.report.xml"].search(
|
||||||
[("report_type", "=", "qweb-xml"),
|
[("report_type", "=", "qweb-xml"),
|
||||||
("report_name", "=", report_name)])[0]
|
("report_name", "=", report_name)])[0]
|
||||||
|
|
||||||
|
|
||||||
|
class XSDCheckedReport(models.AbstractModel):
|
||||||
|
"""Check XML report against a XSD schema before downloading it.
|
||||||
|
|
||||||
|
This is an Abstract Model to be inherited by the real report models, which
|
||||||
|
must implement :meth:`.xsd` and have a ``_name`` in the form
|
||||||
|
``report.<module>.<report_name>``.
|
||||||
|
"""
|
||||||
|
_name = "report_xml.xsd_checked_report"
|
||||||
|
_description = "Base model for reports that need XSD checking"
|
||||||
|
|
||||||
|
@api.multi
|
||||||
|
def xsd(self):
|
||||||
|
"""Return the XSD schema contents."""
|
||||||
|
raise NotImplementedError
|
||||||
|
|
||||||
|
@api.multi
|
||||||
|
def render_html(self, data=None):
|
||||||
|
"""Return the XML report after checking it against an XSD."""
|
||||||
|
docargs = {"docs": (self.env[self.env.context["active_model"]]
|
||||||
|
.browse(self.env.context["active_ids"]))}
|
||||||
|
xsd = etree.XMLSchema(etree.XML(self.xsd()))
|
||||||
|
parser = etree.XMLParser(schema=xsd)
|
||||||
|
result = (self.env["report"]
|
||||||
|
.render(self._name[len("report."):], docargs)
|
||||||
|
.strip())
|
||||||
|
etree.fromstring(result, parser)
|
||||||
|
|
||||||
|
return result
|
||||||
|
|
Loading…
Reference in New Issue