[tryton-debian-vcs] tryton-client branch debian-wheezy-2.6 created. 14ef67b95f5cec46ff77638eeac4884913657824

Mathias Behrle tryton-debian-vcs at alioth.debian.org
Wed Nov 27 16:51:03 UTC 2013


The following commit has been merged in the debian-wheezy-2.6 branch:
https://alioth.debian.org/plugins/scmgit/cgi-bin/gitweb.cgi/?p=tryton/tryton-client.git;a=commitdiff;h=14ef67b95f5cec46ff77638eeac4884913657824
commit 14ef67b95f5cec46ff77638eeac4884913657824
Author: Mathias Behrle <mathiasb at m9s.biz>
Date:   Mon Nov 4 14:11:44 2013 +0100

    Releasing debian version 2.6.7-1.

diff --git a/debian/changelog b/debian/changelog
index af2fe17..f5365a0 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,12 @@
+tryton-client (2.6.7-1) unstable; urgency=high
+
+  * Merging upstream version 2.6.7.
+  * Contains the security patch to sanitize correctly the file extension
+    of temporary files received by the server
+    (s. https://bugs.tryton.org/issue3446).
+
+ -- Mathias Behrle <mathiasb at m9s.biz>  Mon, 04 Nov 2013 13:57:00 +0100
+
 tryton-client (2.6.6-1) unstable; urgency=low
 
   * Merging upstream version 2.6.6.
commit a2b73bcf4ab6b1f0bbdaa68776c65335e3037ed9
Author: Mathias Behrle <mathiasb at m9s.biz>
Date:   Mon Nov 4 13:56:32 2013 +0100

    Merging upstream version 2.6.7.

diff --git a/CHANGELOG b/CHANGELOG
index 3127310..9a540a2 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,7 @@
+Version 2.6.7 - 2013-11-03
+* Bug fixes (see mercurial logs for details)
+* Sanitize report file extension
+
 Version 2.6.6 - 2013-10-10
 * Bug fixes (see mercurial logs for details)
 
diff --git a/PKG-INFO b/PKG-INFO
index 554d0f5..8e6332c 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: tryton
-Version: 2.6.6
+Version: 2.6.7
 Summary: Tryton client
 Home-page: http://www.tryton.org/
 Author: B2CK
diff --git a/tryton.egg-info/PKG-INFO b/tryton.egg-info/PKG-INFO
index 554d0f5..8e6332c 100644
--- a/tryton.egg-info/PKG-INFO
+++ b/tryton.egg-info/PKG-INFO
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: tryton
-Version: 2.6.6
+Version: 2.6.7
 Summary: Tryton client
 Home-page: http://www.tryton.org/
 Author: B2CK
diff --git a/tryton/action/main.py b/tryton/action/main.py
index ec681af..e466458 100644
--- a/tryton/action/main.py
+++ b/tryton/action/main.py
@@ -42,7 +42,8 @@ class Action(object):
         dtemp = tempfile.mkdtemp(prefix='tryton_')
         fp_name = os.path.join(dtemp,
                 name.replace(os.sep, '_').replace(os.altsep or os.sep, '_') \
-                        + os.extsep + type)
+            + os.extsep
+            + type.replace(os.sep, '_').replace(os.altsep or os.sep, '_'))
         with open(fp_name, 'wb') as file_d:
             file_d.write(data)
         if email_print:
diff --git a/tryton/gui/window/view_form/model/field.py b/tryton/gui/window/view_form/model/field.py
index 85af6a7..ad2d77e 100644
--- a/tryton/gui/window/view_form/model/field.py
+++ b/tryton/gui/window/view_form/model/field.py
@@ -818,7 +818,7 @@ class ReferenceField(CharField):
     def get(self, record, check_load=True, readonly=True, modified=False):
         if (record.value.get(self.name)
                 and record.value[self.name][0]
-                and record.value[self.name][1] >= 0):
+                and record.value[self.name][1] >= -1):
             return ','.join(map(str, record.value[self.name]))
         return None
 
@@ -830,6 +830,11 @@ class ReferenceField(CharField):
             if isinstance(ref_id, (tuple, list)):
                 ref_id, rec_name = ref_id
             else:
+                if ref_id:
+                    try:
+                        ref_id = int(ref_id)
+                    except ValueError:
+                        pass
                 if '%s,%s' % (ref_model, ref_id) == self.get(record):
                     rec_name = record.value.get(self.name + '.rec_name', '')
                 else:
diff --git a/tryton/gui/window/view_form/view/form.py b/tryton/gui/window/view_form/view/form.py
index 7373db2..a4b5024 100644
--- a/tryton/gui/window/view_form/view/form.py
+++ b/tryton/gui/window/view_form/view/form.py
@@ -184,8 +184,8 @@ class ViewForm(ParserView):
             self.screen.display()
             return
         else:
-            widget.set_sensitive(False)
+            widget.handler_block_by_func(self.button_clicked)
             try:
                 self.screen.button(widget.attrs)
             finally:
