For http://bugs.tryton.org/roundup/issue1381


Please review this at http://codereview.appspot.com/190072/show

Affected files:
  M tryton/common/date_widget.py


Index: tryton/common/date_widget.py
===================================================================
--- a/tryton/common/date_widget.py
+++ b/tryton/common/date_widget.py
@@ -83,12 +83,12 @@
                 text = text[:pos] + char + text[pos + 1:]
             pos += 1

-        if self.regex.match(text):
+        if self.regex.match(text) and self.test_date(text):
             self.set_text(text)
             gobject.idle_add(self.set_position, pos)
         else:
             text = text[:pos] + '0' + text[pos + 1:]
-            if self.regex.match(text):
+            if self.regex.match(text) and self.test_date(text):
                 self.set_text(text)
                 gobject.idle_add(self.set_position, pos)
         self.stop_emission('insert-text')
@@ -151,13 +151,12 @@
             else:
                 self.set_text('')

-    def date_get(self):
-        tt = datetime_strftime(datetime.datetime.now(), self.format)
-        tc = self.get_text()
-        if tc == self.initial_value or not tc:
+    def compute_date(self, text):
+        default = datetime_strftime(datetime.datetime.now(), self.format)
+        if text == self.initial_value or not text:
             return False

-        match = self.regex.match(tc)
+        match = self.regex.match(text)
         for i in range(len(match.groups())):
             val = match.group(i + 1)
             n = len(val)
@@ -175,18 +174,29 @@
             val = (fchar * (n - len(val))) + val
             start = match.start(i + 1)
             end = match.end(i + 1)
-            tc = tc[:start] + val + tc[end:]
+            text = text[:start] + val + text[end:]

         for a in range(len(self.initial_value)):
-            if self.initial_value[a] == tc[a]:
-                tc = tc[:a] + tt[a] + tc[a+1:]
+            if self.initial_value[a] == text[a]:
+                text = text[:a] + default[a] + text[a+1:]
+        return text
+
+    def test_date(self, text):
         try:
-            self.set_text(tc)
-            return datetime.datetime(*time.strptime(tc, self.format)[:6])
+            time.strptime(self.compute_date(text), self.format)
         except:
-            tc = tt
-        self.set_text(tc)
-        return datetime.datetime(*time.strptime(tc, self.format)[:6])
+            return False
+        return True
+
+    def date_get(self):
+        date = self.compute_date(self.get_text())
+        for date in (self.compute_date(self.get_text()),
+                datetime_strftime(datetime.datetime.now(), self.format)):
+            try:
+                self.set_text(date)
+                return datetime.datetime(*time.strptime(date,
self.format)[:6])
+            except:
+                pass

     def delete_text(self, start, end):
         self._interactive_input = False



-- 
Cédric Krier

B2CK SPRL
Rue de Rotterdam, 4
4000 Liège
Belgium
Tel: +32 472 54 46 59
Email: [email protected]
Jabber: [email protected]
Website: http://www.b2ck.com/
twitter: http://twitter.com/cedrickrier
identi.ca: http://identi.ca/cedrickrier

Attachment: pgpbru701yhXQ.pgp
Description: PGP signature

Reply via email to