+4
-17
@@ -2165,29 +2165,22 @@ class IS_DATE(Validator):
|
|||||||
INPUT(_type='text', _name='name', requires=IS_DATE())
|
INPUT(_type='text', _name='name', requires=IS_DATE())
|
||||||
|
|
||||||
date has to be in the ISO8960 format YYYY-MM-DD
|
date has to be in the ISO8960 format YYYY-MM-DD
|
||||||
timezome must be None or a pytz.timezone("America/Chicago") object
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, format='%Y-%m-%d',
|
def __init__(self, format='%Y-%m-%d',
|
||||||
error_message='Enter date as %(format)s',
|
error_message='Enter date as %(format)s'):
|
||||||
timezone=None):
|
|
||||||
self.format = translate(format)
|
self.format = translate(format)
|
||||||
self.error_message = str(error_message)
|
self.error_message = str(error_message)
|
||||||
self.timezone = timezone
|
|
||||||
self.extremes = {}
|
self.extremes = {}
|
||||||
|
|
||||||
def __call__(self, value):
|
def __call__(self, value):
|
||||||
ovalue = value
|
ovalue = value
|
||||||
if isinstance(value, datetime.date):
|
if isinstance(value, datetime.date):
|
||||||
if self.timezone is not None:
|
|
||||||
value = value - datetime.timedelta(seconds=self.timezone*3600)
|
|
||||||
return (value, None)
|
return (value, None)
|
||||||
try:
|
try:
|
||||||
(y, m, d, hh, mm, ss, t0, t1, t2) = \
|
(y, m, d, hh, mm, ss, t0, t1, t2) = \
|
||||||
time.strptime(value, str(self.format))
|
time.strptime(value, str(self.format))
|
||||||
value = datetime.date(y, m, d)
|
value = datetime.date(y, m, d)
|
||||||
if self.timezone is not None:
|
|
||||||
value = self.timezone.localize(value).astimezone(utc)
|
|
||||||
return (value, None)
|
return (value, None)
|
||||||
except:
|
except:
|
||||||
self.extremes.update(IS_DATETIME.nice(self.format))
|
self.extremes.update(IS_DATETIME.nice(self.format))
|
||||||
@@ -2203,11 +2196,7 @@ class IS_DATE(Validator):
|
|||||||
format = format.replace('%Y', y)
|
format = format.replace('%Y', y)
|
||||||
if year < 1900:
|
if year < 1900:
|
||||||
year = 2000
|
year = 2000
|
||||||
if self.timezone is not None:
|
d = datetime.date(year, value.month, value.day)
|
||||||
d = datetime.datetime(year, value.month, value.day)
|
|
||||||
d = d.replace(tzinfo=utc).astimezone(self.timezone)
|
|
||||||
else:
|
|
||||||
d = datetime.date(year, value.month, value.day)
|
|
||||||
return d.strftime(format)
|
return d.strftime(format)
|
||||||
|
|
||||||
|
|
||||||
@@ -2307,8 +2296,7 @@ class IS_DATE_IN_RANGE(IS_DATE):
|
|||||||
minimum=None,
|
minimum=None,
|
||||||
maximum=None,
|
maximum=None,
|
||||||
format='%Y-%m-%d',
|
format='%Y-%m-%d',
|
||||||
error_message=None,
|
error_message=None):
|
||||||
timezone=None):
|
|
||||||
self.minimum = minimum
|
self.minimum = minimum
|
||||||
self.maximum = maximum
|
self.maximum = maximum
|
||||||
if error_message is None:
|
if error_message is None:
|
||||||
@@ -2320,8 +2308,7 @@ class IS_DATE_IN_RANGE(IS_DATE):
|
|||||||
error_message = "Enter date in range %(min)s %(max)s"
|
error_message = "Enter date in range %(min)s %(max)s"
|
||||||
IS_DATE.__init__(self,
|
IS_DATE.__init__(self,
|
||||||
format=format,
|
format=format,
|
||||||
error_message=error_message,
|
error_message=error_message)
|
||||||
timezone=timezone)
|
|
||||||
self.extremes = dict(min=self.formatter(minimum),
|
self.extremes = dict(min=self.formatter(minimum),
|
||||||
max=self.formatter(maximum))
|
max=self.formatter(maximum))
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user