Skip to content

Commit 23f2287

Browse files
committed
Address Post Bridge PR review comments
1 parent 15a8d15 commit 23f2287

4 files changed

Lines changed: 47 additions & 0 deletions

File tree

src/classes/PostBridge.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff 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,

src/config.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff 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 = []

tests/test_config.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff 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

6783
if __name__ == "__main__":
6884
unittest.main()

tests/test_post_bridge_client.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff 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

130155
if __name__ == "__main__":
131156
unittest.main()

0 commit comments

Comments
 (0)