§
    fÍâhš$  ã                   óŠ   — 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 #ˆŒØˆ>ØˆDŒKˆKå˜v™,œ,ˆDŒKÝ! *Ñ-Ô-ˆŒØ(ˆÔØ(ˆÔØ&ˆÔØ(ˆÔõ ˜DœKÑ(Ô(ˆŒˆˆó    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$   € à�~Š~�bœk­#¨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Š:ˆ:ð �T‰MˆEˆEà�T‰MˆEàˆs�4˜ '¨4°°q´Ø˜5 œ8 U¨1¤XÐ.ñ0ô 0ˆð ˆØ—’˜A‘”ˆØ�uŠnˆnØ�V—[’[ ‘_”_Ñ$ˆEÝÔ# E¨"¤IÑ.Ô.×9Ò9¸%ÀÑFÔFˆDØ�NŠN˜4Ñ Ô Ð Ø”8ˆDØ—K’K ‘N”NˆEð �uŠnˆnð ˆ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;   € å&*¨5¡k¤kÐ1ˆÔ˜eØ”kð 	(ð 	(ˆFØ"'ˆFÔÐð	(ð 	(r   c                 ó   — | j         S rB   )r   rD   s    r   rE   zDbfHeader.<lambda>•   s	   € �TÔ(€ r   z¹Error 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 )Nz”Version (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ÐK°tÐ $§.¢.Ñ"2Ô"2Ñ2ÐKÐKÐKr   )r   r   r   r   r   Újoinr   )r   Ú_rvs     r   Ú__repr__zDbfHeader.__repr__    sf   € ðˆð �T”^ T¤_°dÔ6GØÔ&¨Ô(8ð:ñ :ˆàˆt�yŠyØKÐK¸t¼{Ð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Ø��å.3°D©k¬k¸KÑ.GÈÈ!ÈÔ-LÑ*�˜˜t TÝÔ'¨Ñ.Ô.�Ø�t˜E 4¨¸DÔ<OÐPÑPÔP�Ø˜Tœ[Ñ(ˆMØ�LŠL˜ÑÔÐÐð 	ˆŒ�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ÐÔØð 	#ØÐÔ Ñ"ÐÔð  "¥s¨4¬;Ñ'7Ô'7Ñ"7Ñ8¸1Ñ<ˆÔØˆŒˆˆ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—]’]‘_”_Ñ%Ô%Ð%Ø:Ð:¨d¬kÐ:Ñ:Ô:ˆØ�Š�R—W’W˜V‘_”_×+Ò+­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Øœ>Øœ9 tÑ+Øœ:Øœ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   € å�d�CÑ Ô ð 		%Ø—J’J‘L”LˆEØœ+ð %ð %�Ø”; %Ò'Ð'Ø!�M�M�Mð (õ ˜t‘n”nÐ$ð ”;˜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Ô6€DØˆHÐ7Ð7Ñ8Ô8€EØ
ˆ(Ð3Ð3Ñ
4Ô
4€Cð(ð (ð (ð
 �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   