odoo-addon-base-view-inheritance-extension 16.0.1.1.0__py3-none-any.whl → 16.0.1.2.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:56c707d911c93aace4dc1593e4c0f7de5816cdf8883d581a9cfdf7d500b2de66
10
+ !! source digest: sha256:c4e765a621083d8bc3499b930418a7e00123f7228e93615dd74fe42b1b19af26
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": "16.0.1.1.0",
6
+ "version": "16.0.1.2.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:56c707d911c93aace4dc1593e4c0f7de5816cdf8883d581a9cfdf7d500b2de66
369
+ !! source digest: sha256:c4e765a621083d8bc3499b930418a7e00123f7228e93615dd74fe42b1b19af26
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/16.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-16-0/server-tools-16-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=16.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">
@@ -240,3 +240,70 @@ class TestBaseViewInheritanceExtension(TransactionCase):
240
240
  )
241
241
  with self.assertRaisesRegex(TypeError, "Attribute `domain` is not a dict"):
242
242
  self.env["ir.ui.view"].apply_inheritance_specs(source, specs)
243
+
244
+ def test_attrs_domain_add_join_operator_or(self):
245
+ """Test that we can add an OR domain to an existing attrs key."""
246
+ self._test_attrs_domain_add(join_operator="OR")
247
+
248
+ def test_attrs_domain_add_join_operator_and(self):
249
+ """Test that we can add an AND domain to an existing attrs key."""
250
+ self._test_attrs_domain_add(join_operator="AND")
251
+
252
+ def _test_attrs_domain_add(self, join_operator):
253
+ """Test that we can add a domain to an existing attrs domain key."""
254
+ source = etree.fromstring(
255
+ """
256
+ <form>
257
+ <field
258
+ name="ref"
259
+ attrs="{
260
+ 'invisible': [('state', '=', 'draft')],
261
+ 'required': [('state', '=', False)],
262
+ }"
263
+ />
264
+ </form>
265
+ """
266
+ )
267
+ specs = etree.fromstring(
268
+ """
269
+ <field name="ref" position="attributes">
270
+ <attribute name="attrs" operation="attrs_domain_add"
271
+ key="required" join_operator="%s">
272
+ [('state', '!=', 'draft')]
273
+ </attribute>
274
+ </field>
275
+ """
276
+ % (join_operator,)
277
+ )
278
+ res = self.env["ir.ui.view"].apply_inheritance_specs(source, specs)
279
+ self.assertEqual(
280
+ res.xpath('//field[@name="ref"]')[0].attrib["attrs"],
281
+ "{'invisible': [('state', '=', 'draft')], "
282
+ "'required': ['%s', ('state', '=', False), ('state', '!=', 'draft')]}"
283
+ % ("|" if join_operator == "OR" else "&"),
284
+ )
285
+
286
+ def test_attrs_domain_add_no_attrs(self):
287
+ """Test attrs_domain_add if there is no attrs: attrs is created."""
288
+ source = etree.fromstring(
289
+ """
290
+ <form>
291
+ <field name="ref"/>
292
+ </form>
293
+ """
294
+ )
295
+ specs = etree.fromstring(
296
+ """
297
+ <field name="ref" position="attributes">
298
+ <attribute name="attrs" operation="attrs_domain_add"
299
+ key="required" join_operator="OR">
300
+ [('state', '!=', 'draft')]
301
+ </attribute>
302
+ </field>
303
+ """
304
+ )
305
+ res = self.env["ir.ui.view"].apply_inheritance_specs(source, specs)
306
+ self.assertEqual(
307
+ res.xpath('//field[@name="ref"]')[0].attrib["attrs"],
308
+ "{'required': [('state', '!=', 'draft')]}",
309
+ )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: odoo-addon-base-view-inheritance-extension
3
- Version: 16.0.1.1.0
3
+ Version: 16.0.1.2.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:56c707d911c93aace4dc1593e4c0f7de5816cdf8883d581a9cfdf7d500b2de66
28
+ !! source digest: sha256:c4e765a621083d8bc3499b930418a7e00123f7228e93615dd74fe42b1b19af26
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=s4SK60OIEUpRCYl5j3Lrr9n4-4OCelf2iFyY3pC7Tv4,4059
1
+ odoo/addons/base_view_inheritance_extension/README.rst,sha256=okC1jdR_GYFuR9Tr8GvOiUefgK-aaC-UM77nhVUo1c0,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=Ca1864xMAWhDjammHW65ShRb_59XN3XIMHQMTzG5jO4,616
3
+ odoo/addons/base_view_inheritance_extension/__manifest__.py,sha256=fsbbfjJlG3SMKHd5YCZrpLSgLTPMBeKmvezriCvtlQQ,616
4
4
  odoo/addons/base_view_inheritance_extension/demo/ir_ui_view.xml,sha256=MHPVOGOM6XnNOTsq0ylz1B5r0sPJpRKHLan3K2mZ6sA,1200
