"""Module that contains functions for editing case-attribute data"""
from typing import Any, Optional, Tuple
import json
import MySQLdb
def get_case_attributes(conn) -> Optional[Tuple]:
"""Get all the case attributes from the database."""
with conn.cursor() as cursor:
cursor.execute("SELECT Id, Name, Description FROM CaseAttribute")
return cursor.fetchall()
def get_unreviewed_diffs(conn: Any) -> Optional[tuple]:
"""Fetch all case attributes in GN"""
with conn.cursor() as cursor:
cursor.execute(
"SELECT id, editor, json_diff_data FROM "
"caseattributes_audit WHERE status = 'review'"
)
return cursor.fetchall()
def insert_case_attribute_audit(
conn: Any, status: str, author: str, data: str
) -> int:
"""Update the case_attribute_audit table"""
rowcount = 0
try:
with conn.cursor() as cursor:
cursor.execute(
"INSERT INTO caseattributes_audit "
"(status, editor, json_diff_data) "
"VALUES (%s, %s, %s)",
(status, author, data,),
)
rowcount = cursor.rowcount
except Exception as _e:
raise MySQLdb.Error(_e) from _e
return rowcount
def reject_case_attribute(conn: Any, case_attr_audit_id: int) -> int:
"""Given the id of the json_diff in the case_attribute_audit table, reject
it"""
rowcount = 0
try:
with conn.cursor() as cursor:
cursor.execute(
"UPDATE caseattributes_audit SET "
"status = 'rejected' WHERE id = %s",
(case_attr_audit_id,),
)
rowcount = cursor.rowcount
except Exception as _e:
raise MySQLdb.Error(_e) from _e
return rowcount
def approve_case_attribute(conn: Any, case_attr_audit_id: int) -> int:
"""Given the id of the json_diff in the case_attribute_audit table,
approve it
"""
rowcount = 0
try:
with conn.cursor() as cursor:
cursor.execute(
"SELECT json_diff_data FROM caseattributes_audit "
"WHERE id = %s",
(case_attr_audit_id,),
)
diff_data = cursor.fetchone()
if diff_data:
diff_data = json.loads(diff_data[0])
# Insert (Most Important)
if diff_data.get("Insert"):
data = diff_data.get("Insert")
cursor.execute(
"INSERT INTO CaseAttribute "
"(Name, Description) VALUES "
"(%s, %s)",
(
data.get("name").strip(),
data.get("description").strip(),
),
)
# Delete
elif diff_data.get("Deletion"):
data = diff_data.get("Deletion")
cursor.execute(
"DELETE FROM CaseAttribute " "WHERE Id = %s",
(data.get("id"),),
)
# Modification
elif diff_data.get("Modification"):
data = diff_data.get("Modification")
if desc_ := data.get("description"):
cursor.execute(
"UPDATE CaseAttribute SET "
"Description = %s WHERE Id = %s",
(
desc_.get("Current"),
diff_data.get("id"),
),
)
if name_ := data.get("name"):
cursor.execute(
"UPDATE CaseAttribute SET "
"Name = %s WHERE Id = %s",
(
name_.get("Current"),
diff_data.get("id"),
),
)
if cursor.rowcount:
cursor.execute(
"UPDATE caseattributes_audit SET "
"status = 'approved' WHERE id = %s",
(case_attr_audit_id,),
)
rowcount = cursor.rowcount
except Exception as _e:
raise MySQLdb.Error(_e) from _e
return rowcount