odoo-addon-base-view-inheritance-extension 15.0.2.0.2__py3-none-any.whl → 15.0.2.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -7,7 +7,7 @@ Extended view inheritance
7
7
  !! This file is generated by oca-gen-addon-readme !!
8
8
  !! changes will be overwritten. !!
9
9
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
10
- !! source digest: sha256:1ffe3b113ece32b4cec2c3a10909f1722c997a481ab997782f614071696be8ae
10
+ !! source digest: sha256:451c550ec60d392a9f2695aafd54df29237b459c7ce416407b224483fa3c3ebd
11
11
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
12
12
 
13
13
  .. |badge1| image:: https://img.shields.io/badge/maturity-Mature-brightgreen.png
@@ -73,6 +73,15 @@ to refer to some xmlid, say ``%(xmlid)s``.
73
73
  $domain_to_add
74
74
  </attribute>
75
75
 
76
+ **Add domain with AND/OR join operator (AND if missed) for key in attrs**
77
+
78
+ .. code-block:: xml
79
+
80
+ <attribute name="$attribute" operation="attrs_domain_add"
81
+ key="$attrs_key" join_operator="OR">
82
+ $domain_to_add_to_attrs_key
83
+ </attribute>
84
+
76
85
  Known issues / Roadmap
77
86
  ======================
78
87
 
@@ -107,6 +116,7 @@ Contributors
107
116
  * Carlos Dauden
108
117
 
109
118
  * Iván Todorovich <ivan.todorovich@camptocamp.com>
119
+ * Carlos Serra-Toro <carlos.serra@braintec.com>
110
120
 
111
121
  Maintainers
112
122
  ~~~~~~~~~~~
@@ -3,7 +3,7 @@
3
3
  # License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).