-                widget.set_sensitive(True)
+                widget.handler_unblock_by_func(self.button_clicked)
diff --git a/tryton/gui/window/view_form/view/form_gtk/one2many.py b/tryton/gui/window/view_form/view/form_gtk/one2many.py
index 3842639..85dcf65 100644
--- a/tryton/gui/window/view_form/view/form_gtk/one2many.py
+++ b/tryton/gui/window/view_form/view/form_gtk/one2many.py
@@ -370,8 +370,7 @@ class One2Many(WidgetInterface):
         self.view.set_value()
         domain = self.field.domain_get(self.record)
         context = self.field.context_get(self.record)
-        domain = domain[:]
-        domain.extend(self.record.expr_eval(self.attrs.get('add_remove')))
+        domain = [domain, self.record.expr_eval(self.attrs.get('add_remove'))]
         removed_ids = self.field.get_removed_ids(self.record)
 
         self.focus_out = False
diff --git a/tryton/gui/window/view_form/view/form_gtk/reference.py b/tryton/gui/window/view_form/view/form_gtk/reference.py
index b546c75..3dd57be 100644
--- a/tryton/gui/window/view_form/view/form_gtk/reference.py
+++ b/tryton/gui/window/view_form/view/form_gtk/reference.py
@@ -114,7 +114,12 @@ class Reference(Many2One):
             return
         self.wid_text.set_text('')
         self.wid_text.set_position(0)
-        self.field.set_client(self.record, (self.get_model(), (-1, '')))
+        model = self.get_model()
+        if model:
+            value = (model, (-1, ''))
+        else:
+            value = ('', '')
+        self.field.set_client(self.record, value)
 
     def set_value(self, record, field):
         if not self.get_model():
diff --git a/tryton/gui/window/view_form/view/list.py b/tryton/gui/window/view_form/view/list.py
index 9a738b7..70b10d3 100644
--- a/tryton/gui/window/view_form/view/list.py
+++ b/tryton/gui/window/view_form/view/list.py
@@ -120,7 +120,8 @@ class AdaptModelGroup(gtk.GenericTreeModel):
             # Don't remove record from previous group
             # as the new parent will change the parent
             # This prevents concurrency conflict
-            record.group.record_removed.remove(record)
+            if record in record.group.record_removed:
+                record.group.record_removed.remove(record)
             group.add(record)
             record.modified_fields.setdefault(record.parent_name or 'id')
         group.move(record, 0)
diff --git a/tryton/gui/window/win_export.py b/tryton/gui/window/win_export.py
index 1fc34e1..d67c155 100644
--- a/tryton/gui/window/win_export.py
+++ b/tryton/gui/window/win_export.py
@@ -359,7 +359,7 @@ class WinExport(NoModal):
                             self.on_row_expanded(self.view1, iter,
                                     self.model1.get_path(iter))
                             iter = self.model1.iter_children(iter)
-                            prefix = parent + '/'
+                            prefix += parent + '/'
                             break
                         else:
                             iter = self.model1.iter_next(iter)
diff --git a/tryton/version.py b/tryton/version.py
index 674220d..4af2595 100644
--- a/tryton/version.py
+++ b/tryton/version.py
@@ -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.
 PACKAGE = "tryton"
-VERSION = "2.6.6"
+VERSION = "2.6.7"
 LICENSE = "GPL-3"
 WEBSITE = "http://www.tryton.org/"
commit 78d7878ef48ee17025569b454d2832ab6ac47354
Author: Mathias Behrle <mathiasb at m9s.biz>
Date:   Thu Oct 17 13:54:30 2013 +0200

    Releasing debian version 2.6.6-1.

diff --git a/debian/changelog b/debian/changelog
index 9b51679..af2fe17 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+tryton-client (2.6.6-1) unstable; urgency=low
+
+  * Merging upstream version 2.6.6.
+
+ -- Mathias Behrle <mathiasb at m9s.biz>  Thu, 17 Oct 2013 13:13:14 +0200
+
 tryton-client (2.6.5-1) unstable; urgency=low
 
   * Merging upstream version 2.6.5.
commit 921e7d389f01ed83d08b3812c2ceb3fabe13d9c4
Author: Mathias Behrle <mathiasb at m9s.biz>
Date:   Thu Oct 17 13:12:21 2013 +0200

    Merging upstream version 2.6.6.

diff --git a/CHANGELOG b/CHANGELOG
index 0d6e699..3127310 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,6 @@
+Version 2.6.6 - 2013-10-10
+* Bug fixes (see mercurial logs for details)
+
 Version 2.6.5 - 2013-07-22
 * Bug fixes (see mercurial logs for details)
 
diff --git a/PKG-INFO b/PKG-INFO
index 6a670f3..554d0f5 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: tryton
-Version: 2.6.5
+Version: 2.6.6
 Summary: Tryton client
 Home-page: http://www.tryton.org/
 Author: B2CK
