o
    „s¢Y  ã                   @   st   d Z 	 ddd… Zddd… ZddlZddlZdd	„ Zdd
d„Zddd„ZG dd„ deƒZ	G dd„ de
ƒZeƒ ZdS )zCString utilities.

TODO:
  - allow strings in getDateTime routine;
z$Revision: 1.4 $é   éþÿÿÿz$Date: 2007/02/11 08:57:17 $é   é    Nc                 C   s,   z
| d|   d¡… W S  ty   |  Y S w )z™Return a string without ASCII NULs.

    This function searchers for the first NUL (ASCII 0) occurance
    and truncates string till that position.

    Nó    )ÚindexÚ
ValueError)Ústr© r	   úN/var/www/html/env/lib/python3.10/site-packages/tablib/packages/dbfpy3/utils.pyÚunzfill   s
   ÿr   c                 C   sÒ   | du r	t j ¡ S t| t jƒr| S t| t j ƒr|  ¡ S t| ttfƒr(t j | ¡S t| tƒrS|  dd¡} t	| ƒdkrFt jt
 | d¡dd… Ž S t jt
 | d¡dd… Ž S t| dƒrat j| dd… Ž S t j |  ¡ ¡S )	aÆ  Return `datetime.date` instance.

    Type of the ``date`` argument could be one of the following:
        None:
            use current date value;
        datetime.date:
            this value will be returned;
        datetime.datetime:
            the result of the date.date() will be returned;
        string:
            assuming "%Y%m%d" or "%y%m%dd" format;
        number:
            assuming it's a timestamp (returned for example
            by the time.time() call;
        sequence:
            assuming (year, month, day, ...) sequence;

    Additionaly, if ``date`` has callable ``ticks`` attribute,
    it will be used and result of the called would be treated
    as a timestamp value.

    Nú Ú0é   z%y%m%dé   z%Y%m%dÚ__getitem__)ÚdatetimeÚdateÚtodayÚ
isinstanceÚintÚfloatÚfromtimestampr   ÚreplaceÚlenÚtimeÚstrptimeÚhasattrÚticks)r   r	   r	   r
   ÚgetDate!   s    


r   c                 C   sš   | du r	t j  ¡ S t| t j ƒr| S t| t jƒrt j  |  ¡ ¡S t| ttfƒr,t j  | ¡S t| t	ƒr5t
dƒ‚t| dƒrEt j t| ƒdd… Ž S t j  |  ¡ ¡S )aô  Return `datetime.datetime` instance.

    Type of the ``value`` argument could be one of the following:
        None:
            use current date value;
        datetime.date:
            result will be converted to the `datetime.datetime` instance
            using midnight;
        datetime.datetime:
            ``value`` will be returned as is;
        string:
            *** CURRENTLY NOT SUPPORTED ***;
        number:
            assuming it's a timestamp (returned for example
            by the time.time() call;
        sequence:
            assuming (year, month, day, ...) sequence;

    Additionaly, if ``value`` has callable ``ticks`` attribute,
    it will be used and result of the called would be treated
    as a timestamp value.

    Nz$Strings aren't currently implementedr   r   )r   r   r   r   ÚfromordinalÚ	toordinalr   r   r   r   ÚNotImplementedErrorr   Útupler   )Úvaluer	   r	   r
   ÚgetDateTimeO   s   


r$   c                   @   s   e Zd ZdZdd„ ZdS )Úclasspropertyz=Works in the same way as a ``property``, but for the classes.c                 C   s
   |   |¡S ©N)Úfget)ÚselfÚobjÚclsr	   r	   r
   Ú__get__|   s   
zclassproperty.__get__N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r+   r	   r	   r	   r
   r%   y   s    r%   c                   @   sT   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ ZeZd
d„ Z	dd„ Z
dd„ Zdd„ ZdS )Ú_InvalidValuea™  Value returned from DBF records when field validation fails

    The value is not equal to anything except for itself
    and equal to all empty values: None, 0, empty string etc.
    In other words, invalid value is equal to None and not equal
    to None at the same time.

    This value yields zero upon explicit conversion to a number type,
    empty string for string types, and False for boolean.

    c                 C   s   | S r&   r	   ©r(   Úotherr	   r	   r
   Ú__eq__Ž   s   z_InvalidValue.__eq__c                 C   s   || uS r&   r	   r1   r	   r	   r
   Ú__ne__‘   s   z_InvalidValue.__ne__c                 C   ó   dS )NFr	   ©r(   r	   r	   r
   Ú__bool__”   ó   z_InvalidValue.__bool__c                 C   r5   )Nr   r	   r6   r	   r	   r
   Ú__int__—   r8   z_InvalidValue.__int__c                 C   r5   )Ng        r	   r6   r	   r	   r
   Ú	__float__›   r8   z_InvalidValue.__float__c                 C   r5   ©NÚ r	   r6   r	   r	   r
   Ú__str__ž   r8   z_InvalidValue.__str__c                 C   r5   r;   r	   r6   r	   r	   r
   Ú__unicode__¡   r8   z_InvalidValue.__unicode__c                 C   r5   )Nz	<INVALID>r	   r6   r	   r	   r
   Ú__repr__¤   r8   z_InvalidValue.__repr__N)r,   r-   r.   r/   r3   r4   r7   r9   Ú__long__r:   r=   r>   r?   r	   r	   r	   r
   r0   €   s    r0   r&   )r/   Ú__version__Ú__date__r   r   r   r   r$   Úpropertyr%   Úobjectr0   ÚINVALID_VALUEr	   r	   r	   r
   Ú<module>   s    

.*
(