Package: release.debian.org Severity: normal User: release.debian.org@packages.debian.org Usertags: unblock Dear release managers, please approve the upload of tryton-client_2.2.3-1. The new version contains the upstream bug fix release [1]. The fixes are for * Fix wrong sorting to get lazy first * Use repr for faultCode in Fault.__repr__ * Fix test on legend graph attribute * get_toplevel_window should return only gtk.WINDOW_TOPLEVEL * set_value of M2O must simulate a focus-out in case it did not yet occur * Fix name of fields loaded from predefined export * Activate form buttons only when they are sensitive * Fix domain_inversion for comparison of datetime with None Mathias [1] http://news.tryton.org/2012/09/maintenance-releases-for-supported.html debdiff attached unblock: tryton-client/2.2.3-1
diff -Nru tryton-client-2.2.2/CHANGELOG tryton-client-2.2.3/CHANGELOG --- tryton-client-2.2.2/CHANGELOG 2012-05-07 11:10:32.000000000 +0200 +++ tryton-client-2.2.3/CHANGELOG 2012-09-01 18:55:56.000000000 +0200 @@ -1,3 +1,6 @@ +Version 2.2.3 - 2012-09-01 +* Bug fixes (see mercurial logs for details) + Version 2.2.2 - 2012-05-07 * Bug fixes (see mercurial logs for details) diff -Nru tryton-client-2.2.2/debian/changelog tryton-client-2.2.3/debian/changelog --- tryton-client-2.2.2/debian/changelog 2012-06-30 17:24:56.000000000 +0200 +++ tryton-client-2.2.3/debian/changelog 2012-09-11 19:37:56.000000000 +0200 @@ -1,3 +1,9 @@ +tryton-client (2.2.3-1) unstable; urgency=low + + * Merging upstream version 2.2.3. + + -- Mathias Behrle <mathiasb@m9s.biz> Tue, 11 Sep 2012 19:37:56 +0200 + tryton-client (2.2.2-2) unstable; urgency=low * Updating maintainers field. diff -Nru tryton-client-2.2.2/PKG-INFO tryton-client-2.2.3/PKG-INFO --- tryton-client-2.2.2/PKG-INFO 2012-05-07 11:10:35.000000000 +0200 +++ tryton-client-2.2.3/PKG-INFO 2012-09-01 18:56:01.000000000 +0200 @@ -1,6 +1,6 @@ -Metadata-Version: 1.1 +Metadata-Version: 1.0 Name: tryton -Version: 2.2.2 +Version: 2.2.3 Summary: Tryton client Home-page: http://www.tryton.org/ Author: B2CK diff -Nru tryton-client-2.2.2/tryton/common/common.py tryton-client-2.2.3/tryton/common/common.py --- tryton-client-2.2.2/tryton/common/common.py 2012-04-23 18:28:30.000000000 +0200 +++ tryton-client-2.2.3/tryton/common/common.py 2012-07-30 11:05:49.000000000 +0200 @@ -243,7 +243,8 @@ def get_toplevel_window(): windows = [x for x in gtk.window_list_toplevels() - if x.window and x.props.visible] + if x.window and x.props.visible + and x.get_window_type() == gtk.WINDOW_TOPLEVEL] trans2windows = dict((x.get_transient_for(), x) for x in windows) for window in set(windows) - set(trans2windows.iterkeys()): return window diff -Nru tryton-client-2.2.2/tryton/common/domain_inversion.py tryton-client-2.2.3/tryton/common/domain_inversion.py --- tryton-client-2.2.2/tryton/common/domain_inversion.py 2011-12-25 14:51:07.000000000 +0100 +++ tryton-client-2.2.3/tryton/common/domain_inversion.py 2012-05-22 14:40:45.000000000 +0200 @@ -3,6 +3,7 @@ import operator import types +import datetime def in_(a, b): if isinstance(a, (list, tuple)): @@ -52,7 +53,18 @@ # We should consider that other domain inversion will set a correct # value to this field return True - return OPERATORS[operand](context[field], value) + context_field = context[field] + if isinstance(context_field, datetime.date) and not value: + if isinstance(context_field, datetime.datetime): + value = datetime.datetime.min + else: + value = datetime.date.min + if isinstance(value, datetime.date) and not context_field: + if isinstance(value, datetime.datetime): + context_field = datetime.datetime.min + else: + context_field = datetime.date.min + return OPERATORS[operand](context_field, value) def inverse_leaf(domain): if domain in ('AND', 'OR'): @@ -396,6 +408,15 @@ assert eval_domain(domain, {'x': 6}) assert not eval_domain(domain, {'x': 4}) + domain = [['x', '>', None]] + assert eval_domain(domain, {'x': datetime.date.today()}) + assert eval_domain(domain, {'x': datetime.datetime.now()}) + + domain = [['x', '<', datetime.date.today()]] + assert eval_domain(domain, {'x': None}) + domain = [['x', '<', datetime.datetime.now()]] + assert eval_domain(domain, {'x': None}) + domain = [['x', 'in', [3, 5]]] assert eval_domain(domain, {'x': 3}) assert not eval_domain(domain, {'x': 4}) diff -Nru tryton-client-2.2.2/tryton/gui/window/form.py tryton-client-2.2.3/tryton/gui/window/form.py --- tryton-client-2.2.2/tryton/gui/window/form.py 2012-04-23 18:28:30.000000000 +0200 +++ tryton-client-2.2.3/tryton/gui/window/form.py 2012-05-22 14:46:14.000000000 +0200 @@ -406,19 +406,24 @@ return True def sig_action(self, widget): - self.buttons['action'].props.active = True + if self.buttons['action'].props.sensitive: + self.buttons['action'].props.active = True def sig_print(self, widget): - self.buttons['print'].props.active = True + if self.buttons['print'].props.sensitive: + self.buttons['print'].props.active = True def sig_print_open(self, widget): - self.buttons['open'].props.active = True + if self.buttons['open'].props.sensitive: + self.buttons['open'].props.active = True def sig_print_email(self, widget): - self.buttons['email'].props.active = True + if self.buttons['email'].props.sensitive: + self.buttons['email'].props.active = True def sig_relate(self, widget): - self.buttons['relate'].props.active = True + if self.buttons['relate'].props.sensitive: + self.buttons['relate'].props.active = True def action_popup(self, widget): button, = widget.get_children() diff -Nru tryton-client-2.2.2/tryton/gui/window/view_form/view/form_gtk/many2one.py tryton-client-2.2.3/tryton/gui/window/view_form/view/form_gtk/many2one.py --- tryton-client-2.2.2/tryton/gui/window/view_form/view/form_gtk/many2one.py 2011-11-22 13:26:54.000000000 +0100 +++ tryton-client-2.2.3/tryton/gui/window/view_form/view/form_gtk/many2one.py 2012-07-10 16:12:14.000000000 +0200 @@ -83,7 +83,7 @@ def _color_widget(self): return self.wid_text - def sig_activate(self, widget, event=None, key_press=False): + def sig_activate(self, widget=None, event=None, key_press=False): if not self.focus_out: return if not self.field: @@ -93,7 +93,7 @@ self.focus_out = False if not value: - if not key_press and not event: + if not key_press and not event and widget: widget.emit_stop_by_name('activate') if not self._readonly and (self.wid_text.get_text() or \ (self.field.get_state_attrs( @@ -243,7 +243,8 @@ return False def set_value(self, record, field): - pass # No update of the model, the model is updated in real time ! + # Simulate a focus-out + self.sig_activate() def display(self, record, field): self.changed = False diff -Nru tryton-client-2.2.2/tryton/gui/window/view_form/view/form.py tryton-client-2.2.3/tryton/gui/window/view_form/view/form.py --- tryton-client-2.2.2/tryton/gui/window/view_form/view/form.py 2011-11-22 13:26:54.000000000 +0100 +++ tryton-client-2.2.3/tryton/gui/window/view_form/view/form.py 2012-08-26 15:44:38.000000000 +0200 @@ -106,7 +106,7 @@ # Get first the lazy one to reduce number of requests fields = [(name, field.attrs.get('loading', 'eager')) for name, field in record.group.fields.iteritems()] - fields.sort(key=operator.itemgetter(1)) + fields.sort(key=operator.itemgetter(1), reverse=True) for field, _ in fields: record[field].get(record, check_load=False) for name, widgets in self.widgets.iteritems(): diff -Nru tryton-client-2.2.2/tryton/gui/window/view_form/view/graph_gtk/graph.py tryton-client-2.2.3/tryton/gui/window/view_form/view/graph_gtk/graph.py --- tryton-client-2.2.2/tryton/gui/window/view_form/view/graph_gtk/graph.py 2011-11-22 13:26:54.000000000 +0100 +++ tryton-client-2.2.3/tryton/gui/window/view_form/view/graph_gtk/graph.py 2012-08-07 12:28:57.000000000 +0200 @@ -276,7 +276,7 @@ cr.restore() def drawLegend(self, cr, width, height): - if not self.attrs.get('legend', True): + if not int(self.attrs.get('legend', 1)): return padding = 4 diff -Nru tryton-client-2.2.2/tryton/gui/window/win_export.py tryton-client-2.2.3/tryton/gui/window/win_export.py --- tryton-client-2.2.2/tryton/gui/window/win_export.py 2012-04-23 18:28:30.000000000 +0200 +++ tryton-client-2.2.3/tryton/gui/window/win_export.py 2012-07-10 15:43:15.000000000 +0200 @@ -246,7 +246,8 @@ child = self.model1.iter_children(iter) if self.model1.get_value(child, 0) is None: prefix_field = self.model1.get_value(iter, 1) - name, model = self.fields[prefix_field] + _, model = self.fields[prefix_field] + name = self.fields_data[prefix_field]['string'] self.model_populate(self._get_fields(model), iter, prefix_field + '/', name + '/') self.model1.remove(child) diff -Nru tryton-client-2.2.2/tryton/jsonrpc.py tryton-client-2.2.3/tryton/jsonrpc.py --- tryton-client-2.2.2/tryton/jsonrpc.py 2012-04-23 18:28:30.000000000 +0200 +++ tryton-client-2.2.3/tryton/jsonrpc.py 2012-08-26 15:40:34.000000000 +0200 @@ -32,6 +32,11 @@ super(Fault, self).__init__(faultCode, faultString, **extra) self.args = faultString + def __repr__(self): + return ( + "<Fault %s: %s>" % + (repr(self.faultCode), repr(self.faultString)) + ) class ProtocolError(xmlrpclib.ProtocolError): pass diff -Nru tryton-client-2.2.2/tryton/version.py tryton-client-2.2.3/tryton/version.py --- tryton-client-2.2.2/tryton/version.py 2011-12-26 10:42:07.000000000 +0100 +++ tryton-client-2.2.3/tryton/version.py 2012-05-07 14:53:45.000000000 +0200 @@ -1,7 +1,7 @@ #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.2.2" +VERSION = "2.2.3" LICENSE = "GPL-3" WEBSITE = "http://www.tryton.org/" diff -Nru tryton-client-2.2.2/tryton.egg-info/PKG-INFO tryton-client-2.2.3/tryton.egg-info/PKG-INFO --- tryton-client-2.2.2/tryton.egg-info/PKG-INFO 2012-05-07 11:10:33.000000000 +0200 +++ tryton-client-2.2.3/tryton.egg-info/PKG-INFO 2012-09-01 18:55:59.000000000 +0200 @@ -1,6 +1,6 @@ -Metadata-Version: 1.1 +Metadata-Version: 1.0 Name: tryton -Version: 2.2.2 +Version: 2.2.3 Summary: Tryton client Home-page: http://www.tryton.org/ Author: B2CK
Attachment:
signature.asc
Description: PGP signature