o
    5tiu                     @   s   d dl Z d dlmZ d dlmZmZ d dlmZmZm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edefddZG dd deZdS )    N)datetime)AnyFinal)ColumnDataPropertyDataPropertyDefaultValue)StrictLevelTypecode   )strip_quote)quote_datetime_formatter)sanitize_js_var_name   )bool_to_str   )SourceCodeTableWritervaluereturnc                 C   s8   zd|  tjddW S  ty   d|  d Y S w )Nz
new Date("sz"))strftimer   DATETIME_FORMAT
ValueError)r    r   d/home/ubuntu/.local/lib/python3.10/site-packages/pytablewriter/writer/text/sourcecode/_javascript.pyjs_datetime_formatter   s
   r   c                       s  e Zd ZU dZdZdZeed< edZ	eed< e
defdd	Ze
defd
dZe
defddZejdeddfddZdeddf fddZdedefddZdeddf fddZdee fddZdee fddZdedededef fdd Z  ZS )!JavaScriptTableWritera  
    A table writer for class JavaScript format.

        :Example:
            :ref:`example-js-table-writer`

    .. py:attribute:: variable_declaration
        :type: str
        :value: "const"

        JavaScript variable declarations type.
        The value must be either ``"var"``, ``"let"`` or ``"const"``.

    .. py:method:: write_table

        |write_table| with JavaScript format.
        The tabular data are written as a nested list variable definition.

        :raises pytablewriter.EmptyTableNameError:
            If the |table_name| is empty.
        :Example:
            :ref:`example-js-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``
            - |datetime| instances determined by |is_datetime_instance_formatting| attribute:
                - |True|: written as `dateutil.parser <https://dateutil.readthedocs.io/en/stable/parser.html>`__
                - |False|: written as |str|

            .. seealso::
                :ref:`example-type-hint-js`
    
javascript)varletconst-_JavaScriptTableWriter__VALID_VAR_DECLARATIONnull%_JavaScriptTableWriter__NONE_VALUE_DPr   c                 C      | j S N)FORMAT_NAMEselfr   r   r   format_nameA      z!JavaScriptTableWriter.format_namec                 C   s   dS )NTr   r&   r   r   r   support_split_writeE   s   z)JavaScriptTableWriter.support_split_writec                 C   r#   r$   ),_JavaScriptTableWriter__variable_declarationr&   r   r   r   variable_declarationI   r)   z*JavaScriptTableWriter.variable_declarationr   Nc                 C   s(   |   }|| jvrtd|| _d S )Nz,declaration must be either var, let or const)stripcasefoldr    r   r+   r'   r   r   r   r   r,   M   s   

kwargsc                    sN   t  jdi | d| _tjdtjdi| j_| jtj	t
ji | t d S )Nr   InfinityNaNr   )super__init__r,   r	   INFINITYNAN_dp_extractortype_value_mapupdate_strict_level_mapBOOLr   MAXregister_trans_funcr   )r'   r0   	__class__r   r   r4   U   s   zJavaScriptTableWriter.__init__c                 C   s   t |d S )N_)r   r.   r/   r   r   r   get_variable_namea   s   z'JavaScriptTableWriter.get_variable_namec                    s   | j rt| j_nt| j_| j}t | _|   t	 j
di | |   | j d}t|d}t|d}| jrL| }|d d|d< d|}| j  || _|   | | |   d S )N
truefalse,r   )is_datetime_instance_formattingr   r7   datetime_formatterr   streamioStringIOinc_indent_levelr3   _write_tabledec_indent_levelgetvaluerstripr   is_write_closing_row
splitlinesjoinclose_write_line)r'   r0   
org_streamjs_matrix_var_def_textjs_matrix_var_def_line_listr=   r   r   rL   d   s(   






z"JavaScriptTableWriter._write_tablec                 C   s   | j dd| jddgS )Nr    z = [)r,   variable_namer&   r   r   r   _get_opening_row_items   s   z,JavaScriptTableWriter._get_opening_row_itemsc                 C   s   dgS )Nz];r   r&   r   r   r   _get_closing_row_items   s   z,JavaScriptTableWriter._get_closing_row_itemsrow_idxcol_dpvalue_dpc                    s    |j d u r| j}t |||S r$   )datar"   r3   _to_row_item)r'   r\   r]   r^   r=   r   r   r`      s   
z"JavaScriptTableWriter._to_row_item)__name__
__module____qualname____doc__r%   r    r   __annotations__r   r"   propertystrr(   boolr*   r,   setterr   r4   r@   rL   listrZ   r[   intr   r`   __classcell__r   r   r=   r   r      s&   
 %&r   )rI   r   typingr   r   datapropertyr   r   r   typepyr   r	   
_converterr   	_functionr   	sanitizerr   _commonr   _sourcecoder   rg   r   r   r   r   r   r   <module>   s    