Ë
    èlÖiÂs  ã            	       óÔ  — d dl Z d dlZd dlmZ d dl mZ d dlmZ d dlmZ d dl	m
Z
mZmZmZmZ 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 dlmZmZ d dlm Z  d dl!m"Z" d dl#m$Z$m%Z%m&Z&m'Z'm(Z( d dl)m*Z* d dl+m,Z,m-Z- d dl.m/Z/ d dl0m1Z1 d dl2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9 d dl:m;Z; d dl<m=Z= d dl>m?Z? d dl@mAZAmBZB  G d„ d«      ZC G d„ de9«      ZDde deEdeEd ee%   fd!„ZFde deEd"e&fd#„ZGy)$é    N)Údeepcopy)Ú
DictReader)ÚStringIO)ÚPath)ÚAnyÚDictÚListÚOptionalÚSet)Úutils)ÚModelConfigÚUnitTestConfigÚUnitTestFormat)ÚRuntimeConfig)ÚContextConfig)Ú!generate_parser_unit_test_contextÚget_rendered)ÚFileHashÚSchemaSourceFile)ÚManifest)ÚUnitTestNodeConfig)Ú	DependsOnÚ	ModelNodeÚUnitTestDefinitionÚUnitTestNodeÚUnitTestSourceDefinition)ÚUnparsedUnitTest)ÚInvalidUnitTestGivenInputÚParsingError)ÚUniqueId)ÚNodeType)ÚJSONValidationErrorÚParseResultÚSchemaParserÚValidationErrorÚ	YamlBlockÚYamlParseDictErrorÚ
YamlReader)Úget_pseudo_test_path)Ú
fire_event)ÚSystemStdErr)ÚExtractionErrorÚpy_extract_from_sourcec                   óL   — e Zd Zdd„Zdefd„Zdefd„Zdefd„Z	ded	e
d
efd„Zy)ÚUnitTestManifestLoaderÚreturnNc                 ód   — || _         || _        || _        t        |j                  ¬«      | _        y )N)Úmacros)ÚmanifestÚroot_projectÚselectedr   r2   Úunit_test_manifest)Úselfr3   r4   r5   s       úZ/var/www/html/strategist-ai/venv_dbt/lib/python3.12/site-packages/dbt/parser/unit_tests.pyÚ__init__zUnitTestManifestLoader.__init__,   s)   € Ø"*ˆŒØ+7ˆÔà'/ˆŒÜ"*°(·/±/Ô"BˆÕó    c                 óð   — | j                   D ]\  }|| j                  j                  v sŒ| j                  j                  |   }|j                  j                  sŒL| j                  |«       Œ^ | j                  S ©N)r5   r3   Ú
unit_testsÚconfigÚenabledÚparse_unit_test_caser6   )r7   Ú	unique_idÚunit_test_cases      r8   ÚloadzUnitTestManifestLoader.load3   si   € ØŸ™ò 	:ˆIØ˜DŸM™M×4Ñ4Ò4Ø59·]±]×5MÑ5MÈiÑ5X�Ø%×,Ñ,×4Ò4ØØ×)Ñ)¨.Õ9ð	:ð ×&Ñ&Ð&r:   Ú	test_casec                 óL
  — |j                   j                  d   }| j                  j                  |   }t        |t        «      sJ ‚|j
                  }|j                  r|d|j                  › �z   }d }|j                  j                  t        j                  k(  rg }|j                  j                  }nEt        |j                  j                  t        «      sJ ‚t        |j                  j                  «      }t        |t        «      sJ ‚t        |t         j"                  |j$                  t'        ||j(                  «      |j(                  |j*                  t-        d||¬«      |j.                  |j0                  |j2                  ||j*                  j5                  d«      t7        j8                  «       |j*                  |j:                  ¬«      }t=        || j>                  | j                  «      }tA        |j.                  ||d¬«       || jB                  j                  |j*                  <   	 |jD                  D �]c  }	| jG                  |	jH                  ||j
                  «      }
