
    fh$                         d dl Z d dlZ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
	 	  G d d
          ZdS )    N   )fields)getDatez$Revision: 1.6 $   z$Date: 2010/09/16 05:06:39 $   	DbfHeaderc                       e Zd ZdZdZ	 	 ddZd Z ee          Zd	 Z ee          Z e	d
           Z
 e	d           Z e	d           Zd Z e	d ed          Zd Zd Zd Zd Zd Zd Zd ZdS )r	   a|  Dbf header definition.

    For more information about dbf header format visit
    `http://www.clicketyclick.dk/databases/xbase/format/dbf.html#DBF_STRUCT`

    Examples:
        Create an empty dbf header and add some field definitions:
            dbfh = DbfHeader()
            dbfh.addField(("name", "C", 10))
            dbfh.addField(("date", "D"))
            dbfh.addField(DbfNumericFieldDef("price", 5, 2))
        Create a dbf header with field definitions:
            dbfh = DbfHeader([
                ("name", "C", 10),
                ("date", "D"),
                DbfNumericFieldDef("price", 5, 2),
            ])

    )	signaturer   
lastUpdaterecordLengthrecordCountheaderLengthchanged_ignore_errorsNr      Fc                     || _         |g | _        nt          |          | _        t          |          | _        || _        || _        || _        || _        t          | j                  | _
        dS )a  Initialize instance.

        Arguments:
            fields:
                a list of field definitions;
            recordLength:
                size of the records;
            headerLength:
                size of the header;
            recordCount:
                number of records stored in DBF;
            signature:
                version number (aka signature). using 0x03 as a default meaning
                "File without DBT". for more information about this field visit
                ``http://www.clicketyclick.dk/databases/xbase/format/dbf.html#DBF_NOTE_1_TARGET``
            lastUpdate:
                date of the DBF's update. this could be a string ('yymmdd' or
                'yyyymmdd'), timestamp (int or float), datetime/date value,
                a sequence (assuming (yyyy, mm, dd, ...)) or an object having
                callable ``ticks`` field.
            ignoreErrors:
                error processing mode for DBF fields (boolean)

        N)r   r   listr   r   r   r   r   ignoreErrorsboolr   )selfr   r   r   r   r   r   r   s           R/var/www/histauto/venv/lib/python3.11/site-packages/tablib/_vendor/dbfpy/header.py__init__zDbfHeader.__init__:   sl    4 #>DKKv,,DK!*--((&( DK((    c                 j    |                      t          j        t          |                              S )z.Return header instance from the string object.)
fromStreamioStringIOstr)clsstrings     r   
fromStringzDbfHeader.fromStringc   s$    ~~bk#f++66777r   c                    |                     d           |                    d          }t          |t                    s!t          |t	          j                              }|}t          j        d|dd                   \  }}}|d         }|dk     r|dz  }n|d	z  } | d
||||d         ||d         |d         f          }d}	|                    d          }|dk    r}||                    d          z  }t          j	        |d                   
                    ||	          }
|                    |
           |
j        }	|                    d          }|dk    }|S )z%Return header object from the stream.r       z<I2H      r   P   i  l  N   r         r   )seekread
isinstancebytessysgetfilesystemencodingstructunpackr   	lookupForr"   	_addFieldend)r    streamfirst_32_data_cnt_hdrLen_recLen_year_obj_pos_flds              r   r   zDbfHeader.fromStreami   sZ   A;;r??(E** 	A(C$=$?$?@@E#)=qt#E#E wa2:: TMEETMEs4'4q58U1X.0 0 AunnV[[__$E#E"I..99%FFDNN4   8DKKNNE unn r   c                     | j         j        S N)r   yearr   s    r   <lambda>zDbfHeader.<lambda>   s    !5 r   c                     | j         j        S rB   )r   monthrD   s    r   rE   zDbfHeader.<lambda>   s    $/"7 r   c                     | j         j        S rB   )r   dayrD   s    r   rE   zDbfHeader.<lambda>   s     3 r   c                 T    t          |          x| _        }| j        D ]	}||_        
dS )z1Update `ignoreErrors` flag on self and all fieldsN)r   r   r   r   )r   value_fields      r   r   zDbfHeader.ignoreErrors   s;    &*5kk1ek 	( 	(F"'F	( 	(r   c                     | j         S rB   )r   rD   s    r   rE   zDbfHeader.<lambda>   s	    T( r   zError processing mode for DBF field value conversion

        if set, failing field value conversion will return
        ``INVALID_VALUE`` instead of raising conversion error.

        )docc                     d}|| j         | j        | j        | j        | j        fz  }|d                    d | j        D                       z  }|S )NzVersion (signature): 0x%02x
        Last update: %s
      Header length: %d
      Record length: %d
       Record count: %d
 FieldName Type Len Dec

