Skip to content

Commit cda2fe4

Browse files
author
Lingling Peng
committed
fix GridCsvImportRequest class; make field required; fix test; use constant
1 parent 8f1310b commit cda2fe4

2 files changed

Lines changed: 31 additions & 24 deletions

File tree

synapseclient/models/curation.py

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1002,15 +1002,15 @@ class GridCsvImportRequest(AsynchronousCommunicator):
10021002
The response is modeled from: <https://rest-docs.synapse.org/rest/org/sagebionetworks/repo/model/grid/GridCsvImportResponse.html>
10031003
"""
10041004

1005-
concrete_type: str = GRID_CSV_IMPORT_REQUEST
1006-
"""The concrete type for this request."""
1007-
1008-
session_id: Optional[str] = None
1005+
session_id: str
10091006
"""The grid session ID."""
10101007

1011-
file_handle_id: Optional[str] = None
1008+
file_handle_id: str
10121009
"""The id of the file handle that contains the CSV data."""
10131010

1011+
concrete_type: str = GRID_CSV_IMPORT_REQUEST
1012+
"""The concrete type for this request."""
1013+
10141014
csv_descriptor: CsvTableDescriptor = field(default_factory=CsvTableDescriptor)
10151015
"""The description of a csv for upload or download."""
10161016

@@ -1052,15 +1052,18 @@ def to_synapse_request(self) -> Dict[str, Any]:
10521052
Returns:
10531053
A dictionary representation of this object for API requests.
10541054
"""
1055-
request_dict: Dict[str, Any] = {"concreteType": self.concrete_type}
1056-
if self.session_id is not None:
1057-
request_dict["sessionId"] = self.session_id
1058-
if self.file_handle_id is not None:
1059-
request_dict["fileHandleId"] = self.file_handle_id
1060-
if self.csv_descriptor is not None:
1061-
request_dict["csvDescriptor"] = self.csv_descriptor.to_synapse_request()
1062-
if self.schema is not None:
1063-
request_dict["schema"] = [col.to_synapse_request() for col in self.schema]
1055+
request_dict = {
1056+
"concreteType": self.concrete_type,
1057+
"sessionId": self.session_id,
1058+
"fileHandleId": self.file_handle_id,
1059+
"csvDescriptor": self.csv_descriptor.to_synapse_request(),
1060+
"schema": (
1061+
[col.to_synapse_request() for col in self.schema]
1062+
if self.schema
1063+
else None
1064+
),
1065+
}
1066+
delete_none_keys(request_dict)
10641067
return request_dict
10651068

10661069

tests/unit/synapseclient/models/async/unit_test_curation_async.py

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
GRID_ETAG = "grid-etag-456"
4646
STARTED_BY = "user-1"
4747
STARTED_ON = "2024-03-01T00:00:00.000Z"
48+
FILE_HANDLE_ID = "1234567"
4849

4950

5051
def _get_file_based_task_api_response():
@@ -830,7 +831,7 @@ async def test_import_csv_async_without_session_id(self) -> None:
830831
match="session_id is required to import a CSV into a GridSession",
831832
):
832833
await grid.import_csv_async(
833-
synapse_client=self.syn, file_handle_id="1234567"
834+
synapse_client=self.syn, file_handle_id=FILE_HANDLE_ID
834835
)
835836

836837
async def test_import_csv_async(self) -> None:
@@ -856,7 +857,8 @@ async def test_import_csv_async(self) -> None:
856857
)
857858
# Mock import response with row counts
858859
mock_import_response = GridCsvImportRequest(
859-
file_handle_id="1234567",
860+
session_id=SESSION_ID,
861+
file_handle_id=FILE_HANDLE_ID,
860862
total_count=1,
861863
created_count=1,
862864
updated_count=1,
@@ -886,7 +888,7 @@ async def test_import_csv_async(self) -> None:
886888
):
887889
result = await grid.import_csv_async(
888890
synapse_client=self.syn,
889-
file_handle_id="1234567",
891+
file_handle_id=FILE_HANDLE_ID,
890892
csv_table_descriptor=csv_table_descriptor,
891893
)
892894

@@ -896,13 +898,13 @@ async def test_import_csv_async(self) -> None:
896898
# AND UploadToTablePreviewRequest was constructed with the right arguments
897899
MockPreview.assert_called_once_with(
898900
csv_table_descriptor=csv_table_descriptor,
899-
upload_file_handle_id="1234567",
901+
upload_file_handle_id=FILE_HANDLE_ID,
900902
)
901903

902904
# AND GridCsvImportRequest was constructed with the schema from the preview
903905
MockImport.assert_called_once_with(
904906
session_id=SESSION_ID,
905-
file_handle_id="1234567",
907+
file_handle_id=FILE_HANDLE_ID,
906908
schema=expected_columns,
907909
)
908910

@@ -1010,7 +1012,7 @@ def test_fill_from_dict(self) -> None:
10101012
def test_to_synapse_request(self) -> None:
10111013
# GIVEN an UploadToTablePreviewRequest
10121014
preview_req = UploadToTablePreviewRequest(
1013-
upload_file_handle_id="1234567",
1015+
upload_file_handle_id=FILE_HANDLE_ID,
10141016
lines_to_skip=1,
10151017
do_full_file_scan=True,
10161018
csv_table_descriptor=CsvTableDescriptor(
@@ -1027,7 +1029,7 @@ def test_to_synapse_request(self) -> None:
10271029

10281030
# THEN it should contain the correct fields
10291031
assert result["concreteType"] == UPLOAD_TO_TABLE_PREVIEW_REQUEST
1030-
assert result["uploadFileHandleId"] == "1234567"
1032+
assert result["uploadFileHandleId"] == FILE_HANDLE_ID
10311033
assert result["linesToSkip"] == 1
10321034
assert result["doFullFileScan"] is True
10331035
assert result["csvTableDescriptor"]["separator"] == ";"
@@ -1052,7 +1054,9 @@ def test_fill_from_dict(self) -> None:
10521054
}
10531055

10541056
# WHEN I fill a GridCsvImportRequest from the response
1055-
import_req = GridCsvImportRequest(session_id=SESSION_ID)
1057+
import_req = GridCsvImportRequest(
1058+
session_id=SESSION_ID, file_handle_id=FILE_HANDLE_ID
1059+
)
10561060
result = import_req.fill_from_dict(raw_synapse_response)
10571061

10581062
# THEN the response fields should be populated correctly
@@ -1065,7 +1069,7 @@ def test_to_synapse_request(self) -> None:
10651069
# GIVEN a GridCsvImportRequest with all fields set
10661070
import_req = GridCsvImportRequest(
10671071
session_id=SESSION_ID,
1068-
file_handle_id="1234567",
1072+
file_handle_id=FILE_HANDLE_ID,
10691073
csv_descriptor=CsvTableDescriptor(
10701074
separator=",",
10711075
quote_character='"',
@@ -1087,7 +1091,7 @@ def test_to_synapse_request(self) -> None:
10871091
# THEN it should contain the correct fields
10881092
assert result["concreteType"] == GRID_CSV_IMPORT_REQUEST
10891093
assert result["sessionId"] == SESSION_ID
1090-
assert result["fileHandleId"] == "1234567"
1094+
assert result["fileHandleId"] == FILE_HANDLE_ID
10911095
assert result["csvDescriptor"]["separator"] == ","
10921096
assert result["csvDescriptor"]["quoteCharacter"] == '"'
10931097
assert result["csvDescriptor"]["escapeCharacter"] == "\\"

0 commit comments

Comments
 (0)