diff options
| -rw-r--r-- | gn3/api/case_attributes.py | 22 | ||||
| -rw-r--r-- | gn3/db/case_attributes.py | 35 |
2 files changed, 27 insertions, 30 deletions
diff --git a/gn3/api/case_attributes.py b/gn3/api/case_attributes.py index 7053e6a..b7c04f9 100644 --- a/gn3/api/case_attributes.py +++ b/gn3/api/case_attributes.py @@ -468,27 +468,7 @@ def __reject_diff__(conn: Connection, return diff_filename -def __update_case_attributes__( - cursor, inbredset_id: int, modifications) -> None: - for strain, changes in modifications.items(): - for case_attribute, value in changes.items(): - value = value.strip() - cursor.execute("SELECT Id AS StrainId, Name AS StrainName FROM Strain " - "WHERE Name = %s", - (strain,)) - - strain_id, _ = cursor.fetchone() - cursor.execute("SELECT CaseAttributeId, Name AS CaseAttributeName " - "FROM CaseAttribute WHERE InbredSetId = %s " - "AND Name = %s", - (inbredset_id, case_attribute,)) - case_attr_id, _ = cursor.fetchone() - cursor.execute( - "INSERT INTO CaseAttributeXRefNew" - "(InbredSetId, StrainId, CaseAttributeId, Value) " - "VALUES (%s, %s, %s, %s) " - "ON DUPLICATE KEY UPDATE Value=VALUES(value)", - (inbredset_id, strain_id, case_attr_id, value,)) + @caseattr.route("/<int:inbredset_id>/add", methods=["POST"]) diff --git a/gn3/db/case_attributes.py b/gn3/db/case_attributes.py index 9f34ed5..afebb7f 100644 --- a/gn3/db/case_attributes.py +++ b/gn3/db/case_attributes.py @@ -81,15 +81,18 @@ def queue_edit(cursor, directory: Path, edit: CaseAttributeEdit) -> Optional[int return _id - -def update_case_attribute_table(cursor, edit: CaseAttributeEdit) -> int: - # Check for ID in LMDB. If it exists: - # 1. Update the case_attributes in mysql - # 2. Update the review list, remove from lmdb, and create a new approved set. - # 3. +def update_case_attribute(cursor, directory: Path, + change_id: int, edit: CaseAttributeEdit) -> int: + directory = f"{directory}/case-attributes/{edit.inbredset_id}" + if not os.path.exists(directory): + os.makedirs(directory) + env = lmdb.open(directory, map_size=8_000_000) # 1 MB + modifications = {} + if edit.changes.get("Modifications").get("Current"): + modifications = edit.get("Modifications").get("Current") for strain, changes in modifications.items(): for case_attribute, value in changes.items(): - value = value.strip() + value = str(value).strip() cursor.execute("SELECT Id AS StrainId, Name AS StrainName FROM Strain " "WHERE Name = %s", (strain,)) @@ -98,11 +101,25 @@ def update_case_attribute_table(cursor, edit: CaseAttributeEdit) -> int: cursor.execute("SELECT CaseAttributeId, Name AS CaseAttributeName " "FROM CaseAttribute WHERE InbredSetId = %s " "AND Name = %s", - (inbredset_id, case_attribute,)) + (inbredset_id, edit.inbredset_id,)) case_attr_id, _ = cursor.fetchone() cursor.execute( "INSERT INTO CaseAttributeXRefNew" "(InbredSetId, StrainId, CaseAttributeId, Value) " "VALUES (%s, %s, %s, %s) " "ON DUPLICATE KEY UPDATE Value=VALUES(value)", - (inbredset_id, strain_id, case_attr_id, value,)) + (edit.inbredset_id, strain_id, case_attr_id, value,)) + cursor.execute( + "UPDATE caseattributes_audit SET ", + "status = %s WHERE id = %s", + (str(edit.status), change_id,)) + with env.begin(write=True) as txn: + review_ids, approved_ids = set(), set() + if reviews := txn.get(b"review"): + review_ids = pickle.loads(reviews) + review_ids.remove(change_id) + if approvals := txn.get(b"review"): + approved_ids = pickle.loads(approvals) + approved_ids.add(change_id) + txn.put(b"review", pickle.dumps(review_ids)) + txn.put(b"approved", pickle.dumps(approved_ids)) |
