o
    diX                     @   s6   d dl mZmZ dd Zdd ZG dd dejZdS )	    )	renderersstatusc                 C   s<   t j D ]\}}t|s| |u r|d|  d  S qdS )z
    Get the human-readable SNAKE_CASE version of an HTTP status code.

    Args:
        code: The HTTP status code to be translated.

    Returns:
        str: The human-readable status in SNAKE_CASE.
    zHTTP_%s_ UNKNOWN)r   __dict__itemscallablereplace)codenameval r   H/var/www/html/evchargy.com/django-station-ev/station_ev/base/renderer.py
get_status   s
   
r   c                 C   sp   z0| t t|  }t|trt|}|W S t|tr.|d }t|tr*t|}|W S |d }|W S    |  Y S )z
    Extract the error message from a nested error dictionary.

    Args:
        error_dict: A nested dictionary containing error messages.

    Returns:
        str: The extracted error message.
    r   )nextiter
isinstancedictget_error_messagelist)
error_dictresponseZresponse_messager   r   r   r      s   



r   c                       s"   e Zd ZdZd fdd	Z  ZS )CustomRendererz
    A custom JSON renderer to modify the API response format.

    Methods:
        render(data, accepted_media_type, renderer_context): Render the data in a modified format.
    Nc                    s  |du ri }|d }|j t|j d}|dddur#|dd|d< t|j s/t|j rt|trN|rNt|d trCt	|f}nt|d t
rN|d }t|tr|t	|}t| rx|dv rxt| d  ddd t	|  }nt	|}||d< nMt|tr|d	durt|d	tr|d
|d
< |d|d< |d|d< |dd}|r||d< |d	dur|d	|d< n	||d< n||d< d|v r|d  |d< t |||S )a@  
        Modify the API response format.

        Args:
            data: The data to be rendered in the response.
            accepted_media_type: The accepted media type for the response.
            renderer_context: The context of the renderer.

        Returns:
            str: The modified JSON response.
        Nr   )r
   r   messager   )zThis field may not be blank.zThis field may not be null._ resultscountr   previousZmessage_data)status_coder   getr   is_client_erroris_server_errorr   r   r   r   strkeys
capitalizer	   lowerpopsuperrender)selfr   accepted_media_typerenderer_contextr   Zmodified_datar   error_message	__class__r   r   r*   5   sX   





zCustomRenderer.render)NN)__name__
__module____qualname____doc__r*   __classcell__r   r   r/   r   r   -   s    r   N)rest_frameworkr   r   r   r   JSONRendererr   r   r   r   r   <module>   s    