|
7 | 7 | from synapseclient import Synapse |
8 | 8 | from synapseclient.core.constants.concrete_types import ( |
9 | 9 | FILE_BASED_METADATA_TASK_PROPERTIES, |
| 10 | + GRID_CSV_IMPORT_REQUEST, |
10 | 11 | RECORD_BASED_METADATA_TASK_PROPERTIES, |
11 | 12 | UPLOAD_TO_TABLE_PREVIEW_REQUEST, |
12 | 13 | ) |
|
15 | 16 | CurationTask, |
16 | 17 | FileBasedMetadataTaskProperties, |
17 | 18 | Grid, |
| 19 | + GridCsvImportRequest, |
18 | 20 | GridRecordSetExportRequest, |
19 | 21 | RecordBasedMetadataTaskProperties, |
20 | 22 | UploadToTablePreviewRequest, |
@@ -902,7 +904,7 @@ def test_fill_from_dict(self) -> None: |
902 | 904 | name="Diagnosis", column_type="STRING", maximum_size=7 |
903 | 905 | ) |
904 | 906 | assert preview_response.suggested_columns[4] == Column( |
905 | | - name="PatientID", column_type="INTEGER" |
| 907 | + name="PatientID", column_type="INTEGER", max_size=None |
906 | 908 | ) |
907 | 909 | assert preview_response.sample_rows == [ |
908 | 910 | [None, "Female", "test", "Healthy", "1", None, None, None] |
@@ -939,6 +941,77 @@ def test_to_synapse_request(self) -> None: |
939 | 941 | assert result["csvTableDescriptor"]["isFirstLineHeader"] is True |
940 | 942 |
|
941 | 943 |
|
| 944 | +class TestGridCsvImportRequest: |
| 945 | + """Tests for the GridCsvImportRequest helper dataclass.""" |
| 946 | + |
| 947 | + def test_fill_from_dict(self) -> None: |
| 948 | + # GIVEN a response with grid CSV import data |
| 949 | + raw_synapse_response = { |
| 950 | + "jobId": "1234", |
| 951 | + "concreteType": "org.sagebionetworks.repo.model.grid.GridCsvImportResponse", |
| 952 | + "sessionId": SESSION_ID, |
| 953 | + "totalCount": 3, |
| 954 | + "createdCount": 1, |
| 955 | + "updatedCount": 2, |
| 956 | + } |
| 957 | + |
| 958 | + # WHEN I fill a GridCsvImportRequest from the response |
| 959 | + import_req = GridCsvImportRequest(session_id=SESSION_ID) |
| 960 | + result = import_req.fill_from_dict(raw_synapse_response) |
| 961 | + |
| 962 | + # THEN the response fields should be populated correctly |
| 963 | + assert result.session_id == SESSION_ID |
| 964 | + assert result.total_count == 3 |
| 965 | + assert result.created_count == 1 |
| 966 | + assert result.updated_count == 2 |
| 967 | + |
| 968 | + def test_to_synapse_request(self) -> None: |
| 969 | + # GIVEN a GridCsvImportRequest with all fields set |
| 970 | + import_req = GridCsvImportRequest( |
| 971 | + session_id=SESSION_ID, |
| 972 | + file_handle_id="1234567", |
| 973 | + csv_descriptor=CsvTableDescriptor( |
| 974 | + separator=",", |
| 975 | + quote_character='"', |
| 976 | + escape_character="\\", |
| 977 | + line_end="\n", |
| 978 | + is_first_line_header=True, |
| 979 | + ), |
| 980 | + schema=[ |
| 981 | + Column(name="ROW_ID", column_type="STRING"), |
| 982 | + Column(name="ROW_VERSION", column_type="STRING"), |
| 983 | + Column(name="PatientID", column_type="INTEGER"), |
| 984 | + Column(name="Diagnosis", column_type="STRING"), |
| 985 | + ], |
| 986 | + ) |
| 987 | + |
| 988 | + # WHEN I convert it to a synapse request |
| 989 | + result = import_req.to_synapse_request() |
| 990 | + |
| 991 | + # THEN it should contain the correct fields |
| 992 | + assert result["concreteType"] == GRID_CSV_IMPORT_REQUEST |
| 993 | + assert result["sessionId"] == SESSION_ID |
| 994 | + assert result["fileHandleId"] == "1234567" |
| 995 | + assert result["csvDescriptor"]["separator"] == "," |
| 996 | + assert result["csvDescriptor"]["quoteCharacter"] == '"' |
| 997 | + assert result["csvDescriptor"]["escapeCharacter"] == "\\" |
| 998 | + assert result["csvDescriptor"]["lineEnd"] == "\n" |
| 999 | + assert result["csvDescriptor"]["isFirstLineHeader"] is True |
| 1000 | + assert len(result["schema"]) == 4 |
| 1001 | + assert ( |
| 1002 | + result["schema"][0] |
| 1003 | + == Column(name="ROW_ID", column_type="STRING").to_synapse_request() |
| 1004 | + ) |
| 1005 | + assert ( |
| 1006 | + result["schema"][2] |
| 1007 | + == Column(name="PatientID", column_type="INTEGER").to_synapse_request() |
| 1008 | + ) |
| 1009 | + assert ( |
| 1010 | + result["schema"][3] |
| 1011 | + == Column(name="Diagnosis", column_type="STRING").to_synapse_request() |
| 1012 | + ) |
| 1013 | + |
| 1014 | + |
942 | 1015 | class TestGridRecordSetExportRequest: |
943 | 1016 | """Tests for the GridRecordSetExportRequest helper dataclass.""" |
944 | 1017 |
|
|
0 commit comments