0001-fields-be-lax-on-date-time-format-of-date-field-sett.patch
tests/test_widgets.py | ||
---|---|---|
256 | 256 |
assert not widget.has_error() |
257 | 257 |
assert widget.parse() == '2014-01-20' |
258 | 258 | |
259 |
widget = DateWidget('test', maximum_date='1/1/2014') # accept "fr" format |
|
260 |
mock_form_submission(req, widget, {'test': '2014-1-20'}) |
|
261 |
assert widget.has_error() |
|
262 | ||
259 | 263 |
pub.cfg['language'] = {'language': 'fr'} |
260 | 264 |
widget = DateWidget('test') |
261 | 265 |
mock_form_submission(req, widget, {'test': '20/1/2014'}) |
... | ... | |
282 | 286 |
mock_form_submission(req, widget, {'test': '20/1/2014'}) |
283 | 287 |
assert widget.has_error() |
284 | 288 | |
289 |
widget = DateWidget('test', maximum_date='2014-1-1') # accept "C" format |
|
290 |
mock_form_submission(req, widget, {'test': '20/1/2014'}) |
|
291 |
assert widget.has_error() |
|
292 | ||
285 | 293 |
yesterday = (datetime.date.today() - datetime.timedelta(days=1)).strftime(widget.get_format_string()) |
286 | 294 |
tomorrow = (datetime.date.today() + datetime.timedelta(days=1)).strftime(widget.get_format_string()) |
287 | 295 |
wcs/qommon/form.py | ||
---|---|---|
943 | 943 |
self.minimum_date = None |
944 | 944 | |
945 | 945 |
if kwargs.get('minimum_date'): |
946 |
self.minimum_date = time.strptime(kwargs.get('minimum_date'), misc.date_format())[:3]
|
|
946 |
self.minimum_date = misc.get_as_datetime(kwargs.get('minimum_date')).timetuple()[:3]
|
|
947 | 947 |
del kwargs['minimum_date'] |
948 | 948 |
if kwargs.get('maximum_date'): |
949 |
self.maximum_date = time.strptime(kwargs.get('maximum_date'), misc.date_format())[:3]
|
|
949 |
self.maximum_date = misc.get_as_datetime(kwargs.get('maximum_date')).timetuple()[:3]
|
|
950 | 950 |
del kwargs['maximum_date'] |
951 | 951 |
if kwargs.get('minimum_is_future'): |
952 | 952 |
if kwargs.get('date_can_be_today'): |
wcs/qommon/misc.py | ||
---|---|---|
157 | 157 |
return '' |
158 | 158 |
return strftime.strftime(datetime_format(), t) |
159 | 159 | |
160 |
DATE_FORMATS = { |
|
161 |
'C': ['%Y-%m-%d'], |
|
162 |
'fr': ['%d/%m/%Y'], |
|
163 |
} |
|
164 | ||
165 |
DATETIME_FORMATS = { |
|
166 |
'C': ['%Y-%m-%d %H:%M'], |
|
167 |
'fr': ['%d/%m/%Y %H:%M'], |
|
168 |
} |
|
169 | ||
160 | 170 |
def datetime_format(): |
161 |
format_string = '%Y-%m-%d %H:%M' |
|
162 | 171 |
lang = get_datetime_language() |
163 |
if lang == 'fr':
|
|
164 |
format_string = '%d/%m/%Y %H:%M'
|
|
165 |
return format_string
|
|
172 |
if lang not in DATETIME_FORMATS:
|
|
173 |
lang = 'C'
|
|
174 |
return DATETIME_FORMATS[lang][0]
|
|
166 | 175 | |
167 | 176 |
def date_format(): |
168 |
format_string = '%Y-%m-%d' |
|
169 | 177 |
lang = get_datetime_language() |
170 |
if lang == 'fr':
|
|
171 |
format_string = '%d/%m/%Y'
|
|
172 |
return format_string
|
|
178 |
if lang not in DATE_FORMATS:
|
|
179 |
lang = 'C'
|
|
180 |
return DATE_FORMATS[lang][0]
|
|
173 | 181 | |
174 | 182 |
def get_as_datetime(s): |
175 |
for format_string in (datetime_format(), date_format(), '%Y-%m-%d %H:%M', '%Y-%m-%d'): |
|
183 |
formats = [datetime_format(), date_format()] # prefer current locale |
|
184 |
for value in DATETIME_FORMATS.values(): |
|
185 |
formats.extend(value) |
|
186 |
for value in DATE_FORMATS.values(): |
|
187 |
formats.extend(value) |
|
188 |
for format_string in formats: |
|
176 | 189 |
try: |
177 | 190 |
return datetime.datetime.strptime(s, format_string) |
178 | 191 |
except ValueError: |
179 |
- |