Ë
    ÌiŽ#  ã            
       óv  — U d dl Z d dl mZmZmZmZmZ d dlZd dlmZ d dl	m
Z
mZ d dlmZ d dlmZ d dlmZ d dlmZmZ e j*                  rd d	lmZ i aeeef   ed
<   dedefd„Z	 ddedeeef   ded   dee   fd„Zdeeef   ded   dee   fd„Zdedeeee   f   fd„Zdedeeeef      fd„Z defd„Z!y)é    N)ÚAnyÚDictÚListÚOptionalÚUnion)ÚRefArgs)ÚMacroNamespaceNotStringErrorÚParsingError)Úget_environment)ÚMacroNameNotStringError)Útest_caching_enabled)ÚExtractionErrorÚpy_extract_from_source)ÚParseDatabaseWrapperÚ_TESTING_MACRO_CACHEÚsourceÚreturnc                 óî   — t        dd¬«      }|j                  | «      }t        |j                  t        j
                  j                  «      «      }|D ]   }t        |d«      sŒ|j                  dk(  sŒ  y y)z9Checks whether the raw jinja has any references to `this`NT©Úcapture_macrosÚnameÚthisF)	r   ÚparseÚtupleÚfind_allÚjinja2ÚnodesÚNameÚhasattrr   )r   ÚenvÚparsedÚnamesr   s        úY/var/www/html/strategist-ai/venv/lib/python3.12/site-packages/dbt/clients/jinja_static.pyÚ statically_extract_has_name_thisr$      se   € ä
