Ë
    Ìi[<  ã            	       óÒ  — d dl Z d dlZd dlmZ d dlmZmZmZmZm	Z	m
Z
mZ d dlmZmZmZmZmZmZmZ dedej*                  fd„Z G d„ d	«      Z G d
„ d«      Z edd«      ZdZ ed«      Z ed«      Z ed«      Z ed«      Z ed«      Z edjA                  ddjC                  e«      djC                  e«      f«      «      Z" edjA                  d«      «      Z# ed«      Z$ ed«      Z% ed«      Z&e jN                   G d„ d«      «       Z(e jN                   G d„ d«      «       Z) G d „ d!«      Z*d"d#d$œZ+e+jY                  «       D � �ci c]  \  } }|| “Œ
 c}} Z- G d%„ d&«      Z.yc c}} w )'é    N)Ú
namedtuple)ÚCallableÚDictÚIteratorÚListÚOptionalÚSetÚUnion)ÚBlockDefinitionNotAtTopErrorÚDbtInternalErrorÚMissingCloseTagErrorÚMissingControlFlowStartTagErrorÚNestedTagsErrorÚ UnexpectedControlFlowEndTagErrorÚUnexpectedMacroEOFErrorÚpatÚreturnc                 ól   — t        j                  | t         j                  t         j                  z  «      S ©N)ÚreÚcompileÚDOTALLÚ	MULTILINE)r   s    úa/var/www/html/strategist-ai/venv/lib/python3.12/site-packages/dbt_common/clients/_jinja_blocks.pyÚregexr      s    € Ü�:‰:�cœ2Ÿ9™9¤r§|¡|Ñ3Ó4Ð4ó    c                   ó    — e Zd ZdZdeddfd„Zy)Ú	BlockDataz2raw plaintext data from the top level of the file.Úcontentsr   Nc                 ó.   — d| _         || _        || _        y )NÚ__dbt__data)Úblock_type_namer   Ú
full_block)Úselfr   s     r   Ú__init__zBlockData.__init__   s   € Ø,ˆÔØ%ˆŒØ"ˆ�r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ústrr%   © r   r   r   r      s   „ Ù<ð# ð #¨ô #r   r   c                   óˆ   — e Zd Z	 	 ddededee   dee   ddf
d„Zdefd„Zdefd	„Zedefd
„«       Z	de
j                  fd„Zy)ÚBlockTagNr"   Ú
block_namer   r#   r   c                 ó<   — || _         || _        || _        || _        y r   ©r"   r.   r   r#   )r$   r"   r.   r   r#   s        r   r%   zBlockTag.__init__   s!   € ð  /ˆÔØ$ˆŒØ ˆŒØ$ˆ�r   c                 óN   — dj                  | j                  | j                  «      S )NzBlockTag({!r}, {!r}))Úformatr"   r.   ©r$   s    r   Ú__str__zBlockTag.__str__+   s   € Ø%×,Ñ,¨T×-AÑ-AÀ4Ç?Á?ÓSÐSr   c                 ó   — t        | «      S r   )r*   r3   s    r   Ú__repr__zBlockTag.__repr__.   s   € Ü�4‹yÐr   c                 ó8   — dj                  | j                  «      S )Nzend{})r2   r"   r3   s    r   Úend_block_type_namezBlockTag.end_block_type_name1   s   € à�~‰~˜d×2Ñ2Ó3Ð3r   c                 óT   — dj                  d| j                  df«      }t        |«      S )NÚ z#(?P<endblock>((?:\s*\{\%\-|\{\%)\s*z\s*(?:\-\%\}\s*|\%\}))))Újoinr8   r   ©r$   Úpatterns     r   Úend_patzBlockTag.end_pat5   s2   € ð —w‘wà6Ø×(Ñ(Ø*ðó
ˆô �W‹~Ðr   )NN)r&   r'   r(   r*   r   r%   r4   r6   Úpropertyr8   r   ÚPatternr>   r+   r   r   r-   r-      sŒ   „ ð
 #'Ø$(ñ
%àð
%ð ð
%ð ˜3‘-ð	
%ð
 ˜S‘Mð
