cn-py-serv/server/response.py
John Solntsev f7d2a675fb Add handle & send data of user defined functions
Add
- handle GET request
- handle & send data of user defined functions
- project logotype to log when start server :)

Change
- move set log level to config file
- move Response class to file

Fix
- log message of small or long first request line

Template
- for URL redirection (http_addr -> new_http_addr)
2024-02-26 02:35:24 +03:00

43 lines
1.2 KiB
Python

STATUS_CODE = {
200: "OK",
404: "Not Found",
500: "Internal Server Error",
}
class Response:
def __iter__(self):
return self
def __init__(self, status_code=200, additional_headers={}, data=None):
self.status_code = status_code
self.additional_headers = additional_headers
self.data = data
self.first = True
def __next__(self):
if self.first:
resp = "HTTP/1.1 {} {}\r\n"
resp += "Server: cnserv\r\n"
resp += "Connection: close\r\n"
for key, val in self.additional_headers.items():
resp += "{}: {}\r\n".format(key, val)
resp += "\r\n"
resp = resp.format(self.status_code, STATUS_CODE[self.status_code])
resp = resp.encode("UTF-8")
if type(self.data) == bytes:
resp += self.data
self.first = False
return resp
else:
if type(self.data) == bytes:
raise StopIteration
elif hasattr(self.data, "__iter__"):
try:
return next(self.data)
except StopIteration:
raise StopIteration