o
    5ti                     @   s   d dl Z d dlmZ d dlmZmZ d dlZd dlZd dlmZm	Z	 d dl
mZ d dlmZ d dlmZ dd	lmZ d
dlmZ d
dlmZ zd dlZW n eyY   d dlZY nw G dd deZdS )    N)indent)AnyFinal)ColumnDataPropertyDataProperty)MultiByteStrDecoder)to_value_matrix)Typecode   )to_error_message   serialize_dp)IndentationTextTableWriterc                       s   e Zd ZdZdZedefddZedefddZ	de
dd	f fd
dZdddZde
dd	fddZdedededefddZdddZdddZdddZdee fddZdee fddZ  ZS ) JsonTableWriterap  
    A table writer class for JSON format.

    Examples:
        :ref:`example-json-table-writer`

    .. py:method:: write_table

        |write_table| with JSON format.

        Args:
            indent (Optional[int]):
                Indent level of an output.
                Interpretation of indent level value differ format to format.
                Some writer classes may ignore this value.
                Defaults to 4.

            sort_keys (Optional[bool]):
                If |True|, the output of dictionaries will be sorted by key.
                Defaults to |False|.

        Examples:
            :ref:`example-json-table-writer`

        .. note::
            Specific values in the tabular data are converted when writing:

            - |None|: written as ``null``
            - |inf|: written as ``Infinity``
            - |nan|: written as ``NaN``
    jsonreturnc                 C   s   | j S N)FORMAT_NAMEself r   S/home/ubuntu/.local/lib/python3.10/site-packages/pytablewriter/writer/text/_json.pyformat_name:   s   zJsonTableWriter.format_namec                 C   s   dS )NTr   r   r   r   r   support_split_write>   s   z#JsonTableWriter.support_split_writekwargsNc                    s   t  jdi | | d d| _d| _d| _d| _d| _d| _d| _	t
jdt
jdi| j_| jt
jtjji ttj| _|   d S )	N   FT, InfinityNaNr   )super__init__set_indent_levelis_formatting_floatis_write_opening_rowis_write_closing_rowchar_right_side_rowchar_opening_row_cross_pointchar_closing_row_cross_point_is_require_headerr	   INFINITYNAN_dp_extractortype_value_mapupdate_strict_level_mapBOOLtypepyStrictLevelMAXcopydeepcopydatapropertyNOT_QUOTING_FLAGS_quoting_flags_init_cross_point_maps)r   r   	__class__r   r   r"   B   s   
zJsonTableWriter.__init__c                 C   s   |    | jd d S )N
)_verify_streamstreamwriter   r   r   r   write_null_lineX   s   zJsonTableWriter.write_null_linec                 K   s   | dd}|   | jM |   g }| jD ]}tj|| jd|d}|| q| j	d }|
|}t| j t|grB||7 }| jt|d| j  |   W d    d S 1 s]w   Y  d S )N	sort_keysF)r   ensure_asciirA   r<    )get_preprocess_logger_write_opening_row_table_value_matrixr   dumps_indent_levelappendr'   joinallr&   r1   is_not_null_stringr>   r?   r   _write_closing_row)r   r   rA   json_text_list	json_data	json_text
joint_textr   r   r   _write_table\   s"   




"zJsonTableWriter._write_tablerow_idxcol_dpvalue_dpc                 C   s   |  S r   to_str)r   rU   rV   rW   r   r   r   _to_row_items   s   zJsonTableWriter._to_row_itemc              
   C   s|   | j rd S | jjd z| jt| j| j| _	W n t
y8 } z| jjt| g | _	W Y d }~nd }~ww d| _ d S )N_preprocess_table_dpT) _is_complete_table_dp_preprocessrF   loggerdebugr-   to_dp_matrixr   headersvalue_matrix_table_value_dp_matrix	TypeErrorr   )r   er   r   r   r[   v   s   

z$JsonTableWriter._preprocess_table_dpc                 C   s8   | j rd S | jjd dd | j D | _d| _ d S )N_preprocess_headerc                 S   s   g | ]}|  qS r   rX   ).0	header_dpr   r   r   
<listcomp>   s    z6JsonTableWriter._preprocess_header.<locals>.<listcomp>T)_is_complete_header_preprocessrF   r]   r^   r-   to_header_dp_list_table_headersr   r   r   r   re      s   
z"JsonTableWriter._preprocess_headerc                    s*    j rd S  fdd jD  _d _ d S )Nc                    s&   g | ]}t t jd d |D qS )c                 S   s   g | ]}t |qS r   r   )rf   dpr   r   r   rh      s    zGJsonTableWriter._preprocess_value_matrix.<locals>.<listcomp>.<listcomp>)dictziprk   )rf   dp_listr   r   r   rh      s    z<JsonTableWriter._preprocess_value_matrix.<locals>.<listcomp>T)$_is_complete_value_matrix_preprocessrb   rH   r   r   r   r   _preprocess_value_matrix   s   

z(JsonTableWriter._preprocess_value_matrixc                 C   s*   t | jrdt| jjddgS dgS )Nz{ "sz" : [[)r1   rN   
table_namer   unicode_strr   r   r   r   _get_opening_row_items   s   z&JsonTableWriter._get_opening_row_itemsc                 C   s   t | jr	dgS dgS )Nz
]}z
])r1   rN   rt   r   r   r   r   _get_closing_row_items   s   z&JsonTableWriter._get_closing_row_items)r   N)__name__
__module____qualname____doc__r   propertystrr   boolr   r   r"   r@   rT   intr   r   rZ   r[   re   rq   listrv   rw   __classcell__r   r   r:   r   r      s      



r   )r4   textwrapr   typingr   r   r6   r1   r   r   mbstrdecoderr   	tabledatar   r	   _msgfyr   _commonr   _text_writerr   
simplejsonr   ImportErrorr   r   r   r   r   <module>   s$    