Parse text as datetime when it is a string

The on_paste method is calling value_from_text for each widget using the
string from the clipboard.
So textual value needs to be supported even for date and time widgets which
uses a cell renderer that provides datetime value.

Closes #12860
This commit is contained in:
Cédric Krier
2024-04-14 10:56:27 +02:00
parent 95aa57c72c
commit d1dbfd6a82
2 changed files with 16 additions and 2 deletions
+3 -1
View File
@@ -9,7 +9,9 @@ from gi.repository import Gdk, GObject, Gtk
from .common import IconFactory
__all__ = ['Date', 'CellRendererDate', 'Time', 'CellRendererTime', 'DateTime']
__all__ = [
'Date', 'CellRendererDate', 'Time', 'CellRendererTime', 'DateTime',
'date_parse']
_ = gettext.gettext
@@ -23,7 +23,8 @@ from tryton.common.cellrenderertext import (
CellRendererText, CellRendererTextCompletion)
from tryton.common.cellrenderertoggle import CellRendererToggle
from tryton.common.completion import get_completion, update_completion
from tryton.common.datetime_ import CellRendererDate, CellRendererTime
from tryton.common.datetime_ import (
CellRendererDate, CellRendererTime, date_parse)
from tryton.common.domain_parser import quote
from tryton.common.selection import (
PopdownMixin, SelectionMixin, selection_shortcuts)
@@ -497,6 +498,17 @@ class Date(GenericText):
else:
return ''
def value_from_text(self, record, text, callback=None):
if isinstance(text, str):
field = record[self.attrs['name']]
try:
# Use a datetime instance and rely on field to convert to the
# proper type
text = date_parse(text, self.get_format(record, field))
except (ValueError, OverflowError):
text = None
return super().value_from_text(record, text, callback=callback)
class Time(Date):