o
    [h                     @   s<   d dl Z ddlmZ deiZG dd dZG dd dZdS )	    N   )errorsrangec                   @   s   e Zd Zdd Zdd ZdS )	DataStackc                 C   s
   g | _ d S N)stackself r
   /home/ubuntu/experiments/live_experiments/Pythonexperiments/Otree/venv/lib/python3.10/site-packages/otree/templating/context.py__init__      
zDataStack.__init__c                 C   s,   t | jD ]}||v r||   S qt|r   )reversedr   KeyError)r	   keydr
   r
   r   __getitem__   s
   zDataStack.__getitem__N)__name__
__module____qualname__r   r   r
   r
   r
   r   r      s    r   c                   @   sX   e Zd Zdd Zdd Zdd Zddd	Zd
d ZdddZdd Z	dd Z
dd ZdS )Contextc                 C   sJ   t  | _| jj| | jd | jjt | jj| i | _|| _d S )N)context
is_defined)r   datar   appendr   builtinsstashtemplate)r	   	data_dictr   r
   r
   r   r      s   

zContext.__init__c                 C   s   || j jd |< d S N)r   r   )r	   r   valuer
   r
   r   __setitem__0   s   zContext.__setitem__c                 C   s
   | j | S r   )r   )r	   r   r
   r
   r   r   3   r   zContext.__getitem__Nc                 C   s   | j j|pi  d S r   )r   r   r   )r	   r   r
   r
   r   push6      zContext.pushc                 C   s   | j j  d S r   )r   r   popr   r
   r
   r   r%   9   s   zContext.popc                 C   s*   t | jjD ]}||v r||   S q|S r   )r   r   r   )r	   r   defaultr   r
   r
   r   get<   s
   zContext.getc                 C   s   | j jd | d S r   )r   r   update)r	   r   r
   r
   r   r(   B   r$   zContext.updatec                 C   s   g }| j }|dD ]9}|| t||rt||}q
z|| }W q
   z|t| }W n   dd| d}t||d Y q
|S )N.zCannot resolve the variable '')	r   splitr   hasattrgetattrintjoinr   ZUndefinedVariable)r	   	varstringtokenwordsresultwordmsgr
   r
   r   resolveE   s    

zContext.resolvec              
   C   sh   | j }|dD ])}t||rt||}qz|| }W q   z|t| }W n   Y Y  dS Y qdS )Nr)   FT)r   r+   r,   r-   r.   )r	   r0   currentr4   r
   r
   r   r   W   s   

zContext.is_definedr   )r   r   r   r   r"   r   r#   r%   r'   r(   r6   r   r
   r
   r
   r   r      s    

r   )datetime r   r   r   r   r   r
   r
   r
   r   <module>   s    