Ë
    ÌifB  ã                   ó„  — d dl Z d dlZ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mZm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 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&m'Z' d dl(m)Z)m*Z* d dl+m,Z, d dl-m.Z. d dl/m0Z0m1Z1 d dl2m3Z3 d dl4m5Z5 d dl6m7Z7m8Z8 d dl9m:Z: d dl;m<Z< d dl=m>Z>m?Z? d dl@mAZA d dlBmCZC d dlDmEZE d dlFmGZGmHZH d dlImJZJmKZK erd dlLZLe G d„ deA«      «       ZMe G d„ deA«      «       ZNe G d „ d!eA«      «       ZO G d"„ d#e:«      ZP G d$„ d%e<«      ZQd&d'd(ee
eRef      fd)„ZSd,d&d'd*eTd(ee   fd+„ZUy)-é    N)Ú	dataclass)	ÚTYPE_CHECKINGÚAnyÚ
CollectionÚDictÚListÚOptionalÚTupleÚTypeÚUnion)ÚMissingMaterializationError)ÚPrimitiveDict)Ú
TestStatus)Ú	RunResult)ÚMacroGenerator)Úgenerate_runtime_model_context)ÚManifest)ÚGenericTestNodeÚSingularTestNodeÚTestNodeÚUnitTestDefinitionÚUnitTestNode)ÚLogStartLineÚLogTestResult)ÚBooleanErrorÚDbtInternalError)Ú	get_flags)ÚResourceTypeSelector)ÚTEST_NODE_TYPESÚNodeType)ÚUnitTestManifestLoader)Úgroup_lookup)Ú
BaseRunnerÚresource_types_from_args)ÚCompileRunner)ÚRunTask)Ú_coerce_decimalÚ	strtobool)ÚdbtClassMixin)Ú	pluralize)Ú
fire_event)ÚDbtBaseExceptionÚDbtRuntimeError)ÚgreenÚredc                   óL   — e Zd ZU eeeef      ed<   eeeef      ed<   eed<   y)ÚUnitTestDiffÚactualÚexpectedÚrenderedN)Ú__name__Ú
__module__Ú__qualname__r   r   Ústrr   Ú__annotations__© ó    úN/var/www/html/strategist-ai/venv/lib/python3.12/site-packages/dbt/task/test.pyr1   r1   7   s-   … à��c˜3�h‘Ñ Ó Ø�4˜˜S˜‘>Ñ"Ó"Ø„Mr;   r1   c                   óh   ‡ — e Zd ZU eed<   eed<   eed<   eeef   ed<   e	ˆ fd„«       Z
defd„Zˆ xZS )ÚTestResultDataÚfailuresÚshould_warnÚshould_errorÚadapter_responsec                 ó€   •— | j                  |d   «      |d<   | j                  |d   «      |d<   t        ‰| �	  |«       y )Nr@   rA   )Úconvert_bool_typeÚsuperÚvalidate)ÚclsÚdataÚ	__class__s     €r<   rF   zTestResultData.validateE   sD   ø€ à!×3Ñ3°D¸Ñ4GÓHˆˆ]ÑØ"×4Ñ4°T¸.Ñ5IÓJˆˆ^ÑÜ‰Ñ˜Õr;   Úreturnc                 ó”   — t        | t        «      r	 t        t        | «      «      S t        | «      S # t        $ r t        | d«      ‚w xY w)NÚget_test_sql)Ú
isinstancer8   Úboolr(   Ú
ValueErrorr   )Úfields    r<   rD   z TestResultData.convert_bool_typeK   sK   € ä�eœSÔ!ð:ÜœI eÓ,Ó-Ð-ô
 �E‹{Ðøô	 ò :Ü" 5¨.Ó9Ð9ð:ús	   ’1 ±A)r5   r6   r7   Úintr9   rN   r   r8   r   ÚclassmethodrF   rD   Ú__classcell__)rI   s   @r<   r>   r>   >   s@   ø… àƒMØÓØÓØ˜3 ˜8‘nÓ$àóó ðð
	 D÷ 	r;   r>   c                   ó@   — e Zd ZU eed<   eeef   ed<   dZe	e
   ed<   y)ÚUnitTestResultDatarA   rB   NÚdiff)r5   r6   r7   rN   r9   r   r8   r   rV   r	   r1   r:   r;   r<   rU   rU   W   s%   … àÓØ˜3 ˜8‘nÓ$Ø#'€Dˆ(�<Ñ
 Ô'r;   rU   c            	       óL  — e Zd Z ej                  d«      Zdefd„Zdefd„Zd„ Z	d„ Z
