
    fh8                     l   d dl Z d dlZd dlmZ ddlmZ ddd         Zdd	d         Zd
gZ	 	 e G d d                      Z	 G d de	          Z
 G d de	          Z G d de          Z G d de	          Z G d de	          Z G d de	          Z G d de	          Z G d de	          Z G d de	          Zi Zd Zd  Z e e                                                      D ]C\  ZZ eee          r2 eee	          r&edk    r e                    e            ee           D[[dS )!    N)total_ordering   )utilsz$Revision: 1.14 $   z$Date: 2009/05/26 05:16:51 $   	lookupForc                       e Zd ZdZdZdZdZdZ	 	 ddZd Z	d Z
d Zd	 Zdd
Z ee          Zd Zd Zd Zd Zd Zd Zd ZdS )DbfFieldDefa^  Abstract field definition.

    Child classes must override ``type`` class attribute to provide datatype
    information of the field definition. For more info about types visit
    `https://www.clicketyclick.dk/databases/xbase/format/data_types.html`

    Also child classes must override ``defaultValue`` field to provide
    default value for the field value.

    If child class has fixed length ``length`` class attribute must be
    overridden and set to the valid value. None value means, that field
    isn't of fixed length.

    Note: ``name`` field must not be changed after instantiation.

    )namedecimalCountstartendignoreErrorsNFc                    | j         
J d            | j        
J d            t          |          dk    rt          d|z            t	          |                                          }| j        j        <|t          d|z            t          |          }|dk    rt          d|z            n| j        }|d}|| _	        || _        || _
        || _        || _        || _        dS )	zInitialize instance.NzType code must be overriddenz Default value must be overridden
   zField name "%s" is too longz[%s] Length isn't specifiedr   z&[%s] Length must be a positive integer)typeCodedefaultValuelen
ValueErrorstrupper	__class__lengthintr   r   r   r   r   )selfr   r   r   r   stopr   s          R/var/www/histauto/venv/lib/python3.11/site-packages/tablib/_vendor/dbfpy/fields.py__init__zDbfFieldDef.__init__M   s    }((*H((( ,,.P,,,t99r>><tCDDD4yy  > (~ !>!EFFF[[F{{ !ID!PQQQ  [FL	 ((
    c                 B    t          |           t          |          k    S Nreprr   others     r   __eq__zDbfFieldDef.__eq__j       DzzT%[[((r    c                 B    t          |           t          |          k    S r"   r#   r%   s     r   __ne__zDbfFieldDef.__ne__m   r(   r    c                 B    t          |           t          |          k     S r"   r#   r%   s     r   __lt__zDbfFieldDef.__lt__p   s    DzzDKK''r    c                 *    t          | j                  S r"   )hashr   r   s    r   __hash__zDbfFieldDef.__hash__s   s    DIr    c                     t          |          dk    sJ |d         } | t          j        |          dd                             d          ||d         |||z   |          S )az  Decode dbf field definition from the string data.

        Arguments:
            string:
                a string, dbf definition is decoded from. length of
                the string must be 32 bytes.
            start:
                position in the database file.
            ignoreErrors:
                initial error processing mode for the new field (boolean)

               Nr   utf-8   )r   )r   r   unzfilldecode)clsstringr   r   _lengths        r   
fromStringzDbfFieldDef.fromStringv   sw     6{{b    *s5=(("-44W==w":uegoLR R R 	Rr    c                     | j                             dd          }|| j        z   t          d          dz  z   t          | j                  z   t          | j                  z   t          d          dz  z   S )zReturn encoded field definition.

        Return:
            Return value is a string object containing encoded
            definition of this field.

        r    r         )r   ljustr   chrr   r   )r   _names     r   toStringzDbfFieldDef.toString   s|     	D))M FFQJ 	
 !""# FFRK	
r    c                 0    d|                                  z  S )Nz%-10s %1s %3d %3d)	fieldInfor/   s    r   __repr__zDbfFieldDef.__repr__   s    "T^^%5%555r    c                 6    | j         | j        | j        | j        fS )zxReturn field information.

        Return:
            Return value is a (name, type, length, decimals) tuple.

        )r   r   r   r   r/   s    r   rE   zDbfFieldDef.fieldInfo   s     y$-d6GGGr    c                 *    || j         | j                 S )z2Return a "raw" field value from the record string.)r   r   r   records     r   rawFromRecordzDbfFieldDef.rawFromRecord   s    dj)**r    c                     	 |                      |                     |                    S # t          $ r | j        rt          j        cY S  w xY w)z2Return decoded field value from the record string.)decodeValuerK   	Exceptionr   r   INVALID_VALUErI   s     r   decodeFromRecordzDbfFieldDef.decodeFromRecord   sa    	##D$6$6v$>$>??? 	 	 	  ****		s   '* A	Ac                     t           )zReturn decoded value from string value.

        This method shouldn't be used publicly. It's called from the
        `decodeFromRecord` method.

        This is an abstract method and it must be overridden in child classes.
        NotImplementedErrorr   values     r   rM   zDbfFieldDef.decodeValue   s
     "!r    c                     t           )zReturn str object containing encoded field value.

        This is an abstract method and it must be overridden in child classes.
        rR   rT   s     r   encodeValuezDbfFieldDef.encodeValue   s
    
 "!r    )NNNNF)F)__name__
__module____qualname____doc__	__slots__r   r   r   r   r'   r*   r,   r0   r;   classmethodrC   rF   rE   rK   rP   rM   rW    r    r   r   r   +   s&        " II F
 H L7;5:   :) ) )) ) )( ( (  R R R R" Z((J
 
 
&6 6 6H H H+ + +  " " "" " " " "r    r   c                   &    e Zd ZdZdZdZd Zd ZdS )DbfCharacterFieldDefz"Definition of the character field.Cr    c                 R    |                     d                              d          S )ziReturn string object.

        Return value is a ``value`` argument with stripped right spaces.

            r4   )rstripr7   rT   s     r   rM   z DbfCharacterFieldDef.decodeValue   s$     ||D!!((111r    c                 j    t          |          d| j                                     | j                  S )z0Return raw data string encoded from a ``value``.N)r   r   r@   rT   s     r   rW   z DbfCharacterFieldDef.encodeValue   s)    5zz,4;,'--dk:::r    NrX   rY   rZ   r[   r   r   rM   rW   r^   r    r   r`   r`      sB        ,,HL2 2 2; ; ; ; ;r    r`   c                   &    e Zd ZdZdZdZd Zd ZdS )DbfNumericFieldDefz Definition of the numeric field.Nr   c                 x    |                     d          }d|v rt          |          S |rt          |          S dS )zReturn a number decoded from ``value``.

        If decimals is zero, value will be decoded as an integer;
        or as a float otherwise.

        Return:
            Return value is a int (long) or float instance.

        s        .r   )stripfloatr   rT   s     r   rM   zDbfNumericFieldDef.decodeValue   sC     F##5==<< 	u::1r    c           	         d| j         | j        |fz  }t          |          | j         k    r]|                    d          }d|cxk    r| j         k    rn n|d| j                  }n#t	          d| j         d| d| j          d          |S )	+Return string containing encoded ``value``.z%*.*f.r   N[z] Numeric overflow: z (field width: ))r   r   r   findr   r   )r   rU   _rv_pposs       r   rW   zDbfNumericFieldDef.encodeValue   s    $+t'8%@@s88dk!!HHSMMEE((((T[(((((,4;,' Y	YYsYY4;YYY   
