base_jsonify: cleanups
remove copyrights from init and update copyrightspull/2418/head
parent
bc2565e117
commit
36d8adea96
|
@ -2,9 +2,9 @@
|
|||
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
|
||||
:alt: License: AGPL-3
|
||||
|
||||
==============
|
||||
============
|
||||
Base Jsonify
|
||||
==============
|
||||
============
|
||||
|
||||
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.
|
||||
|
@ -76,7 +76,7 @@ This is a technical module not function feature is added
|
|||
Known issues / Roadmap
|
||||
======================
|
||||
|
||||
Nothing yet
|
||||
No distinction between float 0.0L and no value
|
||||
|
||||
Bug Tracker
|
||||
===========
|
||||
|
@ -98,6 +98,7 @@ Contributors
|
|||
------------
|
||||
|
||||
* BEAU Sébastien <sebastien.beau@akretion.com>
|
||||
* Raphaël Reverdy <raphael.reverdy@akretion.com>
|
||||
* Laurent Mignon <laurent.mignon@acsone.eu>
|
||||
|
||||
Maintainer
|
||||
|
|
|
@ -1,7 +1,2 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# © 2016 Akretion (http://www.akretion.com)
|
||||
# Sébastien BEAU <sebastien.beau@akretion.com>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
|
||||
from . import models
|
||||
|
|
|
@ -1,12 +1,13 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# © 2016 Akretion (http://www.akretion.com)
|
||||
# © 2017 Akretion (http://www.akretion.com)
|
||||
# Sébastien BEAU <sebastien.beau@akretion.com>
|
||||
# Raphaël Reverdy <raphael.reverdy@akretion.com>
|
||||
# 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",
|
||||
"version": "8.0.1.0.0",
|
||||
"version": "10.0.1.0.0",
|
||||
"category": "Uncategorized",
|
||||
"website": "https://odoo-community.org/",
|
||||
"author": "Akretion, Odoo Community Association (OCA)",
|
|
@ -1,11 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<record id="ir_exp_partner" model="ir.exports">
|
||||
<field name="name">Partner Export</field>
|
||||
<field name="resource">res.partner</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
<odoo>
|
||||
<record id="ir_exp_partner" model="ir.exports">
|
||||
<field name="name">Partner Export</field>
|
||||
<field name="resource">res.partner</field>
|
||||
</record>
|
||||
</odoo>
|
|
@ -1,9 +1,4 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# © 2016 Akretion (http://www.akretion.com)
|
||||
# Sébastien BEAU <sebastien.beau@akretion.com>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
|
||||
from . import models
|
||||
from . import ir_export
|
||||
from . import ir_exports_line
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# © 2016 Akretion (http://www.akretion.com)
|
||||
# © 2017 Akretion (http://www.akretion.com)
|
||||
# Sébastien BEAU <sebastien.beau@akretion.com>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from collections import OrderedDict
|
||||
from openerp import api, models
|
||||
from odoo import api, models
|
||||
|
||||
|
||||
def update_dict(data, fields):
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
# Copyright 2017 ACSONE SA/NV
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
from openerp.exceptions import ValidationError
|
||||
from openerp import api, fields, models, _
|
||||
from odoo.exceptions import ValidationError
|
||||
from odoo import api, fields, models, _
|
||||
|
||||
|
||||
class IrExportsLine(models.Model):
|
||||
|
|
|
@ -1,76 +1,80 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# © 2016 Akretion (http://www.akretion.com)
|
||||
# © 2017 Akretion (http://www.akretion.com)
|
||||
# Sébastien BEAU <sebastien.beau@akretion.com>
|
||||
# Raphaël Reverdy <raphael.reverdy@akretion.com>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from openerp import api, models
|
||||
from openerp.exceptions import Warning as UserError
|
||||
from openerp.tools.translate import _
|
||||
from odoo import api, models
|
||||
from odoo.exceptions import UserError
|
||||
from odoo.tools.translate import _
|
||||
|
||||
|
||||
def __parse_field(parser_field):
|
||||
field_name = parser_field
|
||||
subparser = None
|
||||
if isinstance(parser_field, tuple):
|
||||
field_name, subparser = parser_field
|
||||
json_key = field_name
|
||||
if ':' in field_name:
|
||||
field_name, json_key = field_name.split(':')
|
||||
return field_name, json_key, subparser
|
||||
class Base(models.AbstractModel):
|
||||
|
||||
_inherit = 'base'
|
||||
|
||||
@api.model
|
||||
def __parse_field(self, parser_field):
|
||||
field_name = parser_field
|
||||
subparser = None
|
||||
if isinstance(parser_field, tuple):
|
||||
field_name, subparser = parser_field
|
||||
json_key = field_name
|
||||
if ':' in field_name:
|
||||
field_name, json_key = field_name.split(':')
|
||||
return field_name, json_key, subparser
|
||||
|
||||
|
||||
@api.multi
|
||||
def jsonify(self, parser):
|
||||
""" Convert the record according to the parser given
|
||||
Example of parser:
|
||||
@api.multi
|
||||
def jsonify(self, parser):
|
||||
""" Convert the record according to the parser given
|
||||
Example of parser:
|
||||
parser = [
|
||||
'name',
|
||||
'number',
|
||||
'create_date',
|
||||
('partner_id', ['id', 'display_name', 'ref'])
|
||||
('line_id', ['id', ('product_id', ['name']), 'price_unit'])
|
||||
]
|
||||
|
||||
In order to be consitent 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
|
||||
from the model. If you need to specify an alternate name to use as key, you
|
||||
can define your mapping as follow into the parser definition:
|
||||
|
||||
parser = [
|
||||
'name',
|
||||
'number',
|
||||
'create_date',
|
||||
('partner_id', ['id', 'display_name', 'ref'])
|
||||
('line_id', ['id', ('product_id', ['name']), 'price_unit'])
|
||||
'field_name:json_key'
|
||||
]
|
||||
|
||||
In order to be consitent with the odoo api the jsonify method always
|
||||
return a list of object even if there is only one element in input
|
||||
"""
|
||||
result = []
|
||||
empty_value = {
|
||||
'char': None,
|
||||
'int': None,
|
||||
# 'float': None, TODO: 0.0 != False
|
||||
'text': None,
|
||||
}
|
||||
|
||||
By default the key into the json is the name of the field extracted
|
||||
from the model. If you need to specify an alternate name to use as key, you
|
||||
can define your mapping as follow into the parser definition:
|
||||
|
||||
parser = [
|
||||
'field_name:json_key'
|
||||
]
|
||||
|
||||
"""
|
||||
result = []
|
||||
empty_value = {
|
||||
'char': '',
|
||||
'int': 0,
|
||||
'float': 0,
|
||||
}
|
||||
|
||||
for rec in self:
|
||||
res = {}
|
||||
for field in parser:
|
||||
field_name, json_key, subparser = __parse_field(field)
|
||||
field_type = rec._fields[field_name].type
|
||||
if subparser:
|
||||
if field_type in ('one2many', 'many2many'):
|
||||
res[json_key] = rec[field_name].jsonify(subparser)
|
||||
elif field_type in ('many2one', 'reference'):
|
||||
if rec[field_name]:
|
||||
res[json_key] = rec[field_name].jsonify(subparser)[0]
|
||||
for rec in self:
|
||||
res = {}
|
||||
for field in parser:
|
||||
field_name, json_key, subparser = self.__parse_field(field)
|
||||
field_type = rec._fields[field_name].type
|
||||
if subparser:
|
||||
if field_type in ('one2many', 'many2many'):
|
||||
res[json_key] = rec[field_name].jsonify(subparser)
|
||||
elif field_type in ('many2one', 'reference'):
|
||||
if rec[field_name]:
|
||||
res[json_key] = rec[field_name].jsonify(subparser)[0]
|
||||
else:
|
||||
res[json_key] = None
|
||||
else:
|
||||
res[json_key] = None
|
||||
raise UserError(_('Wrong parser configuration'))
|
||||
else:
|
||||
raise UserError(_('Wrong parser configuration'))
|
||||
else:
|
||||
res[json_key] = rec[field_name]
|
||||
if not res[json_key] and field_type in empty_value:
|
||||
res[json_key] = empty_value[field_type]
|
||||
result.append(res)
|
||||
return result
|
||||
|
||||
|
||||
models.Model.jsonify = jsonify
|
||||
res[json_key] = rec[field_name]
|
||||
if not res[json_key] and field_type in empty_value:
|
||||
res[json_key] = empty_value[field_type]
|
||||
result.append(res)
|
||||
return result
|
||||
|
|
|
@ -1,7 +1,3 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# © 2016 Akretion (http://www.akretion.com)
|
||||
# Sébastien BEAU <sebastien.beau@akretion.com>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from . import test_get_parser
|
||||
from . import test_ir_exports_line
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
# © <YEAR(S)> <AUTHOR(S)>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
from openerp.tests.common import TransactionCase
|
||||
from odoo.tests.common import TransactionCase
|
||||
|
||||
|
||||
class TestParser(TransactionCase):
|
||||
|
@ -57,17 +57,18 @@ class TestParser(TransactionCase):
|
|||
partner = self.env['res.partner'].create({
|
||||
'name': 'Akretion',
|
||||
'country_id': self.env.ref('base.fr').id,
|
||||
'lang': 'en_US', # default
|
||||
'category_id': [(0, 0, {'name': 'Inovator'})],
|
||||
'child_ids': [
|
||||
(0, 0, {
|
||||
'name': 'Sebatien Beau',
|
||||
'country_id': self.env.ref('base.fr').id
|
||||
})
|
||||
]
|
||||
],
|
||||
})
|
||||
expected_json = [{
|
||||
u'lang': False,
|
||||
u'comment': False,
|
||||
u'lang': u'en_US',
|
||||
u'comment': None,
|
||||
u'credit_limit': 0.0,
|
||||
u'name': u'Akretion',
|
||||
u'color': 0,
|
||||
|
@ -87,8 +88,9 @@ class TestParser(TransactionCase):
|
|||
},
|
||||
u'children': [],
|
||||
u'name': u'Sebatien Beau',
|
||||
u'email': False
|
||||
u'email': None
|
||||
}]
|
||||
}]
|
||||
json_partner = partner.jsonify(parser)
|
||||
|
||||
self.assertDictEqual(json_partner[0], expected_json[0])
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
# © 2017 ACSONE SA/NV
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
from openerp.exceptions import ValidationError
|
||||
from openerp.tests.common import TransactionCase
|
||||
from odoo.exceptions import ValidationError
|
||||
from odoo.tests.common import TransactionCase
|
||||
|
||||
|
||||
class TestIrExportsLine(TransactionCase):
|
||||
|
|
Loading…
Reference in New Issue