dd„Zd	ed
edefd„Zded
edefd„Zded
edeeef   fd„Zdeeef   d
efd„Zdededefd„Zdededefd„Zdd„Zdefd„Z	 ddddddedej>                  fd„Z dej>                  defd„Z!y) Ú
TestRunnerz%\x1B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~])rJ   c                 óÞ   — | j                   j                  t        j                  k(  r1| j                   j                  › d| j                   j
                  › �}|S | j                   j                  S )Nz::)ÚnodeÚresource_typer    ÚUnitÚmodelÚversioned_nameÚname)Úselfr_   s     r<   Údescribe_node_namezTestRunner.describe_node_namea   sO   € Ø�9‰9×"Ñ"¤h§m¡mÒ3Ø—i‘i—o‘oÐ& b¨¯©×)AÑ)AÐ(BÐCˆDØˆKà—9‘9—>‘>Ð!r;   c                 óT   — | j                   j                  › d| j                  «       › �S )Nú )rZ   r[   ra   ©r`   s    r<   Údescribe_nodezTestRunner.describe_nodeh   s(   € Ø—)‘)×)Ñ)Ð*¨!¨D×,CÑ,CÓ,EÐ+FÐGÐGr;   c                 óî  — |j                   }t        j                  |j                  «      }t	        |j                   t
        «      r|j                   j                  nd }t        t        | j                  «       t        |j                  «      | j                  | j                  |j                  |j                  |j                   ||¬«	      t        j"                  t        |j                  «      «      ¬«       y )N)	r_   ÚstatusÚindexÚ
num_modelsÚexecution_timeÚ	node_infoÚnum_failuresÚgroupÚattached_node)Úlevel)rZ   r"   ÚgetÚ	unique_idrM   r   rn   r+   r   ra   r8   rg   Ú
node_indexÚ	num_nodesrj   rk   r?   Ústatus_to_level)r`   Úresultr]   rm   rn   s        r<   Úprint_result_linezTestRunner.print_result_linek   s¯   € Ø—‘ˆÜ× Ñ  §¡Ó1ˆä)3°F·K±KÄÔ)QˆF�K‰K×%Ò%ÐW[ð 	ô 	ÜØ×,Ñ,Ó.Ü˜6Ÿ=™=Ó)Ø—o‘oØŸ>™>Ø%×4Ñ4ØŸ/™/Ø#Ÿ_™_ØØ+ô
ô  ×/Ñ/´°F·M±MÓ0BÓCö	
r;   c                 ó    — t        t        | j                  «       | j                  | j                  | j
                  j                  ¬«      «       y )N)Údescriptionrh   Útotalrk   )r+   r   re   rr   rs   rZ   rk   rd   s    r<   Úprint_start_linezTestRunner.print_start_line�   s9   € ÜÜØ ×.Ñ.Ó0Ø—o‘oØ—n‘nØŸ)™)×-Ñ-ô	õ	
r;   Nc                 ó$   — | j                  «        y ©N)rz   rd   s    r<   Úbefore_executezTestRunner.before_execute‹   s   € Ø×ÑÕr;   Ú	data_testÚmanifestc           
      ó€  — t        || j                  |«      }| j                  j                  |d   «      }|j	                  | j                  j
                  |j                  «       | j                  j                  «       «      }|€3t        |j                  «       | j                  j                  «       ¬«      ‚d|vrt        dj                  |«      «      ‚t        ||«      }	  |«        | j                  j                  ||«        |d   d«      }|d   }t        |j                  «      }	|	dk7  rt        d|j                  › d	|	› d
