o
    5tiA,                     @   s   d Z ddlmZ ddlmZmZmZmZ ddlZddl	m
Z
 ddlmZmZmZmZmZmZmZmZmZmZmZmZ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$m%Z% ddl&m'Z' ddlm(Z(m)Z)m*Z* G dd de Z+dS )zA
.. codeauthor:: Tsuyoshi Hombashi <tsuyoshi.hombashi@gmail.com>
    )Decimal)AnyFinalOptionalcastN)MultiByteStrDecoder)BoolDateTime
DictionaryInfinityInteger	IpAddressNanNoneType
NullString
RealNumberStrictLevelStringTypecodeTypeConversionError)AbstractType   )Align)align_getter)DataPeropertyBase)DefaultValue)calc_ascii_char_widthget_number_of_digit)Preprocessor)	FloatTypeStrictLevelMapTypeHintc                       s2  e Zd ZU dZeeeeee	e
ejeeeegZeeee   ed< ddddejddfdedee dedee d	ee d
edee  deddf fddZ!dede"fddZ#dede"fddZ$defddZ%e&de'fddZ(e&dee fddZ)e&defddZ*e&de"fddZ+e&ded  fdd Z,e&dee fd!d"Z-e&defd#d$Z.e&dee fd%d&Z/e&defd'd(Z0d)edefd*d+Z1defd,d-Z2defd.d/Z3defd0d1Z4dee fd2d3Z5defd4d5Z6dededee dee  ddf
d6d7Z7d>d8d9Z8ded:ee d;edee de"f
d<d=Z9  Z:S )?DataProperty)__data__no_ansi_escape_data__align__integer_digits__additional_format_len__length__ascii_char_width_DataProperty__type_class_listNr   datapreprocessor	type_hint
float_typeformat_flagsdatetime_format_strstrict_level_mapeast_asian_ambiguous_widthreturnc	           
         s   t  j|d||d d | _d | _d | _d | _d | _|d u r t }||\}}	| 	|||| |	d u s;t
|t
|	kr@d | _d S t|	|d| _d S )NT)r/   is_formatting_floatr0   r2   )r.   )super__init__$_DataProperty__additional_format_len_DataProperty__align_DataProperty__ascii_char_width_DataProperty__integer_digits_DataProperty__lengthr   
preprocess_DataProperty__set_datalen"_DataProperty__no_ansi_escape_datar"   )
selfr+   r,   r-   r.   r/   r0   r1   r2   no_ansi_escape_data	__class__ N/home/ubuntu/.local/lib/python3.10/site-packages/dataproperty/_dataproperty.pyr6   ?   s$   
zDataProperty.__init__otherc                 C   s:   t |tsdS | j|jkrdS | jtjkrdS | j|jkS )NFT
isinstancer"   typecoder   NANr+   r@   rF   rD   rD   rE   __eq__c      
zDataProperty.__eq__c                 C   s:   t |tsdS | j|jkrdS | jtjkrdS | j|jkS )NTFrG   rK   rD   rD   rE   __ne__o   rM   zDataProperty.__ne__c                 C   s$  g }| j tjkr|dt| jd n!z|d|    W n ty5   |dt| jj	  Y nw |
d| jdd| jj d| jdg t| j r]|d| j  t| j rm|d| j  t| j r}|d	| j  t| j r|d
| j  d|S )Nzdata=sztype=zalign=zascii_width=dzlength=zint_digits=zdecimal_places=z
extra_len=z, )rI   r   DATETIMEappendstrr+   to_strUnicodeEncodeErrorr   unicode_strextendtypenamealignalign_stringascii_char_widthr   lengthis_typeinteger_digitsdecimal_placesadditional_format_lenjoin)r@   element_listrD   rD   rE   __repr__{   s.   
zDataProperty.__repr__c                 C   s@   | j s| jr| jsJ | jj| _ nt| j| _ | j sJ | j S N)r8   is_include_ansi_escapeno_ansi_escape_dprY   r   get_align_from_typecoderI   r@   rD   rD   rE   rY      s   

zDataProperty.alignc                 C      | j du r	|   | j S )z
        :return:
            Decimal places if the ``data`` type either ``float`` or
            ``decimal.Decimal``. Returns ``0`` if the ``data`` type is ``int``.
            Otherwise, returns ``float("nan")``.
        :rtype: int
        N)_decimal_places_DataProperty__set_digitrh   rD   rD   rE   r_         

zDataProperty.decimal_placesc                 C      | j S )zS
        :return: Original data value.
        :rtype: Original data type.
        )_DataProperty__datarh   rD   rD   rE   r+      s   zDataProperty.datac                 C   s   | j d u rdS | j| j jkS )NF)rf   r\   rh   rD   rD   rE   re      s   
