NucelarMonitor/Python/Models/ResponseModel.py

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)
}