[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[gnue] r9341 - trunk/gnue-forms/src/input/displayHandlers
From: |
johannes |
Subject: |
[gnue] r9341 - trunk/gnue-forms/src/input/displayHandlers |
Date: |
Tue, 30 Jan 2007 09:02:17 -0600 (CST) |
Author: johannes
Date: 2007-01-30 09:02:16 -0600 (Tue, 30 Jan 2007)
New Revision: 9341
Modified:
trunk/gnue-forms/src/input/displayHandlers/datehandler.py
Log:
Better algorithm for guessing the century. Improved autocompletion.
Modified: trunk/gnue-forms/src/input/displayHandlers/datehandler.py
===================================================================
--- trunk/gnue-forms/src/input/displayHandlers/datehandler.py 2007-01-27
00:36:40 UTC (rev 9340)
+++ trunk/gnue-forms/src/input/displayHandlers/datehandler.py 2007-01-30
15:02:16 UTC (rev 9341)
@@ -19,7 +19,7 @@
# write to the Free Software Foundation, Inc., 59 Temple Place
# - Suite 330, Boston, MA 02111-1307, USA.
#
-# $Id: $
+# $Id$
"""
DisplayHandler classes for input validation of date, time and datetime values
"""
@@ -47,7 +47,37 @@
# =============================================================================
class DateRelated(BaseCursor):
+ """
+ Base class for all date- and time-related displayhandler
+ """
+ # -------------------------------------------------------------------------
+ # Create a display string for the current value
+ # -------------------------------------------------------------------------
+
+ def build_display(self, value, editing):
+ """
+ """
+
+ if editing:
+ mask = self._input_mask
+ else:
+ mask = self._display_mask
+
+ if value in (None, ""):
+ return ""
+
+ try:
+ return value.strftime(str(mask))
+
+ except AttributeError:
+ return str(value)
+
+
+ # -------------------------------------------------------------------------
+ # Get the order of the date's components (as defined by the given mask)
+ # -------------------------------------------------------------------------
+
def get_date_order(self, format):
sample = datetime.date(1978, 3, 21)
@@ -85,8 +115,9 @@
-class Time(BaseCursor):
- pass
+# =============================================================================
+# Display handler for date fields
+# =============================================================================
class Date(DateRelated):
@@ -100,36 +131,13 @@
DateRelated.__init__(self, entry, eventHandler, subEventHandler,
display_mask, input_mask)
- self.__input_mask = input_mask or '%x'
- self.__display_mask = display_mask or '%x'
+ self._input_mask = input_mask or gConfigForms('DateEditMask') or '%x'
+ self._display_mask = display_mask or gConfigForms('DateMask') or '%x'
- self.__order, self.__inter = self.get_date_order(self.__input_mask)
+ self.__order, self.__inter = self.get_date_order(self._input_mask)
# -------------------------------------------------------------------------
- # Create a display string for the current value
- # -------------------------------------------------------------------------
-
- def build_display(self, value, editing):
- """
- """
-
- if editing:
- mask = self.__input_mask
- else:
- mask = self.__display_mask
-
- if value in (None, ""):
- return ""
-
- try:
- return value.strftime(str(mask))
-
- except AttributeError:
- return str(value)
-
-
- # -------------------------------------------------------------------------
# Try to figure out which date the user meant
# -------------------------------------------------------------------------
@@ -142,7 +150,7 @@
try:
# First have a look wether the input follows the requested format
- temp = time.strptime(display, self.__input_mask)
+ temp = time.strptime(display, self._input_mask)
return datetime.date(*temp[0:3])
except ValueError:
@@ -195,14 +203,18 @@
kw = {}
for index, item in enumerate(values):
value = int(item)
- if index == 2 and value < 100:
- # FIXME: need a better algorithm here
- if value > 50:
+ part = self.__order[index].lower()
+
+ # If the year is given without a century we will figure out
+ # which one to use.
+ if part == 'year' and value < 100:
+ if value % 100 >= 50:
value += 1900
else:
value += 2000
- kw[self.__order[index].lower()] = value
+ kw[part] = value
+
try:
return datetime.date(**kw)
@@ -243,12 +255,18 @@
if self.__order[0].lower() == 'year':
return new_text, new_cursor
- today = datetime.date.today().strftime(str(self.__input_mask))
+ today = datetime.date.today().strftime(str(self._input_mask))
# If the text is a number it must be the first component
if new_text.isdigit():
- if self.__order[0] != 'month':
+ if len(new_text) > 2:
+ new_text = new_text[:2] + self.__inter[0] + new_text[2:]
+ new_cursor += 1
+ new_text += self.__inter[1] + "%s" % datetime.date.today().year
+
+ elif self.__order[0] != 'month':
new_text = new_text + today[today.index(self.__inter[0]):]
+
return new_text, new_cursor
else:
@@ -277,6 +295,15 @@
return new_text, new_cursor
+
+# =============================================================================
+# Display handler for time fields
+# =============================================================================
+
+class Time(BaseCursor):
+ pass
+
+
class DateTime(BaseCursor):
"""
Class to handle the display and entry of date based fields.
@@ -285,19 +312,19 @@
inputMask):
BaseCursor.__init__(self, entry, eventHandler, subEventHandler,
displayMask, inputMask)
- self.__displayMask = displayMask
- self.__inputMask = inputMask
+ self._displayMask = displayMask
+ self._inputMask = inputMask
def build_display(self, value, editing):
if editing:
- if self.__inputMask:
- format = self.__inputMask
+ if self._inputMask:
+ format = self._inputMask
else:
format = "%m/%d/%Y"
else:
- if self.__displayMask:
- format = self.__displayMask
+ if self._displayMask:
+ format = self._displayMask
else:
format = "%m/%d/%y"
@@ -314,9 +341,9 @@
return None
# TODO: Replace with format mask
- if self.__inputMask:
+ if self._inputMask:
try:
- tempVal = time.strptime (display, self.__inputMask)
+ tempVal = time.strptime (display, self._inputMask)
return datetime.datetime(*tempVal[0:6])
except ValueError:
raise InvalidDateLiteral, display
Property changes on: trunk/gnue-forms/src/input/displayHandlers/datehandler.py
___________________________________________________________________
Name: svn:keywords
+ Id
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [gnue] r9341 - trunk/gnue-forms/src/input/displayHandlers,
johannes <=