[tryton-debian-vcs] tryton-client branch upstream-3.6 updated. upstream/3.6.8-1-ga0de6ad

Mathias Behrle tryton-debian-vcs at alioth.debian.org
Tue Jul 12 13:02:14 UTC 2016


The following commit has been merged in the upstream-3.6 branch:
https://alioth.debian.org/plugins/scmgit/cgi-bin/gitweb.cgi/?p=tryton/tryton-client.git;a=commitdiff;h=upstream/3.6.8-1-ga0de6ad

commit a0de6ad123d5a99d2d0a7346e0aecb39e5b79ba3
Author: Mathias Behrle <mathiasb at m9s.biz>
Date:   Mon Jul 11 19:36:54 2016 +0200

    Adding upstream version 3.6.9.
    
    Signed-off-by: Mathias Behrle <mathiasb at m9s.biz>

diff --git a/CHANGELOG b/CHANGELOG
index 863a8cd..0afae1a 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,6 @@
+Version 3.6.9 - 2016-07-04
+* Bug fixes (see mercurial logs for details)
+
 Version 3.6.8 - 2016-04-06
 * Bug fixes (see mercurial logs for details)
 
diff --git a/COPYRIGHT b/COPYRIGHT
index 43d70ed..825f062 100644
--- a/COPYRIGHT
+++ b/COPYRIGHT
@@ -1,5 +1,5 @@
 Copyright (C) 2012-2013 Antoine Smolders.
-Copyright (C) 2010-2015 Nicolas Évrard.
+Copyright (C) 2010-2016 Nicolas Évrard.
 Copyright (C) 2007-2016 Cédric Krier.
 Copyright (C) 2007-2013 Bertrand Chenal.
 Copyright (C) 2008-2016 B2CK SPRL.
diff --git a/PKG-INFO b/PKG-INFO
index 12aeb2f..1311a18 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: tryton
-Version: 3.6.8
+Version: 3.6.9
 Summary: Tryton client
 Home-page: http://www.tryton.org/
 Author: Tryton