�«      ‚t        |j                   «      }
|
dk7  rt        d|j                  › d	|
› d�«      ‚t#        t%        |j&                  D �cg c]  }|j)                  «       ‘Œ c}t+        t,        |j                  d   «      «      «      }|d   j/                  d¬«      |d<   t0        j3                  |«       t0        j5                  |«      S # | j                  j                  ||«       w xY wc c}w )NÚconfig©ÚmaterializationÚadapter_typeú=Invalid materialization context generated, missing config: {}Úload_resultÚmainÚtableé   z!dbt internally failed to execute z: Returned z rows, but expected 1 rowé   z  columns, but expected 3 columnsr   ÚresponseT©Ú	omit_nonerB   )r   r�   ÚadapterÚpre_model_hookÚ"find_materialization_macro_by_nameÚproject_nameÚget_materializationÚtyper   r   Úformatr   Úpost_model_hookÚlenÚrowsrq   ÚcolumnsÚdictÚzipÚcolumn_namesÚlowerÚmapr'   Úto_dictr>   rF   Ú	from_dict)r`   r~   r   ÚcontextÚhook_ctxÚmaterialization_macroÚ
macro_funcru   rˆ   Únum_rowsÚnum_colsÚcolumn_nameÚtest_result_dcts                r<   Úexecute_data_testzTestRunner.execute_data_testŽ   s/  € Ü0°¸D¿K¹KÈÓRˆà—<‘<×.Ñ.¨w°xÑ/@ÓAˆà (× KÑ KØ�K‰K×$Ñ$ i×&CÑ&CÓ&EÀtÇ|Á|×GXÑGXÓGZó!
Ðð !Ð(Ü-Ø )× =Ñ =Ó ?ÈdÏlÉl×N_ÑN_ÓNaôð ð ˜7Ñ"Ü"ØO×VÑVÐW^Ó_óð ô
 $Ð$9¸7ÓCˆ
ð	<áŒLà�L‰L×(Ñ(¨°(Ô;ð (�˜Ñ'¨Ó/ˆØ�w‘ˆÜ�u—z‘z“?ˆØ�qŠ=Ü"Ø3°I×4GÑ4GÐ3Hð IØ$˜:ð &ðóð ô
 �u—}‘}Ó%ˆØ�qŠ=Ü"Ø3°I×4GÑ4GÐ3Hð IØ$˜:ð &ðóð ô *.ÜØ8=×8JÑ8JÖK¨�×"Ñ"Õ$ÒKÜ”O U§Z¡Z°¡]Ó3óó*
ˆð /5°ZÑ.@×.HÑ.HÐSWÐ.HÓ.XˆÐ*Ñ+Ü×Ñ Ô0Ü×'Ñ'¨Ó8Ð8øð; �L‰L×(Ñ(¨°(Õ;üò. Ls   Ã#H ÆH;ÈH8Úunit_test_defc                 óf   — t        || j                  |j                  h«      }|j                  «       S r|   )r!   r�   rq   Úload)r`   r©   r   Úloaders       r<   Ú"build_unit_test_manifest_from_testz-TestRunner.build_unit_test_manifest_from_testÆ   s+   € ô (¨°$·+±+À×@WÑ@WÐ?XÓYˆØ�{‰{‹}Ðr;   c                 ó&  — | j                  ||«      }|j                  |j                     }t        |t        «      sJ ‚| j
                  j                  ||i «      }t        |t        «      sJ ‚t        || j                  |«      }| j                  j                  |d   «      }|j                  | j                  j                  |j                  «       | j                  j                  «       «      }|€3t        |j                  «       | j                  j                  «       ¬«      ‚d|vrt!        dj#                  |«      «      ‚t%        ||«      }	  |«        	 | j                  j-                  ||«        |d   d«      }
|
d   j/                  d	¬
«      }|
d   }| j1                  |d«      }| j1                  |d«      }d\  }}| j3                  ||«      }|j5                  «       rQd	}| j7                  |«      }dt9        d«      › dt;        d«      › d|› d�}t=        t?        |«      t?        |«      |¬«      }tA        |||¬«      }||fS # t&        $ r }	t)        d|j*                  › d|	› �«      ‚d }	~	ww xY w# | j                  j-                  ||«       w xY w)Nr�   r‚   r…   z1An error occurred during execution of unit test 'zM'. There may be an error in the unit test definition: check the data types.
 r†   r‡   r‹   TrŒ   rˆ   r2   r3   )FNz

