@@ -71,13 +71,19 @@ def iter_resp_lines(resp):
7171
7272 # Split by newline (safe for utf-8 because multi-byte sequences cannot contain the newline byte)
7373 next_newline = buffer .find (b'\n ' )
74+ last_was_empty = False # Set empty-line flag
7475 while next_newline != - 1 :
7576 # Convert bytes to a valid utf-8 string, replacing any invalid utf-8 with the '�' character
7677 line = buffer [:next_newline ].decode (
7778 "utf-8" , errors = "replace" )
7879 buffer = buffer [next_newline + 1 :]
7980 if line :
8081 yield line
82+ last_was_empty = False # Reset empty-line flag
83+ else :
84+ if not last_was_empty :
85+ yield '\n ' # Only print one empty line
86+ last_was_empty = True # Mark that we handled an empty line
8187 next_newline = buffer .find (b'\n ' )
8288
8389
@@ -175,6 +181,7 @@ def stream(self, func, *args, **kwargs):
175181 while True :
176182 resp = func (* args , ** kwargs )
177183 try :
184+ last_was_empty = False # Set empty line false
178185 for line in iter_resp_lines (resp ):
179186 # unmarshal when we are receiving events from watch,
180187 # return raw string when we are streaming log
@@ -198,7 +205,12 @@ def stream(self, func, *args, **kwargs):
198205 retry_after_410 = False
199206 yield event
200207 else :
201- yield line
208+ if line :
209+ yield line # Normal non-empty line
210+ last_was_empty = False
211+ elif not last_was_empty :
212+ yield '/n' # Only yield one empty line
213+ last_was_empty = True
202214 if self ._stop :
203215 break
204216 finally :
0 commit comments