Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package trytond for openSUSE:Factory checked 
in at 2024-12-02 16:59:33
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/trytond (Old)
 and      /work/SRC/openSUSE:Factory/.trytond.new.28523 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "trytond"

Mon Dec  2 16:59:33 2024 rev:100 rq:1227715 version:6.0.55

Changes:
--------
--- /work/SRC/openSUSE:Factory/trytond/trytond.changes  2024-10-30 
17:39:13.416289332 +0100
+++ /work/SRC/openSUSE:Factory/.trytond.new.28523/trytond.changes       
2024-12-02 17:00:04.723581655 +0100
@@ -1,0 +2,5 @@
+Mon Dec  2 10:03:09 UTC 2024 - Axel Braun <axel.br...@gmx.de>
+
+- Version 6.0.55 - Bugfix Release
+
+-------------------------------------------------------------------

Old:
----
  trytond-6.0.53.tar.gz

New:
----
  trytond-6.0.55.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ trytond.spec ++++++
--- /var/tmp/diff_new_pack.mGONRo/_old  2024-12-02 17:00:05.411610764 +0100
+++ /var/tmp/diff_new_pack.mGONRo/_new  2024-12-02 17:00:05.415610933 +0100
@@ -30,7 +30,7 @@
 %endif
 
 Name:           trytond
-Version:        %{majorver}.53
+Version:        %{majorver}.55
 Release:        0
 Summary:        An Enterprise Resource Planning (ERP) system
 License:        GPL-3.0-or-later

++++++ trytond-6.0.53.tar.gz -> trytond-6.0.55.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/trytond-6.0.53/CHANGELOG new/trytond-6.0.55/CHANGELOG
--- old/trytond-6.0.53/CHANGELOG        2024-10-05 17:05:41.000000000 +0200
+++ new/trytond-6.0.55/CHANGELOG        2024-12-01 19:44:22.000000000 +0100
@@ -1,4 +1,14 @@
 
+Version 6.0.55 - 2024-12-01
+---------------------------
+* Bug fixes (see mercurial logs for details)
+
+
+Version 6.0.54 - 2024-10-18
+---------------------------
+* Bug fixes (see mercurial logs for details)
+
+
 Version 6.0.53 - 2024-10-05
 ---------------------------
 * Bug fixes (see mercurial logs for details)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/trytond-6.0.53/PKG-INFO new/trytond-6.0.55/PKG-INFO
--- old/trytond-6.0.53/PKG-INFO 2024-10-05 17:05:44.383770500 +0200
+++ new/trytond-6.0.55/PKG-INFO 2024-12-01 19:44:25.633739000 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: trytond
-Version: 6.0.53
+Version: 6.0.55
 Summary: Tryton server
 Home-page: http://www.tryton.org/
 Download-URL: http://downloads.tryton.org/6.0/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/trytond-6.0.53/doc/topics/domain.rst 
new/trytond-6.0.55/doc/topics/domain.rst
--- old/trytond-6.0.53/doc/topics/domain.rst    2023-05-17 23:03:30.000000000 
+0200
+++ new/trytond-6.0.55/doc/topics/domain.rst    2024-10-14 23:57:18.000000000 
+0200
@@ -37,6 +37,10 @@
 
     The number of *dots* in a clause is not limited.
 
+    .. note::
+      Negative operators match records for which any of the field before the
+      last dot is empty.
+
 .. warning::
     For :class:`trytond.model.fields.Reference`, an extra ending clause is
     needed to define the target model to join, for example::
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/trytond-6.0.53/doc/topics/setup_database.rst 
new/trytond-6.0.55/doc/topics/setup_database.rst
--- old/trytond-6.0.53/doc/topics/setup_database.rst    2023-05-17 
23:03:30.000000000 +0200
+++ new/trytond-6.0.55/doc/topics/setup_database.rst    2024-11-30 
19:06:46.000000000 +0100
@@ -36,7 +36,7 @@
     Prior to upgrade see if there is no manual action to take on the `migration
     topic`_.
 