diff --git a/tryton.egg-info/PKG-INFO b/tryton.egg-info/PKG-INFO
index 6a670f3..554d0f5 100644
--- a/tryton.egg-info/PKG-INFO
+++ b/tryton.egg-info/PKG-INFO
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: tryton
-Version: 2.6.5
+Version: 2.6.6
 Summary: Tryton client
 Home-page: http://www.tryton.org/
 Author: B2CK
diff --git a/tryton/common/domain_parser.py b/tryton/common/domain_parser.py
index b2952d8..bfb3259 100644
--- a/tryton/common/domain_parser.py
+++ b/tryton/common/domain_parser.py
@@ -393,10 +393,10 @@ def format_value(field, value):
                 and not isinstance(value, (float, Decimal))):
             return ''
         try:
-            digit = int(field.get('digits', (16, 2))[1])
-        except ValueError:
-            digit = 2
-        return locale.format('%.' + str(digit) + 'f', value or 0.0, True)
+            digit = len(str(value).split('.')[1])
+        except IndexError:
+            digit = 0
+        return locale.format('%.*f', (digit, value or 0), True)
 
     def format_selection():
         selections = dict(field['selection'])
@@ -473,13 +473,14 @@ def test_format_integer():
 def test_format_float():
     field = {
         'type': 'float',
-        'digits': (16, 2),
         }
     for value, result in (
-            (1, '1.00'),
-            (1.5, '1.50'),
-            (0, '0.00'),
-            (0.0, '0.00'),
+            (1, '1'),
+            (1.5, '1.5'),
+            (1.50, '1.5'),
+            (150.79, '150.79'),
+            (0, '0'),
+            (0.0, '0.0'),
             (False, ''),
             (None, ''),
             ):
@@ -489,13 +490,14 @@ def test_format_float():
 def test_format_numeric():
     field = {
         'type': 'numeric',
-        'digits': (16, 2),
         }
     for value, result in (
-            (Decimal(1), '1.00'),
-            (Decimal('1.5'), '1.50'),
-            (Decimal(0), '0.00'),
-            (Decimal('0.0'), '0.00'),
+            (Decimal(1), '1'),
+            (Decimal('1.5'), '1.5'),
+            (Decimal('1.50'), '1.50'),
+            (Decimal('150.79'), '150.79'),
+            (Decimal(0), '0'),
+            (Decimal('0.0'), '0.0'),
             (False, ''),
             (None, ''),
             ):
diff --git a/tryton/gui/main.py b/tryton/gui/main.py
index 1613e0f..2f2ecf0 100644
--- a/tryton/gui/main.py
+++ b/tryton/gui/main.py
@@ -928,7 +928,7 @@ class Main(object):
                 prefs = RPCExecute('model', 'res.user', 'get_preferences',
                     False)
             except RPCException:
-                prefs = None
+                prefs = {}
             common.ICONFACTORY.load_icons()
             common.MODELACCESS.load_models()
             if prefs and 'language_direction' in prefs:
diff --git a/tryton/gui/window/view_form/model/field.py b/tryton/gui/window/view_form/model/field.py
index cc4b2cc..85af6a7 100644
--- a/tryton/gui/window/view_form/model/field.py
+++ b/tryton/gui/window/view_form/model/field.py
@@ -58,13 +58,13 @@ class CharField(object):
 
     def domain_get(self, record):
         screen_domain, attr_domain = self.domains_get(record)
-        return localize_domain(screen_domain) + attr_domain
+        return [localize_domain(screen_domain), attr_domain]
 
     def validation_domains(self, record):
         screen_domain, attr_domain = self.domains_get(record)
         if attr_domain:
-            return (screen_domain, screen_domain +
-                unlocalize_domain(attr_domain, self.name))
+            return (screen_domain, [screen_domain,
+                    unlocalize_domain(attr_domain, self.name)])
         else:
             return screen_domain, screen_domain
 
@@ -453,8 +453,8 @@ class M2OField(CharField):
 
     def domain_get(self, record):
         screen_domain, attr_domain = self.domains_get(record)
-        return (localize_domain(inverse_leaf(screen_domain), self.name)
-            + attr_domain)
+        return [localize_domain(inverse_leaf(screen_domain), self.name),
+            attr_domain]
 
     def get_state_attrs(self, record):
         result = super(M2OField, self).get_state_attrs(record)
@@ -760,7 +760,7 @@ class O2MField(CharField):
 
     def domain_get(self, record):
         screen_domain, attr_domain = self.domains_get(record)
-        return localize_domain(inverse_leaf(screen_domain)) + attr_domain
+        return [localize_domain(inverse_leaf(screen_domain)), attr_domain]
 
 
 class M2MField(O2MField):
diff --git a/tryton/gui/window/view_form/view/form.py b/tryton/gui/window/view_form/view/form.py
index af68eee..7373db2 100644
--- a/tryton/gui/window/view_form/view/form.py
+++ b/tryton/gui/window/view_form/view/form.py
@@ -178,6 +178,7 @@ class ViewForm(ParserView):
 
     def button_clicked(self, widget):
         record = self.screen.current_record
