From de647e6b64c7aeb780dbe8235cc6fea0fe19b182 Mon Sep 17 00:00:00 2001 From: Michael Kofi Armah Date: Wed, 8 Oct 2025 19:29:55 +0000 Subject: [PATCH] Fix StreamConsumed error caused by response stream consumption in RetryTransport --- CHANGELOG.md | 8 ++++++++ port_ocean/helpers/retry.py | 33 ++++++++------------------------- pyproject.toml | 2 +- 3 files changed, 17 insertions(+), 26 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6ce0cec612..4d2ccdb1e9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,14 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## 0.28.13 (2025-10-08) + +### Bug fixes + +- Fix StreamConsumed error caused by response stream consumption in RetryTransport + + ## 0.28.12 (2025-09-30) ### Bug fixes diff --git a/port_ocean/helpers/retry.py b/port_ocean/helpers/retry.py index d85da246e2..bc6de6859a 100644 --- a/port_ocean/helpers/retry.py +++ b/port_ocean/helpers/retry.py @@ -352,20 +352,11 @@ async def _log_response_size_async( if not self._should_log_response_size(request): return - # Try to get content length from headers first content_length = self._get_content_length(response) - if content_length is not None: - size_info = content_length - else: - # If no Content-Length header, try to get actual content size - try: - actual_size = len(await response.aread()) - size_info = actual_size - except Exception as e: - cast(logging.Logger, self._logger).error( - f"Error getting response size: {e}" - ) - return + if content_length is None: + # If Content-Length is missing, skip logging size to avoid reading the body + return + size_info = content_length cast(logging.Logger, self._logger).info( f"Response for {request.method} {request.url} - Size: {size_info} bytes" @@ -378,18 +369,10 @@ def _log_response_size( return content_length = self._get_content_length(response) - if content_length is not None: - size_info = content_length - else: - # If no Content-Length header, try to get actual content size - try: - actual_size = len(response.read()) - size_info = actual_size - except Exception as e: - cast(logging.Logger, self._logger).error( - f"Error getting response size: {e}" - ) - return + if content_length is None: + # If Content-Length is missing, skip logging size to avoid reading the body + return + size_info = content_length cast(logging.Logger, self._logger).info( f"Response for {request.method} {request.url} - Size: {size_info} bytes" diff --git a/pyproject.toml b/pyproject.toml index 84c09bdd2e..945363d436 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "port-ocean" -version = "0.28.12" +version = "0.28.13" description = "Port Ocean is a CLI tool for managing your Port projects." readme = "README.md" homepage = "https://app.getport.io"