From 570d523787631173d520b7ddd04980b768b5884e Mon Sep 17 00:00:00 2001 From: viseshrp Date: Thu, 22 Aug 2024 11:37:53 +0530 Subject: [PATCH 1/2] add iteratorGenerator API --- .../core/utils/report_objects.py | 53 ++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/src/ansys/dynamicreporting/core/utils/report_objects.py b/src/ansys/dynamicreporting/core/utils/report_objects.py index 87cf56472..be3b9d89b 100644 --- a/src/ansys/dynamicreporting/core/utils/report_objects.py +++ b/src/ansys/dynamicreporting/core/utils/report_objects.py @@ -34,7 +34,6 @@ except ImportError: has_numpy = False - logger = logging.getLogger(__name__) @@ -3605,3 +3604,55 @@ def set_analysis_params(self, value=""): d["stats_params"] = {} d["stats_params"]["analysis_parameters"] = json.dumps(value) self.params = json.dumps(d) + + +class iteratorGeneratorREST(GeneratorREST): + """Representation of Iterator Generator Template.""" + + def __init__(self): + super().__init__() + + def get_iteration_tags(self): + params = json.loads(self.params) + return [params.get("tag", ""), params.get("secondary_tag", "")] + + def set_iteration_tags(self, value=None): + if value is None: + value = ["", ""] + if not isinstance(value, list): + raise ValueError("Error: input needs to be a list") + if len(value) != 2: + raise ValueError( + "Error: input list needs to contain 2 elements: iteration tag and secondary sorting tag" + ) + for val in value: + if not isinstance(val, str): + raise ValueError("Error: input tags need to be strings") + params = json.loads(self.params) + params["tag"] = value[0] + params["secondary_tag"] = value[1] + self.params = json.dumps(params) + + def get_sort_tag(self): + params = json.loads(self.params) + return [params.get("sort", True), params.get("reverse_sort", False)] + + def set_sort_tag(self, value=None): + if value is None: + value = [True, False] + if not isinstance(value, list): + raise ValueError("Error: input needs to be a list") + if len(value) != 2: + raise ValueError( + "Error: input list needs to contain 2 elements: sort items by tag and reverse the sort" + ) + for val in value: + if not isinstance(val, bool): + raise ValueError("Error: input tags need to be True/False values") + params = json.loads(self.params) + params["sort"] = value[0] + if value[0] is False: + params["reverse_sort"] = False + else: + params["reverse_sort"] = value[1] + self.params = json.dumps(params) From 067af5e9f526c20c76a48a88881c05145fb06335 Mon Sep 17 00:00:00 2001 From: viseshrp Date: Fri, 23 Aug 2024 16:25:26 +0530 Subject: [PATCH 2/2] add tests for iteratorGenerator --- tests/test_report_objects.py | 52 ++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/tests/test_report_objects.py b/tests/test_report_objects.py index df072ccfa..7ab294dc9 100755 --- a/tests/test_report_objects.py +++ b/tests/test_report_objects.py @@ -1807,6 +1807,58 @@ def test_statistical_generator() -> bool: assert succ and succ_two and succ_three and succ_four and succ_five and succ_six +@pytest.mark.ado_test +def test_generator_iterator() -> bool: + a = ro.iteratorGeneratorREST() + succ = a.get_iteration_tags() == ["", ""] + a.set_iteration_tags() + succ_two = False + try: + a.set_iteration_tags(value=1) + except ValueError as e: + succ_two = "Error: input needs to be a list" in str(e) + succ_three = False + try: + a.set_iteration_tags(value=[]) + except ValueError as e: + succ_three = "needs to contain 2 elements" in str(e) + succ_four = False + try: + a.set_iteration_tags(value=[1, 1]) + except ValueError as e: + succ_four = "need to be strings" in str(e) + a.set_iteration_tags(value=["tag", "a"]) + succ_five = a.get_iteration_tags() == ["tag", "a"] + a.set_iteration_tags(value=["", ""]) + succ_six = a.get_iteration_tags() == ["", ""] + a.set_iteration_tags(value=["tag", "a"]) + succ_seven = a.get_sort_tag() == [True, False] + a.set_iteration_tags(value=["sort", "reverse_sort"]) + succ_eight = a.get_sort_tag() == [True, False] + a.set_sort_tag() + succ_nine = False + try: + a.set_sort_tag(value=1) + except ValueError as e: + succ_nine = "input needs to be a list" in str(e) + succ_ten = False + try: + a.set_sort_tag(value=[1]) + except ValueError as e: + succ_ten = "contain 2 elements" in str(e) + succ_eleven = False + try: + a.set_sort_tag(value=[1, 1]) + except ValueError as e: + succ_eleven = "need to be True/False" in str(e) + a.set_sort_tag(value=[False, True]) + succ_twelve = a.get_sort_tag() == [False, False] + succ_a = succ and succ_two + succ_three + succ_four + succ_five + succ_b = succ_six + succ_seven + succ_eight + succ_nine + succ_c = succ_ten + succ_eleven + succ_twelve + assert succ_a and succ_b and succ_c + + def test_item_payload(adr_service_query) -> bool: try: for i in adr_service_query.query():