%ð 
ó
%ðT˜ó Tð˜#ó ð ð4 Sò 4ó ð4ð
˜Ÿ™ô 
r   r-   ÚTagz$block_type_name block_name start endz[A-Za-z_][A-Za-z_0-9]*z (?:(?P<comment_start>(\s*\{\#)))z(.*?)(\s*\#\})z>(?:\s*\{\%\-|\{\%)\s*(?P<raw_start>(raw))\s*(?:\-\%\}\s*|\%\})z(?P<expr_start>(\{\{\s*))z(?P<expr_end>(\s*\}\}))r:   z(?:\s*\{\%\-|\{\%)\s*z(?P<block_type_name>({}))z(?:\s+(?P<block_name>({})))?)z-(?:\s*\{\%\-|\{\%)\s*raw\s*(?:\-\%\}\s*|\%\})z(?:.*?)z0(?:\s*\{\%\-|\{\%)\s*endraw\s*(?:\-\%\}\s*|\%\})z#(?:(?P<tag_close>(\-\%\}\s*|\%\})))zC(?P<string>('([^'\\]*(?:\\.[^'\\]*)*)'|"([^"\\]*(?:\\.[^"\\]*)*)"))z(?P<quote>(['"]))c                   ó@   — e Zd ZU dZeed<   eej                     ed<   y)ÚPositionedMatchzØThis class is used to cache search information, accelerating TagIterator.
    It records the result of searching a string from the start_pos and also
    the position of the first match, or None if there is no match.Ú	start_posÚmatchN)	r&   r'   r(   r)   ÚintÚ__annotations__r   r   ÚMatchr+   r   r   rC   rC   l   s   … ñFð ƒNØ�B—H‘HÑÔr   rC   c                   ó"   — e Zd ZU eed<   eed<   y)ÚExtractWarningÚwarning_typeÚmsgN)r&   r'   r(   r*   rG   r+   r   r   rJ   rJ   v   s   … àÓØ	„Hr   rJ   c                   óÀ  — e Zd Zdeddfd„Zddee   defd„Zdeddfd„Zdd	eddfd
„Z	de
j                  dee
j                     fd„Zde
j                  dee
j                     fd„Zdee
j                     fd„Zdede
j                  fd„Zde
j                  ddfd„Zde
j                  ddfd„Zdd„Zdefd„Zde
j                  defd„Zdee   fd„Zdee   fd„Zy)ÚTagIteratorÚtextr   Nc                 ó.   — || _         d| _        i | _        y ©Nr   )rO   ÚposÚ_past_matches)r$   rO   s     r   r%   zTagIterator.__init__}   s   € ØˆŒ	ØˆŒð ACˆÕr   Úendc                 ó¤   — |€| j                   n|}| j                  d| }|j                  d«      dz   }|j                  d«      dz   }|› d||z
  › �S )z´Return relative position in line.

        Given an absolute position in the input data, return a pair of
        line number + relative position to the start of the line.
        Nú
