
    <^,                     @    d Z ddlmZ  G d de      Z G d de      Zy)z4
parsedatetime/context.py

Context related classes

    )localc                   >    e Zd ZdZd Zed        Zd Zd Zd Z	d Z
y)	pdtContextStackz\
    A thread-safe stack to store context(s)

    Internally used by L{Calendar} object
    c                 "    t               | _        y N)r   _pdtContextStack__localselfs    7/usr/lib/python3/dist-packages/parsedatetime/context.py__init__zpdtContextStack.__init__   s    w    c                 |    t        | j                  d      sg | j                  _        | j                  j                  S )Nstack)hasattrr   r   r	   s    r   __stackzpdtContextStack.__stack   s,    t||W-!#DLL||!!!r   c                 :    | j                   j                  |       y r   )_pdtContextStack__stackappendr
   ctxs     r   pushzpdtContextStack.push   s    C r   c                 V    	 | j                   j                         S # t        $ r Y y w xY wr   )r   pop
IndexErrorr	   s    r   r   zpdtContextStack.pop   s,    	<<##%% 		s    	((c                 R    	 | j                   d   S # t        $ r t        d      w xY w)Nzcontext stack is empty)r   r   RuntimeErrorr	   s    r   lastzpdtContextStack.last%   s1    	9<<## 	9788	9s    &c                     | j                    S r   )r   r	   s    r   isEmptyzpdtContextStack.isEmpty+   s    <<r   N)__name__
__module____qualname____doc__r   propertyr   r   r   r   r     r   r   r   r      s4     " "
!9 r   r   c                      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z  ez  ez  Ze	e
z  ez  ez  ez  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i dedededededededede	de	de	de	de	de	de	de
de
eeeeeeeeed 	Zd+d!Zd" Zd# Zed$        Zed%        Zed&        Zed'        Zd( Zd) Zy*),
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yearsmonthsweeksdaysmorning	afternooneveningnighttonightmidnighthours)	r:   minuteminsminutesr;   secondsecssecondsr<   c                     || _         y)z
        Default constructor of L{pdtContext} class.

        @type  accuracy: integer
        @param accuracy: Accuracy flag

        @rtype:  object
        @return: L{pdtContext} instance
        Nr)   )r
   r*   s     r   r   zpdtContext.__init__w   s     !r   c                 z    |D ]6  }t        |t              s| j                  |   }| xj                  |z  c_        8 y)z/
        Updates current accuracy flag
        N)
isinstanceint_ACCURACY_REVERSE_MAPPINGr*   )r
   r*   accs      r   updateAccuracyzpdtContext.updateAccuracy   s;      	!Cc3'44S9MMS M	!r   c                 :    | j                  |j                         y)zK
        Uses another L{pdtContext} instance to update current one
        N)rT   r*   )r
   contexts     r   updatezpdtContext.update   s     	G,,-r   c                 F    t        | j                  | j                  z        S )zE
        Returns True if current context is accurate to date
        )boolr*   ACU_DATEr	   s    r   hasDatezpdtContext.hasDate       
 DMMDMM122r   c                 F    t        | j                  | j                  z        S )zE
        Returns True if current context is accurate to time
        )rY   r*   ACU_TIMEr	   s    r   hasTimezpdtContext.hasTime   r\   r   c                 h    t        | j                  xr d      t        | j                  xr d      z  S )z5
        Returns the old date/time flag code
        r+   r,   )rQ   r[   r_   r	   s    r   dateTimeFlagzpdtContext.dateTimeFlag   s+    
 4<<%A&T\\-?a)@@@r   c                 ,    t        | j                        S )zJ
        Returns True if current context is accurate to date/time
        )rY   r*   r	   s    r   hasDateOrTimezpdtContext.hasDateOrTime   s    
 DMM""r   c                     g }| j                   D ]7  \  }}|| j                  z  s|j                  d|j                         z         9 |rddj	                  |      z   }d|z  S d}d|z  S )NzpdtContext.ACU_%sz	accuracy=z |  zpdtContext(%s))_ACCURACY_MAPPINGr*   r   upperjoin)r
   accuracy_reprrS   names       r   __repr__zpdtContext.__repr__   s    // 	IICT]]"$$%84::<%GH	I '%**]*CCM  -// M-//r   c                 4    | j                   |j                   k(  S r   r)   r   s     r   __eq__zpdtContext.__eq__   s    }},,r   N)r   )r!   r"   r#   r$   	__slots__ACU_YEAR	ACU_MONTHACU_WEEKACU_DAYACU_HALFDAYACU_HOURACU_MINACU_SECACU_NOWrZ   r^   rf   rR   r   rT   rW   r%   r[   r_   ra   rc   rk   rm   r&   r   r   r(   r(   /   s   " IHIHGKHGGG)#h.8HX%/'9GCH 
6	G	6	%	i 	6	%	%	%	!!! 	! 	)	!
 	! 	! 	w! 	! 	;! 	;! 	[! 	;! 	! 	;! 	K!  	!!" 	#!$ 5!8
!!. 3 3 3 3 A A # #
0-r   r(   N)r$   	threadingr   objectr   r(   r&   r   r   <module>rz      s*      f   FL- L-r   