|
j
                  }t         jJ                  |j(                  tM        d	¬
«      |
j0                  |
jN                  |
j2                  |
jP                  t7        j8                  «       | jS                  |	j                  d |	j                  «      |
j$                  d|
j$                  › d|› �||› d�dœ}|
jT                  }|t         jJ                  t         jV                  t         jX                  fv rgt	        di |¤d|
jZ                  i¤Ž}|t         jJ                  k(  r®|
j                  r|
j                  |_        |
j\                  r…|
j\                  |_.        ns|t         j^                  k(  r`ta        di |¤d|
jb                  i¤Ž}d|
j$                  › d|
jb                  › d|› �|_        || jB                  jd                  |j*                  <   | jB                  j                  |j*                  <   |
|k(  r|j*                  |_3        |j                   j                  ji                  |j*                  «       �Œf |j                   j                  D ]p  }|| j                  jj                  v sŒ|j                   j                  ji                  |«       | j                  jj                  |   | jB                  jj                  |<   Œr y )Nr   Ú_vÚunit)ÚmaterializedÚexpected_rowsÚexpected_sqlú.)ÚnameÚresource_typeÚpackage_nameÚpathÚoriginal_file_pathrA   r>   Úraw_codeÚdatabaseÚschemaÚaliasÚfqnÚchecksumÚtested_node_unique_idÚ	overridesT)Úcapture_macrosÚ	ephemeral)rH   zmodel.z.sql)rM   rP   r>   rR   rT   rS   rU   rV   rQ   rN   rA   rL   rO   Údefer_relationÚsource_nameÚ__© )6Ú
depends_onÚnodesr3   Ú
isinstancer   rL   Úis_versionedÚversionÚexpectÚformatr   ÚSQLÚrowsr	   r   r   r!   ÚUnitrN   r)   rP   rA   r   rQ   rR   rS   Úsplitr   ÚemptyrX   r   r4   r   r6   ÚgivenÚ_get_original_input_nodeÚinputÚModelr   Ú
identifierrU   Ú_build_fixture_raw_coderM   ÚSeedÚSnapshotr[   Úlatest_versionÚSourcer   r\   ÚsourcesÚthis_input_node_unique_idÚappendÚ	functions)r7   rD   rW   Útested_noderL   rJ   rI   Úunit_test_nodeÚctxrk   Úoriginal_input_nodeÚ
input_nameÚcommon_fieldsrM   Ú
input_noderA   s                   r8   r@   z+UnitTestManifestLoader.parse_unit_test_case<   s—  € ð !*× 4Ñ 4× :Ñ :¸1Ñ =ÐØ—m‘m×)Ñ)Ð*?Ñ@ˆÜ˜+¤yÔ1Ð1Ð1ð �~‰~ˆØ×#Ò#Ø˜B˜{×2Ñ2Ð3Ð4Ñ4ˆDØ&*ˆØ×Ñ×"Ñ"¤n×&8Ñ&8Ò8Ø24ˆMØ$×+Ñ+×0Ñ0‰Lä˜i×.Ñ.×3Ñ3´TÔ:Ð:Ð:Ü$ Y×%5Ñ%5×%:Ñ%:Ó;ˆMä˜-¬Ô.Ð.Ð.Ü%ØÜ"Ÿ-™-Ø"×/Ñ/Ü% d¨I×,HÑ,HÓIØ(×;Ñ;Ø×)Ñ)Ü%Ø#°=È|ôð !×)Ñ)Ø ×)Ñ)Ø×%Ñ%ØØ×#Ñ#×)Ñ)¨#Ó.Ü—^‘^Ó%Ø"-×"7Ñ"7Ø×)Ñ)ô#
ˆô( 0°À×@QÑ@QÐSW×S`ÑS`ÓaˆÜ�^×,Ñ,¨c°>ÐRVÕWð CQˆ×Ñ×%Ñ% n×&>Ñ&>Ñ?ð	ð —_‘_ó ?	IˆEà"&×"?Ñ"?Ø—‘˜[¨)¯.©.ó#Ðð -×1Ñ1ˆJä!)§¡à&4×&GÑ&GÜ%°;Ô?Ø/×8Ñ8Ø,×7Ñ7Ø-×4Ñ4Ø*×.Ñ.Ü$ŸN™NÓ,Ø ×8Ñ8¸¿¹ÀTÈ5Ï<É<ÓXØ 3× @Ñ @Ø%Ð&9×&FÑ&FÐ%GÀqÈÈÐUØ"Ø%˜, dÐ+ñˆMð  0×=Ñ=ˆMàÜ—‘Ü—‘Ü×!Ñ!ð!ñ ô 'ñ Ø#ñà#6×#EÑ#Eò�
ð !¤H§N¡NÒ2Ø*×2Ò2Ø-@×-HÑ-H˜
Ô*Ø*×9Ò9Ø4G×4VÑ4V˜
Õ1à¤(§/¡/Ò1ô 6ñ Ø#ñà 3× ?Ñ ?ò�
ð *0Ð0C×0PÑ0PÐ/QÐQRÐSf×SrÑSrÐRsÐsuð  wAð  vBð  (C�
Ô$ð IS�×'Ñ'×/Ñ/°
×0DÑ0DÑEð CMˆD×#Ñ#×)Ñ)¨*×*>Ñ*>Ñ?ð # kÒ1Ø;E×;OÑ;O�Ô8ð ×%Ñ%×+Ñ+×2Ñ2°:×3GÑ3GÖHð?	IðD %×/Ñ/×5Ñ5ò 	bˆIØ˜DŸM™M×3Ñ3Ò3Ø×)Ñ)×/Ñ/×6Ñ6°yÔAØ?C¿}¹}×?VÑ?VÐW`Ñ?a�×'Ñ'×1Ñ1°)Ò<ñ	br:   c                 óR   — |t         j                  k(  r|S dj                  ||¬«      S )Nz>{{{{ get_fixture_sql({rows}, {column_name_to_data_types}) }}}})rg   Úcolumn_name_to_data_types)r   rf   re   )r7   rg   r�   Úfixture_formats       r8   rp   z.UnitTestManifestLoader._build_fixture_raw_codeÂ   s6   € ð œ^×/Ñ/Ò/ØˆKàT×\Ñ\ØÐ5Nð ]ó ð r:   rm   ry   Útest_case_namec                 ód  — |j                  «       dk(  r|}nê	 t        d|› d�«      }|d   rwt	        |d   «      d   }|j                  d«      }|j                  d«      }|j                  d	«      }	| j                  j                  j                  |||	| j                  «      }n^|d
   rMt	        |d
   «      d   }
