about summary refs log tree commit diff
path: root/src/request.py
diff options
context:
space:
mode:
authorUltraQbik <no1skill@yandex.ru>2024-08-21 00:57:47 +0300
committerUltraQbik <no1skill@yandex.ru>2024-08-21 00:57:47 +0300
commita68496d2111c8971a77e52329ee3f22a9ddc4cea (patch)
tree9dd0206b773d8cb0c262ddc73542c1c50c91d235 /src/request.py
parentd2ee7f153e4d21879e12fe25ec2128f8e6466afb (diff)
downloadhttpy-a68496d2111c8971a77e52329ee3f22a9ddc4cea.tar.gz
httpy-a68496d2111c8971a77e52329ee3f22a9ddc4cea.zip
Carry Request class to a separate .py file
Diffstat (limited to 'src/request.py')
-rw-r--r--src/request.py38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/request.py b/src/request.py
new file mode 100644
index 0000000..3484e72
--- /dev/null
+++ b/src/request.py
@@ -0,0 +1,38 @@
+class Request:
+    """
+    Just a request
+    """
+
+    def __init__(self):
+        self.type: str = ""
+        self.path: str = ""
+
+    @staticmethod
+    def create(raw_request: bytes):
+        """
+        Creates self class from raw request
+        :param raw_request: bytes
+        :return: self
+        """
+
+        # new request
+        request = Request()
+
+        # fix type and path
+        request.type = raw_request[:raw_request.find(b' ')].decode("ascii")
+        request.path = raw_request[len(request.type)+1:raw_request.find(b' ', len(request.type)+1)].decode("ascii")
+
+        # decode headers
+        for raw_header in raw_request.split(b'\r\n'):
+            if len(pair := raw_header.decode("ascii").split(":")) == 2:
+                key, val = pair
+                val = val.strip()
+
+                # set attribute to key value pair
+                setattr(request, key, val)
+
+        # return request
+        return request
+
+    def __str__(self):
+        return '\n'.join([f"{key}: {val}" for key, val in self.__dict__.items()])