Skip to content

Commit

Permalink
Merge pull request #173 from stat-kwon/master
Browse files Browse the repository at this point in the history
Add sorting functionality to data tables and update related options
  • Loading branch information
stat-kwon authored Feb 12, 2025
2 parents 753a1f2 + b8f9f96 commit f08a824
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ def __init__(
self.group_by = options.get("group_by")
self.filter = options.get("filter")
self.filter_or = options.get("filter_or")
self.sort = options.get("sort")

def get_data_and_labels_info(self) -> Tuple[dict, dict]:
data_info = {self.data_name: {}}
Expand Down Expand Up @@ -398,6 +399,7 @@ def _make_query(
"filter": self.filter,
"filter_or": self.filter_or,
"fields": {self.data_name: {"key": data_key, "operator": "sum"}},
"sort": self.sort,
}

def _add_none_value_group_by_columns(self) -> None:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ def __init__(
"PIVOT",
"ADD_LABELS",
"VALUE_MAPPING",
"SORT",
]:
raise ERROR_NOT_SUPPORTED_OPERATOR(operator=operator)

Expand Down Expand Up @@ -108,6 +109,8 @@ def load(
self.add_labels_data_table(granularity, start, end, vars)
elif self.operator == "VALUE_MAPPING":
self.value_mapping_data_table(granularity, start, end, vars)
elif self.operator == "SORT":
self.sort_data_table(granularity, start, end, vars)

self.state = "AVAILABLE"
self.error_message = None
Expand Down Expand Up @@ -506,6 +509,33 @@ def value_mapping_data_table(

self.df = df

def sort_data_table(
self,
granularity: str = "MONTHLY",
start: str = None,
end: str = None,
vars: dict = None,
) -> None:
data_table_vo = self.data_table_vos[0]
df = self._get_data_table(data_table_vo, granularity, start, end, vars)

self.label_keys = list(data_table_vo.labels_info.keys())
self.data_keys = list(data_table_vo.data_info.keys())

sort_options = self.options.get("sort")
for sort_option in sort_options:
if sort_option["key"] not in df.columns:
raise ERROR_INVALID_PARAMETER(
key="options.SORT.key",
reason=f"Invalid key: {sort_option['key']}",
)

sort_keys = [option["key"] for option in sort_options]
ascending_list = [not option.get("desc", False) for option in sort_options]

df = df.sort_values(by=sort_keys, ascending=ascending_list)
self.df = df

def _get_data_table(
self,
data_table_vo: Union[PublicDataTable, PrivateDataTable],
Expand Down

0 comments on commit f08a824

Please sign in to comment.