diff options
| author | UltraQbik <no1skill@yandex.ru> | 2024-08-21 00:57:47 +0300 |
|---|---|---|
| committer | UltraQbik <no1skill@yandex.ru> | 2024-08-21 00:57:47 +0300 |
| commit | a68496d2111c8971a77e52329ee3f22a9ddc4cea (patch) | |
| tree | 9dd0206b773d8cb0c262ddc73542c1c50c91d235 /src/request.py | |
| parent | d2ee7f153e4d21879e12fe25ec2128f8e6466afb (diff) | |
| download | httpy-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.py | 38 |
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()]) |