+        self.set_value()
         fields = self.get_fields()
         if not record.validate(fields):
             self.screen.display()
diff --git a/tryton/version.py b/tryton/version.py
index e4b5d7a..674220d 100644
--- a/tryton/version.py
+++ b/tryton/version.py
@@ -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.
 PACKAGE = "tryton"
-VERSION = "2.6.5"
+VERSION = "2.6.6"
 LICENSE = "GPL-3"
 WEBSITE = "http://www.tryton.org/"
commit 0ed5f7dcd6a60a0e78f73e85e9f31072b2e5d5de
Author: Mathias Behrle <mathiasb at m9s.biz>
Date:   Wed Aug 7 17:00:33 2013 +0200

    Releasing debian version 2.6.5-1.

diff --git a/debian/changelog b/debian/changelog
index 703be40..9b51679 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+tryton-client (2.6.5-1) unstable; urgency=low
+
+  * Merging upstream version 2.6.5.
+
+ -- Mathias Behrle <mathiasb at m9s.biz>  Wed, 07 Aug 2013 16:46:52 +0200
+
 tryton-client (2.6.4-1) unstable; urgency=low
 
   * Merging upstream version 2.6.4.
commit a84e79c6300e50e609043fb0d198d8b361acfd73
Author: Mathias Behrle <mathiasb at m9s.biz>
Date:   Wed Aug 7 16:42:41 2013 +0200

    Merging upstream version 2.6.5.

diff --git a/CHANGELOG b/CHANGELOG
index 9ad039a..0d6e699 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,6 @@
+Version 2.6.5 - 2013-07-22
+* Bug fixes (see mercurial logs for details)
+
 Version 2.6.4 - 2013-06-09
 * Bug fixes (see mercurial logs for details)
 
diff --git a/PKG-INFO b/PKG-INFO
index 18e782f..6a670f3 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: tryton
-Version: 2.6.4
+Version: 2.6.5
 Summary: Tryton client
 Home-page: http://www.tryton.org/
 Author: B2CK
diff --git a/tryton.egg-info/PKG-INFO b/tryton.egg-info/PKG-INFO
index 18e782f..6a670f3 100644
--- a/tryton.egg-info/PKG-INFO
+++ b/tryton.egg-info/PKG-INFO
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: tryton
-Version: 2.6.4
+Version: 2.6.5
 Summary: Tryton client
 Home-page: http://www.tryton.org/
 Author: B2CK
diff --git a/tryton/gui/window/view_form/model/record.py b/tryton/gui/window/view_form/model/record.py
index da8335f..153218e 100644
--- a/tryton/gui/window/view_form/model/record.py
+++ b/tryton/gui/window/view_form/model/record.py
@@ -265,6 +265,8 @@ class Record(SignalEvent):
             self._check_load()
         value = {}
         for name, field in self.group.fields.iteritems():
+            if name not in self._loaded and self.id >= 0:
+                continue
             value[name] = field.get_on_change_value(self,
                 check_load=check_load)
         value['id'] = self.id
diff --git a/tryton/gui/window/view_form/view/form.py b/tryton/gui/window/view_form/view/form.py
index 653751c..af68eee 100644
--- a/tryton/gui/window/view_form/view/form.py
+++ b/tryton/gui/window/view_form/view/form.py
@@ -183,4 +183,8 @@ class ViewForm(ParserView):
             self.screen.display()
             return
         else:
-            self.screen.button(widget.attrs)
+            widget.set_sensitive(False)
+            try:
+                self.screen.button(widget.attrs)
+            finally:
+                widget.set_sensitive(True)
diff --git a/tryton/gui/window/view_form/view/list_gtk/editabletree.py b/tryton/gui/window/view_form/view/list_gtk/editabletree.py
index a38b854..6387636 100644
--- a/tryton/gui/window/view_form/view/list_gtk/editabletree.py
+++ b/tryton/gui/window/view_form/view/list_gtk/editabletree.py
@@ -55,8 +55,6 @@ class EditableTreeView(TreeView):
 
     def on_quit_cell(self, current_record, fieldname, value, callback=None):
         field = current_record[fieldname]
-        if hasattr(field, 'editabletree_entry'):
-            del field.editabletree_entry
         cell = self.cells[fieldname]
 
         # The value has not changed and is valid ... do nothing.
@@ -226,6 +224,11 @@ class EditableTreeView(TreeView):
             # store in the record the entry widget to get the value in
             # set_value
             field.editabletree_entry = entry
+
+            def remove_widget(cell):
+                if hasattr(field, 'editabletree_entry'):
+                    del field.editabletree_entry
+            entry.connect('remove-widget', remove_widget)
             record.modified_fields.setdefault(column.name)
             return False
 
diff --git a/tryton/version.py b/tryton/version.py
index e1f76e1..e4b5d7a 100644
--- a/tryton/version.py
+++ b/tryton/version.py
@@ -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.
 PACKAGE = "tryton"