|
\  }}| j                  j                  j                  |› d|› �d| j                  «      }nt        |¬«      ‚|sd|› d|› d�}t        |«      ‚|S # t        $ r t        |¬«      ‚w xY w)a¤  
        Returns the original input node as defined in the project given an input reference
        and the node being tested.

        input: str representing how input node is referenced in tested model sql
          * examples:
            - "ref('my_model_a')"
            - "source('my_source_schema', 'my_source_name')"
            - "this"
        tested_node: ModelNode of representing node being tested
        Úthisú{{ ú }})rm   Úrefsr   rL   Úpackagerc   ru   rK   NúUnit test 'z' had an input (z&) which was not found in the manifest.)Ústripr-   r,   r   ÚlistÚgetr3   Ú
ref_lookupÚfindÚsource_lookupr   )r7   rm   ry   rƒ   r|   Ústatically_parsedÚrefrL   r‰   rc   ÚsourceÚinput_source_namer}   Úmsgs                 r8   rl   z/UnitTestManifestLoader._get_original_input_nodeÌ   sS  € ð �;‰;‹=˜FÒ"Ø"-Ñð=Ü$:¸UÀ5À'ÈÐ;OÓ$PÐ!ð ! Ò(ÜÐ,¨VÑ4Ó5°aÑ8�Ø—w‘w˜v“�ØŸ'™' )Ó,�ØŸ'™' )Ó,�à&*§m¡m×&>Ñ&>×&CÑ&CØ˜' 7¨D¯M©Mó'Ñ#ð # 9Ò-ÜÐ/°	Ñ:Ó;¸AÑ>�Ø06Ñ-Ð! :Ø&*§m¡m×&AÑ&A×&FÑ&FØ(Ð)¨¨:¨,Ð7ØØ—M‘Mó'Ñ#ô 0°eÔ<Ð<á"Ø Ð/Ð/?À¸wÐFlÐmˆCÜ˜sÓ#Ð#à"Ð"øô7 #ò =Ü/°eÔ<Ð<ð=ús   ˜D ÄD/©r0   N)Ú__name__Ú
__module__Ú__qualname__r9   r   rC   r   r@   Ústrrp   r   rl   r^   r:   r8   r/   r/   +   sN   „ óCð'�hó 'ðDbÐ.@ó DbðLÐZ]ó ð,#¨cð ,#À	ð ,#Ð[^ô ,#r:   r/   c                   óì   ‡ — e Zd Zdededdfˆ fd„Zdefd„Zdee	e
f   defd„Zd	ee	   d
ee	e
f   defd„Zd„ Zde	de	fd„Zd„ Zd„ Zdd„Zd„ Zd„ Zde	deee	e
f      fd„Zde	deee	e
f      fd„Zˆ xZS )ÚUnitTestParserÚschema_parserÚyamlr0   Nc                 óD   •— t         ‰| �  ||d«       || _        || _        y )Nr=   )Úsuperr9   r�   rž   )r7   r�   rž   Ú	__class__s      €r8   r9   zUnitTestParser.__init__ü   s#   ø€ Ü‰Ñ˜¨¨lÔ;Ø*ˆÔØˆ�	r:   c                 óB  — | j                  «       D �]  }| j                  |«      }t        | j                  | j                  j
                  |j                  «      }t        j                  › d| j                  j
                  › d|j                  › d|j                  › �}| j                  | j                  j
                  | j                  j                  j                  |j                  |j                  «      }| j                  ||j                  «      }t!        |j                  |j                  t        j                  | j                  j
                  | j                  j                  j"                  | j                  j                  j                  ||j$                  |j&                  |j(                  |j*                  t-        «       |||j.                  ¬«      }|rh|j                  j0                  rA|j2                  j4                  j7                  |j8                  «       |j:                  |_        nd|j                  _        | j=                  |«       | j?                  |«       |jA                  «        tC        | j                  jD                  tF        «      sJ ‚|j                  j0                  r2| j                  jI                  | j                  jD                  |«       �ŒÓ| j                  jK                  | j                  jD                  |«       �Œ tM        «       S )NrK   )rL   ÚmodelrM   rN   rO   rP   rA   rk   rd   ÚdescriptionrX   r_   rU   r>   ÚversionsF)'Úget_key_dictsÚ_get_unit_testÚfind_tested_model_noder3   ÚprojectÚproject_namer£   r!   rh   rL   Ú