˜$¨tÔ
4€CØ�Y‰Y�vÓ€FÜ�&—/‘/¤&§,¡,×"3Ñ"3Ó4Ó5€Eàò ˆÜ�4˜Õ  T§Y¡Y°&Ó%8Ùðð ó    ÚctxÚ
db_wrapperr   c                 óê  — t        d d¬«      }t        «       r+| t        v r#t        j                  | d «      }t	        |d«      }nc|j                  | «      }t        |j                  t        j                  j                  «      «      }t        «       r|t        | <   t        |d|«       g d¢}g }|D �]A  }d }	t        |d«      r-t        |j                  d«      r|j                  j                  }	nÏt        |d«      rÁt        |j                  d«      r«t        |j                  j                  «      j                   dk(  rt        |j                  d«      ri|j                  j                  j                  }
|j                  j"                  }|
d	k(  r&|d
k(  rt%        |||«      }|j'                  |«       n�Œ|
› d|› �}	n�Œ|	s�Œ|	|v r�Œ|j                  |	«      r�Œ+|	|vs�Œ1|j)                  |	«       �ŒD |S )NTr   Ú_dbt_cached_calls)r   ÚrefÚconfigÚnoder   r   ÚattrÚadapterÚdispatchú.)r   r   r   ÚgetÚgetattrr   r   r   r   r   ÚCallÚsetattrr   r,   r   ÚtypeÚ__name__r-   Ú!statically_parse_adapter_dispatchÚextendÚappend)r   r&   r'   r    r!   Ú
func_callsÚstandard_callsÚpossible_macro_callsÚ	func_callÚ	func_nameÚpackage_nameÚ
macro_nameÚad_macro_callss                r#   Ústatically_extract_macro_callsrB       sÀ  € ô ˜$¨tÔ
4€Cô Ô &Ô,@Ñ"@Ü%×)Ñ)¨&°$Ó7ˆÜ˜VÐ%8Ó9‰
à—‘˜6Ó"ˆÜ˜6Ÿ?™?¬6¯<©<×+<Ñ+<Ó=Ó>ˆ
äÔ!Ø+1Ô  Ñ(Ü�FÐ/°Ô<â0€NØÐØó "7ˆ	Øˆ	Ü�9˜fÔ%¬'°)·.±.À&Ô*IØ!Ÿ™×+Ñ+‰Iô ˜	 6Ô*Ü˜IŸN™N¨FÔ3Ü˜Ÿ™×,Ñ,Ó-×6Ñ6¸&Ò@Ü˜IŸN™N¨FÔ3à(Ÿ~™~×2Ñ2×7Ñ7�Ø&Ÿ^™^×0Ñ0�
Ø 9Ò,Ø! ZÒ/Ü)JØ% s¨Jó*˜ð -×3Ñ3°NÕCñ !à#/ .°°*°Ð >‘IáÙÙØ˜Ñ&ÙØ�W‰W�YÔÙàÐ 4Ó4Ø$×+Ñ+¨IÖ6ðE"7ðH  Ðr%   c                 ó|  — g }d }t        | j                  «      dkD  r| j                  d   j                  }|r|j                  |«       d }d }d }t        | j                  «      dkD  r1| j                  d   }t	        | j                  d   «      j
                  }| j                  rß| j                  D ]Ð  }|j                  dk(  rjt	        |j                  «      j
                  dk(  r(|j                  j                  }|j                  |«       Œ\t        |j                  j                  ¬«      ‚|j                  dk(  sŒŒt	        |j                  «      j
                  }	|	dk(  r|j                  j                  }ŒÇt        |	«      ‚ |rE|dk(  r/g }
|j                  D ]  }|
j                  |j                  «       Œ n|dk(  r|j                  }|rK|j                  ||¬«      j                  }|j                  › d	|j                  › �}|j                  |«       |S |r|g}
ng }
|
D ]  }|j                  |› d	|› �«       Œ |S )
Nr   é   r@   ÚConst)Úkwarg_valueÚmacro_namespacer   )rG   r0   )ÚlenÚargsÚvaluer9   r5   r6   ÚkwargsÚkeyr   r	   Úitemsr/   Úmacror?   r   )r=   r&   r'   r<   r>   rG   Úpackages_argÚpackages_arg_typeÚkwargÚ
kwarg_typeÚpackagesÚitemrN   r?   s                 r#   r7   r7   [   s)  € ð Ðð €Iä
ˆ9�>‰>Ó˜QÒØ—N‘N 1Ñ%×+Ñ+ˆ	ÙØ×#Ñ# IÔ.ð €OØ€LØÐä
ˆ9�>‰>Ó˜QÒØ —~‘~ aÑ(ˆä  §¡°Ñ!2Ó3×<Ñ<Ðð ×ÒØ×%Ñ%ò 	CˆEØ�y‰y˜LÒ(ä˜Ÿ™Ó$×-Ñ-°Ò8Ø %§¡× 1Ñ 1�IØ(×/Ñ/°	Õ:ä1¸e¿k¹k×>OÑ>OÔPÐPØ—‘Ð/Ó/ä! %§+¡+Ó.×7Ñ7�
Ø Ò(Ø&+§k¡k×&7Ñ&7‘Oä6°zÓBÐBð	Cñ" Ø Ò&àˆHØ$×*Ñ*ò ,�Ø—‘ §
¡
Õ+ñ,à 'Ò)à*×0Ñ0ˆOáØ×#Ñ# I¸Ð#ÓO×UÑUˆØ×)Ñ)Ð*¨!¨E¯J©J¨<Ð8ˆ	Ø×#Ñ# IÔ.ð  Ðñ Ø'Ð(‰HàˆHØ$ò 	GˆLØ ×'Ñ'¨<¨.¸¸)¸Ð(EÕFð	Gð  Ðr%   Ú
expressionc                 óˆ  — 	 t        d| › d�«      }|j                  d«      rNt	        |d   «      d   }t        |j                  d«      |j                  d«      |j                  d«      ¬	«      }|S |j                  d
«      rt	        |d
   «      d   \  }}||g}|S t        d| › �«      ‚# t        $ r t        d| › �«      ‚w xY w)añ  
    Returns a RefArgs or List[str] object, corresponding to ref or source respectively, given an input jinja expression.

    input: str representing how input node is referenced in tested model sql
        * examples:
        - "ref('my_model_a')"
        - "ref('my_model_a', version=3)"
        - "ref('package', 'my_model_a', version=3)"
        - "source('my_source_schema', 'my_source_name')"

    If input is not a well-formed jinja ref or source expression, a ParsingError is raised.
    z{{ z }}zInvalid jinja expression: Úrefsr   Úpackager   Úversion)rX   r   rY   Úsourcesz"Invalid ref or source expression: )r   r   r
   r1   Úlistr   )rU   Ústatically_parsedÚraw_refÚref_or_sourceÚsource_nameÚsource_table_names         r#   Ústatically_parse_ref_or_sourcera   ž   sð   € ðFÜ2°U¸:¸,ÀeÐ3LÓMÐð ×Ñ˜VÔ$ÜÐ(¨Ñ0Ó1°!Ñ4ˆÜØ—K‘K 	Ó*Ø—‘˜VÓ$Ø—K‘K 	Ó*ô