-VERSION = "2.6.4"
+VERSION = "2.6.5"
 LICENSE = "GPL-3"
 WEBSITE = "http://www.tryton.org/"
commit cddd5673ad80c8ce8043942b69f2e7e0d47560d7
Author: Mathias Behrle <mathiasb at m9s.biz>
Date:   Tue Jun 11 13:42:23 2013 +0200

    Releasing debian version 2.6.4-1.

diff --git a/debian/changelog b/debian/changelog
index 02a469a..703be40 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+tryton-client (2.6.4-1) unstable; urgency=low
+
+  * Merging upstream version 2.6.4.
+
+ -- Mathias Behrle <mathiasb at m9s.biz>  Mon, 10 Jun 2013 18:19:32 +0200
+
 tryton-client (2.6.3-1) experimental; urgency=low
 
   * Versioning watch file for Tryton branch 2.6.
commit 8bde304ba1126043be23dd2b9fd41dc6bffffff1
Author: Mathias Behrle <mathiasb at m9s.biz>
Date:   Mon Jun 10 18:13:36 2013 +0200

    Merging upstream version 2.6.4.

diff --git a/CHANGELOG b/CHANGELOG
index be6ecd4..9ad039a 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,6 @@
+Version 2.6.4 - 2013-06-09
+* Bug fixes (see mercurial logs for details)
+
 Version 2.6.3 - 2013-05-02
 * Bug fixes (see mercurial logs for details)
 
diff --git a/PKG-INFO b/PKG-INFO
index 3575547..18e782f 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: tryton
-Version: 2.6.3
+Version: 2.6.4
 Summary: Tryton client
 Home-page: http://www.tryton.org/
 Author: B2CK
diff --git a/tryton.egg-info/PKG-INFO b/tryton.egg-info/PKG-INFO
index 3575547..18e782f 100644
--- a/tryton.egg-info/PKG-INFO
+++ b/tryton.egg-info/PKG-INFO
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: tryton
-Version: 2.6.3
+Version: 2.6.4
 Summary: Tryton client
 Home-page: http://www.tryton.org/
 Author: B2CK
diff --git a/tryton/gui/main.py b/tryton/gui/main.py
index 3bb49ed..1613e0f 100644
--- a/tryton/gui/main.py
+++ b/tryton/gui/main.py
@@ -19,6 +19,7 @@ from tryton.common import RPCExecute, RPCException
 from tryton.config import CONFIG, TRYTON_ICON, get_config_dir
 import tryton.common as common
 from tryton.pyson import PYSONDecoder
+from tryton.jsonrpc import object_hook
 from tryton.action import Action
 from tryton.exceptions import TrytonServerError, TrytonError, \
     TrytonServerUnavailable
@@ -1437,9 +1438,12 @@ class Main(object):
                 limit = json.loads(params.get('limit', 'null'))
                 auto_refresh = json.loads(params.get('auto_refresh', 'false'))
                 name = json.loads(params.get('window_name', 'false'))
-                search_value = json.loads(params.get('search_value', '{}'))
-                domain = json.loads(params.get('domain', '[]'))
-                context = json.loads(params.get('context', '{}'))
+                search_value = json.loads(params.get('search_value', '{}'),
+                    object_hook=object_hook)
+                domain = json.loads(params.get('domain', '[]'),
+                    object_hook=object_hook)
+                context = json.loads(params.get('context', '{}'),
+                    object_hook=object_hook)
             except ValueError:
                 return
             if path:
@@ -1460,13 +1464,15 @@ class Main(object):
             if not wizard:
                 return
             try:
-                data = json.loads(params.get('data', '{}'))
+                data = json.loads(params.get('data', '{}'),
+                    object_hook=object_hook)
                 direct_print = json.loads(params.get('direct_print', 'false'))
                 email_print = json.loads(params.get('email_print', 'false'))
                 email = json.loads(params.get('email', 'null'))
                 name = json.loads(params.get('name', 'false'))
                 window = json.loads(params.get('window', 'false'))
-                context = json.loads(params.get('context', '{}'))
+                context = json.loads(params.get('context', '{}'),
+                    object_hook=object_hook)
             except ValueError:
                 return
             try:
@@ -1481,11 +1487,12 @@ class Main(object):
             if not report:
                 return
             try:
-                data = json.loads(params.get('data'))
+                data = json.loads(params.get('data'), object_hook=object_hook)
                 direct_print = json.loads(params.get('direct_print', 'false'))
                 email_print = json.loads(params.get('email_print', 'false'))
                 email = json.loads(params.get('email', 'null'))
-                context = json.loads(params.get('context', '{}'))
+                context = json.loads(params.get('context', '{}'),
+                    object_hook=object_hook)
             except ValueError:
                 return
             try:
diff --git a/tryton/version.py b/tryton/version.py
index 6a4f895..e1f76e1 100644
--- a/tryton/version.py
+++ b/tryton/version.py
@@ -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.
 PACKAGE = "tryton"