z differs from z:

ú
)r2   r3   r4   )rV   rA   rB   )!r­   Únodesrq   rM   r   ÚcompilerÚcompile_noder   r�   rŽ   r�   r�   r‘   r’   r“   r   r   r”   r   r,   r-   r_   r•   rž   Ú_get_unit_test_agate_tableÚ_get_daff_diffÚhasDifferenceÚ_render_daff_diffr.   r/   r1   Újson_rows_from_tablerU   )r`   r©   r   Úunit_test_manifestÚunit_test_noder    r¡   r¢   r£   Úeru   rB   rˆ   r2   r3   rA   rV   Ú	daff_diffr4   Úunit_test_result_datas                       r<   Úexecute_unit_testzTestRunner.execute_unit_testÍ   s°  € ð "×DÑDÀ]ÐT\Ó]Ðð ,×1Ñ1°-×2IÑ2IÑJˆÜ˜.¬,Ô7Ð7Ð7ð Ÿ™×3Ñ3°NÐDVÐXZÓ[ˆÜ˜.¬,Ô7Ð7Ð7ô 1°ÀÇÁÐN`Óaˆà—<‘<×.Ñ.¨w°xÑ/@ÓAˆà 2× UÑ UØ�K‰K×$Ñ$ n×&HÑ&HÓ&JÈDÏLÉL×L]ÑL]ÓL_ó!
Ðð !Ð(Ü-Ø .× BÑ BÓ DØ!Ÿ\™\×.Ñ.Ó0ôð ð
 ˜7Ñ"Ü"ØO×VÑVÐW^Ó_óð ô
 $Ð$9¸7ÓCˆ
ð		<á�Lð �L‰L×(Ñ(¨°(Ô;ð (�˜Ñ'¨Ó/ˆØ! *Ñ-×5Ñ5ÀÐ5ÓEÐØ�w‘ˆØ×0Ñ0°¸ÓAˆØ×2Ñ2°5¸*ÓEˆð )Ñˆ�dØ×'Ñ'¨°&Ó9ˆ	Ø×"Ñ"Ô$ØˆLØ×-Ñ-¨iÓ8ˆHØœe H›oÐ.¨n¼SÀ»_Ð<MÈUÐS[ÐR\Ð\^Ð_ˆHäÜ+¨FÓ3Ü-¨hÓ7Ø!ôˆDô !3ØØ%Ø-ô!
Ðð Ð4Ð4Ð4øôI  ò 	Ü!ØCÀM×DVÑDVÐCWð X^Ø^_Ð]`ðbóð ûð	ûð �L‰L×(Ñ(¨°(Õ;ús$   ÅI É	I/ÉI*É*I/É/I2 É2JÚtestc                 óè   — t        |t        «      r'| j                  ||«      \  }}| j                  ||«      S t        |t        t
        f«      sJ ‚| j                  ||«      }| j                  ||«      S r|   )rM   r   r½   Úbuild_unit_test_run_resultr   r   r¨   Úbuild_test_run_result)r`   r¾   r   r¹   Úunit_test_resultÚtest_results         r<   ÚexecutezTestRunner.execute  sv   € Ü�dÔ.Ô/Ø/3×/EÑ/EÀdÈHÓ/UÑ,ˆNÐ,Ø×2Ñ2°>ÐCSÓTÐTô ˜dÔ%5´Ð$GÔHÐHÐHØ×0Ñ0°°xÓ@ˆKØ×-Ñ-¨d°KÓ@Ð@r;   ru   c                 ó   — |j                   j                  j                  «       }t        j                  «       j
                  }t        |j                  d«      }d }d }d}|dk(  rE|j                  r9t        j                  }d|› d|j                   j                  › �}|j                  }nÇ|j                  r«t        «       j                  s1t        «       j                  j!                  t"        j$                  «      r-t        j                  }d|› d|j                   j&                  › �}n,t        j(                  }d|› d|j                   j&                  › �}|j                  }nt        j*                  }t-        ||g |d||j.                  |d ¬«	      }	|	S )Nru   r   ÚERRORzGot z, configured to fail if z, configured to warn if ©	rZ   rg   ÚtimingÚ	thread_idrj   ÚmessagerB   r?   Úbatch_results)r�   ÚseverityÚupperÚ	threadingÚcurrent_threadr_   r*   r?   rA   r   ÚFailÚerror_ifr@   r   Ú