é   ú:)rR   rO   ÚrfindÚcount)r$   rT   Úend_valrO   Úlast_line_startÚline_numbers         r   ÚlineposzTagIterator.linepos…   s`   € ð $' ;�t—x’x°CˆØ�y‰y˜˜'Ð"ˆàŸ*™* TÓ*¨QÑ.ˆà—j‘j Ó&¨Ñ*ˆØ�˜a ¨/Ñ 9Ð:Ð;Ð;r   Únew_positionc                 ó   — || _         y r   ©rR   )r$   r_   s     r   ÚadvancezTagIterator.advance“   s	   € Øˆ�r   Úamountc                 ó.   — | xj                   |z  c_         y r   ra   )r$   rc   s     r   ÚrewindzTagIterator.rewind–   s   € Ø�Š�FÑŽr   r=   c                 ó$  — | j                   j                  |«      }|�|j                  | j                  kD  rK|j	                  | j
                  | j                  «      }t        | j                  |«      | j                   |<   |S |j                  €d }|S |j                  j                  «       | j                  k\  r|j                  }|S |j	                  | j
                  | j                  «      }t        | j                  |«      | j                   |<   |S r   )	rS   ÚgetrD   rR   ÚsearchrO   rC   rE   Ústart)r$   r=   Úpositioned_matchrE   s       r   Ú_searchzTagIterator._search™   sò   € à×-Ñ-×1Ñ1°'Ó:ÐàÐ#Ð'7×'AÑ'AÀDÇHÁHÒ'Lð —N‘N 4§9¡9¨d¯h©hÓ7ˆEÜ*9¸$¿(¹(ÀEÓ*JˆD×Ñ˜wÑ'ð" ˆð  ×%Ñ%Ð-à�ð ˆð "×'Ñ'×-Ñ-Ó/°4·8±8Ò;ð )×.Ñ.�ð ˆð  Ÿ™ t§y¡y°$·(±(Ó;�Ü.=¸d¿h¹hÈÓ.N�×"Ñ" 7Ñ+àˆr   c                 óN   — |j                  | j                  | j                  «      S r   )rE   rO   rR   r<   s     r   Ú_matchzTagIterator._match´   s   € Ø�}‰}˜TŸY™Y¨¯©Ó1Ð1r   c                 ó€   — g }|D ]'  }| j                  |«      }|sŒ|j                  |«       Œ) |sy t        |d„ ¬«      S )Nc                 ó"   — | j                  «       S r   )rT   )Úms    r   ú<lambda>z*TagIterator._first_match.<locals>.<lambda>Á   s   € ¨!¯%©%«'€ r   )Úkey)rk   ÚappendÚmin)r$   ÚpatternsÚmatchesr=   rE   s        r   Ú_first_matchzTagIterator._first_match·   sK   € ØˆØò 	&ˆGØ—L‘L Ó)ˆEÚØ—‘˜uÕ%ð	&ñ Øô �7Ñ 1Ô2Ð2r   Úexpected_namec                 ón   —  | j                   |Ž }|€#t        || j                  | j                  d  «      ‚|S r   )rw   r   rO   rR   )r$   rx   ru   rE   s       r   Ú_expect_matchzTagIterator._expect_matchÃ   s:   € Ø!�×!Ñ! 8Ð,ˆØˆ=Ü)¨-¸¿¹À4Ç8Á8À:Ð9NÓOÐOØˆr   rE   c                 ód  — | j                  |j                  «       «       	 | j                  dt        t        «      }|j                  «       j                  d«      �n6| j                  dt        «      }| j                  |j                  «       «       Œq| j                  |j                  «       «       y)a¾  Handle an expression.

        At this point we're at a string like:
            {{ 1 + 2 }}
            ^ right here

        And the match contains "{{ "

        We expect to find a `}}`, but we might find one in a string before
        that. Imagine the case of `{{ 2 * "}}" }}`...

        You're not allowed to have blocks or comments inside an expr so it is
        pretty straightforward, I hope: only strings can get in the way.
        z}}Úexpr_endNÚstring)rb   rT   rz   ÚEXPR_END_PATTERNÚQUOTE_START_PATTERNÚ	groupdictrg   ÚSTRING_PATTERN©r$   rE   s     r   Úhandle_exprzTagIterator.handle_exprÉ   s‰   € ð 	�‰�U—Y‘Y“[Ô!ØØ×&Ñ& tÔ-=Ô?RÓSˆEØ�‰Ó ×$Ñ$ ZÓ0Ð<Øð ×*Ñ*¨8´^ÓD�Ø—‘˜UŸY™Y›[Ô)ð ð 	�‰�U—Y‘Y“[Õ!r   c                 ó¬   — | j                  |j                  «       «       | j                  dt        «      }| j                  |j                  «       «       y )Nz#})rb   rT   rz   ÚCOMMENT_END_PATTERNr‚   s     r   Úhandle_commentzTagIterator.handle_commentå   s9   € Ø�‰�U—Y‘Y“[Ô!Ø×"Ñ" 4Ô)<Ó=ˆØ�‰�U—Y‘Y“[Õ!r   c                 óD  — 	 | j                  dt        t        «      }| j                  |j	                  «       «       |j                  «       j                  d«      �y| j                  «        | j                  dt        «      }| j                  |j	                  «       «       Œ )aÅ  Search for the tag close marker.

        To the right of the type name, there are a few possiblities:
           - a name (handled by the regex's 'block_name')
           - any number of: `=`, `(`, `)`, strings, etc (arguments)
           - nothing

        followed eventually by a %}

        So the only characters we actually have to worry about in this context
        are quote and `%}` - nothing else can hide the %} and be valid jinja.
        ztag close ("%}")Ú	tag_closeNr}   )	rz   r   ÚTAG_CLOSE_PATTERNrb   rT   r€   rg   re   r�   )r$   Ú	end_matchÚstring_matchs      r   Ú_expect_block_closezTagIterator._expect_block_closeê   s†   € ð Ø×*Ñ*Ø"Ô$7Ô9JóˆIð �L‰L˜Ÿ™›Ô)Ø×"Ñ"Ó$×(Ñ(¨Ó5ÐAØà�K‰KŒMØ×-Ñ-¨h¼ÓGˆLØ�L‰L˜×)Ñ)Ó+Ô,ð r   c                 óŒ   — | j                  dt        «      }| j                  |j                  «       «       |j                  «       S )Nú{% raw %}...{% endraw %})rz   ÚRAW_BLOCK_PATTERNrb   rT   r‚   s     r   Ú
handle_rawzTagIterator.handle_raw  s4   € à×"Ñ"Ð#=Ô?PÓQˆØ�‰�U—Y‘Y“[Ô!Ø�y‰y‹{Ðr   c                 ól  — |j                  «       }|d   }|j                  d«      }| j                  }|dk(  r6| j                  dt        «      }| j                  |j                  «       «       n/| j                  |j                  «       «       | j                  «        t        |||| j                  ¬«      S )a3  Determine tag type.

        The tag could be one of a few things:

            {% mytag %}
            {% mytag x = y %}
            {% mytag x = "y" %}
            {% mytag x.y() %}
            {% mytag foo("a", "b", c="d") %}

        But the key here is that it's always going to be `{% mytag`!
        r"   r.   ÚrawrŽ   )r"   r.   ri   rT   )	r€   rg   rR   rz   r�   rb   rT   rŒ   rA   )r$   rE   Úgroupsr"   r.   rD   s         r   Ú
handle_tagzTagIterator.handle_tag	  s›   € ð —‘Ó"ˆà Ð!2Ñ3ˆà—Z‘Z Ó-ˆ
Ø—H‘Hˆ	Ø˜eÒ#Ø×&Ñ&Ð'AÔCTÓUˆEØ�L‰L˜Ÿ™›Õ%à�L‰L˜Ÿ™›Ô%Ø×$Ñ$Ô&ÜØ+¸
È)ÐY]×YaÑYaô
ð 	
r   c              #   ó¨  K  — 	 | j                  t        t        t        «      }|€y | j	                  |j                  «       «       |j                  «       }|j                  d«      }|j                  d«      }|j                  d«      }|�| j                  |«       n5|�| j                  |«       n!|�| j                  |«      –— nt        d«      ‚ŒÎ­w)NÚcomment_startÚ
expr_startr"   zUInvalid regex match in next_block, expected block start, expr start, or comment start)rw   ÚBLOCK_START_PATTERNÚCOMMENT_START_PATTERNÚEXPR_START_PATTERNrb   ri   r€   rg   r†   rƒ   r”   r   )r$   rE   r“   r–   r—   r"   s         r   Ú	find_tagszTagIterator.find_tags&  sË   è ø€ ØØ×%Ñ%Ü#Ô%:Ô<NóˆEð ˆ}Øà�L‰L˜Ÿ™›Ô'ð —_‘_Ó&ˆFØ"ŸJ™J Ó7ˆMØŸ™ LÓ1ˆJØ$Ÿj™jÐ):Ó;ˆOàÐ(Ø×#Ñ# EÕ*ØÐ'Ø× Ñ  Õ'Ø Ð,Ø—o‘o eÓ,Ó,ä&ð3óð ð- ùs   ‚CCc                 ó"   — | j                  «       S r   )r›   r3   s    r   Ú__iter__zTagIterator.__iter__B  s   € Ø�~‰~ÓÐr   r   )rW   )r   N)r&   r'   r(   r*   r%   r   rF   r^   rb   re   r   r@   rH   rk   rm   rw   rz   rƒ   r†   rŒ   r�   rA   r”   r   r›   r�   r+   r   r   rN   rN   |   s7  „ ðC˜Sð C Tó Cñ<˜8 C™=ð <°Có <ð  Cð  ¨Dó  ñ˜Sð ¨ó ð˜rŸz™zð ¨h°r·x±xÑ.@ó ð62˜bŸj™jð 2¨X°b·h±hÑ-?ó 2ð
3¨°"·(±(Ñ);ó 
3ð¨3ð ¸b¿h¹hó ð" §¡ð "¨dó "ð8" B§H¡Hð "°ó "ó
-ð2˜Có ð
 §¡ð 
¨Só 
ð:˜8 C™=ó ð8 ˜( 3™-ô  r   rN   ÚendifÚendfor)ÚifÚforc            
       óÚ   — e Zd Z	 ddedeeegdf      ddfd„Zede	fd„«       Z
edefd„«       Zdedefd	„Z	 dd
eee      dedeeeef      fd„Z	 dd
eee      dedeeeef      fd„Zy)ÚBlockIteratorNÚtag_iteratorÚwarning_callbackr   c                 óJ   — || _         || _        d | _        g | _        d| _        y rQ   )Ú
tag_parserr¥   ÚcurrentÚstackÚlast_position)r$   r¤   r¥   s      r   r%   zBlockIterator.__init__O  s)   € ð
 'ˆŒØ 0ˆÔØ&*ˆŒØ "ˆŒ
Ø"#ˆÕr   c                 óH   — | j                   €y| j                   j                  S rQ   )r¨   rT   r3   s    r   Úcurrent_endzBlockIterator.current_endZ  s   € à�<‰<ÐØà—<‘<×#Ñ#Ð#r   c                 ó.   — | j                   j                  S r   )r§   rO   r3   s    r   ÚdatazBlockIterator.dataa  s   € à�‰×#Ñ#Ð#r   Útagc                 ó¨   — |j                   j                  d«      xr6 | j                  d uxr& |j                   dd  | j                  j                   k(  S )NrT   é   )r"   Ú
startswithr¨   )r$   r¯   s     r   Úis_current_endzBlockIterator.is_current_ende  sR   € à×Ñ×*Ñ*¨5Ó1ò HØ—‘ DÐ(òHà×#Ñ# A BÐ'¨4¯<©<×+GÑ+GÑGð	
r   Úallowed_blocksÚcollect_raw_datac           	   #   ó|  K  — |€h d£}| j                   j                  «       D �]‡  }|j                  t        v r&| j                  j                  |j                  «       n”|j                  t        v r‚d}| j                  r| j                  j                  «       }n*t        |j                     }t        ||| j                   «      ‚t        |   }||j                  k7  rt        ||| j                   «      ‚|j                  |v r�| j                  r t        | j                   |j                  «      ‚| j                  �t        | j                  |¬«      ‚|rC| j                  | j                  |j                   }|j                  | _        |rt!        |«      –— || _        �Œ{| j#                  |«      r·|j$                  | _        | j                  €J ‚t'        | j                  j                  | j                  j(                  | j                  | j                  j$                  |j                   | j                  | j                  j                  |j$                   ¬«      –— d| _        �ŒC| j                  ��ŒQ| j*                  s�Œ_| j+                  t-        dd|j                  › d�«      «       �ŒŠ | j                  rU| j                  d| j                  j$                   j/                  d«      d	z   }t1        | j                  j                  |«      ‚|r*| j                  | j                  d }|rt!        |«      –— yyy­w)
z&Find all top-level blocks in the data.N>   ÚdocsÚmacroÚsnapshotÚmaterialization)ÚouterÚinnerr0   Úunexpected_blockzFound unexpected 'z' block tag.rV   rW   )r§   r›   r"   Ú_CONTROL_FLOW_TAGSr©   rs   Ú_CONTROL_FLOW_END_TAGSÚpopr   r   r   ri   r¨   r   r®   rª   r   r³   rT   r-   r.   r¥   rJ   rZ   r   )r$   r´   rµ   r¯   ÚfoundÚexpectedÚraw_dataÚ	linecounts           r   Úfind_blockszBlockIterator.find_blocksl  s¢  è ø€ ð Ð!ÚMˆNà—?‘?×,Ñ,Ó.ó *	ˆCØ×"Ñ"Ô&8Ñ8Ø—
‘
×!Ñ! #×"5Ñ"5Õ6Ø×$Ñ$Ô(>Ñ>Ø�Ø—:’:Ø ŸJ™JŸN™NÓ,‘Eä5°c×6IÑ6IÑJ�HÜ:¸3ÀÈ$Ï/É/ÓZÐZÜ-¨eÑ4�Ø˜s×2Ñ2Ò2Ü9¸#¸xÈÏÉÓYÐYà×"Ñ" nÑ4Ø—:’:Ü6°t·±ÈÏ	É	ÓRÐRØ—<‘<Ð+Ü)°·±ÀCÔHÐHÙ#Ø#Ÿy™y¨×);Ñ);¸c¿i¹iÐH�HØ),¯©�DÔ&ÙÜ'¨Ó1Ò1Ø"�–à×$Ñ$ SÔ)Ø%(§W¡W�Ô"Ø—|‘|Ð/Ð/Ð/ÜØ$(§L¡L×$@Ñ$@Ø#Ÿ|™|×6Ñ6Ø!ŸY™Y t§|¡|×'7Ñ'7¸#¿)¹)ÐDØ#Ÿy™y¨¯©×);Ñ);¸c¿g¹gÐFô	ò ð  $�–Ø—‘Ò%¨$×*?Ô*?à×%Ñ%Ü"Ø*Ð.@À×ATÑATÐ@UÐUaÐ,bóöðM*	ðX �<Š<ØŸ	™	Ð"4 D§L¡L×$4Ñ$4Ð5×;Ñ;¸DÓAÀAÑEˆIÜ& t§|¡|×'CÑ'CÀYÓOÐOáØ—y‘y ×!3Ñ!3Ð!5Ð6ˆHÙÜ Ó)Ó)ð ð ùs   ‚I0L<É4L<ÊB:L<c                 ó:   — t        | j                  ||¬«      «      S )N)r´   rµ   )ÚlistrÅ   )r$   r´   rµ   s      r   Úlex_for_blockszBlockIterator.lex_for_blocks¨  s%   € ô Ø×Ñ¨NÐM]ÐÓ^ó
ð 	
r   r   )NT)r&   r'   r(   rN   r   r   rJ   r%   r?   rF   r¬   r*   r®   rA   Úboolr³   r	   r   r
   r   r-   rÅ   r   rÈ   r+   r   r   r£   r£   N  sþ   „ ð HLñ	$à!ð	$ð # 8¨^Ð,<¸dÐ,BÑ#CÑDð	$ð 
ó		$ð ð$˜Sò $ó ð$ð ð$�cò $ó ð$ð
 #ð 
¨$ó 
ð SWñ:*Ø& s¨3¡xÑ0ð:*ØKOð:*à	�%˜	 8Ð+Ñ,Ñ	-ó:*ðz SWñ
Ø& s¨3¡xÑ0ð
ØKOð
à	ˆe�I˜xÐ'Ñ(Ñ	)ô
r   r£   )/Údataclassesr   Úcollectionsr   Útypingr   r   r   r   r   r	   r
   Údbt_common.exceptionsr   r   r   r   r   r   r   r*   r@   r   r   r-   rA   Ú_NAME_PATTERNr™   r…   ÚRAW_START_PATTERNrš   r~   r;   r2   r˜   r�   r‰   r�   r   Ú	dataclassrC   rJ   rN   r¾   Úitemsr¿   r£   )ÚkÚvs   00r   ú<module>rÔ      sµ  ðÛ Û 	Ý "ß G× GÑ G÷÷ ñ ð5ˆsð 5�r—z‘zó 5÷#ñ #÷!ñ !ñH �Ð>Ó?€ð *€áÐAÓBÐ ÙÐ-Ó.Ð ÙÐ[Ó\Ð ÙÐ7Ó8Ð ÙÐ3Ó4Ð áØ‡G�Gà$Ø(×/Ñ/°Ó>à+×2Ñ2°=ÓAð		
óó	Ð ñ Ø‡G�Gð	
óóÐ ñ Ð@ÓAÐ ñ ÐaÓb€áÐ4Ó5Ð ð ×Ñ÷ð ó ðð ×Ñ÷ð ó ð÷
G ñ G ðV ØñÐ ð
 ,>×+CÑ+CÓ+E×F¡4 1 a˜!˜Q™$ÓFÐ ÷_
ò _
ùó Gs   ÅE#