-VERSION = "2.6.3"
+VERSION = "2.6.4"
 LICENSE = "GPL-3"
 WEBSITE = "http://www.tryton.org/"
commit 546c72c2c3a54b11ae3f5b81379266a8ca7974ac
Author: Mathias Behrle <mathiasb at m9s.biz>
Date:   Sat May 4 12:07:16 2013 +0200

    Releasing debian version 2.6.3-1.

diff --git a/debian/changelog b/debian/changelog
index 642d94a..02a469a 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,12 @@
+tryton-client (2.6.3-1) experimental; urgency=low
+
+  * Versioning watch file for Tryton branch 2.6.
+  * Correcting pixmap link of tryton-icon.png. Thanks to Ilya Melnikov.
+  * Adding README.Debian to point out version dependency.
+  * Merging upstream version 2.6.3.
+
+ -- Mathias Behrle <mathiasb at m9s.biz>  Sat, 04 May 2013 02:37:57 +0200
+
 tryton-client (2.6.2-3) experimental; urgency=low
 
   * Removing Daniel from Uploaders. Thanks for your work! (Closes: #704359).
commit ded3a0c3ae6a06a60fbc98a3ee826b83f6b1bd75
Author: Mathias Behrle <mathiasb at m9s.biz>
Date:   Sat May 4 02:18:48 2013 +0200

    Merging upstream version 2.6.3.

diff --git a/CHANGELOG b/CHANGELOG
index 2d4ee47..be6ecd4 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,6 @@
+Version 2.6.3 - 2013-05-02
+* Bug fixes (see mercurial logs for details)
+
 Version 2.6.2 - 2013-02-12
 * Bug fixes (see mercurial logs for details)
 
diff --git a/PKG-INFO b/PKG-INFO
index 8286886..3575547 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: tryton
-Version: 2.6.2
+Version: 2.6.3
 Summary: Tryton client
 Home-page: http://www.tryton.org/
 Author: B2CK
diff --git a/tryton.egg-info/PKG-INFO b/tryton.egg-info/PKG-INFO
index 8286886..3575547 100644
--- a/tryton.egg-info/PKG-INFO
+++ b/tryton.egg-info/PKG-INFO
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: tryton
-Version: 2.6.2
+Version: 2.6.3
 Summary: Tryton client
 Home-page: http://www.tryton.org/
 Author: B2CK
diff --git a/tryton/gui/main.py b/tryton/gui/main.py
index 4f5b688..3bb49ed 100644
--- a/tryton/gui/main.py
+++ b/tryton/gui/main.py
@@ -5,7 +5,7 @@ import os
 import sys
 import socket
 import gettext
-from urlparse import urlparse
+from urlparse import urlparse, parse_qsl
 import urllib
 import gobject
 import gtk
@@ -1404,14 +1404,14 @@ class Main(object):
             Main.get_main().refresh_ssl()
 
     def _open_url(self, url):
-        url = urllib.unquote(url)
         urlp = urlparse(url)
         if not urlp.scheme == 'tryton':
             return
         urlp = urlparse('http' + url[6:])
-        hostname, port = (urlp.netloc.split(':', 1)
-                + [CONFIG.defaults['login.port']])[:2]
-        database, path = (urlp.path[1:].split('/', 1) + [None])[:2]
+        hostname, port = map(urllib.unquote,
+            (urlp.netloc.split(':', 1) + [CONFIG.defaults['login.port']])[:2])
+        database, path = map(urllib.unquote,
+            (urlp.path[1:].split('/', 1) + [None])[:2])
         if (not path or
                 hostname != rpc._HOST or
                 int(port) != rpc._PORT or
@@ -1421,8 +1421,8 @@ class Main(object):
         params = {}
         if urlp.params:
             try:
-                params = dict(param.split('=', 1)
-                        for param in urlp.params.split('&'))
+                params.update(dict(parse_qsl(urlp.params,
+                            strict_parsing=True)))
             except ValueError:
                 return
 
diff --git a/tryton/gui/window/view_form/model/field.py b/tryton/gui/window/view_form/model/field.py
index afcfc39..cc4b2cc 100644
--- a/tryton/gui/window/view_form/model/field.py
+++ b/tryton/gui/window/view_form/model/field.py
@@ -711,7 +711,7 @@ class O2MField(CharField):
                     to_remove.append(record2)
         for record2 in to_remove:
             record.value[self.name].remove(record2, signal=False,
-                force_remove=True)
+                force_remove=False)
 
         if value and (value.get('add') or value.get('update', [])):
             record.value[self.name].add_fields(fields, signal=False)
diff --git a/tryton/gui/window/view_form/model/group.py b/tryton/gui/window/view_form/model/group.py
index 30bfc75..8b6565f 100644
--- a/tryton/gui/window/view_form/model/group.py
+++ b/tryton/gui/window/view_form/model/group.py
@@ -199,7 +199,7 @@ class Group(SignalEvent, list):
         for fnct in self.on_write:
             try:
                 res += RPCExecute('model', self.model_name, fnct, ids,
-                    context=self.context)
+                    main_iteration=False, context=self.context)
             except RPCException:
                 return []
         return list({}.fromkeys(res))
