4
4
from typing import Any , List , Mapping , Optional , Tuple
5
5
6
6
from google .protobuf .struct_pb2 import Struct
7
- from grpclib .client import Channel
7
+ from grpclib .client import Channel , Stream
8
8
9
9
from viam import logging
10
10
from viam .proto .app .data import (
@@ -660,25 +660,27 @@ async def streaming_data_capture_upload(
660
660
)
661
661
metadata = DataCaptureUploadMetadata (upload_metadata = upload_metadata , sensor_metadata = sensor_metadata )
662
662
request_metadata = StreamingDataCaptureUploadRequest (metadata = metadata )
663
+ stream : Stream [StreamingDataCaptureUploadRequest , StreamingDataCaptureUploadResponse ]
663
664
async with self ._data_sync_client .StreamingDataCaptureUpload .open (metadata = self ._metadata ) as stream :
664
665
await stream .send_message (request_metadata )
665
666
await stream .send_message (StreamingDataCaptureUploadRequest (data = data ), end = True )
666
- response : StreamingDataCaptureUploadResponse = await stream .recv_message ()
667
+ response = await stream .recv_message ()
667
668
if not response :
668
669
await stream .recv_trailing_metadata () # causes us to throw appropriate gRPC error
670
+ raise TypeError ("Response cannot be empty" )
669
671
return response .file_id
670
672
671
673
async def file_upload (
672
674
self ,
673
675
part_id : str ,
676
+ data : bytes ,
674
677
component_type : Optional [str ] = None ,
675
678
component_name : Optional [str ] = None ,
676
679
method_name : Optional [str ] = None ,
677
680
file_name : Optional [str ] = None ,
678
681
method_parameters : Optional [Mapping [str , Any ]] = None ,
679
682
file_extension : Optional [str ] = None ,
680
683
tags : Optional [List [str ]] = None ,
681
- data : Optional [bytes ] = None ,
682
684
) -> str :
683
685
"""Upload arbitrary file data.
684
686
@@ -687,6 +689,7 @@ async def file_upload(
687
689
688
690
Args:
689
691
part_id (str): Part ID of the resource associated with the file.
692
+ data (bytes): Bytes representing file data to upload.
690
693
component_type (Optional[str]): Optional type of the component associated with the file (e.g., "movement_sensor").
691
694
component_name (Optional[str]): Optional name of the component associated with the file.
692
695
method_name (Optional[str]): Optional name of the method associated with the file.
@@ -696,7 +699,6 @@ async def file_upload(
696
699
file_extension (Optional[str]): Optional file extension. The empty string "" will be assigned as the file extension if one isn't
697
700
provided. Files with a .jpeg, .jpg, or .png extension will be saved to the images tab.
698
701
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.
700
702
701
703
Raises:
702
704
GRPCError: If an invalid part ID is passed.
@@ -715,7 +717,7 @@ async def file_upload(
715
717
file_extension = file_extension if file_extension else "" ,
716
718
tags = tags ,
717
719
)
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 ))
719
721
return response .file_id
720
722
721
723
async def file_upload_from_path (
@@ -774,12 +776,14 @@ async def file_upload_from_path(
774
776
async def _file_upload (self , metadata : UploadMetadata , file_contents : FileData ) -> FileUploadResponse :
775
777
request_metadata = FileUploadRequest (metadata = metadata )
776
778
request_file_contents = FileUploadRequest (file_contents = file_contents )
779
+ stream : Stream [FileUploadRequest , FileUploadResponse ]
777
780
async with self ._data_sync_client .FileUpload .open (metadata = self ._metadata ) as stream :
778
781
await stream .send_message (request_metadata )
779
782
await stream .send_message (request_file_contents , end = True )
780
783
response = await stream .recv_message ()
781
784
if not response :
782
785
await stream .recv_trailing_metadata () # causes us to throw appropriate gRPC error.
786
+ raise TypeError ("Response cannot be empty" )
783
787
return response
784
788
785
789
@staticmethod
0 commit comments