
lR\2                 @   s   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 Gd d   d e  Z	 Gd 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   s8   y |  d |  j  d   SWn t k
 r3 |  SYn Xd S)zReturn 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	   P/var/www/dbchiro/venv/lib/python3.4/site-packages/tablib/packages/dbfpy/utils.pyunzfill   s    r   c             C   s(  |  d k r t  j j   St |  t  j  r/ |  St |  t  j   rK |  j   St |  t t t f  rs t  j j |   St |  t  r |  j	 d d  }  t
 |   d k r t  j t j |  d  d d    St  j t j |  d  d d    St |  d  rt  j |  d d    St  j j |  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longfloatfromtimestamp
basestringreplacelentimestrptimehasattrticks)r   r	   r	   r
   getDate!   s     
##r    c             C   s   |  d k r t  j  j   St |  t  j   r/ |  St |  t  j  rW t  j  j |  j    St |  t t t f  r t  j  j	 |   St |  t
  r t d   n  t |  d  r t  j  t |   d d    St  j  j	 |  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   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   |  j  |  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               @   s|   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)Nr	   )r)   otherr	   r	   r
   __eq__   s    z_InvalidValue.__eq__c             C   s
   | |  k	 S)Nr	   )r)   r2   r	   r	   r
   __ne__   s    z_InvalidValue.__ne__c             C   s   d S)NFr	   )r)   r	   r	   r
   __nonzero__   s    z_InvalidValue.__nonzero__c             C   s   d S)Nr   r	   )r)   r	   r	   r
   __int__   s    z_InvalidValue.__int__c             C   s   d S)Ng        r	   )r)   r	   r	   r
   	__float__   s    z_InvalidValue.__float__c             C   s   d S)N r	   )r)   r	   r	   r
   __str__   s    z_InvalidValue.__str__c             C   s   d S)Nr8   r	   )r)   r	   r	   r
   __unicode__   s    z_InvalidValue.__unicode__c             C   s   d S)Nz	<INVALID>r	   )r)   r	   r	   r
   __repr__   s    z_InvalidValue.__repr__N)r-   r.   r/   r0   r3   r4   r5   r6   Z__long__r7   r9   r:   r;   r	   r	   r	   r
   r1      s   r1   r<   )r0   __version____date__r   r   r   r    r&   propertyr'   objectr1   ZINVALID_VALUEr	   r	   r	   r
   <module>   s   .*(