@@ -624,14 +624,36 @@ async def test_transact_write_items_put(client: Client, table: TableName) -> Non
624
624
await client .transact_write_items (items = puts )
625
625
assert len ([item async for item in client .query (table , HashKey ("h" , "h" ))]) == 2
626
626
627
- with pytest .raises (errors .ConditionalCheckFailed ) :
627
+ with pytest .raises (errors .TransactionCanceled ) as excinfo :
628
628
put = Put (
629
629
table = table ,
630
630
item = {"h" : "h" , "r" : "0" , "s" : "initial" },
631
631
condition = F ("h" ).does_not_exist (),
632
632
)
633
633
await client .transact_write_items (items = [put ])
634
634
635
+ assert len (excinfo .value .cancellation_reasons ) == 1
636
+ assert excinfo .value .cancellation_reasons [0 ] is not None
637
+ assert excinfo .value .cancellation_reasons [0 ].code == "ConditionalCheckFailed"
638
+
639
+ with pytest .raises (errors .TransactionCanceled ) as excinfo :
640
+ put = Put (
641
+ table = table ,
642
+ item = {"h" : "h" , "r" : "3" , "s" : "initial" },
643
+ condition = F ("h" ).does_not_exist (),
644
+ )
645
+ put_fail = Put (
646
+ table = table ,
647
+ item = {"h" : "h" , "r" : "0" , "s" : "initial" },
648
+ condition = F ("h" ).does_not_exist (),
649
+ )
650
+ await client .transact_write_items (items = [put , put_fail ])
651
+
652
+ assert len (excinfo .value .cancellation_reasons ) == 2
653
+ assert excinfo .value .cancellation_reasons [0 ] is None
654
+ assert excinfo .value .cancellation_reasons [1 ] is not None
655
+ assert excinfo .value .cancellation_reasons [1 ].code == "ConditionalCheckFailed"
656
+
635
657
636
658
@pytest .mark .usefixtures ("supports_transactions" )
637
659
async def test_transact_write_items_update (client : Client , table : TableName ) -> None :
@@ -647,7 +669,7 @@ async def test_transact_write_items_update(client: Client, table: TableName) ->
647
669
query = await client .query_single_page (table , HashKey ("h" , "h" ))
648
670
assert query .items [0 ]["s" ] == "changed"
649
671
650
- with pytest .raises (errors .ConditionalCheckFailed ) :
672
+ with pytest .raises (errors .TransactionCanceled ) as excinfo :
651
673
update = Update (
652
674
table = table ,
653
675
key = {"h" : "h" , "r" : "1" },
@@ -656,6 +678,10 @@ async def test_transact_write_items_update(client: Client, table: TableName) ->
656
678
)
657
679
await client .transact_write_items (items = [update ])
658
680
681
+ assert len (excinfo .value .cancellation_reasons ) == 1
682
+ assert excinfo .value .cancellation_reasons [0 ] is not None
683
+ assert excinfo .value .cancellation_reasons [0 ].code == "ConditionalCheckFailed"
684
+
659
685
660
686
@pytest .mark .usefixtures ("supports_transactions" )
661
687
async def test_transact_write_items_delete (client : Client , table : TableName ) -> None :
@@ -670,14 +696,19 @@ async def test_transact_write_items_delete(client: Client, table: TableName) ->
670
696
assert len ([item async for item in client .query (table , HashKey ("h" , "h" ))]) == 0
671
697
672
698
await client .put_item (table = table , item = {"h" : "h" , "r" : "1" , "s" : "initial" })
673
- with pytest .raises (errors .ConditionalCheckFailed ):
699
+
700
+ with pytest .raises (errors .TransactionCanceled ) as excinfo :
674
701
delete = Delete (
675
702
table = table ,
676
703
key = {"h" : "h" , "r" : "1" },
677
704
condition = F ("s" ).not_equals ("initial" ),
678
705
)
679
706
await client .transact_write_items (items = [delete ])
680
707
708
+ assert len (excinfo .value .cancellation_reasons ) == 1
709
+ assert excinfo .value .cancellation_reasons [0 ] is not None
710
+ assert excinfo .value .cancellation_reasons [0 ].code == "ConditionalCheckFailed"
711
+
681
712
682
713
@pytest .mark .usefixtures ("supports_transactions" )
683
714
async def test_transact_write_items_condition_check (
@@ -687,9 +718,13 @@ async def test_transact_write_items_condition_check(
687
718
condition = ConditionCheck (
688
719
table = table , key = {"h" : "h" , "r" : "1" }, condition = F ("s" ).not_equals ("initial" )
689
720
)
690
- with pytest .raises (errors .ConditionalCheckFailed ) :
721
+ with pytest .raises (errors .TransactionCanceled ) as excinfo :
691
722
await client .transact_write_items (items = [condition ])
692
723
724
+ assert len (excinfo .value .cancellation_reasons ) == 1
725
+ assert excinfo .value .cancellation_reasons [0 ] is not None
726
+ assert excinfo .value .cancellation_reasons [0 ].code == "ConditionalCheckFailed"
727
+
693
728
condition = ConditionCheck (
694
729
table = table , key = {"h" : "h" , "r" : "1" }, condition = F ("s" ).equals ("initial" )
695
730
)
0 commit comments