_build_fqnrž   rO   rP   Ú_build_unit_test_configr>   r   Úrelative_pathrk   rd   r¤   rX   r   r¥   r?   r_   r`   rw   rA   rS   Ú_validate_and_normalize_givenÚ_validate_and_normalize_expectÚbuild_unit_test_checksumra   Úfiler   Úadd_unit_testÚadd_disabledr#   )r7   ÚdataÚ	unit_testÚtested_model_nodeÚunit_test_case_unique_idÚunit_test_fqnÚunit_test_configÚunit_test_definitions           r8   ÚparsezUnitTestParser.parse  s[  € Ø×&Ñ&Ó(ó 5	QˆDØ*.×*=Ñ*=¸dÓ*CˆIÜ 6Ø—‘˜tŸ|™|×8Ñ8¸)¿/¹/ó!Ðô —=‘=�/  4§<¡<×#<Ñ#<Ð"=¸Q¸y¿¹Ð>OÈqÐQZ×Q_ÑQ_ÐP`Ðað %ð !ŸO™OØ—‘×)Ñ)Ø—	‘	—‘×1Ñ1Ø—‘Ø—‘ó	ˆMð  $×;Ñ;¸MÈ9×K[ÑK[Ó\Ðä#5Ø—^‘^Ø—o‘oÜ&Ÿm™mØ!Ÿ\™\×6Ñ6Ø—Y‘Y—^‘^×1Ñ1Ø#'§9¡9§>¡>×#DÑ#DØ2Ø—o‘oØ ×'Ñ'Ø%×1Ñ1Ø#×-Ñ-Ü$›;Ø!Ø'Ø"×+Ñ+ô$Ð ñ$ !Ø$×+Ñ+×3Ò3Ø(×3Ñ3×9Ñ9×@Ñ@ÐAR×A\ÑA\Ô]Ø2C×2JÑ2JÐ(Õ/à:?Ð(×/Ñ/Ô7ð
 ×.Ñ.Ð/CÔDØ×/Ñ/Ð0DÔEð !×9Ñ9Ô;Ü˜dŸi™iŸn™nÔ.>Ô?Ð?Ð?Ø#×*Ñ*×2Ò2Ø—‘×+Ñ+¨D¯I©I¯N©NÐ<PÖQà—‘×*Ñ*¨4¯9©9¯>©>Ð;OÖPðk5	Qôn ‹}Ðr:   r´   c                 óÞ   — 	 t        j                  |«       t        j                  |«      S # t        t        f$ r1}t        | j                  j                  | j                  ||«      ‚d }~ww xY wr<   )	r   ÚvalidateÚ	from_dictr%   r"   r'   rž   rO   Úkey)r7   r´   Úexcs      r8   r§   zUnitTestParser._get_unit_test;  s\   € ð	JÜ×%Ñ% dÔ+Ü#×-Ñ-¨dÓ3Ð3øÜÔ!4Ð5ò 	JÜ$ T§Y¡Y§^¡^°T·X±X¸tÀSÓIÐIûð	Jús   ‚), ¬A,»,A'Á'A,r¸   Úconfig_dictc                 ó  — t        | j                  j                  |t        j                  | j                  j
                  j                  «      }|j                  |¬«      }| j                  |«      }t        j                  |«      S )N)Úpatch_config_dict)r   r�   r4   r!   rh   r©   rª   Úbuild_config_dictÚrender_entryr   r¾   )r7   r¸   rÁ   r>   Úunit_test_config_dicts        r8   r¬   z&UnitTestParser._build_unit_test_configB  sv   € ô Ø×Ñ×+Ñ+ØÜ�M‰MØ×Ñ×&Ñ&×3Ñ3ó	
ˆð !'× 8Ñ 8È;Ð 8Ó WÐØ $× 1Ñ 1Ð2GÓ HÐä×'Ñ'Ð(=Ó>Ð>r:   c                 óB  — t        |«      }t         |j                  |j                  d d Ž «      }t        j
                  j                  |«      d   }|g}|j                  t        j                  |«      d d «       |j                  |«       |j                  |«       |S )Né   r   éÿÿÿÿ)r   rš   Úrelative_toÚpartsÚosrO   ÚsplitextÚextendr   Ú
split_pathrw   )	r7   rN   rP   Ú
model_nameÚ	test_namerO   r­   Úno_extrU   s	            r8   r«   zUnitTestParser._build_fqnP  sŒ   € ô Ð&Ó'ˆÜÐ,˜D×,Ñ,¨d¯j©j¸¸!¨nÐ=Ó>ˆÜ—‘×!Ñ! -Ó0°Ñ3ˆØˆnˆØ�
‰
”5×#Ñ# FÓ+¨C¨RÐ0Ô1Ø�
‰
�:ÔØ�
‰
�9ÔØˆ
r:   Úfixture_namerª   c                 óö   — t         j                  › d|› d|› �}|| j                  j                  v r| j                  j                  |   }|S t	        d|› d| j
                  j                  j                  › �«      ‚)NrK   zFile not found for fixture 'z' in unit tests in )r!   ÚFixturer3   Úfixturesr   rž   rO   rP   )r7   rÓ   rª   Úfixture_unique_idÚfixtures        r8   Ú_get_fixturezUnitTestParser._get_fixture\  s~   € Ü'×/Ñ/Ð0°°,°¸qÀÀÐOÐØ §¡× 6Ñ 6Ñ6Ø—m‘m×,Ñ,Ð->Ñ?ˆGØˆNäØ.¨|¨nÐ<OÐPT×PYÑPY×P^ÑP^×PqÑPqÐOrÐsóð r:   c                 óL   — |j                   D ]  }| j                  ||d«       Œ y )Nrm   )rk   Ú_validate_and_normalize_rows)r7   rº   Úut_inputs      r8   r®   z,UnitTestParser._validate_and_normalize_givenf  s,   € Ø,×2Ñ2ò 	WˆHØ×-Ñ-¨hÐ8LÈgÕVñ	Wr:   c                 ó>   — | j                  |j                  |d«       y )NÚexpected)rÛ   rd   )r7   rº   s     r8   r¯   z-UnitTestParser._validate_and_normalize_expectj  s   € Ø×)Ñ)Ø ×'Ñ'Ð)=¸zõ	