WARN_ERRORÚWARN_ERROR_OPTIONSÚincludesr   r5   Úwarn_ifÚWarnÚPassr   rB   )
r`   r¾   ru   rÌ   rÉ   Ú
num_errorsrg   rÊ   r?   Ú
run_results
             r<   rÁ   z TestRunner.build_test_run_result%  sT  € Ø—;‘;×'Ñ'×-Ñ-Ó/ˆÜ×,Ñ,Ó.×3Ñ3ˆ	Ü˜vŸ™°Ó9ˆ
ØˆØˆØˆØ�wÒ 6×#6Ò#6Ü—_‘_ˆFØ˜Z˜LÐ(@ÀÇÁ×AUÑAUÐ@VÐWˆGØ—‘‰HØ×ÒÜ‹{×%Ò%¬«×)GÑ)G×)PÑ)PÜ×&Ñ&ô*ô $Ÿ™�Ø   Ð,DÀTÇ[Á[×EXÑEXÐDYÐZ‘ä#Ÿ™�Ø   Ð,DÀTÇ[Á[×EXÑEXÐDYÐZ�Ø—‘‰Hä—_‘_ˆFäØØØØØØØ#×4Ñ4ØØô

ˆ
ð Ðr;   c                 ó&  — t        j                  «       j                  }t        j                  }d }d}|j
                  r6t        j                  }|j                  r|j                  j                  nd }d}t        ||g |d||j                  |d ¬«	      S )Nr   r‰   rÇ   )rÎ   rÏ   r_   r   r×   rA   rÐ   rV   r4   r   rB   )r`   r¾   ru   rÉ   rg   rÊ   r?   s          r<   rÀ   z%TestRunner.build_unit_test_run_resultJ  s‡   € ô ×,Ñ,Ó.×3Ñ3ˆ	ä—‘ˆØˆØˆØ×ÒÜ—_‘_ˆFØ.4¯kªk�f—k‘k×*Ò*¸tˆGØˆHäØØØØØØØ#×4Ñ4ØØô

ð 
	
r;   c                 ó&   — | j                  |«       y r|   )rv   )r`   ru   s     r<   Úafter_executezTestRunner.after_executec  s   € Ø×Ñ˜vÕ&r;   Úactual_or_expectedc                 ó.  ‡— |j                  |j                  D �cg c]  }|j                  «       ‘Œ c}«      }|j                  ˆfd„«      }t	        |j
                  j                  «       «      }|j                  d«       |j                  |«      S c c}w )Nc                 ó   •— | d   ‰k(  S )NrÝ   r:   )ÚrowrÝ   s    €r<   ú<lambda>z7TestRunner._get_unit_test_agate_table.<locals>.<lambda>j  s   ø€ ˜Ð0Ñ1Ð5GÑG€ r;   rÝ   )	Úrenamer›   rœ   ÚwhereÚlistr˜   ÚkeysÚremoveÚselect)r`   Úresult_tablerÝ   ÚcolÚunit_test_tabler˜   s     `   r<   r³   z%TestRunner._get_unit_test_agate_tablef  s|   ø€ à#×*Ñ*À<×C\ÑC\Ö+]¸C¨C¯I©I­KÒ+]Ó^ˆØ&×,Ñ,ÛGó
ˆô �×.Ñ.×3Ñ3Ó5Ó6ˆØ�‰Ð+Ô,Ø×%Ñ% gÓ.Ð.ùò ,^s   ›Br3   úagate.Tabler2   Úorderedc                 ó’  — t        j                  t        |d¬«      «      }t        j                  t        |d¬«      «      }t        j                  «       }||_        t         j
                  j                  |||«      j                  «       }t        j                  g «      }t        j                  ||«      }	|	j                  |«       |	S )NT)Úsort)
ÚdaffÚPythonTableViewÚlist_rows_from_tableÚCompareFlagsrì   ÚCoopyÚcompareTablesÚalignÚ	TableDiffÚhilite)
r`   r3   r2   rì   Úexpected_daff_tableÚactual_daff_tableÚflagsÚ	alignmentru   rV   s
             r<   r´   zTestRunner._get_daff_diffp  s¢   € ô
 #×2Ñ2Ô3GÈÐW[Ô3\Ó]ÐÜ ×0Ñ0Ô1EÀfÐSWÔ1XÓYÐä×!Ñ!Ó#ˆØˆŒä—J‘J×,Ñ,Ð-@ÐBSÐUZÓ[×aÑaÓcˆ	Ü×%Ñ% bÓ)ˆä�~‰~˜i¨Ó/ˆØ�‰�FÔØˆr;   r»   c                 ó  — t        j                  g «      }|j                  |«       t        j                  «       j	                  |«      }| j
                  j                  j                  s| j                  j                  d|«      }|S )NÚ )