ˆð Ðð 
×	Ñ	˜yÔ	)Ü)-Ð.?À	Ñ.JÓ)KÈAÑ)NÑ&ˆÐ&Ø$Ð&7Ð8ˆð Ðô Ð?À
¸|ÐLÓMÐMøô ò FÜÐ7¸
°|ÐDÓEÐEðFús   ‚B) Â)CÚstringc                 óÀ  — d| vryt        dd¬«      }t        «       r1t        r+| t        v r#t        j                  | d«      }t	        |d«      }nC|j                  | «      }t        |j                  t        j                  j                  «      «      }t        t        d„ |«      «      }|r|d   nd}|syi }|j                  D ]  }t        |«      ||j                  <   Œ |S )aé  
    Given a string with jinja, extract an unrendered config call.
    If no config call is present, returns None.

    For example, given:
    "{{ config(materialized=env_var('DBT_TEST_STATE_MODIFIED')) }}
select 1 as id"
    returns: {'materialized': "Keyword(key='materialized', value=Call(node=Name(name='env_var', ctx='load'), args=[Const(value='DBT_TEST_STATE_MODIFIED')], kwargs=[], dyn_args=None, dyn_kwargs=None))"}

    No config call:
    "select 1 as id"
    returns: None
    zconfig(NTr   r)   c                 ó€   — t        | d«      xr1 t        | j                  d«      xr | j                  j                  dk(  S )Nr,   r   r+   )r   r,   r   )Úfs    r#   ú<lambda>z4statically_parse_unrendered_config.<locals>.<lambda>à   s0   € ”g˜a Ó(Ò`¬W°Q·V±V¸VÓ-DÒ`ÈÏÉÏÉÐX`ÑI`€ r%   r   )r   r   r   r1   r2   r   r   r   r   r   r3   r[   ÚfilterrK   Úconstruct_static_kwarg_valuerL   )rb   r    r!   r:   Úconfig_func_callsÚconfig_func_callÚunrendered_configrQ   s           r#   Ú"statically_parse_unrendered_configrl   Â   så   € ð ˜ÑØô ˜$¨tÔ
4€Cô ÔÕ"6¸6ÔEYÑ;YÜ%×)Ñ)¨&°$Ó7ˆÜ˜VÐ%8Ó9‰
à—‘˜6Ó"ˆÜ˜6Ÿ?™?¬6¯<©<×+<Ñ+<Ó=Ó>ˆ
äÜÙ`Øó	
óÐñ 0AÐ(¨Ò+ÀdÐáØàÐØ!×(Ñ(ò KˆÜ'CÀEÓ'JÐ˜%Ÿ)™)Ò$ðKð Ðr%   c                 ó   — t        | «      S ©N)Ústr)rQ   s    r#   rh   rh   ñ   s   € ô ˆu‹:Ðr%   rn   )"Útypingr   r   r   r   r   r   Údbt.artifacts.resourcesr   Údbt.exceptionsr	   r
   Údbt_common.clients.jinjar   Údbt_common.exceptions.macrosr   Údbt_common.testsr   Údbt_extractorr   r   ÚTYPE_CHECKINGÚdbt.context.providersr   r   ro   Ú__annotations__Úboolr$   rB   r7   ra   rl   rh   © r%   r#   ú<module>r|      s  ðÜ ß 3Õ 3ã å +ß EÝ 4Ý @Ý 1ß Aà	×ÒÝ:ð (*Ð �d˜3 ˜8‘nÓ )ð	¨Sð 	°Tó 	ð VZñ8 Øð8 Ø˜3 ˜8‘nð8 Ø2:Ð;QÑ2Rð8 à	ˆ#�Yó8 ðv@ Ø˜˜c˜‘Nð@ Ø08Ð9OÑ0Pð@ à	ˆ#�Yó@ ðF!¨sð !°u¸WÀdÈ3ÁiÐ=OÑ7Pó !ðH,¨sð ,°xÀÀSÈ#ÀXÁÑ7Oó ,ð^¨3ô r%   