From 3ac8cc38768bf3aca1ecc75db094bcb97b36cce7 Mon Sep 17 00:00:00 2001
From: Munyoki Kilyungi
Date: Tue, 12 Mar 2024 00:05:17 +0300
Subject: Define GroupRole using frozen dataclass.

* gn_auth/auth/authorisation/resources/groups/models.py: Import
dataclasses.asdict.  Remove dictify import.
(GroupRole): Use frozen dataclass.
(GroupRole.dictify): Replace dictify(...) with self.role.dictify().
* gn_auth/auth/authorisation/resources/groups/views.py:
(group_roles): Replace dictify with asdict.
(view_group_role): Ditto.

Signed-off-by: Munyoki Kilyungi <me@bonfacemunyoki.com>
---
 gn_auth/auth/authorisation/resources/groups/models.py | 13 ++++---------
 gn_auth/auth/authorisation/resources/groups/views.py  |  4 ++--
 2 files changed, 6 insertions(+), 11 deletions(-)

(limited to 'gn_auth')

diff --git a/gn_auth/auth/authorisation/resources/groups/models.py b/gn_auth/auth/authorisation/resources/groups/models.py
index 9a60df9..3afa7bf 100644
--- a/gn_auth/auth/authorisation/resources/groups/models.py
+++ b/gn_auth/auth/authorisation/resources/groups/models.py
@@ -2,14 +2,13 @@
 import json
 from uuid import UUID, uuid4
 from functools import reduce
-from dataclasses import dataclass
+from dataclasses import dataclass, asdict
 from typing import Any, Sequence, Iterable, Optional, NamedTuple
 
 from flask import g
 from pymonad.maybe import Just, Maybe, Nothing
 
 from gn_auth.auth.db import sqlite3 as db
-from gn_auth.auth.dictify import dictify
 from gn_auth.auth.authentication.users import User, user_by_id
 
 from gn_auth.auth.authorisation.checks import authorised_p
@@ -38,18 +37,14 @@ DUMMY_GROUP = Group(
         "group-description": "This is a dummy group to use as a placeholder"
     })
 
-class GroupRole(NamedTuple):
+
+@dataclass(frozen=True)
+class GroupRole:
     """Class representing a role tied/belonging to a group."""
     group_role_id: UUID
     group: Group
     role: Role
 
-    def dictify(self) -> dict[str, Any]:
-        """Return a dict representation of `GroupRole` objects."""
-        return {
-            "role": dictify(self.role)
-            "group_role_id": self.group_role_id, "group": asdict(self.group),
-        }
 
 class GroupCreationError(AuthorisationError):
     """Raised whenever a group creation fails"""
diff --git a/gn_auth/auth/authorisation/resources/groups/views.py b/gn_auth/auth/authorisation/resources/groups/views.py
index b655a0f..8b471ff 100644
--- a/gn_auth/auth/authorisation/resources/groups/views.py
+++ b/gn_auth/auth/authorisation/resources/groups/views.py
@@ -308,7 +308,7 @@ def group_roles():
                                    tuple()))
                     for row in cursor.fetchall())
         return jsonify(tuple(
-            dictify(role) for role in with_db_connection(__list_roles__)))
+            asdict(role) for role in with_db_connection(__list_roles__)))
 
 @groups.route("/privileges", methods=["GET"])
 @require_oauth("profile group")
@@ -384,7 +384,7 @@ def view_group_role(group_role_id: uuid.UUID):
                 raise AuthorisationError(
                     "A user without a group cannot view group roles.")
             return group_role_by_id(conn, group, group_role_id)
-        return jsonify(dictify(with_db_connection(__group_role__)))
+        return jsonify(asdict(with_db_connection(__group_role__)))
 
 def __add_remove_priv_to_from_role__(conn: db.DbConnection,
                                      group_role_id: uuid.UUID,
-- 
cgit v1.2.3