diff --git a/src/spaceone/dashboard/manager/data_table_manager/__init__.py b/src/spaceone/dashboard/manager/data_table_manager/__init__.py index 0d49c23..53977fd 100644 --- a/src/spaceone/dashboard/manager/data_table_manager/__init__.py +++ b/src/spaceone/dashboard/manager/data_table_manager/__init__.py @@ -57,7 +57,7 @@ def load_from_widget( column_sum: bool = False, ) -> dict: query_data = self._prepare_query_data( - data_table_id, granularity, start, end, group_by, sort + data_table_id, granularity, start, end, group_by, sort, vars ) cache_hash_key = utils.dict_to_hash(query_data) @@ -323,15 +323,18 @@ def change_global_variables(self, expression: str, vars: dict): return expression, gv_type_map @staticmethod - def remove_jinja_braces(expression: str) -> Union[str, float, list]: - jinja_pattern = re.compile(r"\{\{\s*(.*?)\s*\}\}") - - modified_expression = re.sub( - jinja_pattern, - lambda m: "{{" + m.group(1).replace(" ", "_") + "}}", - expression, - ) - expression = modified_expression + def remove_jinja_braces( + expression: str, + gv_type_map: dict = None, + ) -> Union[str, float, list]: + if not gv_type_map: + jinja_pattern = re.compile(r"\{\{\s*(.*?)\s*\}\}") + modified_expression = re.sub( + jinja_pattern, + lambda m: "{{" + m.group(1).replace(" ", "_") + "}}", + expression, + ) + expression = modified_expression while "{{" in expression and "}}" in expression: if re.match(r"{{\s*(\w+)\s*}}", expression): @@ -384,6 +387,7 @@ def _prepare_query_data( end: str, group_by: list, sort: list, + vars: dict, ) -> dict: user_id = self.transaction.get_meta( "authorization.user_id" @@ -399,6 +403,7 @@ def _prepare_query_data( "data_table_id": data_table_id, "widget_id": self.widget_id, "domain_id": self.domain_id, + "vars": vars, } if role_type == "WORKSPACE_MEMBER": diff --git a/src/spaceone/dashboard/manager/data_table_manager/data_source_manager.py b/src/spaceone/dashboard/manager/data_table_manager/data_source_manager.py index b497262..d4c962e 100644 --- a/src/spaceone/dashboard/manager/data_table_manager/data_source_manager.py +++ b/src/spaceone/dashboard/manager/data_table_manager/data_source_manager.py @@ -351,7 +351,7 @@ def _make_query( query_value, gv_type_map = self.change_global_variables( query_value, vars ) - query_value = self.remove_jinja_braces(query_value) + query_value = self.remove_jinja_braces(query_value, gv_type_map) if ( isinstance(query_value, str) or isinstance(query_value, int) diff --git a/src/spaceone/dashboard/manager/data_table_manager/data_transformation_manager.py b/src/spaceone/dashboard/manager/data_table_manager/data_transformation_manager.py index 4acaedc..aafd395 100755 --- a/src/spaceone/dashboard/manager/data_table_manager/data_transformation_manager.py +++ b/src/spaceone/dashboard/manager/data_table_manager/data_transformation_manager.py @@ -244,7 +244,7 @@ def query_data_table( for condition in conditions: if self.is_jinja_expression(condition): condition, gv_type_map = self.change_global_variables(condition, vars) - condition = self.remove_jinja_braces(condition) + condition = self.remove_jinja_braces(condition, gv_type_map) condition = self.change_expression_data_type(condition, gv_type_map) condition = self.change_space_variable(condition) @@ -295,7 +295,7 @@ def evaluate_data_table( condition, gv_type_map = self.change_global_variables( condition, vars ) - condition = self.remove_jinja_braces(condition) + condition = self.remove_jinja_braces(condition, gv_type_map) condition = self.change_expression_data_type(condition, gv_type_map) condition = self.change_space_variable(condition) @@ -303,7 +303,9 @@ def evaluate_data_table( value_expression, gv_type_map = self.change_global_variables( value_expression, vars ) - value_expression = self.remove_jinja_braces(value_expression) + value_expression = self.remove_jinja_braces( + value_expression, gv_type_map + ) value_expression = self.change_expression_data_type( value_expression, gv_type_map ) @@ -897,7 +899,7 @@ def filter_data(self, df: pd.DataFrame, vars: dict) -> pd.DataFrame: if self.is_jinja_expression(condition): condition, gv_type_map = self.change_global_variables(condition, vars) - condition = self.remove_jinja_braces(condition) + condition = self.remove_jinja_braces(condition, gv_type_map) condition = self.change_expression_data_type(condition, gv_type_map) condition = self.change_space_variable(condition)