IS_DATE/DATETIME/etc. (timezone=user_timezone in hrs)

This commit is contained in:
mdipierro committed 2013-03-17 18:53:19 -05:00
1 parent 3b1a5be1be
commit 8857e3d521
2 files changed
+35 -13

No files matched your search

+1 -1
View File
@@ -1 +1 @@
Version 2.4.4-stable+timestamp.2013.03.17.15.27.04 Version 2.4.4-stable+timestamp.2013.03.17.18.52.33
+34 -12
View File
@@ -2219,22 +2219,29 @@ class IS_DATE(Validator):
""" """
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
if isinstance(value, datetime.date): if isinstance(value, datetime.date):
if 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 timezone is not None:
value = value - datetime.timedelta(seconds=self.timezone*3600)
return (value, None) return (value, None)
except: except:
self.extremes.update(IS_DATETIME.nice(self.format)) self.extremes.update(IS_DATETIME.nice(self.format))
return (value, translate(self.error_message) % self.extremes) return (ovalue, translate(self.error_message) % self.extremes)
def formatter(self, value): def formatter(self, value):
if value is None: if value is None:
@@ -2247,6 +2254,8 @@ class IS_DATE(Validator):
if year < 1900: if year < 1900:
year = 2000 year = 2000
d = datetime.date(year, value.month, value.day) d = datetime.date(year, value.month, value.day)
if timezone is not None:
d = d + datetime.timedelta(seconds=self.timezone*3600)
return d.strftime(format) return d.strftime(format)
@@ -2279,22 +2288,27 @@ class IS_DATETIME(Validator):
return dict(format=format) return dict(format=format)
def __init__(self, format='%Y-%m-%d %H:%M:%S', def __init__(self, format='%Y-%m-%d %H:%M:%S',
error_message='enter date and time as %(format)s'): error_message='enter date and time 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.extremes = {} self.extremes = {}
self.timezone = timezone
def __call__(self, value): def __call__(self, value):
ovalue = value
if isinstance(value, datetime.datetime): if isinstance(value, datetime.datetime):
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.datetime(y, m, d, hh, mm, ss) value = datetime.datetime(y, m, d, hh, mm, ss)
if timezone is not None:
value = value - datetime.timedelta(seconds=self.timezone*3600)
return (value, None) return (value, None)
except: except:
self.extremes.update(IS_DATETIME.nice(self.format)) self.extremes.update(IS_DATETIME.nice(self.format))
return (value, translate(self.error_message) % self.extremes) return (ovalue, translate(self.error_message) % self.extremes)
def formatter(self, value): def formatter(self, value):
if value is None: if value is None:
@@ -2308,6 +2322,8 @@ class IS_DATETIME(Validator):
year = 2000 year = 2000
d = datetime.datetime(year, value.month, value.day, d = datetime.datetime(year, value.month, value.day,
value.hour, value.minute, value.second) value.hour, value.minute, value.second)
if timezone is not None:
d = d + datetime.timedelta(seconds=self.timezone*3600)
return d.strftime(format) return d.strftime(format)
@@ -2336,7 +2352,8 @@ 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:
@@ -2348,17 +2365,19 @@ 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=minimum, max=maximum) self.extremes = dict(min=minimum, max=maximum)
def __call__(self, value): def __call__(self, value):
ovalue = value
(value, msg) = IS_DATE.__call__(self, value) (value, msg) = IS_DATE.__call__(self, value)
if msg is not None: if msg is not None:
return (value, msg) return (value, msg)
if self.minimum and self.minimum > value: if self.minimum and self.minimum > value:
return (value, translate(self.error_message) % self.extremes) return (ovalue, translate(self.error_message) % self.extremes)
if self.maximum and value > self.maximum: if self.maximum and value > self.maximum:
return (value, translate(self.error_message) % self.extremes) return (ovalue, translate(self.error_message) % self.extremes)
return (value, None) return (value, None)
@@ -2386,7 +2405,8 @@ class IS_DATETIME_IN_RANGE(IS_DATETIME):
minimum=None, minimum=None,
maximum=None, maximum=None,
format='%Y-%m-%d %H:%M:%S', format='%Y-%m-%d %H:%M:%S',
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:
@@ -2398,17 +2418,19 @@ class IS_DATETIME_IN_RANGE(IS_DATETIME):
error_message = "enter date and time in range %(min)s %(max)s" error_message = "enter date and time in range %(min)s %(max)s"
IS_DATETIME.__init__(self, IS_DATETIME.__init__(self,
format=format, format=format,
error_message=error_message) error_message=error_message,
timezone=timezone)
self.extremes = dict(min=minimum, max=maximum) self.extremes = dict(min=minimum, max=maximum)
def __call__(self, value): def __call__(self, value):
ovalue = value
(value, msg) = IS_DATETIME.__call__(self, value) (value, msg) = IS_DATETIME.__call__(self, value)
if msg is not None: if msg is not None:
return (value, msg) return (value, msg)
if self.minimum and self.minimum > value: if self.minimum and self.minimum > value:
return (value, translate(self.error_message) % self.extremes) return (ovalue, translate(self.error_message) % self.extremes)
if self.maximum and value > self.maximum: if self.maximum and value > self.maximum:
return (value, translate(self.error_message) % self.extremes) return (ovalue, translate(self.error_message) % self.extremes)
return (value, None) return (value, None)