c                 <    g | ]}d |                                 z  S )z%10s %4s %3s %3s)	fieldInfo.0r@   s     r   
<listcomp>z&DbfHeader.__repr__.<locals>.<listcomp>   s(    KKKt$.."2"22KKKr   )r   r   r   r   r   joinr   )r   _rvs     r   __repr__zDbfHeader.__repr__   sf     T^T_d6G&(8: :tyyKKt{KKK
 
 	
 
r   c                 >   g }d}|D ]}t          |t          j                  r|}nGt          |          dz   dd         \  }}}}	t          j        |          }
 |
|||	| j                  }||j        z  }|                    |           | xj        |z  c_        |S )ah  Internal variant of the `addField` method.

        This method doesn't set `self.changed` field to True.

        Return value is a length of the appended records.
        Note: this method doesn't modify ``recordLength`` and
        ``headerLength`` fields. Use `addField` instead of this
        method if you don't exactly know what you're doing.

        r   )NNNNNr%   )r   )r.   r   DbfFieldDeftupler4   r   lengthappend)r   defs_defs_recordLength_defr>   _name_type_len_dec_clss              r   r5   zDbfHeader._addField   s      	 	D$ 233 Q.3DkkK.G!-L*tT'..tE4D<OPPPT[(MLL 	ur   c                     | j         }| xj          | j        | z  c_         |s| xj         dz  c_         ddt          | j                  z  z   dz   | _        d| _        dS )a  Add field definition to the header.

        Examples:
            dbfh.addField(
                ("name", "C", 20),
                dbf.DbfCharacterFieldDef("surname", 20),
                dbf.DbfDateFieldDef("birthdate"),
                ("member", "L"),
            )
            dbfh.addField(("price", "N", 5, 2))
            dbfh.addField(dbf.DbfNumericFieldDef("origprice", 5, 2))

        r   r$   TN)r   r5   lenr   r   r   )r   r^   _oldLens      r   addFieldzDbfHeader.addField   ss     #^T^T22 	#" "s4;'7'7"781<r   c                 p   |                     d           |                    |                                            d | j        D             }|                    d                    |                              t          j                                         |                    d           d| _        dS )z&Encode and write header to the stream.r   c                 6    g | ]}|                                 S  )toStringrS   s     r   rU   z#DbfHeader.write.<locals>.<listcomp>   s     :::d$--//:::r    r*   FN)	r,   writern   r   rV   encoder0   r1   r   )r   r7   r   s      r   rp   zDbfHeader.write   s    AT]]__%%%::dk:::RWWV__++C,E,G,GHHIIIWr   c           
          t          j        d| j        | j        dz
  | j        | j        | j        | j        | j                  dz   S )z4Returned 32 chars length string with encoded header.z<4BI2Hr(   s                       )	r2   packr   rC   rG   rI   r   r   r   rD   s    r   rn   zDbfHeader.toString   sM    {8>9t+:8+,,. . 2>? 	?r   c                 L    t           j                                        | _        dS )z9Update ``self.lastUpdate`` field with current date value.N)datetimedatetodayr   rD   s    r   setCurrentDatezDbfHeader.setCurrentDate   s    "---//r   c                     t          |t                    r<|                                }| j        D ]}|j        |k    r|c S t          |          | j        |         S )z9Return a field definition by numeric index or name string)r.   r   upperr   nameKeyError)r   itemrb   rL   s       r   __getitem__zDbfHeader.__getitem__  sj    dC   		%JJLLE+ % %;%''!MMM ( tnn$ ;t$$r   )Nr   r   r   r   NF)__name__
__module____qualname____doc__	__slots__r   r"   classmethodr   propertyrC   rG   rI   r   rX   r5   rj   rp   rn   rx   r~   rm   r   r   r	   r	       s_        (MI
 BCNS&) &) &) &)R8 8 8 Z((J  < Z((J 85566DH7788E
(33
4
4C( ( (
 8((  L  $  @  0  	? 	? 	?0 0 0% % % % %r   )ru   r   r2   r0   ro   r   utilsr   __version____date____all__r	   rm   r   r   <module>r      s     				  



             B')!B$/-n% n% n% n% n% n% n% n% n% n%r   