diff --git a/share/locale/bg_BG/LC_MESSAGES/tryton.mo b/share/locale/bg_BG/LC_MESSAGES/tryton.mo
index 3a4e2b5..90a3a2c 100644
Binary files a/share/locale/bg_BG/LC_MESSAGES/tryton.mo and b/share/locale/bg_BG/LC_MESSAGES/tryton.mo differ
diff --git a/share/locale/ca_ES/LC_MESSAGES/tryton.mo b/share/locale/ca_ES/LC_MESSAGES/tryton.mo
index c352df2..fa90b75 100644
Binary files a/share/locale/ca_ES/LC_MESSAGES/tryton.mo and b/share/locale/ca_ES/LC_MESSAGES/tryton.mo differ
diff --git a/share/locale/cs_CZ/LC_MESSAGES/tryton.mo b/share/locale/cs_CZ/LC_MESSAGES/tryton.mo
index 3ebd0c5..107d731 100644
Binary files a/share/locale/cs_CZ/LC_MESSAGES/tryton.mo and b/share/locale/cs_CZ/LC_MESSAGES/tryton.mo differ
diff --git a/share/locale/de_DE/LC_MESSAGES/tryton.mo b/share/locale/de_DE/LC_MESSAGES/tryton.mo
index 44044fd..604d960 100644
Binary files a/share/locale/de_DE/LC_MESSAGES/tryton.mo and b/share/locale/de_DE/LC_MESSAGES/tryton.mo differ
diff --git a/share/locale/es_AR/LC_MESSAGES/tryton.mo b/share/locale/es_AR/LC_MESSAGES/tryton.mo
index 39d73eb..687b683 100644
Binary files a/share/locale/es_AR/LC_MESSAGES/tryton.mo and b/share/locale/es_AR/LC_MESSAGES/tryton.mo differ
diff --git a/share/locale/es_CO/LC_MESSAGES/tryton.mo b/share/locale/es_CO/LC_MESSAGES/tryton.mo
index 4c6d6a7..409b945 100644
Binary files a/share/locale/es_CO/LC_MESSAGES/tryton.mo and b/share/locale/es_CO/LC_MESSAGES/tryton.mo differ
diff --git a/share/locale/es_EC/LC_MESSAGES/tryton.mo b/share/locale/es_EC/LC_MESSAGES/tryton.mo
index ceaadf4..2f1a6cd 100644
Binary files a/share/locale/es_EC/LC_MESSAGES/tryton.mo and b/share/locale/es_EC/LC_MESSAGES/tryton.mo differ
diff --git a/share/locale/es_ES/LC_MESSAGES/tryton.mo b/share/locale/es_ES/LC_MESSAGES/tryton.mo
index ed4c541..f7068be 100644
Binary files a/share/locale/es_ES/LC_MESSAGES/tryton.mo and b/share/locale/es_ES/LC_MESSAGES/tryton.mo differ
diff --git a/share/locale/fr_FR/LC_MESSAGES/tryton.mo b/share/locale/fr_FR/LC_MESSAGES/tryton.mo
index c4a32e9..f753a2e 100644
Binary files a/share/locale/fr_FR/LC_MESSAGES/tryton.mo and b/share/locale/fr_FR/LC_MESSAGES/tryton.mo differ
diff --git a/share/locale/ja_JP/LC_MESSAGES/tryton.mo b/share/locale/ja_JP/LC_MESSAGES/tryton.mo
index 7f92e03..86972f2 100644
Binary files a/share/locale/ja_JP/LC_MESSAGES/tryton.mo and b/share/locale/ja_JP/LC_MESSAGES/tryton.mo differ
diff --git a/share/locale/lt_LT/LC_MESSAGES/tryton.mo b/share/locale/lt_LT/LC_MESSAGES/tryton.mo
index df83ed4..278c540 100644
Binary files a/share/locale/lt_LT/LC_MESSAGES/tryton.mo and b/share/locale/lt_LT/LC_MESSAGES/tryton.mo differ
diff --git a/share/locale/nl_NL/LC_MESSAGES/tryton.mo b/share/locale/nl_NL/LC_MESSAGES/tryton.mo
index 4f77d83..fb49548 100644
Binary files a/share/locale/nl_NL/LC_MESSAGES/tryton.mo and b/share/locale/nl_NL/LC_MESSAGES/tryton.mo differ
diff --git a/share/locale/ru_RU/LC_MESSAGES/tryton.mo b/share/locale/ru_RU/LC_MESSAGES/tryton.mo
index 7097d27..17cc6aa 100644
Binary files a/share/locale/ru_RU/LC_MESSAGES/tryton.mo and b/share/locale/ru_RU/LC_MESSAGES/tryton.mo differ
diff --git a/share/locale/sl_SI/LC_MESSAGES/tryton.mo b/share/locale/sl_SI/LC_MESSAGES/tryton.mo
index 4bc61f1..fd54dd0 100644
Binary files a/share/locale/sl_SI/LC_MESSAGES/tryton.mo and b/share/locale/sl_SI/LC_MESSAGES/tryton.mo differ
diff --git a/tryton.egg-info/PKG-INFO b/tryton.egg-info/PKG-INFO
index 12aeb2f..1311a18 100644
--- a/tryton.egg-info/PKG-INFO
+++ b/tryton.egg-info/PKG-INFO
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: tryton
-Version: 3.6.8
+Version: 3.6.9
 Summary: Tryton client
 Home-page: http://www.tryton.org/
 Author: Tryton
diff --git a/tryton/__init__.py b/tryton/__init__.py
index fdb312d..82bfc0c 100644
--- a/tryton/__init__.py
+++ b/tryton/__init__.py
@@ -1,3 +1,3 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
-__version__ = "3.6.8"
+__version__ = "3.6.9"
diff --git a/tryton/common/common.py b/tryton/common/common.py
index ee2a494..26e7b79 100644
--- a/tryton/common/common.py
+++ b/tryton/common/common.py
@@ -1412,11 +1412,12 @@ def humanize(size):
 
 def get_hostname(netloc):
     if '[' in netloc and ']' in netloc:
-        return netloc.split(']')[0][1:]
+        hostname = netloc.split(']')[0][1:]
     elif ':' in netloc:
