api: fix date parsing (#52172)
This commit is contained in:
parent
7c36ee5bc9
commit
bbd93a1bec
|
@ -586,7 +586,7 @@ class Datetimes(APIView):
|
|||
date_start = make_aware(
|
||||
datetime.datetime.combine(parse_date(date_start), datetime.time(0, 0))
|
||||
)
|
||||
except TypeError:
|
||||
except (TypeError, ValueError):
|
||||
raise APIError(
|
||||
_('date_start format must be YYYY-MM-DD'),
|
||||
err_class='date_start format must be YYYY-MM-DD',
|
||||
|
@ -595,7 +595,7 @@ class Datetimes(APIView):
|
|||
if date_end:
|
||||
try:
|
||||
date_end = make_aware(datetime.datetime.combine(parse_date(date_end), datetime.time(0, 0)))
|
||||
except TypeError:
|
||||
except (TypeError, ValueError):
|
||||
raise APIError(
|
||||
_('date_end format must be YYYY-MM-DD'),
|
||||
err_class='date_end format must be YYYY-MM-DD',
|
||||
|
@ -647,7 +647,7 @@ class MeetingDatetimes(APIView):
|
|||
start_datetime = make_aware(
|
||||
datetime.datetime.combine(parse_date(request.GET['date_start']), datetime.time(0, 0))
|
||||
)
|
||||
except TypeError:
|
||||
except (TypeError, ValueError):
|
||||
raise APIError(
|
||||
_('date_start format must be YYYY-MM-DD'),
|
||||
err_class='date_start format must be YYYY-MM-DD',
|
||||
|
@ -660,7 +660,7 @@ class MeetingDatetimes(APIView):
|
|||
end_datetime = make_aware(
|
||||
datetime.datetime.combine(parse_date(request.GET['date_end']), datetime.time(0, 0))
|
||||
)
|
||||
except TypeError:
|
||||
except (TypeError, ValueError):
|
||||
raise APIError(
|
||||
_('date_end format must be YYYY-MM-DD'),
|
||||
err_class='date_end format must be YYYY-MM-DD',
|
||||
|
|
|
@ -2290,10 +2290,11 @@ def test_bookings_api_filter_date_start(app, user):
|
|||
booking = Booking.objects.create(event=event, user_external_id='42')
|
||||
|
||||
app.authorization = ('Basic', ('john.doe', 'password'))
|
||||
resp = app.get('/api/bookings/', params={'user_external_id': '42', 'date_start': 'foo'}, status=400)
|
||||
assert resp.json['err'] == 1
|
||||
assert resp.json['err_class'] == "invalid payload"
|
||||
assert resp.json['err_desc'] == "invalid payload"
|
||||
for value in ['foo', '2017-05-42']:
|
||||
resp = app.get('/api/bookings/', params={'user_external_id': '42', 'date_start': value}, status=400)
|
||||
assert resp.json['err'] == 1
|
||||
assert resp.json['err_class'] == "invalid payload"
|
||||
assert resp.json['err_desc'] == "invalid payload"
|
||||
|
||||
resp = app.get('/api/bookings/', params={'user_external_id': '42', 'date_start': '2017-05-21'})
|
||||
assert resp.json['err'] == 0
|
||||
|
@ -2326,10 +2327,11 @@ def test_bookings_api_filter_date_end(app, user):
|
|||
booking = Booking.objects.create(event=event, user_external_id='42')
|
||||
|
||||
app.authorization = ('Basic', ('john.doe', 'password'))
|
||||
resp = app.get('/api/bookings/', params={'user_external_id': '42', 'date_end': 'foo'}, status=400)
|
||||
assert resp.json['err'] == 1
|
||||
assert resp.json['err_class'] == "invalid payload"
|
||||
assert resp.json['err_desc'] == "invalid payload"
|
||||
for value in ['foo', '2017-05-42']:
|
||||
resp = app.get('/api/bookings/', params={'user_external_id': '42', 'date_end': value}, status=400)
|
||||
assert resp.json['err'] == 1
|
||||
assert resp.json['err_class'] == "invalid payload"
|
||||
assert resp.json['err_desc'] == "invalid payload"
|
||||
|
||||
resp = app.get('/api/bookings/', params={'user_external_id': '42', 'date_end': '2017-05-21'})
|
||||
assert resp.json['err'] == 0
|
||||
|
@ -3688,17 +3690,19 @@ def test_agenda_api_date_range(app, some_data):
|
|||
event_dt = datetime.datetime.combine(day, datetime.datetime.strptime(event, '%H:%M').time())
|
||||
Event.objects.create(agenda=agenda2, start_datetime=make_aware(event_dt), places=2)
|
||||
|
||||
params = {'date_start': 'foo'}
|
||||
resp = app.get('/api/agenda/%s/datetimes/' % agenda2.slug, params=params, status=400)
|
||||
assert resp.json['err'] == 1
|
||||
assert resp.json['err_class'] == 'date_start format must be YYYY-MM-DD'
|
||||
assert resp.json['err_desc'] == 'date_start format must be YYYY-MM-DD'
|
||||
for value in ['foo', '2017-05-42']:
|
||||
params = {'date_start': value}
|
||||
resp = app.get('/api/agenda/%s/datetimes/' % agenda2.slug, params=params, status=400)
|
||||
assert resp.json['err'] == 1
|
||||
assert resp.json['err_class'] == 'date_start format must be YYYY-MM-DD'
|
||||
assert resp.json['err_desc'] == 'date_start format must be YYYY-MM-DD'
|
||||
|
||||
params = {'date_end': 'foo'}
|
||||
resp = app.get('/api/agenda/%s/datetimes/' % agenda2.slug, params=params, status=400)
|
||||
assert resp.json['err'] == 1
|
||||
assert resp.json['err_class'] == 'date_end format must be YYYY-MM-DD'
|
||||
assert resp.json['err_desc'] == 'date_end format must be YYYY-MM-DD'
|
||||
for value in ['foo', '2017-05-42']:
|
||||
params = {'date_end': value}
|
||||
resp = app.get('/api/agenda/%s/datetimes/' % agenda2.slug, params=params, status=400)
|
||||
assert resp.json['err'] == 1
|
||||
assert resp.json['err_class'] == 'date_end format must be YYYY-MM-DD'
|
||||
assert resp.json['err_desc'] == 'date_end format must be YYYY-MM-DD'
|
||||
|
||||
params = {'date_start': base_date.isoformat()}
|
||||
resp = app.get('/api/agenda/%s/datetimes/' % agenda2.slug, params=params)
|
||||
|
@ -5640,17 +5644,19 @@ def test_meetings_and_virtual_datetimes_date_filter(app):
|
|||
resp = app.get(virtual_api_url)
|
||||
assert len(resp.json['data']) == 24
|
||||
|
||||
params = {'date_start': 'foo'}
|
||||
resp = app.get(foo_api_url, params=params, status=400)
|
||||
assert resp.json['err'] == 1
|
||||
assert resp.json['err_class'] == 'date_start format must be YYYY-MM-DD'
|
||||
assert resp.json['err_desc'] == 'date_start format must be YYYY-MM-DD'
|
||||
for value in ['foo', '2017-05-42']:
|
||||
params = {'date_start': value}
|
||||
resp = app.get(foo_api_url, params=params, status=400)
|
||||
assert resp.json['err'] == 1
|
||||
assert resp.json['err_class'] == 'date_start format must be YYYY-MM-DD'
|
||||
assert resp.json['err_desc'] == 'date_start format must be YYYY-MM-DD'
|
||||
|
||||
params = {'date_end': 'foo'}
|
||||
resp = app.get(foo_api_url, params=params, status=400)
|
||||
assert resp.json['err'] == 1
|
||||
assert resp.json['err_class'] == 'date_end format must be YYYY-MM-DD'
|
||||
assert resp.json['err_desc'] == 'date_end format must be YYYY-MM-DD'
|
||||
for value in ['foo', '2017-05-42']:
|
||||
params = {'date_end': value}
|
||||
resp = app.get(foo_api_url, params=params, status=400)
|
||||
assert resp.json['err'] == 1
|
||||
assert resp.json['err_class'] == 'date_end format must be YYYY-MM-DD'
|
||||
assert resp.json['err_desc'] == 'date_end format must be YYYY-MM-DD'
|
||||
|
||||
# exclude weekday1 through date_start, 4 slots each day * 5 days
|
||||
params = {'date_start': (localtime(now()) + datetime.timedelta(days=2)).date().isoformat()}
|
||||
|
|
Loading…
Reference in New Issue