@@ -391,7 +391,7 @@ class Group(SignalEvent, list):
             ctx.update(self.context)
             try:
                 values = RPCExecute('model', self.model_name, 'default_get',
-                    to_add.keys(), context=ctx)
+                    to_add.keys(), main_iteration=False, context=ctx)
             except RPCException:
                 return False
             for name in to_add:
diff --git a/tryton/gui/window/view_form/model/record.py b/tryton/gui/window/view_form/model/record.py
index fccfb1c..da8335f 100644
--- a/tryton/gui/window/view_form/model/record.py
+++ b/tryton/gui/window/view_form/model/record.py
@@ -48,6 +48,11 @@ class Record(SignalEvent):
                         (field.attrs.get('loading', 'eager')
                             for field in self.group.fields.itervalues()),
                         'eager')
+                # Set a valid name for next loaded check
+                for fname, field in self.group.fields.iteritems():
+                    if field.attrs.get('loading', 'eager') == loading:
+                        name = fname
+                        break
             else:
                 loading = self.group.fields[name].attrs.get('loading', 'eager')
             if self in self.group and loading == 'eager':
@@ -279,7 +284,7 @@ class Record(SignalEvent):
         values = self.get()
         try:
             RPCExecute('model', self.model_name, 'pre_validate', values,
-                context=self.context_get())
+                main_iteration=False, context=self.context_get())
         except RPCException:
             return False
         return True
@@ -290,6 +295,7 @@ class Record(SignalEvent):
                 value = self.get(get_readonly=True)
                 try:
                     res = RPCExecute('model', self.model_name, 'create', value,
+                        main_iteration=False,
                         context=self.context_get())
                 except RPCException:
                     return False
@@ -306,7 +312,8 @@ class Record(SignalEvent):
                     context['_timestamp'] = self.get_timestamp()
                     try:
                         RPCExecute('model', self.model_name, 'write',
-                            [self.id], value, context=context)
+                            [self.id], value, main_iteration=False,
+                            context=context)
                     except RPCException:
                         return False
             self._loaded.clear()
@@ -340,7 +347,7 @@ class Record(SignalEvent):
         reload_ids = list(reload_ids)
         try:
             RPCExecute('model', record.model_name, 'delete', list(record_ids),
-                context=ctx)
+                main_iteration=False, context=ctx)
         except RPCException:
             return False
         if reload_ids:
@@ -351,7 +358,8 @@ class Record(SignalEvent):
         if len(self.group.fields):
             try:
                 vals = RPCExecute('model', self.model_name, 'default_get',
-                    self.group.fields.keys(), context=context)
+                    self.group.fields.keys(), main_iteration=False,
+                    context=context)
             except RPCException:
                 return
             if (self.parent
@@ -372,7 +380,8 @@ class Record(SignalEvent):
     def rec_name(self):
         try:
             return RPCExecute('model', self.model_name, 'read', [self.id],
-                ['rec_name'], context=self.context_get())[0]['rec_name']
+                ['rec_name'], main_iteration=False,
+                context=self.context_get())[0]['rec_name']
         except RPCException:
             return ''
 
@@ -503,8 +512,9 @@ class Record(SignalEvent):
             attr = PYSONDecoder().decode(attr)
         args = self._get_on_change_args(attr)
         try:
-            res = RPCExecute('model', self.model_name,
-                'on_change_' + fieldname, args, context=self.context_get())
+            res = RPCExecute('model', self.model_name, 'on_change_' +
+                fieldname, args, main_iteration=False,
+                context=self.context_get())
         except RPCException:
             return
         later = {}
@@ -557,7 +567,8 @@ class Record(SignalEvent):
         if fieldnames:
             try:
                 result = RPCExecute('model', self.model_name, 'on_change_with',
-                    values, list(fieldnames), context=self.context_get())
+                    values, list(fieldnames), main_iteration=False,
+                    context=self.context_get())
             except RPCException:
                 return
             for fieldname, value in result.items():
@@ -569,7 +580,7 @@ class Record(SignalEvent):
             try:
                 result = RPCExecute('model', self.model_name,
                     'on_change_with_' + fieldname, values,
-                    context=self.context_get())
+                    main_iteration=False, context=self.context_get())
             except RPCException:
                 return
             self.group.fields[fieldname].set_on_change(self, result)
@@ -587,7 +598,8 @@ class Record(SignalEvent):
         args = self._get_on_change_args(autocomplete)
         try:
             res = RPCExecute('model', self.model_name, 'autocomplete_' +
-                fieldname, args, context=self.context_get())
+                fieldname, args, main_iteration=False,
+                context=self.context_get())
         except RPCException:
             # ensure res is a list
             res = []
