
    Bh                         d dl mZ d dlmZmZmZ d dlmZ d dlm	Z	 d dl
mZmZ d Zd Zd Zd	 Zd
 ZddZd Zd Zd Z G d d      Zy)    )settings)TemplateVariableVariableNode)Context)get_template)	BlockNodeExtendsNodec                 f    t        | t              r| j                  S | j                  j                  S N)
isinstancer   nodelisttemplate)tpls    ?/home/dcms/DCMS/lib/python3.12/site-packages/sekizai/helpers.py_get_nodelistr      s&    #x ||||$$$    c                     t        | d      r| j                  ryt        | d      rQt        | j                  d      r;| j                  j                  s$t	        | j                  j
                  t              ryy)Nparent_name_exprTparent_namefiltersF)hasattrr   r   r   r   varr   )nodes    r   is_variable_extend_noder      s\    t'(T-B-Bt]#0@0@)(L$$4++//:r   c                  :    t               } t        d      | _        | S )N )r   r   r   )contexts    r   get_contextr      s    iG|GNr   c                 @   t        |       ry| j                  t                     }t        |      j	                  t
              D ]  }|j                  |vr|||j                  <   !||j                     }g }t        |j                  d      rZ|j                  |vrL|j                  |j                         |j                  }t        |j                  d      r|j                  |vrL||_         t        |      j	                  t              D ]  }t        ||        y y)z^
    Extends the dictionary `blocks` with *new* blocks in the parent node
    (recursive)
    Nr   )r   
get_parentr   r   get_nodes_by_typer	   namer   superappendr
   _extend_blocks)extend_nodeblocksparentr   blockseen_superss         r   r&   r&      s     {+##KM2Ff%77	B 99F" $F499 499%EK5;;
3;;k1""5;;/ 5;;
3;;k1 EK f%77D tV$r   c                    t        |       rg S | j                  }t        | |       g }|j                         D ]  }|t	        |j
                  |      z  } | j                  t                     }t        |      j                  t              s|t	        t        |      d      z  }|S |t	        t        |      |       z  }|S )z^
    Returns a list of namespaces found in the parent template(s) of this
    ExtendsNode
    N)r   r(   r&   values_scan_namespacesr   r!   r   r   r"   r
   )r'   r(   foundr*   parent_templates        r   _extend_nodelistr1   ;   s     {+	F;'E 9!%..%889 ",,[];O);;KH!/*
 	
 L	 	!/*
 	
 Lr   Nc                    ddl m}m} g }| D ]  }t        |||f      rJ|j	                  |j
                  d   j                  i              |t        |j                  d   |      z  }[t        |t              r|t        |      z  }zt        |t              s|s|j                  j                  dk(  st        |j                  d      s|t        |j                  j                   |j                        z  } |S )Nr   )RenderBlockWithDatar#   r   zblock.super)!sekizai.templatetags.sekizai_tagsr3   r4   r   r%   kwargsresolver.   r(   r
   r1   r   filter_expressiontokenr   r$   r   )r   current_blockr3   r4   r/   r   s         r   r.   r.   Y   s    GE d[(34LLV,44R89%dkk*&=tDDEk*%d++El+%%++}<=..
;-%++44%++ E" Lr   c                 @    t        |       }t        t        |            S r   )r   r.   r   )r   compiled_templates     r   get_namespacesr=   q   s    $X.M*;<==r   c                 X    t        t        dd      ryt        |       }|D ]  }||vs y y)zs
    Validates that a template (or it's parents if check_inheritance is True)
    contain all given namespaces
    SEKIZAI_IGNORE_VALIDATIONFT)getattrr   r=   )r   
namespacesr/   	namespaces       r   validate_templaterC   v   s=    
 x4e<8$E 	E! r   c                  $    t        t        dd      S )NSEKIZAI_VARNAMESEKIZAI_CONTENT_HOLDER)r@   r    r   r   get_varnamerH      s    8.0HIIr   c                   ,    e Zd ZdZd Zed        Zd Zy)Watcherz
    Watches a context for changes to the sekizai data, so it can be replayed
    later. This is useful for caching.

    NOTE: This class assumes you ONLY ADD, NEVER REMOVE data from the context!
    c                     || _         | j                  j                         D ci c]  \  }}|t        |       c}}| _        y c c}}w r   )r   dataitemslistfrozen)selfr   keyvalues       r   __init__zWatcher.__init__   s=    /3yy/@
!+eCe
 
s   Ac                 J    | j                   j                  t               i       S r   )r   getrH   )rP   s    r   rL   zWatcher.data   s    ||r22r   c                 J   t        | j                        }t        | j                        }||z  }i }|D ]  }t        | j                  |         ||<    ||z  }|D ]@  }t        | j                  |         }| j                  |   D cg c]	  }||vs| }	}|	||<   B |S c c}w r   )setrO   rL   rN   )
rP   sfrozensdatanew_keyschangesrQ   shared_keysold_setitem
new_valuess
             r   get_changeszWatcher.get_changes   s    dkk"DIIU? 	0C		#/GCL	0o 	&C$++c*+G!%34w3FJ  &GCL	& 	s   	B B N)__name__
__module____qualname____doc__rS   propertyrL   r`   rG   r   r   rJ   rJ      s%    
 3 3r   rJ   r   )django.confr   django.template.baser   r   r   django.template.contextr   django.template.loaderr   django.template.loader_tagsr	   r
   r   r   r   r&   r1   r.   r=   rC   rH   rJ   rG   r   r   <module>rk      sO      A A + / >%8<0>
J r   