Skip to content

Commit d02b720

Browse files
committed
PYCBC-1782: MutateInResult content_as() raises TypeError
Changes -------- * Pass in default transcoder and `is_subdoc=True` when building a `MutateInResult` * Add tests to confirm `MutateInResult.content_as(...)` does not raise `TypeError` Change-Id: I892a82744a5121432afc9eb20d2a2a7664261784 Reviewed-on: https://review.couchbase.org/c/couchbase-python-client/+/248674 Reviewed-by: Dimitris Christodoulou <dimitris.christodoulou@couchbase.com> Tested-by: Build Bot <build@couchbase.com>
1 parent a892960 commit d02b720

5 files changed

Lines changed: 41 additions & 3 deletions

File tree

acouchbase/logic/collection_impl.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,8 @@ async def lookup_in_any_replica(self,
234234
async def mutate_in(self, req: PycbcCoreKeyValueRequest, obs_handler: ObservableRequestHandler) -> MutateInResult:
235235
await self.wait_until_bucket_connected()
236236
ret = await self.client_adapter.execute_collection_request(req.opcode, req, obs_handler=obs_handler)
237-
return MutateInResult(ret, key=req.key)
237+
transcoder = self._collection_details.default_transcoder
238+
return MutateInResult(ret, transcoder=transcoder, is_subdoc=True, key=req.key)
238239

239240
async def prepend(self, req: PycbcCoreKeyValueRequest, obs_handler: ObservableRequestHandler) -> MutationResult:
240241
await self.wait_until_bucket_connected()

acouchbase/tests/subdoc_t.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,8 @@ class SubDocumentTestSuite:
6464
'test_decrement_create_parents',
6565
'test_increment',
6666
'test_increment_create_parents',
67+
'test_increment_result_content',
68+
'test_decrement_result_content',
6769
'test_insert_create_parents',
6870
'test_lookup_in_all_replicas_bad_key',
6971
'test_lookup_in_all_replicas_exists',
@@ -356,6 +358,22 @@ async def test_increment_create_parents(self, cb_env):
356358
result = await cb_env.collection.get(key)
357359
assert result.content_as[dict]['new']['counter'] == 100
358360

361+
@pytest.mark.asyncio
362+
async def test_increment_result_content(self, cb_env):
363+
key = cb_env.get_existing_doc_by_type('count', key_only=True)
364+
result = await cb_env.collection.mutate_in(
365+
key, (SD.increment('count', 50),))
366+
assert isinstance(result, MutateInResult)
367+
assert result.content_as[int](0) == 150
368+
369+
@pytest.mark.asyncio
370+
async def test_decrement_result_content(self, cb_env):
371+
key = cb_env.get_existing_doc_by_type('count', key_only=True)
372+
result = await cb_env.collection.mutate_in(
373+
key, (SD.decrement('count', 50),))
374+
assert isinstance(result, MutateInResult)
375+
assert result.content_as[int](0) == 50
376+
359377
@pytest.mark.asyncio
360378
async def test_insert_create_parents(self, cb_env):
361379
key = cb_env.get_existing_doc_by_type('array', key_only=True)

couchbase/logic/collection_impl.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,8 @@ def mutate_in(self,
330330
req: PycbcCoreKeyValueRequest,
331331
obs_handler: ObservableRequestHandler) -> MutateInResult:
332332
ret = self._client_adapter.execute_collection_request(req.opcode, req, obs_handler=obs_handler)
333-
return MutateInResult(ret, key=req.key)
333+
transcoder = self._collection_details.default_transcoder
334+
return MutateInResult(ret, transcoder=transcoder, is_subdoc=True, key=req.key)
334335

335336
def prepend(self,
336337
req: PycbcCoreKeyValueRequest,

couchbase/result.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -598,8 +598,10 @@ class MutationResult(Result):
598598
def __init__(self,
599599
orig, # type: pycbc_result
600600
key=None, # type: Optional[str]
601+
transcoder=None, # type: Optional[Transcoder]
602+
is_subdoc=None, # type: Optional[bool]
601603
):
602-
super().__init__(orig, key=key)
604+
super().__init__(orig, key=key, transcoder=transcoder, is_subdoc=is_subdoc)
603605
self._raw_mutation_token = self._orig.raw_result.get('token', None)
604606
self._mutation_token = None
605607

couchbase/tests/subdoc_t.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@ class SubDocumentTestSuite:
6868
'test_decrement_create_parents',
6969
'test_increment',
7070
'test_increment_create_parents',
71+
'test_increment_result_content',
72+
'test_decrement_result_content',
7173
'test_insert_create_parents',
7274
'test_lookup_in_all_replicas_bad_key',
7375
'test_lookup_in_all_replicas_exists',
@@ -459,6 +461,20 @@ def test_increment_create_parents(self, cb_env):
459461
result = cb_env.collection.get(key)
460462
assert result.content_as[dict]['new']['counter'] == 100
461463

464+
def test_increment_result_content(self, cb_env):
465+
key = cb_env.get_existing_doc_by_type('count', key_only=True)
466+
result = cb_env.collection.mutate_in(
467+
key, (SD.increment('count', 50),))
468+
assert isinstance(result, MutateInResult)
469+
assert result.content_as[int](0) == 150
470+
471+
def test_decrement_result_content(self, cb_env):
472+
key = cb_env.get_existing_doc_by_type('count', key_only=True)
473+
result = cb_env.collection.mutate_in(
474+
key, (SD.decrement('count', 50),))
475+
assert isinstance(result, MutateInResult)
476+
assert result.content_as[int](0) == 50
477+
462478
def test_insert_create_parents(self, cb_env):
463479
key = cb_env.get_existing_doc_by_type('array', key_only=True)
464480
result = cb_env.collection.mutate_in(

0 commit comments

Comments
 (0)