@@ -1695,6 +1695,42 @@ def test_make_api_call_throws_verbose_error_after_backoff_later_succeeds(self, r
1695
1695
1696
1696
assert rand_int_mock .call_args_list == [mock .call (0 , 25 ), mock .call (0 , 50 )]
1697
1697
1698
+
1699
+ @mock .patch ('pynamodb.connection.Connection.session' )
1700
+ @mock .patch ('pynamodb.connection.Connection.requests_session' )
1701
+ def test_create_prepared_request (self , requests_session_mock , session_mock ):
1702
+ prepared_request = requests .Request ('POST' ,
1703
+ 'http://lyft.com' ,
1704
+ data = 'data' ,
1705
+ headers = {'s' : 's' }).prepare ()
1706
+ mock_client = session_mock .create_client .return_value
1707
+ mock_client ._endpoint .create_request .return_value = prepared_request
1708
+
1709
+ c = Connection ()
1710
+ c ._max_retry_attempts_exception = 3
1711
+ c ._create_prepared_request ({'x' : 'y' }, {'a' : 'b' })
1712
+
1713
+ self .assertEqual (len (requests_session_mock .mock_calls ), 1 )
1714
+
1715
+ self .assertEqual (requests_session_mock .mock_calls [0 ][:2 ][0 ],
1716
+ 'prepare_request' )
1717
+
1718
+ called_request_object = requests_session_mock .mock_calls [0 ][:2 ][1 ][0 ]
1719
+ expected_request_object = requests .Request (prepared_request .method ,
1720
+ prepared_request .url ,
1721
+ data = prepared_request .body ,
1722
+ headers = prepared_request .headers )
1723
+
1724
+ self .assertEqual (len (mock_client ._endpoint .create_request .mock_calls ), 1 )
1725
+ self .assertEqual (mock_client ._endpoint .create_request .mock_calls [0 ],
1726
+ mock .call ({'x' : 'y' }, {'a' : 'b' }))
1727
+
1728
+ self .assertEqual (called_request_object .method , expected_request_object .method )
1729
+ self .assertEqual (called_request_object .url , expected_request_object .url )
1730
+ self .assertEqual (called_request_object .data , expected_request_object .data )
1731
+ self .assertEqual (called_request_object .headers , expected_request_object .headers )
1732
+
1733
+
1698
1734
@mock .patch ('pynamodb.connection.Connection.session' )
1699
1735
@mock .patch ('pynamodb.connection.Connection.requests_session' )
1700
1736
def test_make_api_call_retries_properly (self , requests_session_mock , session_mock ):
@@ -1707,7 +1743,6 @@ def test_make_api_call_retries_properly(self, requests_session_mock, session_moc
1707
1743
bad_response .status_code = 503
1708
1744
1709
1745
prepared_request = requests .Request ('GET' , 'http://lyft.com' ).prepare ()
1710
- session_mock .create_client .return_value ._endpoint .create_request .return_value = prepared_request
1711
1746
1712
1747
requests_session_mock .send .side_effect = [
1713
1748
bad_response ,
@@ -1717,9 +1752,12 @@ def test_make_api_call_retries_properly(self, requests_session_mock, session_moc
1717
1752
]
1718
1753
c = Connection ()
1719
1754
c ._max_retry_attempts_exception = 3
1755
+ c ._create_prepared_request = mock .Mock ()
1756
+ c ._create_prepared_request .return_value = prepared_request
1720
1757
1721
1758
c ._make_api_call ('DescribeTable' , {'TableName' : 'MyTable' })
1722
1759
self .assertEqual (len (requests_session_mock .mock_calls ), 4 )
1760
+
1723
1761
for call in requests_session_mock .mock_calls :
1724
1762
self .assertEqual (call [:2 ], ('send' , (prepared_request ,)))
1725
1763
@@ -1728,7 +1766,6 @@ def test_make_api_call_retries_properly(self, requests_session_mock, session_moc
1728
1766
@mock .patch ('pynamodb.connection.Connection.requests_session' )
1729
1767
def test_make_api_call_throws_when_retries_exhausted (self , requests_session_mock , session_mock ):
1730
1768
prepared_request = requests .Request ('GET' , 'http://lyft.com' ).prepare ()
1731
- session_mock .create_client .return_value ._endpoint .create_request .return_value = prepared_request
1732
1769
1733
1770
requests_session_mock .send .side_effect = [
1734
1771
requests .ConnectionError ('problems!' ),
@@ -1738,6 +1775,8 @@ def test_make_api_call_throws_when_retries_exhausted(self, requests_session_mock
1738
1775
]
1739
1776
c = Connection ()
1740
1777
c ._max_retry_attempts_exception = 3
1778
+ c ._create_prepared_request = mock .Mock ()
1779
+ c ._create_prepared_request .return_value = prepared_request
1741
1780
1742
1781
with self .assertRaises (requests .Timeout ):
1743
1782
c ._make_api_call ('DescribeTable' , {'TableName' : 'MyTable' })
@@ -1753,12 +1792,14 @@ def test_make_api_call_throws_when_retries_exhausted(self, requests_session_mock
1753
1792
@mock .patch ('pynamodb.connection.Connection.requests_session' )
1754
1793
def test_make_api_call_throws_retry_disabled (self , requests_session_mock , session_mock , rand_int_mock ):
1755
1794
prepared_request = requests .Request ('GET' , 'http://lyft.com' ).prepare ()
1756
- session_mock .create_client .return_value ._endpoint .create_request .return_value = prepared_request
1757
1795
1758
1796
requests_session_mock .send .side_effect = [
1759
1797
requests .Timeout ('problems!' ),
1760
1798
]
1761
1799
c = Connection (request_timeout_seconds = 11 , base_backoff_ms = 3 , max_retry_attempts = 0 )
1800
+ c ._create_prepared_request = mock .Mock ()
1801
+ c ._create_prepared_request .return_value = prepared_request
1802
+
1762
1803
assert c ._base_backoff_ms == 3
1763
1804
with self .assertRaises (requests .Timeout ):
1764
1805
c ._make_api_call ('DescribeTable' , {'TableName' : 'MyTable' })
0 commit comments