r    Nrf   r^   r    r   rh   rh      sD        **H
 L  (    r    rh   c                       e Zd ZdZdZdS )DbfFloatFieldDefz0Definition of the float field - same as numeric.FN)rX   rY   rZ   r[   r   r^   r    r   rw   rw   	  s        ::HHHr    rw   c                   *    e Zd ZdZdZdZdZd Zd ZdS )DbfIntegerFieldDefz Definition of the integer field.Ir>   r   c                 8    t          j        d|          d         S )z0Return an integer number decoded from ``value``.<ir   structunpackrT   s     r   rM   zDbfIntegerFieldDef.decodeValue  s    }T5))!,,r    c                 F    t          j        dt          |                    S )ro   r}   )r   packr   rT   s     r   rW   zDbfIntegerFieldDef.encodeValue  s    {4U,,,r    N	rX   rY   rZ   r[   r   r   r   rM   rW   r^   r    r   rz   rz     sG        **HFL- - -- - - - -r    rz   c                   *    e Zd ZdZdZdZdZd Zd ZdS )DbfCurrencyFieldDefz!Definition of the currency field.Y   g        c                 >    t          j        d|          d         dz  S )z+Return float number decoded from ``value``.<qr   g     @r~   rT   s     r   rM   zDbfCurrencyFieldDef.decodeValue&  s    }T5))!,v55r    c                 L    t          j        dt          |dz                      S )ro   r   i'  )r   r   roundrT   s     r   rW   zDbfCurrencyFieldDef.encodeValue*  s     {4uu}!5!5666r    Nr   r^   r    r   r   r     sG        ++HFL6 6 67 7 7 7 7r    r   c                   *    e Zd ZdZdZdZdZd Zd ZdS )DbfLogicalFieldDefz Definition of the logical field.Lr   c                 ^    |dk    rdS |dv rdS |dv rdS t          d| j         d|          )	z0Return True, False or -1 decoded from ``value``.?r   zNnFf FYyTtTrq   z] Invalid logical value )r   r   rT   s     r   rM   zDbfLogicalFieldDef.decodeValue6  sQ     C<<2G5F??4ITYIIIIJJJr    c                 "    |du rdS |dk    rdS dS )zReturn a character from the "TF?" set.

        Return:
            Return value is "T" if ``value`` is True
            "?" if value is -1 or False otherwise.

        TTr   r   rx   r^   rT   s     r   rW   zDbfLogicalFieldDef.encodeValueA  s%     D==3B;;3sr    N	rX   rY   rZ   r[   r   r   r   rM   rW   r^   r    r   r   r   /  sJ        **HLF	K 	K 	K    r    r   c                   *    e Zd ZdZdZdZdZd Zd ZdS )DbfMemoFieldDefz[Definition of the memo field.

    Note: memos aren't currently completely supported.

    Mz
          r   c                     t           )z<Return int .dbt block number decoded from the string object.rR   rT   s     r   rM   zDbfMemoFieldDef.decodeValue[  s
     "!r    c                     t           )zeReturn raw data string encoded from a ``value``.

        Note: this is an internal method.

        rR   rT   s     r   rW   zDbfMemoFieldDef.encodeValue`  s
     "!r    Nr   r^   r    r   r   r   P  sM          HLF" " "
" " " " "r    r   c                   H    e Zd ZdZdZ ej        d           ZdZd Z	d Z
dS )DbfDateFieldDefzDefinition of the date field.Dc                 >    t           j                                        S r"   )datetimedatetodayr8   s    r   <lambda>zDbfDateFieldDef.<lambda>n  s    8=3F3F3H3H r    r   c                 V    |                                 rt          j        |          S dS )z;Return a ``datetime.date`` instance decoded from ``value``.N)rl   r   getDaterT   s     r   rM   zDbfDateFieldDef.decodeValuer  s'    ;;== 	='''4r    c                 h    |r't          j        |                              d          S d| j        z  S )zReturn a string-encoded value.

        ``value`` argument should be a value suitable for the
        `utils.getDate` call.

        Return:
            Return value is a string in format "yyyymmdd".

        z%Y%m%d )r   r   strftimer   rT   s     r   rW   zDbfDateFieldDef.encodeValuey  s7      	%=''00:::$$r    N)rX   rY   rZ   r[   r   r   classpropertyr   r   rM   rW   r^   r    r   r   r   j  sX        ''H&5&'H'HIILF  % % % % %r    r   c                   L    e Zd ZdZdZdZ ej        d           ZdZ	d Z
d ZdS )	DbfDateTimeFieldDefz"Definition of the timestamp field.iQD r   c                 >    t           j                                         S r"   )r   nowr   s    r   r   zDbfDateTimeFieldDef.<lambda>  s    83D3H3H3J3J r    r   c                     t          |          | j        k    sJ t          j        d|          \  }}|dk    rCt          j                            || j        z
            }|t	          j        d|dz            z  }nd}|S )z&Return a `datetime.datetime` instance.<2Ir   r   g     @@N)r   r   r   r   r   fromordinalJDN_GDN_DIFF	timedelta)r   rU   _jdn_msecsrt   s        r   rM   zDbfDateTimeFieldDef.decodeValue  s    5zzT[((((}UE22f199#//t7H0HIIC8%a&999CC C
r    c                    |rct          j        |          }t          j        d|                                | j        z   |j        dz  |j        dz  z   |j        z   dz            }n
d| j	        z  }t          |          | j	        k    sJ |S )z"Return a string-encoded ``value``.r   i  <   i  r=   )r   getDateTimer   r   	toordinalr   hourminutesecondr   r   )r   rU   rt   s      r   rW   zDbfDateTimeFieldDef.encodeValue  s     	%%e,,E+eU__%6%69J%J$zD05<"3DDu|SW[[] ]CC $C3xx4;&&&&
r    N)rX   rY   rZ   r[   r   r   r   r   r   r   rM   rW   r^   r    r   r   r     sa        ,, LH&5&'J'JKKL F  
 
 
 
 
r    r   c                 F    | j         
J d            | t          | j         <   dS )zRegister field definition class.

    ``fieldCls`` should be subclass of the `DbfFieldDef`.

    Use `lookupFor` to retrieve field definition class
    by the type code.

    NzType code isn't defined)r   _fieldsRegistry)fieldClss    r   registerFieldr     s1     ((*C((( *2OH%&&&r    c                 6    t           t          |                    S )a  Return field definition class for the given type code.

    ``typeCode`` must be a single character. That type should be
    previously registered.

    Use `registerField` to register new field class.

    Return:
        Return value is a subclass of the `DbfFieldDef`.

    )r   rA   )r   s    r   r	   r	     s     3x==))r    )r   r   	functoolsr    r   __version____date____all__r   r`   rh   rw   rz   r   r   r   r   r   r   r   r	   listglobalsitemsrB   _val
isinstancetype
issubclassappendr^   r    r   <module>r      s     $ $ $ $ $ $      !"R%()!B$/-
2 Y" Y" Y" Y" Y" Y" Y" Y"|; ; ; ; ;; ; ; ;&) ) ) ) ) ) ) )X    )   - - - - - - - - 7 7 7 7 7+ 7 7 7        B" " " " "k " " "4% % % % %k % % %>$ $ $ $ $+ $ $ $N 2 2 2* * *& T''))//++,,  MUDz$ **T;"?"? ]""ud	444r    