
    ?wg8                        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       j1                               D ]8  \  ZZ eee      s eee	      sedk7  s ej=                  e        ee       : [[y)!    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y)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ignoreErrorsNc                    | j                   J d       | j                  J d       t        |      dkD  rt        d|z        t	        |      j                         }| j                  j                  .|t        d|z        t        |      }|dk  rt        d|z        | j                  }|d}|| _	        || _        || _
        || _        || _        || _        y)	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/horilla/myenv/lib/python3.12/site-packages/tablib/_vendor/dbfpy/fields.py__init__zDbfFieldDef.__init__M   s     }}(H*HH(  ,P.PP,t9r><tCDD4y >>  (~ !>!EFF[F{ !ID!PQQ[[FL	 ((
    c                 0    t        |       t        |      k(  S Nreprr   others     r   __eq__zDbfFieldDef.__eq__j       DzT%[((r    c                 0    t        |       t        |      k7  S r"   r#   r%   s     r   __ne__zDbfFieldDef.__ne__m   r(   r    c                 0    t        |       t        |      k  S r"   r#   r%   s     r   __lt__zDbfFieldDef.__lt__p   s    DzDK''r    c                 ,    t        | j                        S r"   )hashr   r   s    r   __hash__zDbfFieldDef.__hash__s   s    DIIr    c                     t        |      dk(  sJ |d   } | t        j                  |      dd j                  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   s^     6{b   *5==("-44W=w":uegoLR 	Rr    c                     | j                   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   sx     		D)MM FQJ 	
 !!"# FRK	
r    c                 (    d| j                         z  S )Nz%-10s %1s %3d %3d)	fieldInfor/   s    r   __repr__zDbfFieldDef.__repr__   s    "T^^%555r    c                 ^    | 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%     yy$--d6G6GGGr    c                 4    || j                   | j                   S )z2Return a "raw" field value from the record string.)r   r   r   records     r   rawFromRecordzDbfFieldDef.rawFromRecord   s    djj**r    c                     	 | j                  | j                  |            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   sJ    	##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   +   sy    " II F
 H L7;5::))(R" Z(J
&6H+""r    r   c                   $    e Zd ZdZdZdZd Zd Zy)DbfCharacterFieldDefz"Definition of the character field.Cr    c                 B    |j                  d      j                  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1r    c                 d    t        |      d| j                   j                  | j                        S )z0Return raw data string encoded from a ``value``.N)r   r   r@   rT   s     r   rW   z DbfCharacterFieldDef.encodeValue   s&    5z,4;;'--dkk::r    NrX   rY   rZ   r[   r   r   rM   rW   r^   r    r   r`   r`      s    ,HL2;r    r`   c                   $    e Zd ZdZdZdZd Zd Zy)DbfNumericFieldDefz Definition of the numeric field.Nr   c                 ^    |j                  d      }d|v rt        |      S |rt        |      S y)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   s3     F#5=<u:r    c           	      4   d| j                   | j                  |fz  }t        |      | j                   kD  rc|j                  d      }d|cxk  r| j                   k  rn n|d| j                    }|S 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'8%@@s8dkk!HHSMEE(T[[(,4;;'
 
 !		{"6se?4;;-WXY  
r    Nrf   r^   r    r   rh   rh      s    *H
 L(r    rh   c                       e Zd ZdZdZy)DbfFloatFieldDefz0Definition of the float field - same as numeric.FN)rX   rY   rZ   r[   r   r^   r    r   rw   rw   	  s
    :Hr    rw   c                   (    e Zd ZdZdZdZdZd Zd Zy)DbfIntegerFieldDefz Definition of the integer field.Ir>   r   c                 4    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                 @    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     s    *HFL--r    rz   c                   (    e Zd ZdZdZdZdZd Zd Zy)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                 F    t        j                  dt        |dz              S )ro   r   i'  )r   r   roundrT   s     r   rW   zDbfCurrencyFieldDef.encodeValue*  s    {{4uu}!566r    Nr   r^   r    r   r   r     s    +HFL67r    r   c                   (    e Zd ZdZdZdZdZd Zd Zy)DbfLogicalFieldDefz Definition of the logical field.Lr   c                 X    |dk(  ry|dv ry|dv ry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  s@     C<GF?1TYYK'?yIJJr    c                     |du ry|dk(  ryy)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=B;r    N	rX   rY   rZ   r[   r   r   r   rM   rW   r^   r    r   r   r   /  s    *HLF	Kr    r   c                   (    e Zd ZdZdZdZdZd Zd Zy)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  s"     HLF"
"r    r   c                   J    e Zd ZdZdZ ej                  d       ZdZd Z	d Z
y)DbfDateFieldDefzDefinition of the date field.Dc                 >    t         j                  j                         S r"   )datetimedatetodayr8   s    r   <lambda>zDbfDateFieldDef.<lambda>n  s    8==3F3F3H r    r   c                 N    |j                         rt        j                  |      S y)z;Return a ``datetime.date`` instance decoded from ``value``.N)rl   r   getDaterT   s     r   rM   zDbfDateFieldDef.decodeValuer  s    ;;===''r    c                 l    |r$t        j                  |      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  s0     =='00::$$r    N)rX   rY   rZ   r[   r   r   classpropertyr   r   rM   rW   r^   r    r   r   r   j  s,    'H&5&&'HILF%r    r   c                   N    e Zd ZdZdZdZ ej                  d       ZdZ	d Z
d Zy)	DbfDateTimeFieldDefz"Definition of the timestamp field.iQD r   c                 >    t         j                   j                         S r"   )r   nowr   s    r   r   zDbfDateTimeFieldDef.<lambda>  s    83D3D3H3H3J r    r   c                    t        |      | j                  k(  sJ t        j                  d|      \  }}|dk\  rJt        j                  j                  || j                  z
        }|t	        j                  d|dz        z  }|S 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    5zT[[(((}}UE2f19##//t7H7H0HIC8%%a&99C 
 C
r    c                 F   |rut        j                  |      }t        j                  d|j	                         | 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9J9J%J$zzD05<<"3DDu||SW[[]C $C3x4;;&&&
r    N)rX   rY   rZ   r[   r   r   r   r   r   r   rM   rW   r^   r    r   r   r     s5    , LH&5&&'JKL F
r    r   c                 P    | j                   J d       | t        | j                   <   y)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     s.     (C*CC( *2OH%%&r    c                 &    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      s1     $ !"R()!B/-
2 Y" Y" Y"|;; ;&) )X) - - 7+ 7  B"k "4%k %>$+ $N 2*& ')//+, MUD$*T;"?]"ud	
 
4r    