a
    ¢<Ô^,  ã                   @   s4   d Z ddlmZ G dd„ deƒZG dd„ deƒZdS )z4
parsedatetime/context.py

Context related classes

é    )Úlocalc                   @   sD   e Zd ZdZdd„ Zedd„ ƒZdd„ Zdd	„ Zd
d„ Z	dd„ Z
dS )ÚpdtContextStackz\
    A thread-safe stack to store context(s)

    Internally used by L{Calendar} object
    c                 C   s   t ƒ | _d S ©N)r   Ú_pdtContextStack__local©Úself© r   ú7/usr/lib/python3/dist-packages/parsedatetime/context.pyÚ__init__   s    zpdtContextStack.__init__c                 C   s   t | jdƒsg | j_| jjS )NÚstack)Úhasattrr   r   r   r   r   r	   Z__stack   s    zpdtContextStack.__stackc                 C   s   | j  |¡ d S r   )Ú_pdtContextStack__stackÚappend©r   Úctxr   r   r	   Úpush   s    zpdtContextStack.pushc                 C   s&   z| j  ¡ W S  ty    Y d S 0 d S r   )r   ÚpopÚ
IndexErrorr   r   r   r	   r      s    zpdtContextStack.popc                 C   s,   z| j d W S  ty&   tdƒ‚Y n0 d S )Néÿÿÿÿzcontext stack is empty)r   r   ÚRuntimeErrorr   r   r   r	   Úlast%   s    zpdtContextStack.lastc                 C   s   | j  S r   )r   r   r   r   r	   ÚisEmpty+   s    zpdtContextStack.isEmptyN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r
   Úpropertyr   r   r   r   r   r   r   r   r	   r      s   
r   c                   @   s*  e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZeeB eB eB Ze	e
B eB eB eB Zedfedfedfedfe	dfe
dfedfedfedfg	Zeeeeeeeee	e	e	e	e	e	e	e
e
eeeeeeeeedœZd*dd„Zdd„ Zdd„ Zedd„ ƒZedd „ ƒZed!d"„ ƒZed#d$„ ƒZd%d&„ Zd'd(„ Zd)S )+Ú
pdtContextaí  
    Context contains accuracy flag detected by L{Calendar.parse()}

    Accuracy flag uses bitwise-OR operation and is combined by:

        ACU_YEAR - "next year", "2014"
        ACU_MONTH - "March", "July 2014"
        ACU_WEEK - "last week", "next 3 weeks"
        ACU_DAY - "tomorrow", "July 4th 2014"
        ACU_HALFDAY - "morning", "tonight"
        ACU_HOUR - "18:00", "next hour"
        ACU_MIN - "18:32", "next 10 minutes"
        ACU_SEC - "18:32:55"
        ACU_NOW - "now"

    ©Úaccuracyé   é   é   é   é   é    é@   é€   é   ÚyearÚmonthÚweekÚdayÚhalfdayÚhourÚminÚsecÚnow)r)   Zyearsr*   Zmonthsr+   Zweeksr,   Zdaysr-   ZmorningZ	afternoonZeveningZnightZtonightZmidnightr.   Zhoursr/   ZminuteZminsZminutesr0   ÚsecondZsecsZsecondsr1   r   c                 C   s
   || _ dS )zÇ
        Default constructor of L{pdtContext} class.

        @type  accuracy: integer
        @param accuracy: Accuracy flag

        @rtype:  object
        @return: L{pdtContext} instance
        Nr   )r   r   r   r   r	   r
   w   s    
zpdtContext.__init__c                 G   s0   |D ]&}t |tƒs| j| }|  j|O  _qdS )z/
        Updates current accuracy flag
        N)Ú
isinstanceÚintÚ_ACCURACY_REVERSE_MAPPINGr   )r   r   Úaccr   r   r	   ÚupdateAccuracyƒ   s    

zpdtContext.updateAccuracyc                 C   s   |   |j¡ dS )zK
        Uses another L{pdtContext} instance to update current one
        N)r7   r   )r   Úcontextr   r   r	   ÚupdateŒ   s    zpdtContext.updatec                 C   s   t | j| j@ ƒS )zE
        Returns True if current context is accurate to date
        )Úboolr   ÚACU_DATEr   r   r   r	   ÚhasDate’   s    zpdtContext.hasDatec                 C   s   t | j| j@ ƒS )zE
        Returns True if current context is accurate to time
        )r:   r   ÚACU_TIMEr   r   r   r	   ÚhasTime™   s    zpdtContext.hasTimec                 C   s   t | jo
dƒt | jodƒB S )z5
        Returns the old date/time flag code
        r    r!   )r4   r<   r>   r   r   r   r	   ÚdateTimeFlag    s    zpdtContext.dateTimeFlagc                 C   s
   t | jƒS )zJ
        Returns True if current context is accurate to date/time
        )r:   r   r   r   r   r	   ÚhasDateOrTime§   s    zpdtContext.hasDateOrTimec                 C   sP   g }| j D ]$\}}|| j@ r
| d| ¡  ¡ q
|rDdd |¡ }nd}d| S )NzpdtContext.ACU_%sz	accuracy=z | Ú zpdtContext(%s))Ú_ACCURACY_MAPPINGr   r   ÚupperÚjoin)r   Zaccuracy_reprr6   Únamer   r   r	   Ú__repr__®   s    
zpdtContext.__repr__c                 C   s   | j |j kS r   r   r   r   r   r	   Ú__eq__º   s    zpdtContext.__eq__N)r   )r   r   r   r   Ú	__slots__ZACU_YEARZ	ACU_MONTHZACU_WEEKZACU_DAYZACU_HALFDAYZACU_HOURZACU_MINZACU_SECZACU_NOWr;   r=   rB   r5   r
   r7   r9   r   r<   r>   r?   r@   rF   rG   r   r   r   r	   r   /   s~   ÷æ
	



r   N)r   Z	threadingr   Úobjectr   r   r   r   r   r	   Ú<module>   s   #