56 lines
1.9 KiB
Python
56 lines
1.9 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
|
|
from typing import Self, Any, Optional
|
|
from Utils.Utils import Utils
|
|
|
|
class ResponseModel:
|
|
|
|
def __init__(self:Self,
|
|
encoder:str,
|
|
variables:dict[str, Any|None],
|
|
default_http_code:int = 200,
|
|
default_http_message:str = "OK"
|
|
) -> None:
|
|
self.encoder:str = encoder
|
|
self.http_code:int = default_http_code
|
|
self.http_message:str = default_http_message
|
|
self.variables:dict[str, Any|None] = variables
|
|
self.body:bytes = b""
|
|
self.mime:str = "application/octet-stream;charset=" + encoder
|
|
self.code:int = 200
|
|
self.message:str = "OK"
|
|
|
|
def build(self:Self,
|
|
response:Optional[Any] = None,
|
|
mime:Optional[str] = None,
|
|
code:Optional[int] = None,
|
|
message:Optional[str] = None
|
|
) -> None:
|
|
|
|
self.code = code or self.http_code
|
|
self.message = self.http_message if message is None else message
|
|
|
|
self.set_data(response, mime)
|
|
|
|
def set_data(self:Self, data:Any|None, mime:Optional[str] = None) -> None:
|
|
if isinstance(data, bytes):
|
|
self.body = data
|
|
self.mime = mime or "application/octet-stream"
|
|
elif isinstance(data, str):
|
|
self.body = data.encode(self.encoder)
|
|
self.mime = mime or "text/plain;charset=" + self.encoder
|
|
elif isinstance(data, (dict, tuple, list)):
|
|
self.body = Utils.json_encode(data).encode(self.encoder)
|
|
self.mime = mime or "application/json;charset=" + self.encoder
|
|
else:
|
|
self.body = str(data).encode(self.encoder)
|
|
self.mime = mime or "text/plain;charset=" + self.encoder
|
|
|
|
def get_parameters(self:Self) -> dict[str, Any|None]:
|
|
return {
|
|
"http_code" : self.code,
|
|
"http_message" : self.message,
|
|
"mime" : self.mime,
|
|
"length" : len(self.body)
|
|
} |