#!/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) }