diff --git a/panko/api/controllers/v2/events.py b/panko/api/controllers/v2/events.py index e6c29fbc..0afa0002 100644 --- a/panko/api/controllers/v2/events.py +++ b/panko/api/controllers/v2/events.py @@ -202,12 +202,24 @@ def _event_query_to_event_filter(q): {'operator': i.op, 'supported': base.operation_kind}) raise base.ClientSideError(error) if i.field in evt_model_filter: - if i.op != 'eq': + if i.op != 'eq' and i.field in ('event_type', 'message_id'): error = (_('Operator %(operator)s is not supported. Only' ' `eq\' operator is available for field' ' %(field)s') % {'operator': i.op, 'field': i.field}) raise base.ClientSideError(error) + if i.op != 'ge' and i.field == 'start_timestamp': + error = (_('Operator %(operator)s is not supported. Only' + ' `ge\' operator is available for field' + ' %(field)s') % + {'operator': i.op, 'field': i.field}) + raise base.ClientSideError(error) + if i.op != 'le' and i.field == 'end_timestamp': + error = (_('Operator %(operator)s is not supported. Only' + ' `le\' operator is available for field' + ' %(field)s') % + {'operator': i.op, 'field': i.field}) + raise base.ClientSideError(error) evt_model_filter[i.field] = i.value elif i.field == 'all_tenants' and admin_proj: all_tenants = strutils.bool_from_string(i.value) diff --git a/panko/tests/functional/api/v2/test_event_scenarios.py b/panko/tests/functional/api/v2/test_event_scenarios.py index a2b75958..3d23b418 100644 --- a/panko/tests/functional/api/v2/test_event_scenarios.py +++ b/panko/tests/functional/api/v2/test_event_scenarios.py @@ -225,7 +225,7 @@ class TestEventAPI(EventTestBase): def test_get_events_filter_start_timestamp(self): data = self.get_json(self.PATH, headers=HEADERS, q=[{'field': 'start_timestamp', - 'op': 'eq', + 'op': 'ge', 'value': '2014-01-01T00:00:00'}]) self.assertEqual(2, len(data)) sorted_types = sorted([d['event_type'] for d in data]) @@ -240,14 +240,14 @@ class TestEventAPI(EventTestBase): expect_errors=True) self.assertEqual(400, resp.status_code) self.assertEqual(u'Operator gt is not supported. Only' - ' `eq\' operator is available for field' + ' `ge\' operator is available for field' ' start_timestamp', resp.json['error_message']['faultstring']) def test_get_events_filter_end_timestamp(self): data = self.get_json(self.PATH, headers=HEADERS, q=[{'field': 'end_timestamp', - 'op': 'eq', + 'op': 'le', 'value': '2014-01-03T00:00:00'}]) self.assertEqual(3, len(data)) event_types = ['Foo', 'Bar', 'Zoo'] @@ -262,17 +262,17 @@ class TestEventAPI(EventTestBase): expect_errors=True) self.assertEqual(400, resp.status_code) self.assertEqual(u'Operator gt is not supported. Only' - ' `eq\' operator is available for field' + ' `le\' operator is available for field' ' end_timestamp', resp.json['error_message']['faultstring']) def test_get_events_filter_start_end_timestamp(self): data = self.get_json(self.PATH, headers=HEADERS, q=[{'field': 'start_timestamp', - 'op': 'eq', + 'op': 'ge', 'value': '2014-01-02T00:00:00'}, {'field': 'end_timestamp', - 'op': 'eq', + 'op': 'le', 'value': '2014-01-03T10:00:00'}]) self.assertEqual(1, len(data)) sorted_types = sorted([d['event_type'] for d in data])