-.. _`migration topic`: https://discuss.tryton.org/c/migration
+.. _`migration topic`: https://docs.tryton.org/migration
 
 To activate a new language on an existing database, the command line is::
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/trytond-6.0.53/trytond/__init__.py 
new/trytond-6.0.55/trytond/__init__.py
--- old/trytond-6.0.53/trytond/__init__.py      2024-09-16 20:12:34.000000000 
+0200
+++ new/trytond-6.0.55/trytond/__init__.py      2024-10-18 12:25:07.000000000 
+0200
@@ -7,7 +7,7 @@
 
 from lxml import etree, objectify
 
-__version__ = "6.0.53"
+__version__ = "6.0.55"
 
 os.environ['TZ'] = 'UTC'
 if hasattr(time, 'tzset'):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/trytond-6.0.53/trytond/ir/action.py 
new/trytond-6.0.55/trytond/ir/action.py
--- old/trytond-6.0.53/trytond/ir/action.py     2024-04-26 17:44:16.000000000 
+0200
+++ new/trytond-6.0.55/trytond/ir/action.py     2024-11-24 19:52:11.000000000 
+0100
@@ -865,7 +865,7 @@
                                 action=action.rec_name))
 
     def get_views(self, name):
-        return [(view.view.id, view.view.type)
+        return [(view.view.id, view.view.rng_type)
             for view in self.act_window_views]
 
     def get_domains(self, name):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/trytond-6.0.53/trytond/ir/sequence.py 
new/trytond-6.0.55/trytond/ir/sequence.py
--- old/trytond-6.0.53/trytond/ir/sequence.py   2023-05-17 23:03:30.000000000 
+0200
+++ new/trytond-6.0.55/trytond/ir/sequence.py   2024-10-14 23:57:17.000000000 
+0200
@@ -166,8 +166,10 @@
 
         transaction = Transaction()
         if sql_sequence and not self._strict:
-            return transaction.database.sequence_next_number(
-                transaction.connection, self._sql_sequence_name)
+            if transaction.database.sequence_exist(
+                    transaction.connection, self._sql_sequence_name):
+                return transaction.database.sequence_next_number(
+                    transaction.connection, self._sql_sequence_name)
         else:
             return self.number_next_internal
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/trytond-6.0.53/trytond/model/fields/many2one.py 
new/trytond-6.0.55/trytond/model/fields/many2one.py
--- old/trytond-6.0.53/trytond/model/fields/many2one.py 2023-06-10 
11:49:48.000000000 +0200
+++ new/trytond-6.0.55/trytond/model/fields/many2one.py 2024-10-14 
23:57:18.000000000 +0200
@@ -1,6 +1,6 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
-from sql import Literal, Column, With
+from sql import Column, Literal, Null, With
 from sql.aggregate import Max
 from sql.conditionals import Coalesce
 from sql.operators import Or
@@ -227,7 +227,7 @@
             target_domain.append(('active', 'in', [True, False]))
         if self.target_search == 'subquery':
             query = Target.search(target_domain, order=[], query=True)
-            return column.in_(query)
+            expression = column.in_(query)
         else:
             target_tables = self._get_target_tables(tables)
             target_table, _ = target_tables[None]
@@ -236,7 +236,9 @@
                 target_domain = [target_domain, rule_domain]
             _, expression = Target.search_domain(
                 target_domain, tables=target_tables)
-            return expression
+        if operator.startswith('not') or operator == '!=':
+            expression |= column == Null
+        return expression
 
     def convert_order(self, name, tables, Model):
         fname, _, oexpr = name.partition('.')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/trytond-6.0.53/trytond/model/fields/reference.py 
new/trytond-6.0.55/trytond/model/fields/reference.py
--- old/trytond-6.0.53/trytond/model/fields/reference.py        2023-10-18 
16:20:58.000000000 +0200
+++ new/trytond-6.0.55/trytond/model/fields/reference.py        2024-10-14 
23:57:18.000000000 +0200
@@ -2,8 +2,8 @@
 # this repository contains the full copyright notices and license terms.
 import warnings
 
-from sql import Cast, Literal, Query, Expression
-from sql.functions import Substring, Position
+from sql import Cast, Expression, Literal, Null, Query
+from sql.functions import Position, Substring
 
 from trytond.pool import Pool
 from trytond.pyson import PYSONEncoder
@@ -185,10 +185,13 @@
         if 'active' in Target._fields:
             target_domain.append(('active', 'in', [True, False]))
         query = Target.search(target_domain, order=[], query=True)
-        return (Cast(Substring(column,
+        expression = (Cast(Substring(column,
                     Position(',', column) + Literal(1)),
                 Model.id.sql_type().base).in_(query)
             & column.ilike(target + ',%'))
+        if operator.startswith('not') or operator == '!=':
+            expression |= column == Null
+        return expression
 
     def definition(self, model, language):
         encoder = PYSONEncoder()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/trytond-6.0.53/trytond/model/modelsql.py 
new/trytond-6.0.55/trytond/model/modelsql.py
--- old/trytond-6.0.53/trytond/model/modelsql.py        2024-08-21 
19:29:59.000000000 +0200
+++ new/trytond-6.0.55/trytond/model/modelsql.py        2024-10-14 
23:57:17.000000000 +0200
@@ -134,7 +134,13 @@
         return self._where
 
     def __str__(self):
-        exclude = ', '.join('%s WITH %s' % (column, operator._operator)
+        def format_(element):
+            if isinstance(element, Column):
+                return element
+            else:
+                return '(%s)' % element
+        exclude = ', '.join(
+            '%s WITH %s' % (format_(column), operator._operator)
             for column, operator in self.excludes)
         where = ''
         if self.where:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/trytond-6.0.53/trytond/model/modelstorage.py 
new/trytond-6.0.55/trytond/model/modelstorage.py
--- old/trytond-6.0.53/trytond/model/modelstorage.py    2024-06-10 
19:33:02.000000000 +0200
+++ new/trytond-6.0.55/trytond/model/modelstorage.py    2024-10-14 
23:57:17.000000000 +0200
@@ -1434,9 +1434,12 @@
                 vals[field] = []
                 for defaults2 in defaults[field]:
                     vals2 = obj._clean_defaults(defaults2)
-                    vals[field].append(('create', [vals2]))
+                    if vals2:
+                        vals[field].append(('create', [vals2]))
             elif fld_def._type in ('many2many',):
-                vals[field] = [('add', defaults[field])]
+                vals2 = defaults[field]
+                if vals2:
+                    vals[field] = [('add', vals2)]
             elif fld_def._type in ('boolean',):
                 vals[field] = bool(defaults[field])
             else:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/trytond-6.0.53/trytond/model/tree.py 
new/trytond-6.0.55/trytond/model/tree.py
--- old/trytond-6.0.53/trytond/model/tree.py    2023-05-17 23:03:30.000000000 
+0200
+++ new/trytond-6.0.55/trytond/model/tree.py    2024-10-14 23:57:18.000000000 
+0200
@@ -21,8 +21,10 @@
             def __setup__(cls):
                 super(TreeMixin, cls).__setup__()
                 field = getattr(cls, name)
-                clause = (
-                    name, 'not like', '%' + escape_wildcard(separator) + '%')
+                clause = ['OR',
+                    (name, 'not like', '%' + escape_wildcard(separator) + '%'),
+                    (name, '=', None),
+                    ]
                 # If TreeMixin is after the class where name is defined in
                 # __mro__, it modifies the base field copied so it must ensure
                 # to add only once the domain
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/trytond-6.0.53/trytond/res/user.py 
new/trytond-6.0.55/trytond/res/user.py
--- old/trytond-6.0.53/trytond/res/user.py      2023-05-17 23:03:30.000000000 
+0200
+++ new/trytond-6.0.55/trytond/res/user.py      2024-10-14 23:57:17.000000000 
+0200
@@ -247,7 +247,7 @@
             return Lang.default_direction()
 
     def get_status_bar(self, name):
-        return self.name
+        return self.name or ''
 
     def get_avatar_badge_url(self, name):
         pass
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/trytond-6.0.53/trytond/tests/test_field_many2one.py 
new/trytond-6.0.55/trytond/tests/test_field_many2one.py
--- old/trytond-6.0.53/trytond/tests/test_field_many2one.py     2023-05-17 
23:03:30.000000000 +0200
+++ new/trytond-6.0.55/trytond/tests/test_field_many2one.py     2024-10-14 
23:57:18.000000000 +0200
@@ -468,6 +468,24 @@
         self._test_search_not_parent_of_empty('test.many2one_mptt')
 
     @with_transaction()
+    def test_search_nested_null(self):
+        "Test search by null many2one"
+        pool = Pool()
+        Many2One = pool.get('test.many2one')
+
+        record, = Many2One.create([{'many2one': None}])
+
+        result = Many2One.search([
+                ('many2one.value', '=', 1),
+                ])
+        self.assertListEqual(result, [])
+
+        result = Many2One.search([
+                ('many2one.value', '!=', 1),
+                ])
+        self.assertListEqual(result, [record])
+
+    @with_transaction()
     def test_context_attribute(self):
         "Test context on many2one attribute"
         pool = Pool()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/trytond-6.0.53/trytond/tests/test_field_reference.py 
new/trytond-6.0.55/trytond/tests/test_field_reference.py
--- old/trytond-6.0.53/trytond/tests/test_field_reference.py    2023-05-17 
23:03:30.000000000 +0200
+++ new/trytond-6.0.55/trytond/tests/test_field_reference.py    2024-10-14 
23:57:18.000000000 +0200
@@ -352,6 +352,28 @@
         self.assertListEqual(references, [reference])
 
     @with_transaction()
+    def test_search_join_null(self):
+        "Test search by null reference join"
+        pool = Pool()
+        Target = pool.get('test.reference.target')
+        Reference = pool.get('test.reference')
+        reference, = Reference.create([{
+                    'reference': None,
+                    }])
+
+        result = Reference.search([
+                ('reference.name', '=', "Target", Target.__name__),
+                ])
+
+        self.assertListEqual(result, [])
+
+        result = Reference.search([
+                ('reference.name', '!=', "Target", Target.__name__),
+                ])
+
+        self.assertListEqual(result, [reference])
+
+    @with_transaction()
     def test_write_string(self):
         "Test write reference string"
         pool = Pool()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/trytond-6.0.53/trytond/tests/test_pyson.py 
new/trytond-6.0.55/trytond/tests/test_pyson.py
--- old/trytond-6.0.53/trytond/tests/test_pyson.py      2024-04-12 
22:44:28.000000000 +0200
+++ new/trytond-6.0.55/trytond/tests/test_pyson.py      2024-11-15 
22:34:34.000000000 +0100
@@ -299,6 +299,16 @@
         self.assertFalse(pyson.PYSONDecoder().decode(eval))
 
         eval = pyson.PYSONEncoder().encode(pyson.Greater(
+                pyson.Eval('foo', datetime.date(2020, 1, 1)),
+                datetime.date(2020, 1, 1)))
+        self.assertFalse(pyson.PYSONDecoder().decode(eval))
+
+        eval = pyson.PYSONEncoder().encode(pyson.Greater(
+                pyson.Eval('foo', pyson.Date(2020, 1, 1)),
+                pyson.Date(2020, 1, 1)))
+        self.assertFalse(pyson.PYSONDecoder().decode(eval))
+
+        eval = pyson.PYSONEncoder().encode(pyson.Greater(
                 pyson.Date(2020, 1, 1),
                 pyson.DateTime(2020, 1, 1, 0, 0, 0, 1)))
         self.assertFalse(pyson.PYSONDecoder().decode(eval))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/trytond-6.0.53/trytond.egg-info/PKG-INFO 
new/trytond-6.0.55/trytond.egg-info/PKG-INFO
--- old/trytond-6.0.53/trytond.egg-info/PKG-INFO        2024-10-05 
17:05:43.000000000 +0200
+++ new/trytond-6.0.55/trytond.egg-info/PKG-INFO        2024-12-01 
19:44:24.000000000 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: trytond
-Version: 6.0.53
+Version: 6.0.55
 Summary: Tryton server
 Home-page: http://www.tryton.org/
 Download-URL: http://downloads.tryton.org/6.0/

Reply via email to