Skip to content

Commit 488a4aa

Browse files
author
Charles Larivier
committed
feat: add groupby.py
Signed-off-by: Charles Larivier <charles@dribbble.com>
1 parent 7ccd7e6 commit 488a4aa

File tree

2 files changed

+24
-18
lines changed

2 files changed

+24
-18
lines changed

src/metabase/mbql/groupby.py

Lines changed: 5 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
1-
from enum import Enum
1+
from metabase.mbql.base import Mbql, Option
22

3-
from metabase.mbql.base import Field
43

5-
6-
class TemporalOption(Enum):
4+
class TemporalOption(Option):
75
MINUTE = {"temporal-unit": "minute"}
86
HOUR = {"temporal-unit": "hour"}
97
DAY = {"temporal-unit": "day"}
@@ -21,24 +19,13 @@ class TemporalOption(Enum):
2119
QUARTER_OF_YEAR = {"temporal-unit": "quarter-of-year"}
2220

2321

24-
class BinOption(Enum):
22+
class BinOption(Option):
2523
AUTO = {"binning": {"strategy": "default"}}
2624
BINS_10 = {"binning": {"strategy": "num-bins", "num-bins": 10}}
2725
BINS_50 = {"binning": {"strategy": "num-bins", "num-bins": 50}}
2826
BINS_100 = {"binning": {"strategy": "num-bins", "num-bins": 100}}
2927
NONE = None
3028

3129

32-
class GroupBy(Field):
33-
def __init__(self, field_id: int, option=None):
34-
super(GroupBy, self).__init__(id=field_id, option=option)
35-
36-
37-
class TemporalGroupBy(GroupBy):
38-
def __init__(self, field_id: int, option: TemporalOption):
39-
super(TemporalGroupBy, self).__init__(field_id=field_id, option=option.value)
40-
41-
42-
class BinnedGroupBy(GroupBy):
43-
def __init__(self, field_id: int, option: BinOption):
44-
super(BinnedGroupBy, self).__init__(field_id=field_id, option=option.value)
30+
class GroupBy(Mbql):
31+
pass

tests/mbql/test_groupby.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
from unittest import TestCase
2+
3+
from metabase.mbql.groupby import BinOption, GroupBy, TemporalOption
4+
5+
6+
class GroupbyTests(TestCase):
7+
def test_groupby_compile(self):
8+
"""Ensure GroupBy.compile() returns ["field", self.id, self.option]"""
9+
groupby = GroupBy(id=4)
10+
self.assertEqual(["field", 4, None], groupby.compile())
11+
12+
groupby = GroupBy(id=4, option=TemporalOption.DAY)
13+
self.assertEqual(["field", 4, {"temporal-unit": "day"}], groupby.compile())
14+
15+
groupby = GroupBy(id=4, option=BinOption.BINS_10)
16+
self.assertEqual(
17+
["field", 4, {"binning": {"strategy": "num-bins", "num-bins": 10}}],
18+
groupby.compile(),
19+
)

0 commit comments

Comments
 (0)