diff --git a/base_jsonify/__manifest__.py b/base_jsonify/__manifest__.py index c3cbcec87..33c626d4c 100644 --- a/base_jsonify/__manifest__.py +++ b/base_jsonify/__manifest__.py @@ -1,23 +1,19 @@ # -*- coding: utf-8 -*- -# © 2017 Akretion (http://www.akretion.com) +# Copyright 2017-2018 Akretion (http://www.akretion.com) # Sébastien BEAU # Raphaël Reverdy # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). { "name": "Base Jsonify", - "summary": "Base module that provide the jsonify method on all object", + "summary": "Base module that provide the jsonify method on all models", "version": "10.0.1.0.0", "category": "Uncategorized", - "website": "https://odoo-community.org/", + "website": "https://github.com/OCA/server-tools", "author": "Akretion, Odoo Community Association (OCA)", "license": "AGPL-3", "application": False, "installable": True, - "external_dependencies": { - "python": [], - "bin": [], - }, "depends": [ "base", ], diff --git a/base_jsonify/models/ir_export.py b/base_jsonify/models/ir_export.py index feae5cddf..4e71c1d7c 100644 --- a/base_jsonify/models/ir_export.py +++ b/base_jsonify/models/ir_export.py @@ -8,6 +8,14 @@ from odoo import api, models def update_dict(data, fields): + """ + Contruct a tree of fields. + ie: { + "name": True, + "resource": True, + } + Order of keys is important. + """ field = fields[0] if len(fields) == 1: if field == '.id': @@ -20,6 +28,11 @@ def update_dict(data, fields): def convert_dict(dict_parser): + """ + Converts the dict returned by update_dict to a list consistent with the + Odoo API. The list is composed of strings (field names or aliases) or + tuples. + """ parser = [] for field, value in dict_parser.iteritems(): if value is True: @@ -34,6 +47,10 @@ class IrExport(models.Model): @api.multi def get_json_parser(self): + """ + Creates a parser from a ir_exports record and returns it. This parser + can then be used to "jsonify" records of the ir_export's model. + """ self.ensure_one() dict_parser = OrderedDict() for line in self.export_fields: @@ -41,4 +58,5 @@ class IrExport(models.Model): if line.alias: names = line.alias.split('/') update_dict(dict_parser, names) + return convert_dict(dict_parser) diff --git a/base_jsonify/models/models.py b/base_jsonify/models/models.py index 7a2df40cb..3fd8b9815 100644 --- a/base_jsonify/models/models.py +++ b/base_jsonify/models/models.py @@ -15,6 +15,9 @@ class Base(models.AbstractModel): @api.model def __parse_field(self, parser_field): + """ + Deducts how to handle a field from its parser + """ field_name = parser_field subparser = None if isinstance(parser_field, tuple): @@ -36,7 +39,7 @@ class Base(models.AbstractModel): ('line_id', ['id', ('product_id', ['name']), 'price_unit']) ] - In order to be consitent with the odoo api the jsonify method always + In order to be consistent with the odoo api the jsonify method always return a list of object even if there is only one element in input By default the key into the json is the name of the field extracted diff --git a/base_jsonify/readme/DESCRIPTION.rst b/base_jsonify/readme/DESCRIPTION.rst index 25c62fbb3..ff92efef6 100644 --- a/base_jsonify/readme/DESCRIPTION.rst +++ b/base_jsonify/readme/DESCRIPTION.rst @@ -1,5 +1,6 @@ -This module add the jsonify method to the ORM. This method take as argument -the browse record and the "parser" that specify the field to extract. +This module adds a 'jsonify' method to every model of the ORM. +It works on the current recordset and requires a single argument 'parser' +that specify the field to extract. Example of parser: