o
    	þðc,  ã                   @   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   úB/opt/certbot/lib/python3.10/site-packages/parsedatetime/context.pyÚ__init__   ó   zpdtContextStack.__init__c                 C   s   t | jdƒs
g | j_| jjS )NÚstack)Úhasattrr   r   r   r   r   r	   Ú__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 w r   )r   ÚpopÚ
IndexErrorr   r   r   r	   r      s
   ÿzpdtContextStack.popc                 C   s$   z| j d W S  ty   tdƒ‚w )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                   @   sr  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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d5d"d#„Zd$d%„ Zd&d'„ Zed(d)„ ƒZed*d+„ ƒZed,d-„ ƒZed.d/„ ƒZd0d1„ Zd2d3„ Zd4S )6Ú
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)	r1   ÚminuteÚminsÚminutesr2   ÚsecondÚsecsÚsecondsr3   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)rI   r!   )r   Úcontextr   r   r	   ÚupdateŒ   s   zpdtContext.updatec                 C   ó   t | j| j@ ƒS )zE
        Returns True if current context is accurate to date
        )Úboolr!   ÚACU_DATEr   r   r   r	   ÚhasDate’   ó   zpdtContext.hasDatec                 C   rL   )zE
        Returns True if current context is accurate to time
        )rM   r!   ÚACU_TIMEr   r   r   r	   ÚhasTime™   rP   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#   )rF   rO   rR   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
        )rM   r!   r   r   r   r	   ÚhasDateOrTime§   s   
zpdtContext.hasDateOrTimec                 C   sV   g }| j D ]\}}|| j@ r| d| ¡  ¡ q|r%dd |¡ }d| S d}d| S )NzpdtContext.ACU_%sz	accuracy=z | Ú zpdtContext(%s))Ú_ACCURACY_MAPPINGr!   r   ÚupperÚjoin)r   Úaccuracy_reprrH   Únamer   r   r	   Ú__repr__®   s   
€þzpdtContext.__repr__c                 C   s   | j |j kS r   r    r   r   r   r	   Ú__eq__º   r   zpdtContext.__eq__N)r   )r   r   r   r   Ú	__slots__ÚACU_YEARÚ	ACU_MONTHÚACU_WEEKÚACU_DAYÚACU_HALFDAYÚACU_HOURÚACU_MINÚACU_SECÚACU_NOWrN   rQ   rV   rG   r
   rI   rK   r   rO   rR   rS   rT   r[   r\   r   r   r   r	   r   /   s¤    ÷ÿþýüûúùø	÷
öõôóòñðïæ
	



r   N)r   Ú	threadingr   Úobjectr   r   r   r   r   r	   Ú<module>   s   #