rï   rð   r÷   ÚTerminalDiffRenderÚrenderr�   ÚargsÚ
use_colorsÚ_ANSI_ESCAPEÚsub)r`   r»   ru   r4   s       r<   r¶   zTestRunner._render_daff_diff‚  si   € Ü×%Ñ% bÓ)ˆØ×Ñ˜Ô Ü×*Ñ*Ó,×3Ñ3°FÓ;ˆà�{‰{×Ñ×*Ò*Ø×(Ñ(×,Ñ,¨R°Ó:ˆHàˆr;   )rJ   N©F)"r5   r6   r7   ÚreÚcompiler  r8   ra   re   rv   rz   r}   r   r   r>   r¨   r   r­   r
   r   rU   r½   r   rÄ   r   rÁ   rÀ   rÜ   r³   rN   rï   rö   r´   r¶   r:   r;   r<   rX   rX   ^   sQ  „ Ø�2—:‘:ÐFÓG€Lð" Có "ðH˜só Hò
ò,
ó ð69¨8ð 69¸xð 69ÈNó 69ðpØ/ðØ;Cðà	óðL5Ø/ðL5Ø;CðL5à	ˆ|Ð/Ð/Ñ	0óL5ð\A˜E (¨LÐ"8Ñ9ð AÀXó Að#¨(ð #¸Nð #Èyó #ðJ
Ø ð
Ø*<ð
à	ó
ó2'ð/È3ó /ð OTñØ%ðØ/<ðØGKðà	�‰óð$¨4¯>©>ð ¸cô r;   rX   c                   ó`   — e Zd ZdZdZdefd„Zedee	   fd„«       Z
defd„Zdeee      fd„Zy)	ÚTestTaskzu
    Testing:
        Read schema files + custom data tests and validate that
        constraints are satisfied.
    FrJ   c                  ó   — y)NFr:   rd   s    r<   Úraise_on_first_errorzTestTask.raise_on_first_error–  s   € Ør;   c                 ó´   — t        | j                  t        t        «      t        t        «      «      }|D �cg c]  }|t        v sŒ|‘Œ }}t	        |«      S c c}w r|   )r$   r   Úsetr   rä   )r`   Úresource_typesÚrts      r<   r  zTestTask.resource_types™  sN   € ä/GØ�I‰I”sœ?Ó+¬S´Ó-Aó0
ˆð
 (6ÖO ¸¼Ò9Nš"ÐOˆÐOÜ�NÓ#Ð#ùò Ps   ¶AÁAc                 ó¶   — | j                   �| j                  €t        d«      ‚t        | j                  | j                   | j                  | j
                  ¬«      S )Nz<manifest and graph must be set to get perform node selection)Úgraphr   Úprevious_stater  )r   r  r   r   r  r  rd   s    r<   Úget_node_selectorzTestTask.get_node_selector£  sN   € Ø�=‰=Ð  D§J¡JÐ$6Ü"Ð#aÓbÐbÜ#Ø—*‘*Ø—]‘]Ø×.Ñ.Ø×.Ñ.ô	
ð 	
r;   c                 ó   — t         S r|   )rX   )r`   Ú_s     r<   Úget_runner_typezTestTask.get_runner_type­  s   € ÜÐr;   N)r5   r6   r7   Ú__doc__Ú__test__rN   r
  Úpropertyr   r    r  r   r  r	   r   r#   r  r:   r;   r<   r  r  �  s\   „ ñð €Hð dó ð ð$  X¡ò $ó ð$ð
