Ë
    ûûàgš$  ã                   ón   — 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y)é    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y)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_errorsNc                 óÒ   — || _         |€g | _        nt        |«      | _        t        |«      | _        || _        || _        || _        || _        t        | j                  «      | _
        y)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           úY/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/tablib/_vendor/dbfpy/header.pyÚ__init__zDbfHeader.__init__:   s`   € ð4 #ˆŒØˆ>ØˆD�Kä˜v›,ˆDŒKÜ! *Ó-ˆŒØ(ˆÔØ(ˆÔØ&ˆÔØ(ˆÔô ˜DŸK™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™k¬#¨f«+Ó6Ó7Ð7r   c                 óP  — |j                  d«       |j                  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}	|j                  d«      }|dk7  rp||j                  d«      z  }t        j                  |d   «      j                  ||	«      }
|j                  |
«       |
j                  }	|j                  d«      }|dk7  rŒp|S )z%Return header object from the stream.r   é    z<I2Hé   é   r   éP   iÐ  él  Né   é   ó   é   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   s)  € à�‰�AŒØ—;‘;˜r“?ˆÜ˜(¤EÔ*Ü˜(¤C×$=Ñ$=Ó$?Ó@ˆEØˆÜ#)§=¡=°¸¸qÀ¸Ó#EÑ ˆˆw˜à�a‘ˆØ�2Š:ð �T‰M‰Eà�T‰MˆEá�4˜ '¨4°°q±Ø˜5 ™8 U¨1¡XÐ.ó0ˆð ˆØ—‘˜A“ˆØ�uŠnØ�V—[‘[ “_Ñ$ˆEÜ×#Ñ# E¨"¡IÓ.×9Ñ9¸%ÀÓFˆDØ�N‰N˜4Ô Ø—8‘8ˆDØ—K‘K “NˆEð �u‹nð ˆr   c                 ó.   — | j                   j                  S ©N)r   Úyear©r   s    r   ú<lambda>zDbfHeader.<lambda>‹   s   €  §¡×!5Ñ!5€ r   c                 ó.   — | j                   j                  S rB   )r   ÚmonthrD   s    r   rE   zDbfHeader.<lambda>Œ   s   €  $§/¡/×"7Ñ"7€ r   c                 ó.   — | j                   j                  S rB   )r   ÚdayrD   s    r   rE   zDbfHeader.<lambda>�   s   €  §¡× 3Ñ 3€ r   c                 óX   — t        |«      x| _        }| j                  D ]	  }||_        Œ y)z1Update `ignoreErrors` flag on self and all fieldsN)r   r   r   r   )r   ÚvalueÚ_fields      r   r   zDbfHeader.ignoreErrors�   s.   € ä&*¨5£kÐ1ˆÔ˜eØ—k‘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j                  | j                  D �cg c]  }d|j                  «       z  ‘Œ c}«      z  }|S c c}w )Nz”Version (signature): 0x%02x
        Last update: %s
      Header length: %d
      Record length: %d
       Record count: %d
 FieldName Type Len Dec
ú
z%10s %4s %3s %3s)r   r   r   r   r   Újoinr   Ú	fieldInfo)r   Ú_rvr@   s      r   Ú__repr__zDbfHeader.__repr__    s€   € ðˆð �T—^‘^ T§_¡_°d×6GÑ6GØ×&Ñ&¨×(8Ñ(8ð:ñ :ˆàˆt�y‰yØ?C¿{¹{ÖK°tÐ $§.¡.Ó"2Ó2ÒKó
ñ 	
ˆð ˆ
ùò Ls   ÁA>
c                 óB  — g }d}|D ]€  }t        |t        j                  «      r|}nAt        |«      dz   dd \  }}}}	t        j                  |«      }
 |
|||	| j
                  ¬«      }||j                  z  }|j                  |«       Œ‚ | 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Ñ 2Ô3Ø‘ä.3°D«k¸KÑ.GÈÈ!Ð-LÑ*�˜˜t TÜ×'Ñ'¨Ó.�Ù˜E 4¨¸D×<OÑ<OÔ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| _        y)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   rZ   Ú_oldLens      r   ÚaddFieldzDbfHeader.addFieldÒ   sh   € ð ×#Ñ#ˆØ×Ò˜^˜TŸ^™^¨TÐ2Ñ2ÕÙØ×Ò Ñ"Õð  "¤s¨4¯;©;Ó'7Ñ"7Ñ8¸1Ñ<ˆÔØˆ�r   c                 ón  — |j                  d«       |j                  | j                  «       «       | j                  D �cg c]  }|j                  «       ‘Œ }}|j                  dj	                  |«      j                  t        j                  «       «      «       |j                  d«       d| _        yc c}w )z&Encode and write header to the stream.r   Ú r*   FN)	r,   ÚwriteÚtoStringr   rQ   Úencoder0   r1   r   )r   r7   r@   r   s       r   ri   zDbfHeader.writeê   s|   € à�‰�AŒØ�‰�T—]‘]“_Ô%Ø.2¯k©kÖ: d�$—-‘-•/Ð:ˆÐ:Ø�‰�R—W‘W˜V“_×+Ñ+¬C×,EÑ,EÓ,GÓHÔIØ�‰�WÔØˆ�ùò ;s   ¿B2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   rj   zDbfHeader.toStringó   s[   € ä�{‰{˜8ØŸ>™>ØŸ9™9 tÑ+ØŸ:™:ØŸ8™8Ø×+Ñ+Ø×,Ñ,Ø×,Ñ,ó.ð 2>ñ?ð 	?r   c                 óJ   — t         j                  j                  «       | _        y)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                  «       }| j                  D ]  }|j                  |k(  sŒ|c S  t        |«      ‚| j                  |   S )z9Return a field definition by numeric index or name string)r.   r   Úupperr   ÚnameÚKeyError)r   Úitemr^   rL   s       r   Ú__getitem__zDbfHeader.__getitem__  sX   € ä�dœCÔ Ø—J‘J“LˆEØŸ+™+ò %�Ø—;‘; %Ó'Ø!’Mð%ô ˜t“nÐ$ð —;‘;˜tÑ$Ð$r   )Nr   r   r   r)   NF)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__r   r!   Úclassmethodr   ÚpropertyrC   rG   rI   r   rT   r5   rf   ri   rj   rr   rx   © r   r   r	   r	       s¤   „ ñð(M€Ið
 BCØNSó&)òR8ñ ˜ZÓ(€Jòñ< ˜ZÓ(€Jñ Ñ5Ó6€DÙÑ7Ó8€EÙ
Ñ3Ó
4€Cò(ñ
 Ù(Øðô€Lòò$ò@ò0ò	?ò0ó%r   )ro   r   r2   r0   rh   r   Úutilsr   Ú__version__Ú__date__Ú__all__r	   r€   r   r   ú<module>r…      sL   ðÛ Û 	Û Û 
å Ý à   BÐ'€Ø)¨!¨BÐ/€àˆ-€ðð÷n%ò n%r   