5
5
  odoo/addons/base_view_inheritance_extension/i18n/base_view_inheritance_extension.pot,sha256=fs9N7L3F1tQYphJ4_BoE725z8zXA0ULVEIW4-qsQRTw,1031
6
6
  odoo/addons/base_view_inheritance_extension/i18n/ca.po,sha256=7ncEf2XfOWoOIlU7jysZhKYtd1KEF7oUHABgxJeEm9Q,1443
@@ -12,16 +12,16 @@ odoo/addons/base_view_inheritance_extension/i18n/it.po,sha256=342XK5tLJJavpToQ_T
12
12
  odoo/addons/base_view_inheritance_extension/i18n/sl.po,sha256=YjMtgl3N0bkOH8ngh_FMy7m-vxpNXt12WWiHYSmnFhY,1446
13
13
  odoo/addons/base_view_inheritance_extension/i18n/tr.po,sha256=S3G6M2N5DNbiTpctuhlJ14hfKa_BJ_v0Ju-4cHu7eQQ,1453
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=loy9GN6OOMvPfMm6NupcLrEbYf0hfEIrM69gJinkL_k,15475
21
+ odoo/addons/base_view_inheritance_extension/static/description/index.html,sha256=p0idwN891buQdlNvHDT9RGBMBk2tQ3UdTkI4Z5hKZSs,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=vl07csg7Q9ZNtlnOgnL3AiyNEo7OHpcSdhxULPZuV5k,8618
24
- odoo_addon_base_view_inheritance_extension-16.0.1.1.0.dist-info/METADATA,sha256=-2LxoLluRkOiFSDwsNRS_zutag5wmP_suaRYNK6Rc5E,4698
25
- odoo_addon_base_view_inheritance_extension-16.0.1.1.0.dist-info/WHEEL,sha256=Xo9-1PvkuimrydujYJAjF7pCkriuXBpUPEjma1nZyJ0,92
26
- odoo_addon_base_view_inheritance_extension-16.0.1.1.0.dist-info/top_level.txt,sha256=qBj40grFkGOfDZ2WDSw3y1RnDlgG0u8rP8pvGNdbz4w,5
27
- odoo_addon_base_view_inheritance_extension-16.0.1.1.0.dist-info/RECORD,,
23
+ odoo/addons/base_view_inheritance_extension/tests/test_base_view_inheritance_extension.py,sha256=4_43OP09f63VK-3B_iErrGqUj_UCcC4p6I3_YibhP_g,11114
24
+ odoo_addon_base_view_inheritance_extension-16.0.1.2.0.dist-info/METADATA,sha256=xJtJzP_G3jdF9n6o3J3uyWvQbNlf3aWmw36GZRShf58,5010
25
+ odoo_addon_base_view_inheritance_extension-16.0.1.2.0.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
26
+ odoo_addon_base_view_inheritance_extension-16.0.1.2.0.dist-info/top_level.txt,sha256=qBj40grFkGOfDZ2WDSw3y1RnDlgG0u8rP8pvGNdbz4w,5
27
+ odoo_addon_base_view_inheritance_extension-16.0.1.2.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.41.3)
2
+ Generator: bdist_wheel (0.42.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5