Ð#7ó 
ð H¨T°*Ñ-=Ñ$>ô r;   r  rˆ   rë   rJ   c                 ó”   — t        j                  «       }| j                  |¬«       t        j                  |j                  «       «      S )z-Convert a table to a list of row dict objects)Úpath)ÚioÚStringIOÚto_jsonÚjsonÚloadsÚgetvalue)rˆ   Úoutputs     r<   r·   r·   ²  s1   € ä�[‰[‹]€FØ	‡M�M�v€MÔä�:‰:�f—o‘oÓ'Ó(Ð(r;   rî   c                 óô   — | j                   D �cg c]  }|j                  ‘Œ }}g }| j                  D ]*  }|j                  t	        |j                  «       «      «       Œ, |rt        |d„ ¬«      }|g|z   S c c}w )a.  
    Convert given table to a list of lists, where the first element represents the header

    By default, sort is False and no sort order is applied to the non-header rows of the given table.

    If sort is True, sort the non-header rows hierarchically, treating None values as lower in order.
    Examples:
        * [['a','b','c'],[4,5,6],[1,2,3]] -> [['a','b','c'],[1,2,3],[4,5,6]]
        * [['a','b','c'],[4,5,6],[1,null,3]] -> [['a','b','c'],[1,null,3],[4,5,6]]
        * [['a','b','c'],[4,5,6],[null,2,3]] -> [['a','b','c'],[4,5,6],[null,2,3]]
    c                 ó4   — | D �cg c]  }|d u |f‘Œ
 c}S c c}w r|   r:   )ÚxÚelems     r<   rá   z&list_rows_from_table.<locals>.<lambda>Î  s   € ÈAÖ*NÀD¨D°D¨L¸$Ò+?Ò*N€ ùÒ*Ns   …)Úkey)r˜   r_   r—   Úappendrä   ÚvaluesÚsorted)rˆ   rî   ré   Úheaderr—   rà   s         r<   rñ   rñ   »  sq   € ð #(§-¡-Ö0˜3ˆc�h‹hÐ0€FÐ0à€DØ�z‰zò (ˆØ�‰”D˜Ÿ™›Ó&Õ'ð(ñ Ü�dÑ NÔOˆàˆ8�d‰?Ðùò 1s   �A5r  )Vr  r  r  rÎ   Údataclassesr   Útypingr   r   r   r   r   r	   r
   r   r   rï   Údbt.adapters.exceptionsr   Údbt.artifacts.schemas.catalogr   Údbt.artifacts.schemas.resultsr   Údbt.artifacts.schemas.runr   Údbt.clients.jinjar   Údbt.context.providersr   Údbt.contracts.graph.manifestr   Údbt.contracts.graph.nodesr   r   r   r   r   Údbt.events.typesr   r   Údbt.exceptionsr   r   Ú	dbt.flagsr   Ú	dbt.graphr   Údbt.node_typesr   r    Údbt.parser.unit_testsr!   Údbt.taskr"   Údbt.task.baser#   r$   Údbt.task.compiler%   Údbt.task.runr&   Ú	dbt.utilsr'   r(   Údbt_common.dataclass_schemar)   Údbt_common.events.formatr*   Údbt_common.events.functionsr+   Údbt_common.exceptionsr,   r-   Údbt_common.uir.   r/   Úagater1   r>   rU   rX   r  r8   r·   rN   rñ   r:   r;   r<   ú<module>rF     s*  ðÛ 	Û Û 	Û Ý !÷
÷ 
õ 
ó å ?Ý 7Ý 4Ý /Ý ,Ý @Ý 1÷õ ÷ 9ß 9Ý Ý *ß 4Ý 8Ý !ß >Ý *Ý  ß 0Ý 5Ý .Ý 2ß Cß $áÛð ô�=ó ó ðð ô�]ó ó ðð0 ô(˜ó (ó ð(ôl�ô lô^	!ˆwô !ðJ) ð )°$°t¸CÀ¸H±~Ñ2Fó )ñ ð °Tð ÀdÈ3Áiô r;   