""" AUTHOR: Khushal P Soonderji DATE: Thursday, 12th Sept., 2024 OBJECTIVE: To have a structure to the response sent from the API calls. REFERENCES: N/A DOWNLOADS: N/A """ # ***************************************************************************************************************** # ***** **** # *** IMPORT *** # ***** **** # ***************************************************************************************************************** # System-level activities: import distro import socket import platform # For data-modelling: from pydantic import BaseModel, Field from typing import Any, Optional, List, Literal # To work with date and time: import datetime # My utils: from utils_v2.api.codes import StatusCodes, HttpCodes from utils_v2.date_time import date_time # ***************************************************************************************************************** # ***** **** # *** MACROS / ONE-TIME INIT *** # ***** **** # ***************************************************************************************************************** # Info for logging that will stay constant during runtime: SERVER_HOSTNAME = str(socket.gethostname()) PLATFORM_INFO = platform.uname() HOST_OS = str(distro.name(True)) HOST_CPU = f"{PLATFORM_INFO.processor} ({PLATFORM_INFO.machine})" # ***************************************************************************************************************** # ***** **** # *** VARIABLES *** # ***** **** # ***************************************************************************************************************** # --- Nothing Yet # ***************************************************************************************************************** # ***** **** # *** CLASSES *** # ***** **** # ***************************************************************************************************************** class APILogModel(BaseModel): # To identify the machine the code is running on. # DO NOT MODIFY THESE: hostname: str = SERVER_HOSTNAME os: str = HOST_OS cpu: str = HOST_CPU # To identify the project and actions: project: Optional[str] = None log: str operation: str apiVer: Optional[str] = None logId: Optional[str] = None logChain: Optional[str] = None # Timing metrics: ts: datetime.datetime tat: float cpuTime: float # To understand the request that came in: method: Optional[str] = None url: Optional[str] = None route: Optional[str] = None headers: Optional[Any] = None data: Optional[Any] = None files: Optional[Any] = None # To understand the output that went out: exception: Optional[Any] = None response: Optional[Any] = None httpCode: Optional[int] = None # ***************************************************************************************************************** # ***** **** # *** FUNCTIONS *** # ***** **** # ***************************************************************************************************************** # --- Nothing Yet # ***************************************************************************************************************** # ***** **** # *** MAIN PROGRAM *** # ***** **** # ***************************************************************************************************************** if __name__ == "__main__": my_log = APILogModel( log = "internal" ) print(my_log)