U
    !W,                     @   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   Zctxr   r   r	   push   s    zpdtContextStack.pushc                 C   s(   z| j  W S  tk
r"   Y d S X d S r   )r   pop
IndexErrorr   r   r   r	   r      s    zpdtContextStack.popc                 C   s.   z| j d W S  tk
r(   tdY nX d S )Nz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minutesr/   secondZsecsZsecondsr0   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)r6   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
        )r9   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    )r3   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
        )r9   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_reprr5   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<   rA   r4   r
   r6   r8   r   r;   r=   r>   r?   rE   rF   r   r   r   r	   r   /   s~   
	



r   N)r   Z	threadingr   objectr   r   r   r   r   r	   <module>   s   #