r:   c                 óÎ  — |j                   t        j                  k(  r{|j                  €,|j                  € | j                  |j                  «      |_        t        |j                  t        «      �st        d|j                  › d|› d|j                   › �«      ‚|j                   t        j                  k(  �rt        |j                  t        «      sCt        |j                  t        «      s)t        d|j                  › d|› d|j                   › d�«      ‚|j                  r<| j                  |j                  | j                  j                  |j                   «      }n| j#                  |j                  «      }|D ���cg c]-  }|j%                  «       D ��ci c]  \  }}||dk(  rd n|“Œ c}}‘Œ/ c}}}|_        nÆ|j                   t        j&                  k(  r©t        |j                  t        «      sCt        |j                  t        «      s)t        d|j                  › d|› d|j                   › d�«      ‚|j                  r@| j                  |j                  | j                  j                  |j                   «      |_        |j                  rM|j                   t        j                  k(  s|j                   t        j                  k(  r| j)                  |«       y y y c c}}w c c}}}w )Nz
Unit test z has z  rows which do not match format z, rows or fixtures which do not match format z.  Expected string.Ú )re   r   r   rg   rØ   Ú_load_rows_from_seedrm   ra   rŒ   r   rL   ÚCSVrš   Úget_fixture_file_rowsr©   rª   rA   Ú_convert_csv_to_list_of_dictsÚitemsrf   Ú_promote_first_non_none_row)r7   Ú
ut_fixturerº   Úfixture_typeÚcsv_rowsÚrowÚkÚvs           r8   rÛ   z+UnitTestParser._validate_and_normalize_rowso  s�  € Ø×Ñ¤× 3Ñ 3Ò3Ø�‰Ð&¨:×+=Ñ+=Ð+EØ"&×";Ñ";¸J×<LÑ<LÓ"M�
”Ü˜jŸo™o¬tÕ4Ü"Ø Ð!5×!:Ñ!:Ð ;¸5ÀÀð O1Ø1;×1BÑ1BÐ0CðEóð ð ×Ñ¤.×"4Ñ"4Ó4Ü˜zŸ™´Ô4¼
À:×CUÑCUÔWZÔ8[Ü"Ø Ð!5×!:Ñ!:Ð ;¸5ÀÀð O1Ø1;×1BÑ1BÐ0CÐCVðXóð ð
 ×!Ò!Ø×5Ñ5Ø×&Ñ&¨¯©×(AÑ(AÐCW×CaÑCaó‘ð  ×=Ñ=¸j¿o¹oÓN�ð RZ÷ð ØJM¸¿¹»×E±°°A�˜Q "šW‘T¨!Ñ+ÕEôˆJ�Oð ×Ñ¤.×"4Ñ"4Ò4Ü˜zŸ™´Ô4¼
À:×CUÑCUÔWZÔ8[Ü"Ø Ð!5×!:Ñ!:Ð ;¸5ÀÀð O1Ø1;×1BÑ1BÐ0CÐCVðXóð ð
 ×!Ò!Ø"&×"<Ñ"<Ø×&Ñ&¨¯©×(AÑ(AÐCW×CaÑCaó#�
”ð
 �?Š?Ø×Ñ¤×!4Ñ!4Ò4¸
×8IÑ8IÌ^×M_ÑM_Ò8_à×,Ñ,¨ZÕ8ð 9`ð ùó! Fùôs   Å=K ÆKÆ)K ËK c                 ó,  — d}t        |j                  «      D ])  \  }}t        d„ |j                  «       D «       «      sŒ'|} n |€t	        t        d¬«      «       y|j                  |   |j                  d   c|j                  d<   |j                  |<   y)a  
        Promote the first row with no None values to the top of the ut_fixture.rows list.

        This function modifies the ut_fixture object in place.

        Needed for databases like Redshift which uses the first value in a column to determine
        the column type. If the first value is None, the type is assumed to be VARCHAR(1).
        This leads to obscure type mismatch errors centered on a unit test fixture's `expect`.
        See https://github.com/dbt-labs/dbt-redshift/issues/821 for more info.
        Nc              3   ó$   K  — | ]  }|d u–— Œ
 y ­wr<   r^   )Ú.0Úvalues     r8   ú	<genexpr>z=UnitTestParser._promote_first_non_none_row.<locals>.<genexpr>­  s   è ø€ Ò?¨�5 Ô$Ñ?ùs   ‚zîUnit Test fixtures benefit from having at least one row free of Null values to ensure consistent column types. Failure to meet this recommendation can result in type mismatch errors between unit test source models and `expected` fixtures.)Úbmsgr   )Ú	enumeraterg   ÚallÚvaluesr*   r+   )r7   rç   Únon_none_row_indexÚindexrê   s        r8   ræ   z*UnitTestParser._promote_first_non_none_row�  s›   € ð "Ðô $ J§O¡OÓ4ò 	‰JˆE�3äÑ?°#·*±*³,Ô?Õ?Ø%*Ð"Ùð		ð Ð%ÜÜð Jôõð —‘Ð 2Ñ3Ø—‘ Ñ"ð DˆJ�O‰O˜AÑ 
§¡Ð0BÒ Cr:   c                 óº   — | j                  ||«      }| j                  j                  |j                     }|j                  j                  |«       |j                  S r<   )rÙ   r3   ÚfilesÚfile_idr=   rw   rg   )r7   rÓ   rª   Úutdef_unique_idrØ   Úfixture_source_files         r8   rã   z$UnitTestParser.get_fixture_file_rows½  sK   € à×#Ñ# L°,Ó?ˆØ"Ÿm™m×1Ñ1°'·/±/ÑBÐØ×&Ñ&×-Ñ-¨oÔ>Ø�|‰|Ðr:   Ú
csv_stringc                 óz   — t        |«      }t        j                  |«      }g }|D ]  }|j                  |«       Œ |S r<   )r   Úcsvr   rw   )r7   rý   Ú
dummy_fileÚreaderrg   rê   s         r8   rä   z,UnitTestParser._convert_csv_to_list_of_dictsÄ  s?   € Ü˜jÓ)ˆ
Ü—‘ 
Ó+ˆØˆØò 	ˆCØ�K‰K˜Õð	àˆr:   Úref_strc           	      ó¼  — t        d|z   dz   «      d   d   }g }|d   }|j                  d| j                  j                  «      }| j                  j
                  j                  ||d| j                  «      }|r|j                  t        j                  k7  rV|| j                  j                  k7  rt        d|› d	|› d
|› d�«      ‚t        d|› d	|› d| j                  j                  › �«      ‚t        | j                  j                  «      |j                  z  }t        |d«      5 }t!        |«      D ]  }	|j#                  |	«       Œ 	 ddd«       |S # 1 sw Y   |S xY w)zpRead rows from seed file on disk if not specified in YAML config. If seed file doesn't exist, return empty list.r†   r‡   rˆ   r   rL   r‰   NzUnable to find seed 'rK   z' for unit tests in 'z	' packagez!' for unit tests in directories: Úr)r-   r�   r©   rª   r3   rŽ   r�   rM   r!   rq   r   Ú
seed_pathsr   Úproject_rootrP   Úopenr   rw   )
r7   r  r’   rg   Ú	seed_namerN   Ú	seed_nodeÚ	seed_pathÚfrê   s
             r8   rá   z#UnitTestParser._load_rows_from_seedÌ  s^  € ä$ U¨W¡_°uÑ%<Ó=¸fÑEÀaÑHˆà%'ˆà˜‘Kˆ	Ø—w‘w˜y¨$¯,©,×*CÑ*CÓDˆà—M‘M×,Ñ,×1Ñ1°)¸\È4ÐQU×Q^ÑQ^Ó_ˆ	á˜I×3Ñ3´x·}±}ÒDà˜tŸ|™|×8Ñ8Ò8Ü"Ø+¨L¨>¸¸9¸+ÐEZÐ[gÐZhÐhqÐróð ô #Ø+¨L¨>¸¸9¸+ÐEfÐgk×gsÑgs×g~Ñg~Ðfð  Aóð ô ˜Ÿ™×2Ñ2Ó3°i×6RÑ6RÑRˆ	Ü�)˜SÓ!ð 	! QÜ! !“}ò !�Ø—‘˜CÕ ñ!÷	!ð ˆ÷		!ð ˆús   Ä$"EÅEr–   )r—   r˜   r™   r$   r&   r9   r#   r»   r   rš   r   r   r§   r	   r   r¬   r«   rÙ   r®   r¯   rÛ   ræ   rã   rä   rá   Ú__classcell__)r¡   s   @r8   rœ   rœ   û   sæ   ø„ ð lð ¸)ð Èõ ð
8�{ó 8ðtJ 4¨¨S¨¡>ð JÐ6Fó Jð?Ø! #™Yð?Ø59¸#¸s¸(±^ð?à	ó?ò
ð¨ð ¸Có òWò
ó
,9ò\ò@ð¸ð ÀÀTÈ#ÈsÈ(Á^Ñ@Tó ð¨Cð °D¸¸cÀ3¸h¹Ñ4H÷ r:   rœ   r3   Úcurrent_projectÚunit_test_modelr0   c                 ó  — |j                  «       }|d   }t        |«      dk(  r|d   nd }| j                  j                  |||| «      }|s4| j                  j                  |||t
        j                  g«      }|r|d   }|S )Nr   é   rÈ   )ri   ÚlenrŽ   r�   Údisabled_lookupr!   rn   )r3   r  r  Úmodel_name_splitrÐ   Úmodel_versionry   Údisabled_nodes           r8   r¨   r¨   ê  s’   € ð '×,Ñ,Ó.ÐØ! !Ñ$€JÜ+.Ð/?Ó+@ÀAÒ+EÐ$ QÒ'È4€Mà×%Ñ%×*Ñ*¨:°ÈÐW_Ó`€KÙØ ×0Ñ0×5Ñ5Ø˜¨¼¿¹Ð8Hó
ˆñ Ø'¨Ñ*ˆKàÐr:   Úunit_test_defc           
      ó|  — |j                   j                  s¶t        | ||j                  «      }|s5t	        d|› d|j                  › d|j
                  › d|j                  › �«      ‚|j                  j                  rA|j                   j                  j                  |j                  «       |j                  |_        nd|j                  _        |j                   j                  d   }|| j                  vr;|| j                  v rd|j                  _        nt	        d|j
                  › d|› �«      ‚|j                  j                  s|j                  | j                  v r%| j                  j                  |j                  «       |j                  | j                  vr)| j                  | j                   |j"                     |«       y | j                  |   }t%        |t&        «      sJ ‚d	|j                   j(                  v }|j*                  xr3 t%        |j*                  j(                  j-                  d
«      t.        «      }|r(|s&t	        d|j
                  › d|j
                  › d�«      ‚|j*                  xr% |j*                  j(                  j-                  d
«      }	d|j0                  D �
cg c]  }
|
j2                  ‘Œ c}
v }|r*|	r(|s&t	        d|j
                  › d|j
                  › d�«      ‚|j4                  sa|j6                  rT|j6                  j8                  s|j6                  j:                  r(d|j
                  › d|j
                  › d�}t	        |«      ‚y g }|j<                  |v r7|j
                  ||j<                     v r||j<                     |j
                     }g }|j6                  €|}nù|j6                  j:                  rg|D ]a  }| j                  |   }t%        |t&        «      sJ ‚|j>                  |j6                  j:                  v rŒG|j                  |j                  «       Œc n||j6                  j8                  rf|D ]a  }| j                  |   }t%        |t&        «      sJ ‚|j>                  |j6                  j8                  v r|j                  |j                  «       ŒbŒc |s(d|j
                  › d|j
                  › d�}t	        |«      ‚| j                  j                  |j                  «      }|jA                  «       }| j                   |j"                     }t%        |tB        «      sJ ‚|j                  jE                  |j                  «       |D ]Ù  }| j                  |   }t%        |t&        «      sJ ‚tF        jH                  › d|j<                  › d|j                  › d|j
                  › d|j>                  › �	}tK        jL                  |«      }||_
        ||j                   j                  d<   |j>                  |_        |j                  j                  |«       || j                  |<   ŒÛ y c c}
