aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gn3/db/case_attributes.py61
1 files changed, 35 insertions, 26 deletions
diff --git a/gn3/db/case_attributes.py b/gn3/db/case_attributes.py
index 645dec7..07b7bdb 100644
--- a/gn3/db/case_attributes.py
+++ b/gn3/db/case_attributes.py
@@ -159,35 +159,33 @@ def view_change(cursor, change_id: int) -> dict:
return {}
-def get_changes(cursor, directory: Path) -> dict:
+def get_changes(cursor, change_type: EditStatus, directory: Path) -> dict:
"""Retrieves case attribute changes for given lmdb data in
directory categorized by review status.
- Fetches change IDs from an LMDB database, categorized as review,
- approved, or rejected. Queries the `caseattributes_audit` table to
- retrieve details for these changes using the internal
- `__fetch_case_attrs_changes__` function. Returns a dictionary
- with change details grouped by status.
+ Fetches change IDs from an LMDB database, categorized into the
+ "data" key based on the EditStatus
Args:
- cursor: A MySQLdb cursor for executing SQL queries.
+ - change_type (EditStatus): The status of changes to retrieve
+ ('review', 'approved', or 'rejected').
- directory (Path): The base directory path for the LMDB
database.
Returns:
- dict: A dictionary with three keys: 'reviews', 'approvals',
- and 'rejections'. Each key maps to a dictionary where keys
- are change IDs (int) and values are change details
- (dictionaries with 'editor', 'json_diff_data', and
- 'time_stamp'). Empty dictionaries are returned for
- categories with no changes.
+ dict: A dictionary with two keys:
+ -'count': A dictionary with counts of 'reviews',
+ 'approvals' and 'rejections'.
+ - 'data': contains the json diff data of the modified data
Raises:
json.JSONDecodeError: If any `json_diff_data` in the audit
table cannot be deserialized by
`__fetch_case_attrs_changes__`.
TypeError: If `inbredset_id` is not an integer or if LMDB data
- cannot be deserialized.
+ cannot be deserialized. Also raised when an invalid change_id
+ is used.
"""
directory.mkdir(parents=True, exist_ok=True)
@@ -201,20 +199,31 @@ def get_changes(cursor, directory: Path) -> dict:
approved_ids = pickle.loads(approvals)
if rejections := txn.get(b"rejected"):
rejected_ids = pickle.loads(rejections)
- reviews, approvals, rejections = {}, {}, {}
- if review_ids:
- reviews = dict(zip(review_ids,
- __fetch_case_attrs_changes__(cursor, tuple(review_ids))))
- if approved_ids:
- approvals = dict(zip(approved_ids,
- __fetch_case_attrs_changes__(cursor, tuple(approved_ids))))
- if rejected_ids:
- rejections = dict(zip(rejected_ids,
- __fetch_case_attrs_changes__(cursor, tuple(rejected_ids))))
+ changes = {}
+ match change_type:
+ case EditStatus.review:
+ changes = dict(
+ zip(review_ids,
+ __fetch_case_attrs_changes__(cursor, tuple(review_ids)))
+ )
+ case EditStatus.approved:
+ changes = dict(
+ zip(approved_ids,
+ __fetch_case_attrs_changes__(cursor, tuple(approved_ids)))
+ )
+ case EditStatus.rejected:
+ changes = dict(zip(rejected_ids,
+ __fetch_case_attrs_changes__(cursor, tuple(rejected_ids))))
+ case _:
+ raise TypeError
return {
- "reviews": reviews,
- "approvals": approvals,
- "rejections": rejections
+ "change-type": str(change_type),
+ "count": {
+ "reviews": len(review_ids),
+ "approval": len(approved_ids),
+ "rejections": len(rejected_ids)
+ },
+ "data": changes
}