@@ -5310,24 +5310,28 @@ def _fetch_line(self, timeout: int=-1) -> Optional[str]:
5310
5310
if self .response .get_tag () != isc_info_end : # pragma: no cover
5311
5311
raise InterfaceError ("Malformed result buffer (missing isc_info_end item)" )
5312
5312
return result
5313
- def _read_output (self , * , init : str = '' , timeout : int = - 1 ) -> None :
5313
+ def _query_output (self , timeout : int ) -> None :
5314
5314
assert self ._svc is not None
5315
5315
self .response .clear ()
5316
5316
self ._svc .query (self ._make_request (timeout ), bytes ([self .mode ]), self .response .raw )
5317
5317
tag = self .response .get_tag ()
5318
5318
if tag != self .mode : # pragma: no cover
5319
5319
raise InterfaceError (f"Service responded with error code: { tag } " )
5320
- data = self .response .read_sized_string (encoding = self .encoding , errors = self .encoding_errors )
5321
- init += data
5322
- if data and self .mode is SrvInfoCode .LINE :
5323
- init += '\n '
5324
- self .__line_buffer = init .splitlines (keepends = True )
5320
+ return self .response .read_sized_string (encoding = self .encoding , errors = self .encoding_errors )
5321
+ def _read_output (self , * , init : str = '' , timeout : int = - 1 ) -> None :
5322
+ data = self ._query_output (timeout )
5325
5323
if self .mode is SrvInfoCode .TO_EOF :
5326
5324
self ._eof = self .response .get_tag () == isc_info_end
5327
- else :
5325
+ else : # LINE mode
5326
+ self ._eof = not data
5327
+ while self .response .get_tag () == isc_info_truncated :
5328
+ data += self ._query_output (timeout )
5328
5329
if self .response .get_tag () != isc_info_end : # pragma: no cover
5329
5330
raise InterfaceError ("Malformed result buffer (missing isc_info_end item)" )
5330
- self ._eof = not data
5331
+ init += data
5332
+ if data and self .mode is SrvInfoCode .LINE :
5333
+ init += '\n '
5334
+ self .__line_buffer = init .splitlines (keepends = True )
5331
5335
def _read_all_binary_output (self , * , timeout : int = - 1 ) -> bytes :
5332
5336
assert self ._svc is not None
5333
5337
send = self ._make_request (timeout )
@@ -5375,6 +5379,8 @@ def readline(self) -> Optional[str]:
5375
5379
if self ._eof :
5376
5380
return line
5377
5381
self ._read_output (init = line )
5382
+ while not self .__line_buffer [0 ].endswith ('\n ' ):
5383
+ self ._read_output (init = self .__line_buffer .pop (0 ))
5378
5384
if self .__line_buffer :
5379
5385
return self .__line_buffer .pop (0 )
5380
5386
return None
@@ -5475,7 +5481,7 @@ def connect_server(server: str, *, user: str=None, password: str=None,
5475
5481
srv_config = driver_config .get_server (server )
5476
5482
if srv_config is None :
5477
5483
srv_config = driver_config .server_defaults
5478
- host = server
5484
+ host = server if server else None
5479
5485
else :
5480
5486
host = srv_config .host .value
5481
5487
if host is None :
0 commit comments