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
pgpbru701yhXQ.pgp
Description: PGP signature
