Skip to content

Commit 2420109

Browse files
var23ravfjy
authored andcommitted
Support for 'interval' filter (#87)
1 parent 3c9196a commit 2420109

File tree

2 files changed

+25
-0
lines changed

2 files changed

+25
-0
lines changed

pydruid/utils/filters.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,10 @@ def __init__(self, **args):
6161
elif args["type"] == "columnComparison":
6262
self.filter = {"filter": {"type": "columnComparison",
6363
"dimensions": args["dimensions"]}}
64+
elif args["type"] == "interval":
65+
self.filter = {"filter": {"type": "interval",
66+
"dimension": args["dimension"],
67+
"intervals": args["intervals"]}}
6468
else:
6569
raise NotImplementedError(
6670
'Filter type: {0} does not exist'.format(args['type']))
@@ -140,3 +144,18 @@ def __init__(self, dimension, lower, upper, lowerStrict=False, upperStrict=False
140144
lower=lower, upper=upper,
141145
lowerStrict=lowerStrict, upperStrict=upperStrict,
142146
alphaNumeric=alphaNumeric)
147+
148+
149+
class Interval(Filter):
150+
"""
151+
Interval filter can be used to filter by comparing dimension(__time) values to a list of intervals.
152+
153+
:ivar str dimension: Dimension to filter on.
154+
:ivar list intervals: List of ISO-8601 intervals of data to filter out.
155+
"""
156+
def __init__(self, dimension, intervals):
157+
158+
Filter.__init__(self,
159+
type='interval', dimension=dimension,
160+
intervals=intervals)
161+

tests/utils/test_filters.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,12 @@ def test_bound_filter(self):
4242
expected = {'type': 'bound', 'dimension': 'dim', 'lower': '1', 'lowerStrict': True, 'upper': '10', 'upperStrict': True, 'alphaNumeric': True}
4343
assert actual == expected
4444

45+
def test_interval_filter(self):
46+
actual = filters.Filter.build_filter(
47+
filters.Interval(dimension='dim', intervals=["2014-10-01T00:00:00.000Z/2014-10-07T00:00:00.000Z"]))
48+
expected = {'type': 'interval', 'dimension': 'dim', 'intervals': ["2014-10-01T00:00:00.000Z/2014-10-07T00:00:00.000Z"]}
49+
assert actual == expected
50+
4551
def test_and_filter(self):
4652
f1 = filters.Filter(dimension='dim1', value='val1')
4753
f2 = filters.Filter(dimension='dim2', value='val2')

0 commit comments

Comments
 (0)