Skip to content

Commit d2cb35e

Browse files
authored
[DATA-2065] Make data required in file upload (#489)
1 parent a638bad commit d2cb35e

File tree

1 file changed

+9
-5
lines changed

1 file changed

+9
-5
lines changed

src/viam/app/data_client.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from typing import Any, List, Mapping, Optional, Tuple
55

66
from google.protobuf.struct_pb2 import Struct
7-
from grpclib.client import Channel
7+
from grpclib.client import Channel, Stream
88

99
from viam import logging
1010
from viam.proto.app.data import (
@@ -660,25 +660,27 @@ async def streaming_data_capture_upload(
660660
)
661661
metadata = DataCaptureUploadMetadata(upload_metadata=upload_metadata, sensor_metadata=sensor_metadata)
662662
request_metadata = StreamingDataCaptureUploadRequest(metadata=metadata)
663+
stream: Stream[StreamingDataCaptureUploadRequest, StreamingDataCaptureUploadResponse]
663664
async with self._data_sync_client.StreamingDataCaptureUpload.open(metadata=self._metadata) as stream:
664665
await stream.send_message(request_metadata)
665666
await stream.send_message(StreamingDataCaptureUploadRequest(data=data), end=True)
666-
response: StreamingDataCaptureUploadResponse = await stream.recv_message()
667+
response = await stream.recv_message()
667668
if not response:
668669
await stream.recv_trailing_metadata() # causes us to throw appropriate gRPC error
670+
raise TypeError("Response cannot be empty")
669671
return response.file_id
670672

671673
async def file_upload(
672674
self,
673675
part_id: str,
676+
data: bytes,
674677
component_type: Optional[str] = None,
675678
component_name: Optional[str] = None,
676679
method_name: Optional[str] = None,
677680
file_name: Optional[str] = None,
678681
method_parameters: Optional[Mapping[str, Any]] = None,
679682
file_extension: Optional[str] = None,
680683
tags: Optional[List[str]] = None,
681-
data: Optional[bytes] = None,
682684
) -> str:
683685
"""Upload arbitrary file data.
684686
@@ -687,6 +689,7 @@ async def file_upload(
687689
688690
Args:
689691
part_id (str): Part ID of the resource associated with the file.
692+
data (bytes): Bytes representing file data to upload.
690693
component_type (Optional[str]): Optional type of the component associated with the file (e.g., "movement_sensor").
691694
component_name (Optional[str]): Optional name of the component associated with the file.
692695
method_name (Optional[str]): Optional name of the method associated with the file.
@@ -696,7 +699,6 @@ async def file_upload(
696699
file_extension (Optional[str]): Optional file extension. The empty string "" will be assigned as the file extension if one isn't
697700
provided. Files with a .jpeg, .jpg, or .png extension will be saved to the images tab.
698701
tags (Optional[List[str]]): Optional list of tags to allow for tag-based filtering when retrieving data.
699-
data (Optional[bytes]): Optional bytes representing file data to upload.
700702
701703
Raises:
702704
GRPCError: If an invalid part ID is passed.
@@ -715,7 +717,7 @@ async def file_upload(
715717
file_extension=file_extension if file_extension else "",
716718
tags=tags,
717719
)
718-
response: FileUploadResponse = await self._file_upload(metadata=metadata, file_contents=FileData(data=data if data else bytes()))
720+
response: FileUploadResponse = await self._file_upload(metadata=metadata, file_contents=FileData(data=data))
719721
return response.file_id
720722

721723
async def file_upload_from_path(
@@ -774,12 +776,14 @@ async def file_upload_from_path(
774776
async def _file_upload(self, metadata: UploadMetadata, file_contents: FileData) -> FileUploadResponse:
775777
request_metadata = FileUploadRequest(metadata=metadata)
776778
request_file_contents = FileUploadRequest(file_contents=file_contents)
779+
stream: Stream[FileUploadRequest, FileUploadResponse]
777780
async with self._data_sync_client.FileUpload.open(metadata=self._metadata) as stream:
778781
await stream.send_message(request_metadata)
779782
await stream.send_message(request_file_contents, end=True)
780783
response = await stream.recv_message()
781784
if not response:
782785
await stream.recv_trailing_metadata() # causes us to throw appropriate gRPC error.
786+
raise TypeError("Response cannot be empty")
783787
return response
784788

785789
@staticmethod

0 commit comments

Comments
 (0)