4
4
  {
5
5
  "name": "Extended view inheritance",
6
- "version": "15.0.2.0.2",
6
+ "version": "15.0.2.1.0",
7
7
  "development_status": "Mature",
8
8
  "author": "Therp BV,Odoo Community Association (OCA)",
9
9
  "license": "LGPL-3",
@@ -189,6 +189,42 @@ class IrUiView(models.Model):
189
189
  node.attrib[attribute_name] = new_value
190
190
  return source
191
191
 
192
+ @api.model
193
+ def inheritance_handler_attributes_attrs_domain_add(self, source, specs):
194
+ """Implement attrs_domain_add
195
+
196
+ <attribute name="$attribute" operation="attrs_domain_add"
197
+ key="$attrs_key" join_operator="OR">
198
+ $domain_to_add_to_attrs_key
199
+ </attribute>
200
+ """
201
+ node = self.locate_node(source, specs)
202
+ for attribute_node in specs:
203
+ attribute_name = attribute_node.get("name")
204
+ key = attribute_node.get("key")
205
+ join_operator = attribute_node.get("join_operator") or "AND"
206
+ old_value = node.get(attribute_name) or ""
207
+ if old_value:
208
+ old_value = ast.literal_eval(
209
+ self.var2str_domain_text(old_value.strip())
210
+ )
211
+ old_domain_attrs = old_value.get(key)
212
+ new_domain = ast.literal_eval(
213
+ self.var2str_domain_text(attribute_node.text.strip())
214
+ )
215
+ if join_operator == "OR":
216
+ new_value = expression.OR([old_domain_attrs, new_domain])
217
+ else:
218
+ new_value = expression.AND([old_domain_attrs, new_domain])
219
+ old_value[key] = new_value
220
+ new_value = self.str2var_domain_text(str(old_value))
221
+ else:
222
+ # We must ensure that the domain definition has not line breaks because
223
+ # in update mode the domain cause an invalid syntax error
224
+ new_value = "{'%s': %s}" % (key, attribute_node.text.strip())
225
+ node.attrib[attribute_name] = new_value
226
+ return source
227
+
192
228
  @api.model
193
229
  def var2str_domain_text(self, domain_str):
194
230
  """Replaces var names with str names to allow eval without defined vars"""
@@ -6,3 +6,4 @@
6
6
  * Carlos Dauden
7
7
 
8
8
  * Iván Todorovich <ivan.todorovich@camptocamp.com>
9
+ * Carlos Serra-Toro <carlos.serra@braintec.com>
@@ -31,3 +31,12 @@ to refer to some xmlid, say ``%(xmlid)s``.
31
31
  condition="$field_condition" join_operator="OR">
32
32
  $domain_to_add
33
33
  </attribute>
34
+
35
+ **Add domain with AND/OR join operator (AND if missed) for key in attrs**
36
+
37
+ .. code-block:: xml
38
+
39
+ <attribute name="$attribute" operation="attrs_domain_add"
40
+ key="$attrs_key" join_operator="OR">
41
+ $domain_to_add_to_attrs_key
42
+ </attribute>
@@ -1,4 +1,3 @@
1
- <?xml version="1.0" encoding="utf-8"?>
2
1
  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
2
  <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4
3
  <head>
@@ -367,7 +366,7 @@ ul.auto-toc {
367
366
  !! This file is generated by oca-gen-addon-readme !!
368
367
  !! changes will be overwritten. !!
369
368
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
370
- !! source digest: sha256:1ffe3b113ece32b4cec2c3a10909f1722c997a481ab997782f614071696be8ae
369
+ !! source digest: sha256:451c550ec60d392a9f2695aafd54df29237b459c7ce416407b224483fa3c3ebd
371
370
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
372
371
  <p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Mature" src="https://img.shields.io/badge/maturity-Mature-brightgreen.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/lgpl-3.0-standalone.html"><img alt="License: LGPL-3" src="https://img.shields.io/badge/licence-LGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/server-tools/tree/15.0/base_view_inheritance_extension"><img alt="OCA/server-tools" src="https://img.shields.io/badge/github-OCA%2Fserver--tools-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/server-tools-15-0/server-tools-15-0-base_view_inheritance_extension"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/server-tools&amp;target_branch=15.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
373
372
  <p>This module was written to make it simple to add custom operators for view
@@ -413,6 +412,13 @@ to refer to some xmlid, say <tt class="docutils literal">%(xmlid)s</tt>.</p>
413
412
  </span>$domain_to_add<span class="w">
414
413
  </span><span class="nt">&lt;/attribute&gt;</span>
415
414
  </pre>
415
+ <p><strong>Add domain with AND/OR join operator (AND if missed) for key in attrs</strong></p>
416
+ <pre class="code xml literal-block">
417
+ <span class="nt">&lt;attribute</span><span class="w"> </span><span class="na">name=</span><span class="s">&quot;$attribute&quot;</span><span class="w"> </span><span class="na">operation=</span><span class="s">&quot;attrs_domain_add&quot;</span><span class="w">
418
+ </span><span class="na">key=</span><span class="s">&quot;$attrs_key&quot;</span><span class="w"> </span><span class="na">join_operator=</span><span class="s">&quot;OR&quot;</span><span class="nt">&gt;</span><span class="w">
419
+ </span>$domain_to_add_to_attrs_key<span class="w">
420
+ </span><span class="nt">&lt;/attribute&gt;</span>
421
+ </pre>
416
422
  </div>
417
423
  <div class="section" id="known-issues-roadmap">
418
424
  <h1><a class="toc-backref" href="#toc-entry-2">Known issues / Roadmap</a></h1>
@@ -447,6 +453,7 @@ If you spotted it first, help us to smash it by providing a detailed and welcome
447
453
  </ul>
448
454
  </li>
449
455
  <li>Iván Todorovich &lt;<a class="reference external" href="mailto:ivan.todorovich&#64;camptocamp.com">ivan.todorovich&#64;camptocamp.com</a>&gt;</li>
456
+ <li>Carlos Serra-Toro &lt;<a class="reference external" href="mailto:carlos.serra&#64;braintec.com">carlos.serra&#64;braintec.com</a>&gt;</li>
450
457
  </ul>
451
458
  </div>
452
459
  <div class="section" id="maintainers">
@@ -250,3 +250,70 @@ class TestBaseViewInheritanceExtension(TransactionCase):
250
250
  )
251
251
  with self.assertRaisesRegex(TypeError, "Attribute `domain` is not a dict"):
252
252
  self.env["ir.ui.view"].apply_inheritance_specs(source, specs)
253
+
254
+ def test_attrs_domain_add_join_operator_or(self):
255
+ """Test that we can add an OR domain to an existing attrs key."""
256
+ self._test_attrs_domain_add(join_operator="OR")
257
+
258
+ def test_attrs_domain_add_join_operator_and(self):
259
+ """Test that we can add an AND domain to an existing attrs key."""
260
+ self._test_attrs_domain_add(join_operator="AND")
261
+
262
+ def _test_attrs_domain_add(self, join_operator):
263
+ """Test that we can add a domain to an existing attrs domain key."""
264
+ source = etree.fromstring(
265
+ """
266
+ <form>
267
+ <field
268
+ name="ref"
269
+ attrs="{
270
+ 'invisible': [('state', '=', 'draft')],
271
+ 'required': [('state', '=', False)],
272
+ }"
273
+ />
274
+ </form>
275
+ """
276
+ )
277
+ specs = etree.fromstring(
278
+ """
279
+ <field name="ref" position="attributes">
280
+ <attribute name="attrs" operation="attrs_domain_add"
281
+ key="required" join_operator="%s">
282
+ [('state', '!=', 'draft')]
283
+ </attribute>
284
+ </field>
285
+ """
286
+ % (join_operator,)
287
+ )
288
+ res = self.env["ir.ui.view"].apply_inheritance_specs(source, specs)
289
+ self.assertEqual(
290
+ res.xpath('//field[@name="ref"]')[0].attrib["attrs"],
291
+ "{'invisible': [('state', '=', 'draft')], "
292
+ "'required': ['%s', ('state', '=', False), ('state', '!=', 'draft')]}"
293
+ % ("|" if join_operator == "OR" else "&"),
294
+ )
295
+
296
+ def test_attrs_domain_add_no_attrs(self):
297
+ """Test attrs_domain_add if there is no attrs: attrs is created."""
298
+ source = etree.fromstring(
299
+ """
300
+ <form>
301
+ <field name="ref"/>
302
+ </form>
303
+ """
304
+ )
305
+ specs = etree.fromstring(
306
+ """
307
+ <field name="ref" position="attributes">
308
+ <attribute name="attrs" operation="attrs_domain_add"
309
+ key="required" join_operator="OR">
310
+ [('state', '!=', 'draft')]
311
+ </attribute>
312
+ </field>
313
+ """
314
+ )
315
+ res = self.env["ir.ui.view"].apply_inheritance_specs(source, specs)
316
+ self.assertEqual(
317
+ res.xpath('//field[@name="ref"]')[0].attrib["attrs"],
318
+ "{'required': [('state', '!=', 'draft')]}",
319
+ )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: odoo-addon-base-view-inheritance-extension
3
- Version: 15.0.2.0.2
3
+ Version: 15.0.2.1.0
4
4
  Summary: Adds more operators for view inheritance
5
5
  Home-page: https://github.com/OCA/server-tools
6
6
  Author: Therp BV,Odoo Community Association (OCA)
@@ -25,7 +25,7 @@ Extended view inheritance
25
25
  !! This file is generated by oca-gen-addon-readme !!
26
26
  !! changes will be overwritten. !!
27
27
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
28
- !! source digest: sha256:1ffe3b113ece32b4cec2c3a10909f1722c997a481ab997782f614071696be8ae
28
+ !! source digest: sha256:451c550ec60d392a9f2695aafd54df29237b459c7ce416407b224483fa3c3ebd
29
29
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
30
30
 
31
31
  .. |badge1| image:: https://img.shields.io/badge/maturity-Mature-brightgreen.png
@@ -91,6 +91,15 @@ to refer to some xmlid, say ``%(xmlid)s``.
91
91
  $domain_to_add
92
92
  </attribute>
93
93
 
94
+ **Add domain with AND/OR join operator (AND if missed) for key in attrs**
95
+
96
+ .. code-block:: xml
97
+
98
+ <attribute name="$attribute" operation="attrs_domain_add"
99
+ key="$attrs_key" join_operator="OR">
100
+ $domain_to_add_to_attrs_key
101
+ </attribute>
102
+
94
103
  Known issues / Roadmap
95
104
  ======================
96
105
 
@@ -125,6 +134,7 @@ Contributors
125
134
  * Carlos Dauden
126
135
 
127
136
  * Iván Todorovich <ivan.todorovich@camptocamp.com>
137
+ * Carlos Serra-Toro <carlos.serra@braintec.com>
128
138
 
129
139
  Maintainers
130
140
  ~~~~~~~~~~~
@@ -1,6 +1,6 @@
1
- odoo/addons/base_view_inheritance_extension/README.rst,sha256=zWfY9ssJIxvV7YM8KQiWhD55amSbyVY-TX-LHsCf3xs,4059
1
+ odoo/addons/base_view_inheritance_extension/README.rst,sha256=HAqMHl6_fGR2dR4jhzEstrIiZfhC8RT5GHZJvdLApZM,4371
2
2
  odoo/addons/base_view_inheritance_extension/__init__.py,sha256=X9EJGOE2GtZbS0G82PtSXmWSZ_R8jEM0rlJTDliQjp4,21
3
- odoo/addons/base_view_inheritance_extension/__manifest__.py,sha256=nALDvGYehk5ZXD3E6LA13DgWWffFwnR_jZW4RW82hfI,616
3
+ odoo/addons/base_view_inheritance_extension/__manifest__.py,sha256=Z56NJXtlxfLKWzbRakbvWTmitHbftCgyjQp2rns79cY,616
4
4
  odoo/addons/base_view_inheritance_extension/demo/ir_ui_view.xml,sha256=UMFWbOJOnWSvpy9DdFNyFKwFf6YIlD6hnguHsbTA1n8,1219
5
5
  odoo/addons/base_view_inheritance_extension/i18n/base_view_inheritance_extension.pot,sha256=knOWHe2nMwnZcY2zZiRUmMpFSvuuwo9DnJYtFhxKZs8,850
6
6
  odoo/addons/base_view_inheritance_extension/i18n/ca.po,sha256=xFKkpPiT_RVTTR0H7ZzB2PW6M7aDhRzYhdiCoiRq6mY,1262
@@ -12,16 +12,16 @@ odoo/addons/base_view_inheritance_extension/i18n/it.po,sha256=0gDsGhu0G-QUmhB_pH
12
12
  odoo/addons/base_view_inheritance_extension/i18n/sl.po,sha256=EY6zKcR8nRRsfpjrKK2_CVqFXnUVPjSBOAkI4-voRYw,1265
13
13
  odoo/addons/base_view_inheritance_extension/i18n/tr.po,sha256=xaYd2V2mHhQIeLqUpsE4VL3mHbT0DQVNbT9_jCXLc0I,1272
14
14
  odoo/addons/base_view_inheritance_extension/models/__init__.py,sha256=SjKfc8ocbCImvP5DpGQbS0hWmQRYPjtzJdyio6TPII0,25
15
- odoo/addons/base_view_inheritance_extension/models/ir_ui_view.py,sha256=MGk_4Y-jJNky5SlwklDNRnJyztnng0EPpMffGXcv048,8191
16
- odoo/addons/base_view_inheritance_extension/readme/CONTRIBUTORS.rst,sha256=c9RfnEkKnqbGzA9LVlOz37yIL6hsprsap_73E5_kqyQ,204
15
+ odoo/addons/base_view_inheritance_extension/models/ir_ui_view.py,sha256=xhYckU6Jc1TT8WdlkMFKmefZ5dGsuxJ12vzaX1ZwTJA,9843
16
+ odoo/addons/base_view_inheritance_extension/readme/CONTRIBUTORS.rst,sha256=er1wsP0tAgTprk5TY_A9qnHgOIfb9-v9CgD6ooWGifg,252
17
17
  odoo/addons/base_view_inheritance_extension/readme/DESCRIPTION.rst,sha256=pamURJDYfLUcZtHl0ZvXTtzKO1LvHlhhYIND05AMzbk,88
18
18
  odoo/addons/base_view_inheritance_extension/readme/ROADMAP.rst,sha256=Cz02ovrYCAgtqjY3nTSnikVgWaKPcWLP-bsuJxCTlKw,56
19
- odoo/addons/base_view_inheritance_extension/readme/USAGE.rst,sha256=Hbr5TnkYHTP2Ek3PnlL1h7fL11hOX7tnoaOSObfh3Y8,835
19
+ odoo/addons/base_view_inheritance_extension/readme/USAGE.rst,sha256=qVIT8mE5xZVenXbqbWFEqx9bwbF4w-2jgEzdBYKSkAg,1099
20
20
  odoo/addons/base_view_inheritance_extension/static/description/icon.png,sha256=6xBPJauaFOF0KDHfHgQopSc28kKvxMaeoQFQWZtfZDo,9455
21
- odoo/addons/base_view_inheritance_extension/static/description/index.html,sha256=6pmhWHvKHsFUGJskTZYFBgNxR91Eke3ThU1BW0R-MOs,15475
21
+ odoo/addons/base_view_inheritance_extension/static/description/index.html,sha256=XBsAH9k6shRbjzVpcr9nk8xjsvSEjDPTXFdnv45X31Y,16318
22
22
  odoo/addons/base_view_inheritance_extension/tests/__init__.py,sha256=kTcGsgnWhpM7vII3sEdNX5XVxDHHqRc5KdrxInG6GSw,51
23
- odoo/addons/base_view_inheritance_extension/tests/test_base_view_inheritance_extension.py,sha256=ZvEvRwqUoSVMb2cyxNtsLImFWilMBQShN1CGDskyF1o,9099
24
- odoo_addon_base_view_inheritance_extension-15.0.2.0.2.dist-info/METADATA,sha256=hC-VswBdfUG8_u31lLm1uJFq665E6NABEGV0JIgKXV8,4697
25
- odoo_addon_base_view_inheritance_extension-15.0.2.0.2.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
26
- odoo_addon_base_view_inheritance_extension-15.0.2.0.2.dist-info/top_level.txt,sha256=qBj40grFkGOfDZ2WDSw3y1RnDlgG0u8rP8pvGNdbz4w,5
27
- odoo_addon_base_view_inheritance_extension-15.0.2.0.2.dist-info/RECORD,,
23
+ odoo/addons/base_view_inheritance_extension/tests/test_base_view_inheritance_extension.py,sha256=GyP7z63l7Y5EbvAlYcCEpeKMe4PEFm22VFaHRH9_uG8,11595
24
+ odoo_addon_base_view_inheritance_extension-15.0.2.1.0.dist-info/METADATA,sha256=L2vnu-7d_iIHTO4vECIC4Efkq8G7PIFVnnszF94qgg0,5009
25
+ odoo_addon_base_view_inheritance_extension-15.0.2.1.0.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
26
+ odoo_addon_base_view_inheritance_extension-15.0.2.1.0.dist-info/top_level.txt,sha256=qBj40grFkGOfDZ2WDSw3y1RnDlgG0u8rP8pvGNdbz4w,5
27
+ odoo_addon_base_view_inheritance_extension-15.0.2.1.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.41.2)
2
+ Generator: bdist_wheel (0.43.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5