From 45883e1b956fe89d4acb338b89289574a9998298 Mon Sep 17 00:00:00 2001 From: RemiZOffAlex Date: Sat, 20 Jun 2026 00:28:40 +0300 Subject: [PATCH] Update --- src/nucleus/response/stream.py | 124 +++++++++++++++------------------ 1 file changed, 57 insertions(+), 67 deletions(-) diff --git a/src/nucleus/response/stream.py b/src/nucleus/response/stream.py index 0a89f80..0802c64 100644 --- a/src/nucleus/response/stream.py +++ b/src/nucleus/response/stream.py @@ -4,94 +4,84 @@ __email__ = 'remizoffalex@mail.ru' from io import BufferedReader BUFF_SIZE = 1024 +CRLF = b'\r\n' -def bytes_next(self): - if self.status == 'eof': + +def handler_status(response): + status = ' '.join([ + response.version, + str(response.code), + response.phrase + ]) + raw = status.encode() + raw += CRLF + return raw + + +def handler_headers(response): + raw = b'' + response.headers['Content-Type'] = response.content_type + for key in response.headers: + value = response.headers[key] + raw += key.encode() + b': ' + value.encode() + CRLF + raw += CRLF + return raw + + +def bytes_next(state): + if state.status == 'eof': raise StopIteration - response = self.response - crlf = b'\r\n' - if self.position == 'status': - status = ' '.join([ - response.version, - str(response.code), - response.phrase - ]) - raw = status.encode() - raw += crlf - self.position = 'headers' + response = state.response + if state.position == 'status': + raw = handler_status(response) + state.position = 'headers' return raw - if self.position == 'headers': - self.position = 'body' - raw = b'' - for key in response.headers: - value = response.headers[key] - raw += key.encode() + b' ' + value.encode() + crlf - raw += crlf + if state.position == 'headers': + raw = handler_headers(response) + state.position = 'body' return raw - if self.position == 'body': - self.status = 'eof' + if state.position == 'body': + state.status = 'eof' return response.data -def str_next(instance): - if instance.status == 'eof': +def str_next(state): + if state.status == 'eof': raise StopIteration - response = instance.response - crlf = b'\r\n' - if instance.position == 'status': - status = ' '.join([ - response.version, - str(response.code), - response.phrase - ]) - raw = status.encode() - raw += crlf - instance.position = 'headers' + response = state.response + CRLF = b'\r\n' + if state.position == 'status': + raw = handler_status(response) + state.position = 'headers' return raw - if instance.position == 'headers': - instance.position = 'body' - raw = b'' - response.headers['Content-Type'] = response.content_type - for key in response.headers: - value = response.headers[key] - raw += key.encode() + b' ' + value.encode() + crlf - raw += crlf + if state.position == 'headers': + raw = handler_headers(response) + state.position = 'body' return raw - if instance.position == 'body': + if state.position == 'body': raw = response.data.encode() - instance.status = 'eof' + state.status = 'eof' return raw -def stream_next(self): - if self.status == 'eof': +def stream_next(state): + if state.status == 'eof': raise StopIteration - response = self.response - crlf = b'\r\n' - if self.position == 'status': - status = ' '.join([ - response.version, - str(response.code), - response.phrase - ]) - raw = status.encode() - raw += crlf - self.position = 'headers' + response = state.response + CRLF = b'\r\n' + if state.position == 'status': + raw = handler_status(response) + state.position = 'headers' return raw - if self.position == 'headers': - self.position = 'body' - raw = b'' - for key in response.headers: - value = response.headers[key] - raw += key.encode() + b' ' + value.encode() + crlf - raw += crlf + if state.position == 'headers': + state.position = 'body' return raw - if self.position == 'body': + if state.position == 'body': raw = response.data.read(BUFF_SIZE) if raw: return raw else: - self.status = 'eof' + state.status = 'eof' raise StopIteration