IS_DATE/DATETIME/etc. (timezone=user_timezone in hrs)
This commit is contained in:
1 parent
3b1a5be1be
commit
8857e3d521
2 files changed
+35
-13
No files matched your search
@@ -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
@@ -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)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user