From 9c11caa55965e7adedc9d595df95387c599ea005 Mon Sep 17 00:00:00 2001 From: Iishaan Tanwar Date: Sat, 17 Jan 2026 13:58:58 +0530 Subject: [PATCH 1/2] [change] Changed api to return reset attribute in API --- openwisp_radius/api/serializers.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/openwisp_radius/api/serializers.py b/openwisp_radius/api/serializers.py index a9a96490..53d62aff 100644 --- a/openwisp_radius/api/serializers.py +++ b/openwisp_radius/api/serializers.py @@ -297,10 +297,11 @@ class Meta: class UserGroupCheckSerializer(serializers.ModelSerializer): result = serializers.SerializerMethodField() type = serializers.SerializerMethodField() + reset = serializers.SerializerMethodField() class Meta: model = RadiusGroupCheck - fields = ("attribute", "op", "value", "result", "type") + fields = ("attribute", "op", "value", "result", "type", "reset") def get_result(self, obj): try: @@ -326,6 +327,19 @@ def get_type(self, obj): else: return counter.get_attribute_type() + def get_reset(self, obj): + try: + Counter = app_settings.CHECK_ATTRIBUTE_COUNTERS_MAP[obj.attribute] + counter = Counter( + user=self.context["user"], + group=self.context["group"], + group_check=obj, + ) + start_time, end_time = counter.get_reset_timestamps() + return end_time + except (SkipCheck, ValueError, KeyError): + return None + class UserRadiusUsageSerializer(serializers.Serializer): def to_representation(self, obj): From 5d5e786235b1e7219a3737c92994b7a0e254c6eb Mon Sep 17 00:00:00 2001 From: Iishaan Tanwar Date: Sat, 17 Jan 2026 20:19:07 +0530 Subject: [PATCH 2/2] [change] Changed api to return reset attribute and updated tests --- openwisp_radius/api/serializers.py | 2 +- openwisp_radius/tests/test_api/test_api.py | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/openwisp_radius/api/serializers.py b/openwisp_radius/api/serializers.py index 53d62aff..f510b1fe 100644 --- a/openwisp_radius/api/serializers.py +++ b/openwisp_radius/api/serializers.py @@ -335,7 +335,7 @@ def get_reset(self, obj): group=self.context["group"], group_check=obj, ) - start_time, end_time = counter.get_reset_timestamps() + _, end_time = counter.get_reset_timestamps() return end_time except (SkipCheck, ValueError, KeyError): return None diff --git a/openwisp_radius/tests/test_api/test_api.py b/openwisp_radius/tests/test_api/test_api.py index 787dc73a..bceee336 100644 --- a/openwisp_radius/tests/test_api/test_api.py +++ b/openwisp_radius/tests/test_api/test_api.py @@ -1070,6 +1070,7 @@ def test_user_group_check_serializer_counter_does_not_exist(self): "result": None, "type": None, "value": "2000000000", + "reset": None, }, ) @@ -1098,6 +1099,7 @@ def test_user_radius_usage_view(self): "value": "10800", "result": 0, "type": "seconds", + "reset": checks[0]["reset"], }, ) self.assertDictEqual( @@ -1108,6 +1110,7 @@ def test_user_radius_usage_view(self): "value": "3000000000", "result": 0, "type": "bytes", + "reset": checks[1]["reset"], }, ) @@ -1139,6 +1142,7 @@ def test_user_radius_usage_view(self): "value": "10800", "result": 261, "type": "seconds", + "reset": checks[0]["reset"], }, ) self.assertDictEqual( @@ -1149,6 +1153,7 @@ def test_user_radius_usage_view(self): "value": "3000000000", "result": 2000000000, "type": "bytes", + "reset": checks[1]["reset"], }, ) @@ -1177,6 +1182,7 @@ def test_user_radius_usage_view(self): "value": "10800", "result": 522, "type": "seconds", + "reset": checks[0]["reset"], }, ) self.assertDictEqual( @@ -1187,6 +1193,7 @@ def test_user_radius_usage_view(self): "value": "3000000000", "result": 3000000000, "type": "bytes", + "reset": checks[1]["reset"], }, ) @@ -1215,6 +1222,7 @@ def test_user_radius_usage_view(self): "value": "10800", "result": 783, "type": "seconds", + "reset": checks[0]["reset"], }, ) self.assertDictEqual( @@ -1225,6 +1233,7 @@ def test_user_radius_usage_view(self): "value": "3000000000", "result": 3000000000, "type": "bytes", + "reset": checks[1]["reset"], }, ) @@ -1251,6 +1260,7 @@ def test_user_group_check_serializer_counter_does_not_exist(self): "result": None, "type": None, "value": "2000000000", + "reset": None, }, )