Skip to content

Commit 65c2df2

Browse files
committed
[_606] attach server response message to exception
Includes test with atomic_metadata. Other APIs that could use this feature include: replica_truncate
1 parent 2d968fe commit 65c2df2

2 files changed

Lines changed: 15 additions & 1 deletion

File tree

irods/connection.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,9 @@ def recv(self, into_buffer = None
149149
except TypeError:
150150
err_msg = None
151151
if nominal_code(msg.int_info) not in acceptable_codes:
152-
raise get_exception_by_code(msg.int_info, err_msg)
152+
exc = get_exception_by_code(msg.int_info, err_msg)
153+
exc.server_msg = msg
154+
raise exc
153155
return msg
154156

155157
def recv_into(self, buffer, **options):

irods/test/meta_test.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,18 @@ def tearDown(self):
121121

122122
from irods.test.helpers import create_simple_resc_hierarchy
123123

124+
def test_atomic_metadata_json_error__issue_606(self):
125+
path = self.coll_path + "/atomic_meta_issue_606"
126+
obj = self.sess.data_objects.create(path)
127+
obj.unlink(force = True)
128+
try:
129+
obj.metadata.apply_atomic_operations(AVUOperation(operation="add", avu=iRODSMeta('a','b','c')))
130+
except Exception as e:
131+
resp = e.server_msg.get_json_encoded_struct()
132+
self.assertIn(
133+
'Entity does not exist [entity_name={}]'.format(obj.path),
134+
resp['error_message'])
135+
124136
def test_atomic_metadata_operations_244(self):
125137
user = self.sess.users.get("rods")
126138
group = self.sess.groups.get("public")

0 commit comments

Comments
 (0)