
    ?wg$                         d dl mZmZ d dlmZ ddd Zddd ZdZd	gZ	 	  G d
 d	      Z	d Z
d Zedk(  r?ddlZ eej                        d kD  xr ej                  d    xs dZ ee        e
e       yy)   )headerrecord)INVALID_VALUEz$Revision: 1.7 $   z$Date: 2007/02/11 09:23:13 $   z1Jeff Kunce <kuncej@mail.conservation.state.mo.us>Dbfc                   
   e Zd ZdZdZej                  Zej                  Z
eZddZ ed       Z ed       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 Zd Zd Zd Zy)r	   a  DBF accessor.

    FIXME:
        docs and examples needed (dont' forget to tell
        about problems adding new fields on the fly)

    Implementation notes:
        ``_new`` field is used to indicate whether this is
        a new data table. `addField` could be used only for
        the new tables! If at least one record was appended
        to the table it's structure couldn't be changed.

    )namer   stream_changed_new_ignore_errorsc                    t        |t              r9|| _        |rt        |d      | _        n7t        |dt        |               | _        nt        |dd      | _        || _        |r| j                         | _        n*| j                  j                  | j                        | _        || _
        t        |      | _        d| _        y)af  Initialize instance.

        Arguments:
            f:
                Filename or file-like object.
            new:
                True if new data table must be created. Assume
                data table exists if this argument is False.
            readOnly:
                if ``f`` argument is a string file will
                be opend in read-only mode; in other cases
                this argument is ignored. This argument is ignored
                even if ``new`` argument is True.
            headerObj:
                `header.DbfHeader` instance or None. If this argument
                is None, new empty header will be used with the
                all fields set by default.
            ignoreErrors:
                if set, failing field value conversion will return
                ``INVALID_VALUE`` instead of raising conversion error.

        zw+b)zr+brbr    FN)
isinstancestrr   openr   boolgetattrHeaderClassr   
fromStreamignoreErrorsr   r   )selffreadOnlynewr   s        O/var/www/horilla/myenv/lib/python3.12/site-packages/tablib/_vendor/dbfpy/dbf.py__init__zDbf.__init__]   s    . aDI #1en #1mDN&CD  62.DIDK**,DK **55dkkBDK(I	    c                 .    | j                   j                  S N)r   closedr   s    r   <lambda>zDbf.<lambda>   s    4;;#5#5 r!   c                 .    | j                   j                  S r#   )r   recordCountr%   s    r   r&   zDbf.<lambda>   s    (?(? r!   c                 h    | j                   j                  D cg c]  }|j                   c}S c c}w r#   )r   fieldsr   )r   _flds     r   r&   zDbf.<lambda>   s"    DKK,>,>?Ddii? ?s   /c                 .    | j                   j                  S r#   )r   r*   r%   s    r   r&   zDbf.<lambda>   s    dkk&8&8 r!   c                 J    | j                   xs | j                  j                  S r#   )r   r   changedr%   s    r   r&   zDbf.<lambda>   s    DMM$HT[[5H5H r!   c                 F    t        |      x| j                  _        | _        y)z8Update `ignoreErrors` flag on the header object and selfN)r   r   r   r   )r   values     r   r   zDbf.ignoreErrors   s    9=eD 4#6r!   c                     | j                   S r#   )r   r%   s    r   r&   zDbf.<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                     t        |t              st        d      |dk  r|t        |       dz   z  }|t        |       k\  rt	        d      |S )a  Return fixed index.

        This method fails if index isn't a numeric object
        (long or int). Or index isn't in a valid range
        (less or equal to the number of records in the db).

        If ``index`` is a negative number, it will be
        treated as a negative indexes for list objects.

        Return:
            Return value is numeric object maning valid index.

        zIndex must be a numeric object    r   zRecord index out of range)r   int	TypeErrorlen
