Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions ros_typedb/ros_typedb/ros_typedb_interface.py
Original file line number Diff line number Diff line change
Expand Up @@ -507,12 +507,14 @@ def query_service_cb(
self.get_logger().warning(
'Query type {} not recognized'.format(req.query_type))
response.success = False
response.error_message = f'Unknown query type: {req.query_type}'
return response

query_result = query_func(req.query)
response = query_result_to_ros_msg(req.query_type, query_result)
if query_result is None:
response.success = False
response.error_message = self.typedb_interface.last_error
else:
response.success = True
return response
Expand Down
15 changes: 15 additions & 0 deletions ros_typedb/ros_typedb/typedb_interface.py
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,7 @@ def __init__(
"""
self.logger = logging.getLogger()
self._database_query_lock = Lock()
self.last_error: str = ''
self._address = address
self._driver_timeout_s = driver_timeout_s
self._infer = infer
Expand Down Expand Up @@ -518,13 +519,15 @@ def insert_database(self, query: str) -> Iterator[ConceptMap] | None:
:param query: Query to be performed.
:return: Query result, if query fails return None.
"""
self.last_error = ''
result = None
try:
result = self.database_query(
SessionType.DATA, TransactionType.WRITE, 'insert', query)
except Exception as err:
self.logger.warning(
'Error with insert query! Exception retrieved: %s', err)
self.last_error = str(err)
return result

def update_database(self, query: str) -> Iterator[ConceptMap] | None:
Expand All @@ -534,13 +537,15 @@ def update_database(self, query: str) -> Iterator[ConceptMap] | None:
:param query: Query to be performed.
:return: Query result, if query fails return None.
"""
self.last_error = ''
result = None
try:
result = self.database_query(
SessionType.DATA, TransactionType.WRITE, 'update', query)
except Exception as err:
self.logger.warning(
'Error with update query! Exception retrieved: %s', err)
self.last_error = str(err)
return result

# @delete_data_event_
Expand All @@ -551,23 +556,27 @@ def delete_from_database(self, query: str) -> Literal[True] | None:
:param query: Query to be performed.
:return: Query result, if query fails return None.
"""
self.last_error = ''
result = None
try:
result = self.database_query(
SessionType.DATA, TransactionType.WRITE, 'delete', query)
except Exception as err:
self.logger.warning(
'Error with delete query! Exception retrieved: %s', err)
self.last_error = str(err)
return result

def define_database(self, query: str) -> Literal[True] | None:
"""Perform define query."""
self.last_error = ''
result = None
try:
result = self.database_query(
SessionType.SCHEMA, TransactionType.WRITE, 'define', query)
except Exception as err:
self.logger.warning('Error with define query! Exception retrieved: %s', err)
self.last_error = str(err)
return result

def fetch_database(
Expand All @@ -582,6 +591,7 @@ def fetch_database(
If None, uses the interface default policy.
:return: Query result, if query fails return None.
"""
self.last_error = ''
result = None
try:
options = TypeDBOptions()
Expand All @@ -597,6 +607,7 @@ def fetch_database(
result = recursively_sort_dict(result)
except Exception as err:
self.logger.warning('Error with match query! Exception retrieved: %s', err)
self.last_error = str(err)
return result

def fetch_database_unordered(
Expand Down Expand Up @@ -626,6 +637,7 @@ def get_database(self, query: str) -> int | float | None:
:param query: Query to be performed.
:return: Query result.
"""
self.last_error = ''
result = None
try:
options = TypeDBOptions()
Expand All @@ -639,6 +651,7 @@ def get_database(self, query: str) -> int | float | None:
except Exception as err:
self.logger.warning(
'Error with get query! Exception retrieved: %s', err)
self.last_error = str(err)
return result

def get_aggregate_database(self, query: str) -> int | float | None:
Expand All @@ -648,6 +661,7 @@ def get_aggregate_database(self, query: str) -> int | float | None:
:param query: Query to be performed.
:return: Query result.
"""
self.last_error = ''
result = None
try:
options = TypeDBOptions()
Expand All @@ -661,6 +675,7 @@ def get_aggregate_database(self, query: str) -> int | float | None:
except Exception as err:
self.logger.warning(
'Error with get_aggregate query! Exception retrieved: %s', err)
self.last_error = str(err)
return result
# Read/write database end

Expand Down
1 change: 1 addition & 0 deletions ros_typedb_msgs/srv/Query.srv
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,5 @@ uint8 query_type
string query
---
bool success
string error_message
ros_typedb_msgs/ResultTree[] results
Loading