@@ -602,7 +614,7 @@ class Record(SignalEvent):
                     'search_count', [
                         ('resource', '=',
                             '%s,%s' % (self.model_name, self.id)),
-                        ])
+                        ], main_iteration=False)
             except RPCException:
                 return 0
         return self.attachment_count
diff --git a/tryton/gui/window/view_form/view/form_gtk/one2many.py b/tryton/gui/window/view_form/view/form_gtk/one2many.py
index afd845e..3842639 100644
--- a/tryton/gui/window/view_form/view/form_gtk/one2many.py
+++ b/tryton/gui/window/view_form/view/form_gtk/one2many.py
@@ -388,14 +388,21 @@ class One2Many(WidgetInterface):
             self.focus_out = True
             return False
 
+        sequence = None
+        if self.screen.current_view.view_type == 'tree':
+            sequence = self.screen.current_view.widget_tree.sequence
+
         def callback(result):
             self.focus_out = True
             if result:
                 ids = [x[0] for x in result]
                 self.screen.load(ids, modified=True)
                 self.screen.display(res_id=ids[0])
+                if sequence:
+                    self.screen.group.set_sequence(field=sequence)
             self.screen.set_cursor()
             self.wid_text.set_text('')
+
         if len(ids) != 1:
             WinSearch(self.attrs['relation'], callback, sel_multi=True,
                 ids=ids, context=context, domain=domain,
diff --git a/tryton/gui/window/view_form/view/graph_gtk/bar.py b/tryton/gui/window/view_form/view/graph_gtk/bar.py
index 493b65c..6833a21 100644
--- a/tryton/gui/window/view_form/view/graph_gtk/bar.py
+++ b/tryton/gui/window/view_form/view/graph_gtk/bar.py
@@ -12,6 +12,10 @@ import tryton.rpc as rpc
 
 class Bar(Graph):
 
+    def __init__(self, *args, **kwargs):
+        super(Bar, self).__init__(*args, **kwargs)
+        self.bars = []
+
     def drawGraph(self, cr, width, height):
 
         def drawBar(bar):
diff --git a/tryton/version.py b/tryton/version.py
index 72d0205..6a4f895 100644
--- a/tryton/version.py
+++ b/tryton/version.py
@@ -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.
 PACKAGE = "tryton"
-VERSION = "2.6.2"
+VERSION = "2.6.3"
 LICENSE = "GPL-3"
 WEBSITE = "http://www.tryton.org/"
commit 238210c1a49061af4acbddd86fafaa7a54f414d7
Author: Mathias Behrle <mathiasb at m9s.biz>
Date:   Sat Apr 27 12:27:01 2013 +0200

    Adding README.Debian to point out version dependency.

diff --git a/debian/tryton-client.README.Debian b/debian/tryton-client.README.Debian
new file mode 100644
index 0000000..d7cdb36
--- /dev/null
+++ b/debian/tryton-client.README.Debian
@@ -0,0 +1,7 @@
+tryton-client for Debian
+------------------------
+
+Note: The Tryton client can only connect to Tryton servers with the same 
+major version (e.g. the first two numbers of the version string).
+
+ -- Mathias Behrle <mathiasb at m9s.biz>  Sat, 27 Apr 2013 12:00:00 +0200
commit 970bf9fdcf0860052a6bd138678654922db0b25f
Author: Mathias Behrle <mathiasb at m9s.biz>
Date:   Wed Apr 24 01:23:26 2013 +0200

    Correcting pixmap link of tryton-icon.png. Thanks to Ilya Melnikov.

diff --git a/debian/tryton-client.links b/debian/tryton-client.links
index f3edeba..24caee0 100644
--- a/debian/tryton-client.links
+++ b/debian/tryton-client.links
@@ -1,3 +1,3 @@
 /usr/bin/tryton					/usr/bin/tryton-client
-/usr/share/pixmaps/tryton/tryton-icon.png	/usr/share/pixmaps/tryton-icon.png
+/usr/share/icons/tryton/tryton-icon.png	/usr/share/pixmaps/tryton-icon.png
 /usr/share/man/man1/tryton.1.gz			/usr/share/man/man1/tryton-client.1.gz
commit 80c4ae5b407b2fcee0f0850cfeba92e4376ffb1a
Author: Mathias Behrle <mathiasb at m9s.biz>
Date:   Wed Apr 24 00:59:34 2013 +0200

    Versioning watch file for Tryton branch 2.6.

diff --git a/debian/watch b/debian/watch
index c96998a..aba87be 100644
--- a/debian/watch
+++ b/debian/watch
@@ -1,2 +1,2 @@
 version=3
-http://downloads.tryton.org/current/ .*tryton-(\d.*)\.(?:tgz|tbz2|txz|tar\.(?:gz|bz2|xz))
+http://downloads.tryton.org/2.6/ .*tryton-(\d.*)\.(?:tgz|tbz2|txz|tar\.(?:gz|bz2|xz))
-- 
tryton-client



More information about the tryton-debian-vcs mailing list