z#DataProperty.is_include_ansi_escapec                 C   rm   rd   )r?   rh   rD   rD   rE   rf      s   zDataProperty.no_ansi_escape_dpc                 C   s   | j du r
|  | _ | j S )zF
        :return: Length of the ``data``.
        :rtype: int
        N)r;   _DataProperty__get_lengthrh   rD   rD   rE   r\      s   

zDataProperty.lengthc                 C      | j d u r
|  | _ | j S rd   )r9   $_DataProperty__calc_ascii_char_widthrh   rD   rD   rE   r[         

zDataProperty.ascii_char_widthc                 C   ri   )z
        :return:
            Integer digits if the ``data`` type either
            ``int``/``float``/``decimal.Decimal``.
            Otherwise, returns ``None``.
        :rtype: int
        N)r:   rk   rh   rD   rD   rE   r^      rl   zDataProperty.integer_digitsc                 C   rp   rd   )r7   (_DataProperty__get_additional_format_lenrh   rD   rD   rE   r`      rr   z"DataProperty.additional_format_lenr[   c                 C   sz   | j tjtjfv r"ttt| jjj	}|sJ t
|| j|  dS zt
|| jtt| j	  dW S  ty<   | Y S w )Nr   )rI   r   LIST
DICTIONARYr"   r   rS   r+   rV   r\   maxr[   r   int	TypeError)r@   r[   unicode_str_lenrD   rD   rE   get_padding_len   s   zDataProperty.get_padding_lenc                 C   s   | j | jS rd   )
format_strformatr+   rh   rD   rD   rE   rT     s   zDataProperty.to_strc                 C   s4   t | jdd sdS d}t| jdk r|d7 }|S )NF)strip_ansi_escaper   r   )r   r+   r]   r   )r@   
format_lenrD   rD   rE   __get_additional_format_len  s   z(DataProperty.__get_additional_format_lenc                 C   s^   | j d usJ | jd usJ t| j dk | jdk grtd| j | j }| jdkr-|d7 }|S )Nr   zCinteger digits and decimal places must be greater or equals to zeror   )r^   r_   any
ValueError)r@   	float_lenrD   rD   rE   __get_base_float_len  s   
z!DataProperty.__get_base_float_lenc                 C   s$   | j tjtjtjfv rt| jS d S rd   )rI   r   ru   rt   STRINGr>   r+   rh   rD   rD   rE   __get_length   s   
zDataProperty.__get_lengthc                 C   s   | j tjkrtt| j| j S | j tjkr|  | j S | j tj	kr:zt
|  W S  ty9   t
t| j Y S w | jrF| jsBJ | jjS zt| jj}W n ty[   |  }Y nw t|| jS rd   )rI   r   INTEGERr   rw   r^   r`   REAL_NUMBER!_DataProperty__get_base_float_lenrQ   r>   rT   r   rS   r+   re   rf   r[   r   rV   r   _east_asian_ambiguous_width)r@   rV   rD   rD   rE   __calc_ascii_char_width&  s&   
z$DataProperty.__calc_ascii_char_widthc                 C   s   |d u rt j}|d u rt j}|r0||tj|dd}|j| _| | _|| jtj	|dd
 r0d S | jD ]}||d dj|dtj	}| ||||rO d S q3td| d| )NF)strict_levelr.   r}   r   defaultzfailed to convert: data=z, strict_level=)r   
FLOAT_TYPESTRICT_LEVEL_MAPr   MINrI   	_typecodetry_convertrn   MAXr]   r*   get_DataProperty__try_convert_typer   )r@   r+   r-   r.   r1   type_obj
type_classr   rD   rD   rE   
__set_data@  s:   


zDataProperty.__set_datac                 C   s   t | j\}}|| _|| _d S rd   )r   rn   r:   rj   )r@   r^   r_   rD   rD   rE   __set_digith  s   
zDataProperty.__set_digitr   r   c                 C   s@   ||||dd}z|  | _W n
 ty   Y dS w |j| _dS )NF)r.   r}   T)convertrn   r   rI   r   )r@   r+   r   r   r.   r   rD   rD   rE   __try_convert_typem  s   zDataProperty.__try_convert_type)r3   N);__name__
__module____qualname__	__slots__r   r   r   r   r   r   r   typepyListr
   r	   r   r   r*   r   listtyper   __annotations__r   DATETIME_FORMATr   r   r   r!   r   rw   rS   r    r6   boolrL   rN   rc   propertyr   rY   r_   r+   re   rf   r\   r[   r^   r`   rz   rT   rs   r   ro   rq   r=   rk   r   __classcell__rD   rD   rB   rE   r"   %   s   
 	
$!

(r"   ),__doc__decimalr   typingr   r   r   r   r   mbstrdecoderr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   typepy.typer   _alignr   _align_getterr   _baser   _commonr   	_functionr   r   _preprocessorr   r   r    r!   r"   rD   rD   rD   rE   <module>   s    @