--- Begin Message ---
Package: release.debian.org
Severity: normal
User: release.debian....@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 <mathi...@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
signature.asc
Description: PGP signature
--- End Message ---