diff options
-rw-r--r-- | gn3/db/sample_data.py | 32 | ||||
-rw-r--r-- | tests/unit/db/test_sample_data.py | 27 |
2 files changed, 43 insertions, 16 deletions
diff --git a/gn3/db/sample_data.py b/gn3/db/sample_data.py index d7ea9d3..47be5b0 100644 --- a/gn3/db/sample_data.py +++ b/gn3/db/sample_data.py @@ -5,6 +5,7 @@ import collections import MySQLdb from gn3.csvcmp import extract_strain_name +from gn3.csvcmp import parse_csv_column _MAP = { @@ -169,16 +170,26 @@ def update_sample_data( conn, value, strain_id, case_attr, inbredset_id ): if value != "x": + (id_, name) = parse_csv_column(case_attr) with conn.cursor() as cursor: - cursor.execute( - "UPDATE CaseAttributeXRefNew " - "SET Value = %s " - "WHERE StrainId = %s AND CaseAttributeId = " - "(SELECT CaseAttributeId FROM " - "CaseAttribute WHERE Name = %s) " - "AND InbredSetId = %s", - (value, strain_id, case_attr, inbredset_id), - ) + if id_: + cursor.execute( + "UPDATE CaseAttributeXRefNew " + "SET Value = %s " + f"WHERE StrainId = %s AND CaseAttributeId = %s " + "AND InbredSetId = %s", + (value, strain_id, id_, inbredset_id), + ) + else: + cursor.execute( + "UPDATE CaseAttributeXRefNew " + "SET Value = %s " + "WHERE StrainId = %s AND CaseAttributeId = " + "(SELECT CaseAttributeId FROM " + "CaseAttribute WHERE Name = %s) " + "AND InbredSetId = %s", + (value, strain_id, name, inbredset_id), + ) return cursor.rowcount return 0 @@ -202,6 +213,7 @@ def update_sample_data( updated_data=updated_data, csv_header=csv_header, ) + if __actions.get("update"): _csv_header = __actions["update"]["csv_header"] _data = __actions["update"]["data"] @@ -214,7 +226,7 @@ def update_sample_data( else: count += __update_case_attribute( conn=conn, - value=none_case_attrs[header](value), + value=value, strain_id=strain_id, case_attr=header, inbredset_id=inbredset_id, diff --git a/tests/unit/db/test_sample_data.py b/tests/unit/db/test_sample_data.py index dad7169..af00393 100644 --- a/tests/unit/db/test_sample_data.py +++ b/tests/unit/db/test_sample_data.py @@ -154,7 +154,6 @@ def test_update_sample_data(mocker): mock_conn = mocker.MagicMock() strain_id, data_id, inbredset_id = 1, 17373, 20 with mock_conn.cursor() as cursor: - # cursor.fetchone.side_effect = (0, [19, ], 0) mocker.patch( "gn3.db.sample_data.get_sample_data_ids", return_value=(strain_id, data_id, inbredset_id), @@ -164,19 +163,20 @@ def test_update_sample_data(mocker): update_sample_data( conn=mock_conn, trait_name=35, - original_data="BXD1,18,x,0,x", - updated_data="BXD1,x,2,1,F", - csv_header="Strain Name,Value,SE,Count,Sex", + original_data="BXD1,18,x,0,x,M,x,Red", + updated_data="BXD1,x,2,1,2,F,2,Green", + csv_header="Strain Name,Value,SE,Count,pH,Sex (13),Age,Color", phenotype_id=10007, ) # pylint: disable=[E1101] gn3.db.sample_data.insert_sample_data.assert_called_once_with( conn=mock_conn, trait_name=35, - data="BXD1,2,F", - csv_header="Strain Name,SE,Sex", + data="BXD1,2,2,2", + csv_header="Strain Name,SE,pH,Age", phenotype_id=10007, ) + # pylint: disable=[E1101] gn3.db.sample_data.delete_sample_data.assert_called_once_with( conn=mock_conn, @@ -185,12 +185,27 @@ def test_update_sample_data(mocker): csv_header="Strain Name,Value", phenotype_id=10007, ) + cursor.execute.assert_has_calls( [ mocker.call( "UPDATE NStrain SET count = %s " "WHERE StrainId = %s AND DataId = %s", ("1", strain_id, data_id), + ), + mocker.call( + "UPDATE CaseAttributeXRefNew SET Value = %s " + "WHERE StrainId = %s AND CaseAttributeId = %s AND " + "InbredSetId = %s", + ("F", strain_id, "13", inbredset_id), + ), + mocker.call( + "UPDATE CaseAttributeXRefNew SET Value = %s " + "WHERE StrainId = %s AND CaseAttributeId = " + "(SELECT CaseAttributeId FROM " + "CaseAttribute WHERE Name = %s) " + "AND InbredSetId = %s", + ("Green", strain_id, "Color", inbredset_id), ) ], any_order=False, |