IndexErrorr   indexs     r   	_fixIndexzDbf._fixIndex   sR     %%<==19 SY]"ECI899r!   c                 X    | j                          | j                  j                          y r#   )flushr   closer%   s    r   r>   z	Dbf.close   s    

r!   c                     | j                   ra| j                  j                          | j                  j                  | j                         | j                  j                          d| _        yy)z$Flush data to the associated stream.FN)r.   r   setCurrentDatewriter   r=   r   r%   s    r   r=   z	Dbf.flush   sK    <<KK&&(KKdkk*KK!DM	 r!   c                     | j                   j                  D cg c]  }|j                   }}|j                  |j	                               S c c}w )zIndex of field named ``name``.)r   r*   r   r:   upper)r   r   r   namess       r   indexOfFieldNamezDbf.indexOfFieldName   s?     "&!3!34A44{{4::<(( 5s   Ac                 $    | j                  |       S )z.Return new record, which belong to this table.)RecordClassr%   s    r   	newRecordzDbf.newRecord   s    %%r!   c                     | j                   j                  |_         |j                          | j                   xj                  dz  c_        d| _        d| _        y)z"Append ``record`` to the database.r   TFN)r   r(   r:   _writer   r   )r   r   s     r   appendz
Dbf.append   sA    {{..1$	r!   c                 d    | j                   r | j                  j                  |  yt        d      )z_Add field definitions.

        For more information see `header.DbfHeader.addField`.

        z9At least one record was added, structure can't be changedN)r   r   addFieldr6   )r   defss     r   rM   zDbf.addField   s1     99 DKK  $' 9 : :r!   c                 L    d| j                   z  t        | j                        z   S )NzDbf stream '%s'
)r   reprr   r%   s    r   __repr__zDbf.__repr__   s    "T[[043DDDr!   c                     | j                   S )zReturn number of records.)r(   r%   s    r   __len__zDbf.__len__   s    r!   c                 X    | j                   j                  | | j                  |            S )zReturn `DbfRecord` instance.)rG   r   r;   r9   s     r   __getitem__zDbf.__getitem__   s$    **41FGGr!   c                 n    | j                  |      |_         |j                          d| _        d| _        y)z)Write `DbfRecord` instance to the stream.TFN)r;   r:   rJ   r   r   )r   r:   r   s      r   __setitem__zDbf.__setitem__   s+    ~~e,	r!   N)FFF)__name__
__module____qualname____doc__	__slots__r   	DbfHeaderr   r   	DbfRecordrG   r   r    propertyr$   r(   
fieldNames	fieldDefsr.   r   r;   r>   r=   rE   rH   rK   rM   rQ   rS   rU   rW    r!   r   r	   r	   E   s    7I ""K""K!M-b 56F?@K?AJ89IHIGE (L4")&
:E Hr!   c                     t        | d      }|D ]   }t                t        t        |             " |j                          y )NT)r	   printrP   r>   )filename_dbf_recs      r   	demo_readrh     s9    xD d4j 	JJLr!   c                    t        | d      }|j                  dddd       dD ];  \  }}}}|j                         }||d<   ||d	<   ||d
<   ||d<   |j                          = t	        t        |             |j                          y )NT)r   )NAMEC   )SURNAMErk      )INITIALSrk   
   )	BIRTHDATED))JohnMillerYC)i  r      )AndyLarkinAL)i        )BillClinthr   )i        )BobbMcNailr   )i  r      rj   rm   ro   rq   )r	   rM   rH   storerd   rP   r>   )re   rf   _n_s_i_brg   s          r   demo_creater   
  s    xT"DMM	 RR ~~VYZ[

 
$t*JJLr!   __main__r4   Nz
county.dbf)r   r   r   utilsr   __version____date__
__author____all__r	   rh   r   rX   sysr7   argv_namerb   r!   r   <module>r      s       B')!B/@
'%L(v vz0 zMA-#((1+=Ee r!   