Skip to content

Commit ccabc8d

Browse files
committed
connection: Read back and parse server response
1 parent 9e3a5fd commit ccabc8d

File tree

2 files changed

+15
-2
lines changed

2 files changed

+15
-2
lines changed

src/skytable_py/connection.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
from asyncio import StreamReader, StreamWriter
1717
from .query import Query
1818
from .protocol import Protocol
19+
from .response import Response
1920

2021

2122
class Connection:
@@ -51,11 +52,18 @@ async def close(self):
5152
self._writer.close()
5253
await self._writer.wait_closed()
5354

54-
async def run_simple_query(self, query: Query):
55+
async def run_simple_query(self, query: Query) -> Response:
5556
query_window_str = str(query._q_window)
5657
total_packet_size = len(query_window_str) + 1 + len(query._buffer)
5758
# write metaframe
5859
metaframe = f"S{str(total_packet_size)}\n{query_window_str}\n"
5960
await self._write_all(metaframe.encode())
6061
# write dataframe
6162
await self._write_all(query._buffer)
63+
# read response
64+
while True:
65+
new_block = await self._reader.read(1024)
66+
self._protocol.push_additional_bytes(new_block)
67+
resp = self._protocol.parse()
68+
if resp:
69+
return resp

src/skytable_py/protocol.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
from typing import Union
1717
from .exception import ProtocolException
1818
from .response import Value, UInt8, UInt16, UInt32, UInt64, SInt8, SInt16, SInt32, SInt64, Float32, Float64, Empty, \
19-
ErrorCode, Row
19+
ErrorCode, Row, Response
2020

2121

2222
class Protocol:
@@ -209,6 +209,11 @@ def parse_rows(self) -> Union[None, list[Row]]:
209209
return None
210210
return rows
211211

212+
def parse(self) -> Response:
213+
e = self.parse_next_element()
214+
if e:
215+
return Response(e)
216+
212217
def parse_next_element(self) -> Union[None, Value, Empty, ErrorCode]:
213218
if self.__is_eof():
214219
return None

0 commit comments

Comments
 (0)