-        return netloc.split(':')[0]
+        hostname = netloc.split(':')[0]
     else:
-        return netloc
+        hostname = netloc
+    return hostname.strip()
 
 
 def get_port(netloc):
diff --git a/tryton/common/datetime_.py b/tryton/common/datetime_.py
index 3217def..b6d261f 100644
--- a/tryton/common/datetime_.py
+++ b/tryton/common/datetime_.py
@@ -21,8 +21,10 @@ _ = gettext.gettext
 
 
 def date_parse(text, format_='%x'):
-    dayfirst = datetime.date(1988, 8, 16).strftime(format_).index('16') == 0
-    yearfirst = datetime.date(1988, 8, 16).strftime(format_).index('88') <= 2
+    formatted_date = datetime.date(1988, 7, 16).strftime(format_)
+    dayfirst = formatted_date.index('16') == 0
+    monthfirst = formatted_date.index('7') <= 1
+    yearfirst = not dayfirst and not monthfirst
     return parse(text, dayfirst=dayfirst, yearfirst=yearfirst, ignoretz=True)
 
 
diff --git a/tryton/common/domain_parser.py b/tryton/common/domain_parser.py
index 03a754e..2e2208e 100644
--- a/tryton/common/domain_parser.py
+++ b/tryton/common/domain_parser.py
@@ -1025,6 +1025,8 @@ class DomainParser(object):
                 operator = None
             name = value
             value = ''
+        if not name:
+            name = ''
         if (name.lower() not in self.strings
                 and name not in self.fields):
             for field in self.strings.itervalues():
@@ -1455,3 +1457,18 @@ def test_parse_clause():
     assert rlist(dom.parse_clause([('Many2One', None, ['John', 'Jane'])])) == [
         ('many2one.rec_name', 'in', ['John', 'Jane']),
         ]
+
+
+def test_completion():
+    dom = DomainParser({
+            'name': {
+                'string': 'Name',
+                'name': 'name',
+                'type': 'char',
+                },
+            })
+    assert list(dom.completion(u'Nam')) == ['Name: ']
+    assert list(dom.completion(u'Name:')) == ['Name: ']
+    assert list(dom.completion(u'Name: foo')) == []
+    assert list(dom.completion(u'Name: !=')) == []
+    assert list(dom.completion(u'Name: !=foo')) == []
diff --git a/tryton/gui/window/attachment.py b/tryton/gui/window/attachment.py
index 72aa578..6e563ea 100644
--- a/tryton/gui/window/attachment.py
+++ b/tryton/gui/window/attachment.py
@@ -4,6 +4,7 @@
 import os
 import urllib
 import urlparse
+import sys
 
 from tryton.gui.window.view_form.screen import Screen
 from tryton.gui.window.win_form import WinForm
@@ -46,5 +47,6 @@ class Attachment(WinForm):
         new_record = self.screen.new()
         file_name = os.path.basename(urlparse.urlparse(uri).path)
         name_field.set_client(new_record, file_name)
+        uri = uri.decode('utf-8').encode(sys.getfilesystemencoding())
         data_field.set_client(new_record, urllib.urlopen(uri).read())
         self.screen.display()
diff --git a/tryton/gui/window/form.py b/tryton/gui/window/form.py
index ca68ac1..0193601 100644
--- a/tryton/gui/window/form.py
+++ b/tryton/gui/window/form.py
@@ -350,7 +350,8 @@ class Form(SignalEvent, TabContent):
         if widget:
             # Called from button so we must save the tree state
             self.screen.save_tree_state()
-        if not common.MODELACCESS[self.model]['write']:
+        if not (common.MODELACCESS[self.model]['write']
+                or common.MODELACCESS[self.model]['create']):
             return
         if self.screen.save_current():
             self.message_info(_('Record saved!'), 'green')