w )NzUnable to find model 'rK   z' for unit test 'z' in Fr   rŠ   z*' references a model that does not exist: zmacro.dbt.is_incrementalÚis_incrementalzFBoolean override for 'is_incremental' must be provided for unit test 'z' in model 'ú'r…   z' for incremental model 'z' must have a 'this' inputzV' should not have a versions include or exclude when referencing non-versioned model 'z' referenced a version of 'z' which was not found.rF   )'r_   r`   r¨   r£   r   rL   rP   r>   r?   rw   rA   rS   Údisabledr=   Úpopr³   rù   rú   ra   r   r2   rX   r�   Úboolrk   rm   rb   r¥   ÚincludeÚexcluderN   rc   Úto_dictr   Úremover!   rh   r   r¾   )r3   r  r  Úmodels_to_versionsry   Útarget_model_idÚtarget_modelÚtarget_model_is_incrementalÚ&unit_test_def_has_incremental_overrideÚ'unit_test_def_incremental_override_trueÚiÚunit_test_def_has_this_inputr•   Úversioned_modelsÚversions_to_testÚmodel_unique_idr£   Úoriginal_unit_test_defÚoriginal_unit_test_dictÚschema_fileÚversioned_model_unique_idÚversioned_modelÚversioned_unit_test_unique_idÚnew_unit_test_defs                           r8   Úprocess_models_for_unit_testr3  þ  sB  € ð
 ×#Ñ#×)Ò)Ü,¨X°È×H[ÑH[Ó\ˆÙÜØ(¨Ð(9¸¸=×;NÑ;NÐ:Oð PØ+×0Ñ0Ð1°°}×7WÑ7WÐ6XðZóð ð ×Ñ×%Ò%Ø×$Ñ$×*Ñ*×1Ñ1°+×2GÑ2GÔHØ#.×#5Ñ#5ˆMÕ ð ,1ˆM× Ñ Ô(ð $×.Ñ.×4Ñ4°QÑ7€OØ˜hŸn™nÑ,Ø˜h×/Ñ/Ñ/à+0ˆM× Ñ Õ(ô Ø˜m×0Ñ0Ð1Ð1[Ð\kÐ[lÐmóð ð ×Ñ×'Ò'à×"Ñ" h×&9Ñ&9Ñ9Ø×Ñ×#Ñ# M×$;Ñ$;Ô<Ø×"Ñ"¨(×*;Ñ*;Ñ;Ø×!Ñ! (§.¡.°×1FÑ1FÑ"GÈÔWð 	à—>‘> /Ñ2€LÜ�l¤IÔ.Ð.Ð.à"<À×@WÑ@W×@^Ñ@^Ð"^ÐØ-:×-DÑ-Dò .ÌØ×Ñ×&Ñ&×*Ñ*Ð+;Ó<¼dóJÐ*ñ #Ñ,RÜØTÐUb×UgÑUgÐThÐhtð  vB÷  vGñ  vGð  uHð  HIð  Jó
ð 	
ð
 	×ÑÒX M×$;Ñ$;×$BÑ$B×$FÑ$FÐGWÓ$Xð ,ð $*¸}×?RÑ?RÖ-S¸!¨a¯g«gÒ-SÐ#SÐ ñ 	$Ù3Ù-äØ˜-×,Ñ,Ð-Ð-FÀ|×GXÑGXÐFYÐYsÐtó
ð 	
ð ×$Ò$Ø×!Ò!Ø×"Ñ"×*Ò*¨m×.DÑ.D×.LÒ.Lð ˜m×0Ñ0Ð1ð 29Ø9E×9JÑ9JÐ8KÈ1ðNð ô ˜sÓ#Ð#àØÐà×!Ñ!Ð%7Ñ7Ø×ÑÐ!3°L×4MÑ4MÑ!NÑNà-¨l×.GÑ.GÑHÈ×IZÑIZÑ[ÐàÐØ×ÑÐ%Ø+ÑØ	×	Ñ	×	'Ò	'Ø/ò 	9ˆOØ—N‘N ?Ñ3ˆEÜ˜e¤YÔ/Ð/Ð/Ø�}‰} × 6Ñ 6× >Ñ >Ñ>Øà ×'Ñ'¨¯©Õ8ñ	9ð 
×	Ñ	×	'Ò	'Ø/ò 	ˆOØ—N‘N ?Ñ3ˆEÜ˜e¤YÔ/Ð/Ð/Ø�}‰} × 6Ñ 6× >Ñ >Ñ>Ø ×'Ñ'¨¯©Õ8àð	ñ à˜-×,Ñ,Ð-Ð-HÈ×IZÑIZÐH[ð \#ð #ð 	ô ˜3ÓÐð "*×!4Ñ!4×!8Ñ!8¸×9PÑ9PÓ!QÐØ"8×"@Ñ"@Ó"BÐØ—n‘nÐ%;×%CÑ%CÑDˆÜ˜+Ô'7Ô8Ð8Ð8Ø×Ñ×%Ñ%Ð&<×&FÑ&FÔGØ)9ò 
	SÐ%Ø&Ÿn™nÐ-FÑGˆOÜ˜o¬yÔ9Ð9Ð9Ü/7¯}©}¨o¸Q¸}×?YÑ?YÐ>ZÐZ[Ð\i×\oÑ\oÐ[pÐpqÐr÷  sEñ  sEð  rFð  FHð  IX÷  I`ñ  I`ð  Hað  -bÐ)Ü 2× <Ñ <Ð=TÓ UÐØ*GÐÔ'Ø4MÐ×(Ñ(×.Ñ.¨qÑ1Ø(7×(?Ñ(?ÐÔ%Ø×"Ñ"×)Ñ)Ð*GÔHàARˆH×ÑÐ =Ò>ñ
	SùòE .Ts   Ê*X9)Hrÿ   rÌ   Úcopyr   r   Úior   Úpathlibr   Útypingr   r   r	   r
   r   Údbtr   Údbt.artifacts.resourcesr   r   r   Ú
dbt.configr   Údbt.context.context_configr   Údbt.context.providersr   r   Údbt.contracts.filesr   r   Údbt.contracts.graph.manifestr   Ú dbt.contracts.graph.model_configr   Údbt.contracts.graph.nodesr   r   r   r   r   Údbt.contracts.graph.unparsedr   Údbt.exceptionsr   r   Ú	dbt.graphr    Údbt.node_typesr!   Údbt.parser.schemasr"   r#   r$   r%   r&   r'   r(   Ú	dbt.utilsr)   Údbt_common.events.functionsr*   Údbt_common.events.typesr+   Údbt_extractorr,   r-   r/   rœ   rš   r¨   r3  r^   r:   r8   ú<module>rJ     sØ   ðÛ 
Û 	Ý Ý Ý Ý ß 1Õ 1å ß OÑ OÝ $Ý 4ß Qß :Ý 1Ý ?÷õ õ :ß BÝ Ý #÷÷ ñ õ +Ý 2Ý 0ß A÷M#ñ M#ô`l�Zô lð^ØðØ),ðØ?BðàˆiÑóð(FSØðFSØ),ðFSØ=OôFSr:   