From bd318ead96df0e77edea3f53361a08fbde450411 Mon Sep 17 00:00:00 2001 From: RemiZOffAlex Date: Thu, 18 Jun 2026 17:51:30 +0300 Subject: [PATCH] Add src/nucleus/response --- src/nucleus/response/__init__.py | 2 ++ src/nucleus/response/common.py | 33 ++++++++++++++++++++++++ src/nucleus/response/file.py | 25 +++++++++++++++++++ src/nucleus/response/stream.py | 43 ++++++++++++++++++++++++++++++++ 4 files changed, 103 insertions(+) create mode 100644 src/nucleus/response/__init__.py create mode 100644 src/nucleus/response/common.py create mode 100644 src/nucleus/response/file.py create mode 100644 src/nucleus/response/stream.py diff --git a/src/nucleus/response/__init__.py b/src/nucleus/response/__init__.py new file mode 100644 index 0000000..18c55bb --- /dev/null +++ b/src/nucleus/response/__init__.py @@ -0,0 +1,2 @@ +__author__ = 'RemiZOffAlex' +__email__ = 'remizoffalex@mail.ru' diff --git a/src/nucleus/response/common.py b/src/nucleus/response/common.py new file mode 100644 index 0000000..fb1d537 --- /dev/null +++ b/src/nucleus/response/common.py @@ -0,0 +1,33 @@ +__author__ = 'RemiZOffAlex' +__email__ = 'remizoffalex@mail.ru' + + +class Response: + def __init__(self, data, **kwargs): + self.data = data + + self.status = '' + self.position = '' + + self.code = 200 + self.phrase = 'Success' + self.version = 'HTTP/1.1' + self.headers = {} + self.content_type = "text/plain" + for key in kwargs: + if key in self.__dict__: + setattr(self, key, kwargs[key]) + + def __call__(self): + status = ' '.join([self.version, str(self.code), self.phrase]) + crlf = b'\r\n'*2 + raw = crlf.join([ + status.encode(), + self.__data.encode() + ]) + return raw + + def __iter__(self): + pass + def __next__(self): + pass diff --git a/src/nucleus/response/file.py b/src/nucleus/response/file.py new file mode 100644 index 0000000..6764006 --- /dev/null +++ b/src/nucleus/response/file.py @@ -0,0 +1,25 @@ +__author__ = 'RemiZOffAlex' +__email__ = 'remizoffalex@mail.ru' + + +class Response: + def __init__(self, data, **kwargs): + self.data = data + + self.code = 200 + self.phrase = 'Success' + self.version = 'HTTP/1.1' + self.headers = {} + self.content_type = "text/plain" + for key in kwargs: + if key in self.__dict__: + setattr(self, key, kwargs[key]) + + def __call__(self): + status = ' '.join([self.version, str(self.code), self.phrase]) + crlf = b'\r\n'*2 + raw = crlf.join([ + status.encode(), + self.data.encode() + ]) + return raw diff --git a/src/nucleus/response/stream.py b/src/nucleus/response/stream.py new file mode 100644 index 0000000..15cbb56 --- /dev/null +++ b/src/nucleus/response/stream.py @@ -0,0 +1,43 @@ +__author__ = 'RemiZOffAlex' +__email__ = 'remizoffalex@mail.ru' + + +class ResponseStream: + def __init__(self, response): + self.response = response + + self.status = 'creating' + self.position = '' + + def __iter__(self): + self.status = 'running' + self.position = 'status' + return self + + def __next__(self): + if self.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' + 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 + return raw + if self.position == 'body': + raw = response.data.encode() + self.status = 'eof' + return raw