File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -219,6 +219,10 @@ def _request(
219219
220220 for attempt in range (1 , self ._max_retries + 1 ):
221221 try :
222+ request_data = kwargs .get ("data" )
223+ if hasattr (request_data , "seek" ):
224+ request_data .seek (0 )
225+
222226 response = self ._session .request (
223227 method ,
224228 url ,
Original file line number Diff line number Diff line change @@ -360,6 +360,8 @@ def get_post_bridge_config() -> dict:
360360 config_json = json .load (file )
361361
362362 raw_config = config_json .get ("post_bridge" , {})
363+ if not isinstance (raw_config , dict ):
364+ raw_config = {}
363365
364366 raw_platforms = raw_config .get ("platforms" )
365367 normalized_platforms = []
Original file line number Diff line number Diff line change @@ -63,6 +63,22 @@ def test_non_list_platforms_fail_closed(self) -> None:
6363
6464 self .assertEqual (post_bridge_config ["platforms" ], [])
6565
66+ def test_non_object_post_bridge_config_falls_back_to_defaults (self ) -> None :
67+ with tempfile .TemporaryDirectory () as temp_dir :
68+ self .write_config (
69+ temp_dir ,
70+ {
71+ "post_bridge" : None ,
72+ },
73+ )
74+
75+ with patch .object (config , "ROOT_DIR" , temp_dir ):
76+ post_bridge_config = config .get_post_bridge_config ()
77+
78+ self .assertEqual (post_bridge_config ["platforms" ], ["tiktok" , "instagram" ])
79+ self .assertEqual (post_bridge_config ["account_ids" ], [])
80+ self .assertFalse (post_bridge_config ["enabled" ])
81+
6682
6783if __name__ == "__main__" :
6884 unittest .main ()
Original file line number Diff line number Diff line change @@ -126,6 +126,31 @@ def test_upload_media_does_not_forward_api_bearer_token_to_signed_upload_url(sel
126126 self .assertEqual (upload_call .args [1 ], "https://signed-upload.example/path" )
127127 self .assertEqual (upload_call .kwargs ["headers" ], {"Content-Type" : "video/mp4" })
128128
129+ @patch ("classes.PostBridge.time.sleep" )
130+ def test_request_rewinds_streamed_upload_body_before_retry (self , sleep_mock ) -> None :
131+ session = Mock ()
132+ session .request .side_effect = [
133+ MockResponse (500 , {"message" : "temporary error" }),
134+ MockResponse (200 , {}),
135+ ]
136+ client = PostBridge ("token" , session = session )
137+
138+ stream = unittest .mock .mock_open (read_data = b"video" ).return_value
139+ stream .seek = Mock ()
140+
141+ client ._request (
142+ "PUT" ,
143+ "https://signed-upload.example/path" ,
144+ data = stream ,
145+ headers = {"Content-Type" : "video/mp4" },
146+ expected_statuses = {200 },
147+ use_default_headers = False ,
148+ )
149+
150+ self .assertEqual (stream .seek .call_count , 2 )
151+ stream .seek .assert_any_call (0 )
152+ sleep_mock .assert_called_once ()
153+
129154
130155if __name__ == "__main__" :
131156 unittest .main ()
You can’t perform that action at this time.
0 commit comments