Browse Source

[IMP] base_jsonify: black, isort

13.0
laurent.corron 5 years ago
parent
commit
6660bc055b
  1. 13
      base_jsonify/__manifest__.py
  2. 11
      base_jsonify/models/ir_export.py
  3. 28
      base_jsonify/models/ir_exports_line.py
  4. 17
      base_jsonify/models/models.py
  5. 156
      base_jsonify/tests/test_get_parser.py
  6. 53
      base_jsonify/tests/test_ir_exports_line.py
  7. 2
      base_jsonify/views/ir_exports_view.xml

13
base_jsonify/__manifest__.py

@ -12,14 +12,7 @@
"author": "Akretion, Odoo Community Association (OCA)",
"license": "AGPL-3",
"installable": True,
"depends": [
"base",
],
"data": [
'views/ir_exports_view.xml',
],
"demo": [
'demo/export_demo.xml',
'demo/ir.exports.line.csv',
],
"depends": ["base"],
"data": ["views/ir_exports_view.xml"],
"demo": ["demo/export_demo.xml", "demo/ir.exports.line.csv"],
}

11
base_jsonify/models/ir_export.py

@ -3,6 +3,7 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from collections import OrderedDict
from odoo import api, models
@ -20,8 +21,8 @@ def update_dict(data, fields):
"""
field = fields[0]
if len(fields) == 1:
if field == '.id':
field = 'id'
if field == ".id":
field = "id"
data[field] = True
else:
if field not in data:
@ -44,7 +45,7 @@ def convert_dict(dict_parser):
class IrExport(models.Model):
_inherit = 'ir.exports'
_inherit = "ir.exports"
@api.multi
def get_json_parser(self):
@ -55,9 +56,9 @@ class IrExport(models.Model):
self.ensure_one()
dict_parser = OrderedDict()
for line in self.export_fields:
names = line.name.split('/')
names = line.name.split("/")
if line.alias:
names = line.alias.split('/')
names = line.alias.split("/")
update_dict(dict_parser, names)
return convert_dict(dict_parser)

28
base_jsonify/models/ir_exports_line.py

@ -1,33 +1,37 @@
# Copyright 2017 ACSONE SA/NV
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import _, api, fields, models
from odoo.exceptions import ValidationError
from odoo import api, fields, models, _
class IrExportsLine(models.Model):
_inherit = 'ir.exports.line'
_inherit = "ir.exports.line"
alias = fields.Char(
'Alias',
help='The complete path to the field where you can specify an '
'alias on the a step as field:alias'
"Alias",
help="The complete path to the field where you can specify an "
"alias on the a step as field:alias",
)
@api.constrains('alias', 'name')
@api.constrains("alias", "name")
def _check_alias(self):
for rec in self:
if not rec.alias:
continue
names = rec.name.split('/')
names_with_alias = rec.alias.split('/')
names = rec.name.split("/")
names_with_alias = rec.alias.split("/")
if len(names) != len(names_with_alias):
raise ValidationError(
_("Name and Alias must have the same hierarchy depth"))
_("Name and Alias must have the same hierarchy depth")
)
for name, name_with_alias in zip(names, names_with_alias):
field_name = name_with_alias.split(':')[0]
field_name = name_with_alias.split(":")[0]
if name != field_name:
raise ValidationError(
_("The alias must reference the same field as in "
"name '%s' not in '%s'") % (name, name_with_alias)
_(
"The alias must reference the same field as in "
"name '%s' not in '%s'"
)
% (name, name_with_alias)
)

17
base_jsonify/models/models.py

@ -10,7 +10,7 @@ from odoo.tools.translate import _
class Base(models.AbstractModel):
_inherit = 'base'
_inherit = "base"
@api.model
def __parse_field(self, parser_field):
@ -20,8 +20,8 @@ class Base(models.AbstractModel):
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(':')
if ":" in field_name:
field_name, json_key = field_name.split(":")
return field_name, json_key, subparser
@api.multi
@ -57,19 +57,18 @@ class Base(models.AbstractModel):
field_name, json_key, subparser = self.__parse_field(field)
field_type = rec._fields[field_name].type
if subparser:
if field_type in ('one2many', 'many2many'):
if field_type in ("one2many", "many2many"):
res[json_key] = rec[field_name].jsonify(subparser)
elif field_type in ('many2one', 'reference'):
elif field_type in ("many2one", "reference"):
if rec[field_name]:
res[json_key] =\
rec[field_name].jsonify(subparser)[0]
res[json_key] = rec[field_name].jsonify(subparser)[0]
else:
res[json_key] = None
else:
raise UserError(_('Wrong parser configuration'))
raise UserError(_("Wrong parser configuration"))
else:
value = rec[field_name]
if value is False and field_type != 'boolean':
if value is False and field_type != "boolean":
value = None
res[json_key] = value
result.append(res)

156
base_jsonify/tests/test_get_parser.py

@ -5,93 +5,97 @@ from odoo.tests.common import TransactionCase
class TestParser(TransactionCase):
def test_getting_parser(self):
expected_parser = [
'name',
'active',
'credit_limit',
'color',
('category_id', ['name']),
('country_id', ['name', 'code']),
('child_ids', [
'name',
'id',
'email',
('country_id', ['name', 'code']),
('child_ids', ['name']),
]),
'lang',
'comment'
"name",
"active",
"credit_limit",
"color",
("category_id", ["name"]),
("country_id", ["name", "code"]),
(
"child_ids",
[
"name",
"id",
"email",
("country_id", ["name", "code"]),
("child_ids", ["name"]),
],
),
"lang",
"comment",
]
exporter = self.env.ref('base_jsonify.ir_exp_partner')
exporter = self.env.ref("base_jsonify.ir_exp_partner")
parser = exporter.get_json_parser()
self.assertListEqual(parser, expected_parser)
# modify an ir.exports_line to put an alias for a field
self.env.ref('base_jsonify.category_id_name').write({
'alias': 'category_id:category/name'
})
expected_parser[4] = ('category_id:category', ['name'])
self.env.ref("base_jsonify.category_id_name").write(
{"alias": "category_id:category/name"}
)
expected_parser[4] = ("category_id:category", ["name"])
parser = exporter.get_json_parser()
self.assertEqual(parser, expected_parser)
def test_json_export(self):
parser = [
'lang',
'comment',
'credit_limit',
'name',
'color',
('child_ids:children', [
('child_ids:children', ['name']),
'email',
('country_id:country', ['code', 'name']),
'name',
'id',
]),
('country_id:country', ['code', 'name']),
'active',
('category_id', ['name'])
"lang",
"comment",
"credit_limit",
"name",
"color",
(
"child_ids:children",
[
("child_ids:children", ["name"]),
"email",
("country_id:country", ["code", "name"]),
"name",
"id",
],
),
("country_id:country", ["code", "name"]),
"active",
("category_id", ["name"]),
]
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
})
],
})
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 = {
'lang': 'en_US',
'comment': None,
'credit_limit': 0.0,
'name': 'Akretion',
'color': 0,
'country': {
'code': 'FR',
'name': 'France'
},
'active': True,
'category_id': [
{'name': 'Inovator'}
"lang": "en_US",
"comment": None,
"credit_limit": 0.0,
"name": "Akretion",
"color": 0,
"country": {"code": "FR", "name": "France"},
"active": True,
"category_id": [{"name": "Inovator"}],
"children": [
{
"id": partner.child_ids.id,
"country": {"code": "FR", "name": "France"},
"children": [],
"name": "Sebatien Beau",
"email": None,
}
],
'children': [{
'id': partner.child_ids.id,
'country': {
'code': 'FR',
'name': 'France'
},
'children': [],
'name': 'Sebatien Beau',
'email': None
}]
}
json_partner = partner.jsonify(parser)
@ -104,11 +108,9 @@ class TestParser(TransactionCase):
# Check that only boolean fields have boolean values into json
# By default if a field is not set into Odoo, the value is always False
# This value is not the expected one into the json
partner.write({'child_ids': [(6, 0, [])],
'active': False,
'lang': False})
partner.write({"child_ids": [(6, 0, [])], "active": False, "lang": False})
json_partner = partner.jsonify(parser)
expected_json['active'] = False
expected_json['lang'] = None
expected_json['children'] = []
expected_json["active"] = False
expected_json["lang"] = None
expected_json["children"] = []
self.assertDictEqual(json_partner[0], expected_json)

53
base_jsonify/tests/test_ir_exports_line.py

@ -6,39 +6,46 @@ from odoo.tests.common import TransactionCase
class TestIrExportsLine(TransactionCase):
def setUp(self):
super(TestIrExportsLine, self).setUp()
self.ir_export = self.env.ref('base_jsonify.ir_exp_partner')
self.ir_export = self.env.ref("base_jsonify.ir_exp_partner")
def test_alias_contrains(self):
ir_export_lines_model = self.env['ir.exports.line']
ir_export_lines_model = self.env["ir.exports.line"]
with self.assertRaises(ValidationError):
# The field into the name must be also into the alias
ir_export_lines_model.create({
'export_id': self.ir_export.id,
'name': 'name',
'alias': 'toto:my_alias'
})
ir_export_lines_model.create(
{
"export_id": self.ir_export.id,
"name": "name",
"alias": "toto:my_alias",
}
)
with self.assertRaises(ValidationError):
# The hierarchy into the alias must be the same as the one into
# the name
ir_export_lines_model.create({
'export_id': self.ir_export.id,
'name': 'child_ids/child_ids/name',
'alias': 'child_ids:children/name'
})
ir_export_lines_model.create(
{
"export_id": self.ir_export.id,
"name": "child_ids/child_ids/name",
"alias": "child_ids:children/name",
}
)
with self.assertRaises(ValidationError):
# The hierarchy into the alias must be the same as the one into
# the name and must contains the same fields as into the name
ir_export_lines_model.create({
'export_id': self.ir_export.id,
'name': 'child_ids/child_ids/name',
'alias': 'child_ids:children/category_id:category/name'
})
line = ir_export_lines_model.create({
'export_id': self.ir_export.id,
'name': 'child_ids/child_ids/name',
'alias': 'child_ids:children/child_ids:children/name'
})
ir_export_lines_model.create(
{
"export_id": self.ir_export.id,
"name": "child_ids/child_ids/name",
"alias": "child_ids:children/category_id:category/name",
}
)
line = ir_export_lines_model.create(
{
"export_id": self.ir_export.id,
"name": "child_ids/child_ids/name",
"alias": "child_ids:children/child_ids:children/name",
}
)
self.assertTrue(line)

2
base_jsonify/views/ir_exports_view.xml

@ -32,7 +32,7 @@
<field name="view_mode">tree,form</field>
</record>
<menuitem id="ui_exports" action="act_ui_exports_view"
<menuitem id="ui_exports" action="act_ui_exports_view"
parent="base.next_id_2"/>
</odoo>
Loading…
Cancel
Save