diff --git a/tryton/gui/window/view_board/action.py b/tryton/gui/window/view_board/action.py
index 23824bf..a813719 100644
--- a/tryton/gui/window/view_board/action.py
+++ b/tryton/gui/window/view_board/action.py
@@ -94,7 +94,8 @@ class Action(SignalEvent):
             return
 
         if (self.screen.current_view.view_type == 'tree' and
-                self.screen.current_view.attributes.get('keyword_open')):
+                int(self.screen.current_view.attributes.get(
+                        'keyword_open', 0))):
             GenericAction.exec_keyword('tree_open', {
                 'model': self.screen.model_name,
                 'id': self.screen.id_get(),
diff --git a/tryton/gui/window/view_form/model/field.py b/tryton/gui/window/view_form/model/field.py
index bd15eb6..636286f 100644
--- a/tryton/gui/window/view_form/model/field.py
+++ b/tryton/gui/window/view_form/model/field.py
@@ -388,6 +388,9 @@ class M2OField(Field):
 
     _default = None
 
+    def _is_empty(self, record):
+        return self.get(record) is None
+
     def get_client(self, record):
         rec_name = record.value.get(self.name + '.rec_name')
         if rec_name is None:
diff --git a/tryton/gui/window/view_form/model/group.py b/tryton/gui/window/view_form/model/group.py
index 2ba270c..9ccf4e8 100644
--- a/tryton/gui/window/view_form/model/group.py
+++ b/tryton/gui/window/view_form/model/group.py
@@ -44,7 +44,8 @@ class Group(SignalEvent, list):
     def readonly(self):
         # Must skip res.user for Preference windows
         if (self._context.get('_datetime')
-                or (not MODELACCESS[self.model_name]['write']
+                or (not (MODELACCESS[self.model_name]['write']
+                        or MODELACCESS[self.model_name]['create'])
                     and not self.skip_model_access)):
             return True
         return self.__readonly
diff --git a/tryton/gui/window/view_form/screen/screen.py b/tryton/gui/window/view_form/screen/screen.py
index 61cee60..b968ff9 100644
--- a/tryton/gui/window/view_form/screen/screen.py
+++ b/tryton/gui/window/view_form/screen/screen.py
@@ -57,7 +57,8 @@ class Screen(SignalEvent):
         super(Screen, self).__init__()
 
         self.readonly = readonly
-        if not MODELACCESS[model_name]['write']:
+        if not (MODELACCESS[model_name]['write']
+                or MODELACCESS[model_name]['create']):
             self.readonly = True
         self.search_count = 0
         if not row_activate:
@@ -332,7 +333,7 @@ class Screen(SignalEvent):
 
     def default_row_activate(self):
         if (self.current_view.view_type == 'tree' and
-                self.current_view.attributes.get('keyword_open')):
+                int(self.current_view.attributes.get('keyword_open', 0))):
             return Action.exec_keyword('tree_open', {
                 'model': self.model_name,
                 'id': self.id_get(),
diff --git a/tryton/gui/window/view_form/view/calendar_gtk/calendar_.py b/tryton/gui/window/view_form/view/calendar_gtk/calendar_.py
index c408ef9..ecb46f9 100644
--- a/tryton/gui/window/view_form/view/calendar_gtk/calendar_.py
+++ b/tryton/gui/window/view_form/view/calendar_gtk/calendar_.py
@@ -79,8 +79,8 @@ class Calendar_(goocalendar.Calendar):
             if not record[dtstart].get(record):
                 continue
 
-            start = record[dtstart].get(record)
-            end = record[dtend].get(record)
+            start = record[dtstart].get_client(record)
+            end = record[dtend].get_client(record)
             midnight = datetime.time(0)
             all_day = False
             if not isinstance(start, datetime.datetime):
diff --git a/tryton/gui/window/view_form/view/form_gtk/widget.py b/tryton/gui/window/view_form/view/form_gtk/widget.py
index 0ec5b83..859c4f0 100644
--- a/tryton/gui/window/view_form/view/form_gtk/widget.py
+++ b/tryton/gui/window/view_form/view/form_gtk/widget.py
@@ -300,6 +300,7 @@ class TranslateMixin:
         return button
 
     def translate(self, *args):
+        self.view.set_value()
         if self.record.id < 0 or self.record.modified:
             common.message(
                 _('You need to save the record before adding translations!'))
-- 
tryton-client



More information about the tryton-debian-vcs mailing list