Skip to content

Commit

Permalink
implement 'tags' data.proto APIs
Browse files Browse the repository at this point in the history
  • Loading branch information
bashar-515 committed Jun 27, 2023
1 parent 8ee4b0a commit 3d9ce9d
Show file tree
Hide file tree
Showing 2 changed files with 85 additions and 18 deletions.
14 changes: 11 additions & 3 deletions src/viam/app/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@


class AppClient:
"""gRPC client for all communication and interaction with app.
"""
gRPC client for all communication and interaction with app.
Use create() to instantiate an AppClient::
Expand Down Expand Up @@ -42,5 +43,12 @@ async def create(cls, dial_options: DialOptions) -> Self:
def data_client(self) -> DataClient:
return DataClient(self._channel, self._metadata)

async def close(self):
raise NotImplementedError()
def close(self):
LOGGER.debug("Closing AppClient")
if self._closed:
LOGGER.debug("AppClient is already closed")
return
LOGGER.debug("Closing gRPC channel to app")
LOGGER.debug("Closing grpc-lib Channel instance")
self._channel.close()
self._closed = True
89 changes: 74 additions & 15 deletions src/viam/app/data/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,21 @@
from viam.proto.app.data import (
DataServiceStub,
Filter,
AddTagsToBinaryDataByFileIDsRequest,
AddTagsToBinaryDataByFilterRequest,
RemoveTagsFromBinaryDataByFileIDsRequest,
RemoveTagsFromBinaryDataByFilterRequest,
TagsByFilterRequest,
TagsByFilterResponse,
BoundingBoxLabelsByFilterRequest,
BoundingBoxLabelsByFilterResponse
)
from viam.proto.app.datasync import (
UploadMetadata,
SensorData,
FileData
FileData,
)
from viam.proto.app.datasync import DataSyncServiceStub
from viam import logging

LOGGER = logging.getLogger(__name__)


class DataClient:
Expand Down Expand Up @@ -66,19 +71,62 @@ async def delete_binary_data_by_ids(self, file_ids: Optional[List[str]]) -> None
raise NotImplementedError()

async def add_tags_to_binary_data_by_file_ids(self, file_ids: Optional[List[str]], tags: Optional[List[str]]) -> None:
raise NotImplementedError()
"""
Add tags to binary data using file ID's
async def add_tags_to_binary_data_by_filter(self, filter: Optional[Filter], tags: Optional[List[str]]) -> None:
raise NotImplementedError()
Args:
file_ids (List[str]): List of file ID's specifying binary data to modify
tags (List[str]): List of tags to add to specified binary data
"""
request = AddTagsToBinaryDataByFileIDsRequest(file_ids=file_ids, tags=tags)
await self._data_client.AddTagsToBinaryDataByFileIDs(request, metadata=self._metadata)

async def remove_tags_from_binary_data_by_file_ids(self, file_ids: Optional[List[str]], tags: Optional[List[str]]) -> None:
raise NotImplementedError()
async def add_tags_to_binary_data_by_filter(self, tags: Optional[List[str]], filter: Optional[Filter] = Filter()) -> None:
"""
Add tags to binary data using a filter
async def remove_tags_from_binary_data_by_filter(self, filter: Optional[Filter], tags: Optional[List[str]]) -> None:
raise NotImplementedError()
Args:
filter (Filter): Filter specifying binary data to modify
tags (List[str]): List of tags to add to specified binary data
"""
request = AddTagsToBinaryDataByFilterRequest(filter=filter, tags=tags)
await self._data_client.AddTagsToBinaryDataByFilter(request, metadata=self._metadata)

async def tags_by_filter(self, filter: Optional[Filter]) -> List[str]:
raise NotImplementedError()
async def remove_tags_from_binary_data_by_file_ids(self, tags: Optional[List[str]], file_ids: Optional[List[str]] = Filter()) -> None:
"""
Remove tags from binary data using file ids
Args:
file_ids (List[str]): List of file ID's specifying binary data to modify
tags (List[str]): List of tags to remove from specified binary data
"""
request = RemoveTagsFromBinaryDataByFileIDsRequest(file_ids=file_ids, tags=tags)
await self._data_client.RemoveTagsFromBinaryDataByFileIDs(request, metadata=self._metadata)

async def remove_tags_from_binary_data_by_filter(self, tags: Optional[List[str]], filter: Optional[Filter] = Filter()) -> None:
"""
Remove tags from binary data using a filter
Args:
filter (Filter): Filter specifying binary data to modify
tags (List[str]): List of tags to remove from specified binary data
"""
request = RemoveTagsFromBinaryDataByFilterRequest(filter=filter, tags=tags)
await self._data_client.RemoveTagsFromBinaryDataByFilter(request, metadata=self._metadata)

async def tags_by_filter(self, filter: Optional[Filter] = Filter()) -> List[str]:
"""
Get a list of tags using a filter
Args:
filter (Filter): Filter specifying data to retreive tags from
Returns:
List[str]: The list of tags
"""
request = TagsByFilterRequest(filter=filter)
response: TagsByFilterResponse = await self._data_client.TagsByFilter(request, metadata=self._metadata)
return response.tags

# to be defined and implemented last
async def add_bounding_box_to_image_by_id(self):
Expand All @@ -88,8 +136,19 @@ async def add_bounding_box_to_image_by_id(self):
async def remove_bounding_box_from_image_by_id(self):
raise NotImplementedError()

async def bounding_box_labels_by_filter(self, filter: Optional[Filter]) -> List[str]:
raise NotImplementedError()
async def bounding_box_labels_by_filter(self, filter: Optional[Filter] = Filter()) -> List[str]:
"""
Get a list of bounding box labels using a filter
Args:
filter (Filter): Filter specifying data to retreive bounding box labels from
Returns:
List[str]: The list of bounding box labels
"""
request = BoundingBoxLabelsByFilterRequest(filter=filter)
response: BoundingBoxLabelsByFilterResponse = await self._data_client.BoundingBoxLabelsByFilter(request, metadata=self._metadata)
return response.labels

# TODO (RSDK-3637): confirm arguments
async def data_capture_upload(self, metadata: Optional[UploadMetadata], sensor_contents: Optional[List[SensorData]]) -> None:
Expand Down

0 comments on commit 3d9ce9d

Please sign in to comment.