Ë
    Ìi¡³  ã                  óN  — d dl mZ d dlZd dlZd dl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mZmZmZ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 m!Z! d dl"m#Z# d dl$m%Z%m&Z& d dl'm(Z(m)Z)m*Z*m+Z+m,Z, d dl-m.Z. d dl/m0Z0 d dl1m2Z2 d dl3m4Z4 d dl5m6Z6 d dl7m8Z8 d dl9m:Z:m;Z;m<Z<m=Z= d dl>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZF d dlGmHZHmIZImJZJ d dlKmLZL d dlMmNZN d dlOmPZP d dlQmRZR d dlSmTZTmUZU d dlVmWZW d dlXmYZY d dlZm[Z[m\Z\ d d l]m^Z^m_Z_ d d!l`maZa d d"lbmcZc d d#ldmeZe d d$lfmgZg d d%lhmiZi d d&ljmkZkmlZl d d'lmmnZn d d(lompZp d d)lqmrZr ejæ                   G d*„ d+et«      «       Zud;d,„Zv	 	 	 	 	 	 d<d-„Zwd.„ Zxd=d/„Zyd>d0„Zzd?d1„Z{d@d2„Z| G d3„ d4e[«      Z} G d5„ d6e}«      Z~ G d7„ d8e}«      Z G d9„ d:e\«      Z€y)Aé    )ÚannotationsN)Údeepcopy)Úasdict)ÚdatetimeÚtimezone)
ÚAbstractSetÚAnyÚCallableÚDictÚIterableÚListÚOptionalÚSetÚTupleÚType)ÚtrackingÚutils)ÚBaseAdapterÚBaseRelation)Ú
Capability)ÚFinishedRunningStats)ÚMissingMaterializationError)ÚHook)ÚBatchResultsÚ	BatchType)Ú
NodeStatusÚRunningStatusÚ	RunStatusÚ
TimingInfoÚcollect_timing_info)Ú	RunResult)ÚFlags)ÚMacroGenerator)ÚRuntimeConfig)Úgenerate_runtime_model_context)ÚManifest)ÚBatchContextÚHookNodeÚ	ModelNodeÚ
ResultNode)ÚGenericExceptionOnRunÚLogBatchResultÚLogHookEndLineÚLogHookStartLineÚLogModelResultÚLogStartBatchÚLogStartLineÚMicrobatchExecutionDebug)ÚCompilationErrorÚDbtInternalErrorÚDbtRuntimeError)ÚResourceTypeSelector)ÚDbtThreadPool)Úget_hook_dict)ÚMicrobatchBuilder)ÚNodeTypeÚRunHookType)Úgroup_lookup)Ú
BaseRunner)ÚCompileRunnerÚCompileTask)Ú
get_countsÚprint_run_end_messages)Úadd_artifact_produced)ÚMacroProtocol)ÚdbtClassMixin)Ú
EventLevel)Úlog_contextvars)Ú
fire_eventÚget_invocation_id)Ú
Formatting)ÚDbtValidationError)Úget_invocation_started_atc                  ó   — e Zd Zd„ Zd„ Zy)ÚBiggestNamec                 ó   — y)NT© ©ÚselfÚothers     úM/var/www/html/strategist-ai/venv/lib/python3.12/site-packages/dbt/task/run.pyÚ__lt__zBiggestName.__lt__L   s   € Øó    c                ó.   — t        || j                  «      S ©N)Ú
isinstanceÚ	__class__rP   s     rS   Ú__eq__zBiggestName.__eq__O   s   € Ü˜% §¡Ó0Ð0rU   N)Ú__name__Ú
__module__Ú__qualname__rT   rZ   rO   rU   rS   rM   rM   J   s   „ òó1rU   rM   c                 ó   — g S rW   rO   rO   rU   rS   Ú
_hook_listr_   S   s   € Ø€IrU   c                ó¤   — g }| D ]H  }t        |t        «      sŒ|j                  }t        t	        |«      |z  «      sŒ8|j                  |«       ŒJ |S rW   )rX   r(   ÚtagsÚlenÚsetÚappend)ÚnodesÚ
match_tagsÚmatched_nodesÚnodeÚ	node_tagss        rS   Úget_hooks_by_tagsrj   W   sU   € ð €MØò 'ˆÜ˜$¤Ô)ØØ—I‘Iˆ	ÜŒs�9‹~ 
Ñ*Õ+Ø× Ñ  Õ&ð'ð ÐrU   c                ó�   — t        | «      }|j                  d|«       t        j                  |«       t        j                  |«      S )NÚindex)r8   Ú
setdefaultr   ÚvalidateÚ	from_dict)Úsourcerl   Ú	hook_dicts      rS   Úget_hookrr   e   s7   € Ü˜fÓ%€IØ×Ñ˜ %Ô(Ü‡M�M�)ÔÜ�>‰>˜)Ó$Ð$rU   c                óœ  — | j                  «       st        j                  dfS 	 |j                  | dd¬«      \  }}t        j                  }|j                  }||fS # t
        t        f$ r ‚ t        $ r)}t        j                  }|j                  }Y d }~||fS d }~wt        $ r(}t        j                  }t        |«      }Y d }~||fS d }~ww xY w)NÚOKF)Ú
auto_beginÚfetch)Ústripr   ÚSuccessÚexecuteÚ_messageÚKeyboardInterruptÚ
SystemExitr5   ÚErrorÚmsgÚ	ExceptionÚstr)ÚsqlÚadapterÚresponseÚ_ÚstatusÚmessageÚexcs          rS   Úget_execution_statusrˆ   l   sÅ   € Ø�9‰9Œ;Ü× Ñ  $Ð&Ð&ðØ—o‘o c°eÀ5�oÓI‰ˆ�!Ü×"Ñ"ˆØ×#Ñ#ˆð �GÐÐøô œzÐ*ò ØÜò Ü—‘ˆØ—'‘'Œð
 �GÐÐûô	 ò Ü—‘ˆÜ�c“(Œà�GÐÐûð	ús#   ¤3A ÁCÁ3BÂCÂ#CÃCc                óf   — | r.t        | j                  |j                  j                  «      «      S i S )zªEach adapter returns a dataclass with a flexible dictionary for
    adapter-specific fields. Only the non-'model_adapter_details' fields
    are guaranteed cross adapter.)r   Úget_adapter_run_inforh   Úconfig)r‚   Úrun_model_results     rS   Ú_get_adapter_infor�   €   s1   € ñ RYŒ6�'×.Ñ.Ð/?×/DÑ/D×/KÑ/KÓLÓMÐ`Ð^`Ð`rU   c           
     ó   — t         j                  €t        d«      ‚t        «       }|j                  }t        |d«      r|j                  rdnd}|j                  t        j                  k(  ra|j                  �|j                  j                  nd }|j                  j                  }|j                  rdnd}	|j                  j                   }
nd }d}d}	d }
t        j"                  i d|“d| “d|“d|j$                  “d	t'        |j(                  «      j+                  «       “d
|j(                  t,        j.                  k(  “d|j(                  t,        j0                  k(  “d|j3                  «       “d|
“dt5        j6                  |«      “dt5        j8                  |«      “d|j:                  D �cg c]  }|j=                  d¬«      ‘Œ c}“dt'        |j>                  «      “d|“d|“d|“d|	“dtA        ||«      i¥«       y c c}w )Nz*cannot track model run with no active userÚgroupTFÚinvocation_idrl   ÚtotalÚexecution_timeÚ
run_statusÚrun_skippedÚ	run_errorÚmodel_materializationÚmodel_incremental_strategyÚmodel_idÚhashed_contentsÚtiming©Ú	omit_noneÚlanguageÚ	has_groupÚcontract_enforcedÚaccessÚ	versionedÚadapter_info)!r   Úactive_userr4   rH   rh   Úhasattrr�   Úresource_typer:   ÚModelr    ÚvalueÚcontractÚenforcedÚversionr‹   Úincremental_strategyÚtrack_model_runr’   r€   r…   Úupperr   ÚSkippedr}   Úget_materializationr   Úget_hashÚget_hashed_contentsrš   Úto_dictr�   r�   )rl   Ú	num_nodesrŒ   r‚   r�   rh   rž   r    rŸ   r¡   r«   Úts               rS   r¬   r¬   ‡   s-  € Ü×ÑÐ#ÜÐKÓLÐLÜ%Ó'€MØ× Ñ €DÜ  gÔ.°4·:²:‘À5€IØ×ÑœXŸ^™^Ò+Ø&*§k¡kÐ&=�—‘×"Ò"À4ˆØ ŸM™M×2Ñ2ÐØ ŸLšL‘D¨eˆ	Ø#Ÿ{™{×?Ñ?ÑàˆØ!ÐØˆ	Ø#Ðä×Ñð	
Ø˜]ð	
à�Uð	
ð �Yð	
ð Ð.×=Ñ=ð		
ð
 œ#Ð.×5Ñ5Ó6×<Ñ<Ó>ð	
ð Ð+×2Ñ2´j×6HÑ6HÑHð	
ð Ð)×0Ñ0´J×4DÑ4DÑDð	
ð $ T×%=Ñ%=Ó%?ð	
ð )Ð*>ð	
ð œŸ™ tÓ,ð	
ð œu×8Ñ8¸Ó>ð	
ð Ð:J×:QÑ:QÖR°Q�q—y‘y¨4�yÕ0ÒRð	
ð œ˜DŸM™MÓ*ð	
ð ˜ð	
ð  Ð!2ð	
ð  �fð!	
ð" ˜ð#	
ð$ Ô-¨gÐ7GÓHñ%	
õùò Ss   Æ)G;c                óŽ  — 	 | d   }t	        |t        «      sdj                  |«      }t        ||¬«      d ‚g }|D ]S  }t	        |t
        «      sdj                  |«      }t        ||¬«      ‚t	        |t
        «      sJ ‚|j                  |«       ŒU |S # t         $ r) dj                  t        | «      «      }t        ||¬«      d ‚w xY w)NÚ	relationszNInvalid return value from materialization, "relations" not found, got keys: {}©rh   zJInvalid return value from materialization, "relations" not a list, got: {}zPInvalid return value from materialization, "relations" contains non-Relation: {})ÚKeyErrorÚformatÚlistr3   rX   r   rd   )ÚinpÚmodelÚrelations_valuer~   r¶   Úrelations         rS   Ú(_validate_materialization_relations_dictr¿   ±   sã   € ð:Ø˜kÑ*ˆô �o¤tÔ,ð"ß"(¡&¨Ó"9ð 	ô ˜s¨Ô/°TÐ9à$&€IØ#ò 	#ˆÜ˜(¤LÔ1ð8ß8>¹¸xÓ8Hð ô # 3¨UÔ3Ð3ä˜(¤LÔ1Ð1Ð1Ø×Ñ˜Õ"ð	#ð Ðøô3 ò :ð&ß&,¡f¬T°#«YÓ&7ð 	ô ˜s¨Ô/°TÐ9ð:ús   ‚B Â2Cc                  ón   — e Zd Zd„ Zdd„Zd„ Zd„ Zdd„Zdd„Zddd„Z	dd„Z
	 	 	 	 	 	 	 	 	 	 	 	 dd	„Zd
„ Zy)ÚModelRunnerc                ó.  — ddddœ}| j                   j                  j                  | j                  | j                  |¬«      }| j                  j
                  | j                  j                  j
                  k(  r|j                  d¬«      }t        |«      S )NF)ÚdatabaseÚschemaÚ
identifier)Úquote_policy)rÃ   )	r‚   ÚRelationÚcreate_fromr‹   rh   rÃ   ÚcredentialsÚincluder€   )rQ   Údisplay_quote_policyr¾   s      rS   Úget_node_representationz#ModelRunner.get_node_representationÑ   s€   € Ø,1¸UÐRWÑXÐØ—<‘<×(Ñ(×4Ñ4Ø�K‰K˜Ÿ™Ð1Eð 5ó 
ˆð �9‰9×Ñ §¡×!8Ñ!8×!AÑ!AÒAØ×'Ñ'°Ð'Ó7ˆHÜ�8‹}ÐrU   c                óŠ   — | j                   j                  › d| j                   j                  «       › d| j                  «       › �S )Nú z model )rh   r�   r¯   rÌ   ©rQ   s    rS   Údescribe_nodezModelRunner.describe_nodeÛ   s<   € à—)‘)×$Ñ$Ð% Q t§y¡y×'DÑ'DÓ'FÐ&GÀwÈt×OkÑOkÓOmÐNnÐoÐorU   c                ó    — t        t        | j                  «       | j                  | j                  | j
                  j                  ¬«      «       y )N)Údescriptionrl   r‘   Ú	node_info)rG   r1   rÐ   Ú
node_indexr³   rh   rÓ   rÏ   s    rS   Úprint_start_linezModelRunner.print_start_lineß   s9   € ÜÜØ ×.Ñ.Ó0Ø—o‘oØ—n‘nØŸ)™)×-Ñ-ô	õ	
rU   c                óÀ  — | j                  «       }t        j                  | j                  j                  «      }|j
                  t        j                  k(  r|j
                  }t        j                  }n|j                  }t        j                  }t        t        ||| j                  | j                  |j                   | j                  j"                  |¬«      |¬«       y )N)rÒ   r…   rl   r‘   r’   rÓ   r�   ©Úlevel)rÐ   r<   Úgetrh   Ú	unique_idr…   r   r}   rE   ÚERRORr†   ÚINFOrG   r/   rÔ   r³   r’   rÓ   )rQ   ÚresultrÒ   r�   r…   rØ   s         rS   Úprint_result_linezModelRunner.print_result_lineé   s¤   € Ø×(Ñ(Ó*ˆÜ× Ñ  §¡×!4Ñ!4Ó5ˆØ�=‰=œJ×,Ñ,Ò,Ø—]‘]ˆFÜ×$Ñ$‰Eà—^‘^ˆFÜ—O‘OˆEÜÜØ'ØØ—o‘oØ—n‘nØ%×4Ñ4ØŸ)™)×-Ñ-Øôð ö	
rU   c                ó$   — | j                  «        y rW   )rÕ   rÏ   s    rS   Úbefore_executezModelRunner.before_executeÿ   s   € Ø×ÑÕrU   c                ó€   — t        | j                  | j                  || j                  ¬«       | j	                  |«       y )N)r‚   )r¬   rÔ   r³   r‚   rÞ   ©rQ   rÝ   s     rS   Úafter_executezModelRunner.after_execute  s*   € Ü˜Ÿ™¨¯©¸ÈÏÉÕVØ×Ñ˜vÕ&rU   c                ób  —  |d   d«      }|st        d«      ‚i }t        |j                  t        «      r|j                  j	                  d¬«      }t        |t        j                  g t        j                  «       j                  |t        |j                  «      ||j                  d«      d ¬«	      S )NÚload_resultÚmainz-main is not being called during running modelTr›   Úfailures©	rh   r…   rš   Ú	thread_idr’   r†   Úadapter_responserç   Úbatch_results)r5   rX   rƒ   rD   r²   r!   r   rx   Ú	threadingÚcurrent_threadÚnamer€   rÙ   )rQ   r¼   ÚcontextÚelapsed_timerÝ   rê   s         rS   Ú_build_run_model_resultz#ModelRunner._build_run_model_result  s�   € Ø'�˜Ñ'¨Ó/ˆÙÜ!Ð"QÓRÐRØÐÜ�f—o‘o¤}Ô5Ø%Ÿ™×6Ñ6ÀÐ6ÓFÐÜØÜ×$Ñ$ØÜ×.Ñ.Ó0×5Ñ5Ø'Ü˜Ÿ™Ó(Ø-Ø—Z‘Z 
Ó+Øô

ð 
	
rU   c                ó  — t        |t        «      r5dj                  t        |j                  «       «      «      }t	        ||¬«      ‚t        |t
        «      rt        ||«      S dj                  t        |«      «      }t	        ||¬«      ‚)Nz]The materialization ("{}") did not explicitly return a list of relations to add to the cache.r·   zXInvalid return value from materialization, expected a dict with key "relations", got: {})rX   r€   r¹   r¯   r3   Údictr¿   )rQ   rÝ   r¼   r~   s       rS   Ú_materialization_relationsz&ModelRunner._materialization_relations  s{   € Ü�fœcÔ"ð9ß9?¹ÄÀE×D]ÑD]ÓD_Ó@`Ó9að ô # 3¨UÔ3Ð3ä�fœdÔ#Ü;¸FÀEÓJÐJð,ß,2©F´3°v³;Ó,?ð 	ô ˜s¨Ô/Ð/rU   c                óR  — 	  t        |||d   ¬«      «       }| j                  j                  ||«       | j                  ||«      D ]-  }| j                  j	                  |j                  d¬«      «       Œ/ | j                  ||«      S # | j                  j                  ||«       w xY w)NÚcontext_macro_stack©ÚstackT©Údbt_created)r#   r‚   Úpost_model_hookrô   Úcache_addedÚincorporaterñ   )rQ   Úhook_ctxÚcontext_configr¼   rï   Úmaterialization_macrorÝ   r¾   s           rS   Ú_execute_modelzModelRunner._execute_model*  s©   € ð	Cð”^Ø% w°gÐ>SÑ6Tôó ˆFð �L‰L×(Ñ(¨¸ÔBà×7Ñ7¸ÀÓFò 	MˆHØ�L‰L×$Ñ$ X×%9Ñ%9ÀdÐ%9Ó%KÕLð	Mð ×+Ñ+¨E°7Ó;Ð;øð �L‰L×(Ñ(¨¸ÕBús   ‚B ÂB&c           	     óÊ  — t        || j                  |«      }|j                  | j                  j                  |j	                  «       | j
                  j                  «       «      }|€3t        |j	                  «       | j
                  j                  «       ¬«      ‚d|vrt        dj                  |«      «      ‚|d   }t        |d«      }|j                  |j                  v }|rM|sK|j                  D �cg c]  }t        |«      ‘Œ }	}t        d|j                  › d|	› d|j                  › d�«      ‚| j
                  j!                  |«      }
| j#                  |
||||«      S c c}w )	N)ÚmaterializationÚadapter_typer‹   z=Invalid materialization context generated, missing config: {}Úsupported_languageszMaterialization "z" only supports languages z; got "ú")r%   r‹   Ú"find_materialization_macro_by_nameÚproject_namer¯   r‚   Útyper   r4   r¹   r¤   r�   r  r€   rJ   rî   Úpre_model_hookr  )rQ   r¼   Úmanifestrï   r   rÿ   Úmat_has_supported_langsÚmodel_lang_supportedÚlangÚ	str_langsrþ   s              rS   ry   zModelRunner.execute>  sh  € Ü0°¸¿¹ÀXÓNˆà (× KÑ KØ�K‰K×$Ñ$ e×&?Ñ&?Ó&AÀ4Ç<Á<×CTÑCTÓCVó!
Ðð !Ð(Ü-Ø %× 9Ñ 9Ó ;È$Ï,É,×J[ÑJ[ÓJ]ôð ð ˜7Ñ"Ü"ØO×VÑVÐW^Ó_óð ð ! Ñ*ˆä")Ð*?ÐAVÓ"WÐØ$Ÿ~™~Ð1F×1ZÑ1ZÐZÐÙ"Ñ+?Ø/D×/XÑ/XÖY tœ˜T�ÐYˆIÐYÜ$Ø#Ð$9×$>Ñ$>Ð#?Ð?YÐZcÐYdð eØŸ™Ð' qð*óð ð
 —<‘<×.Ñ.¨~Ó>ˆà×"Ñ" 8¨^¸UÀGÐMbÓcÐcùò Zs   Ã3E N©Úreturnr€   ©r  ÚNone©ç        )rð   Úfloat)rÝ   r	   r  úList[BaseRelation]©rþ   r	   rÿ   r	   r¼   r)   rï   úDict[str, Any]r   rC   r  r!   )r[   r\   r]   rÌ   rÐ   rÕ   rÞ   rà   rã   rñ   rô   r  ry   rO   rU   rS   rÁ   rÁ   Ð   sp   „ òópò
ò
ó, ó'ô
ó&0ð"<àð<ð ð<ð ð	<ð
  ð<ð  -ð<ð 
ó<ó(drU   rÁ   c                  óà   ‡ — e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 	 dˆ fd„Zdd„Zdd„Zdd„Zdd„Zd„ Z	d„ Z
dd	„Z	 d	 	 	 	 	 	 	 	 	 dd
„Z	 d	 	 	 	 	 	 	 dd„Z	 	 	 	 	 	 	 	 dd„Z	 	 	 	 	 	 	 	 	 	 	 	 dd„Zˆ xZS )ÚMicrobatchBatchRunnerz)Handles the running of individual batchesc
                ód   •— t         ‰
| �  |||||«       || _        || _        || _        |	| _        y rW   )ÚsuperÚ__init__Ú	batch_idxÚbatchesÚrelation_existsÚincremental_batch)rQ   r‹   r‚   rh   rÔ   r³   r  r   r!  r"  rY   s             €rS   r  zMicrobatchBatchRunner.__init__a  s8   ø€ ô 	‰Ñ˜ ¨$°
¸IÔFà"ˆŒØˆŒØ.ˆÔØ!2ˆÕrU   c                óÎ   — | j                   | j                     d   }t        j                  || j                  j
                  j                  «      }d|› d| j                  «       › �S )Nr   zbatch z of )r   r  r9   Úformat_batch_startrh   r‹   Ú
batch_sizerÌ   )rQ   Úbatch_startÚformatted_batch_starts      rS   Údescribe_batchz$MicrobatchBatchRunner.describe_batcht  s`   € Ø—l‘l 4§>¡>Ñ2°1Ñ5ˆÜ 1× DÑ DØ˜Ÿ™×)Ñ)×4Ñ4ó!
Ðð Ð-Ð.¨d°4×3OÑ3OÓ3QÐ2RÐSÐSrU   c                óD  — |j                   t        j                  k(  r|j                   }t        j                  }nV|j                   t        j
                  k(  r|j                   }t        j                  }n|j                  }t        j                  }t        t        | j                  «       || j                  dz   t        | j                  «      |j                  | j                  j                   t#        j$                  | j                  j&                  «      ¬«      |¬«       y )Né   )rÒ   r…   Úbatch_indexÚtotal_batchesr’   rÓ   r�   r×   )r…   r   r}   rE   rÛ   r®   rÜ   r†   rG   r,   r(  r  rb   r   r’   rh   rÓ   r<   rÙ   rÚ   )rQ   rÝ   r…   rØ   s       rS   rÞ   z'MicrobatchBatchRunner.print_result_line{  sÈ   € Ø�=‰=œJ×,Ñ,Ò,Ø—]‘]ˆFÜ×$Ñ$‰EØ�]‰]œj×0Ñ0Ò0Ø—]‘]ˆFÜ—O‘O‰Eà—^‘^ˆFÜ—O‘OˆEäÜØ ×/Ñ/Ó1ØØ ŸN™N¨QÑ.Ü! $§,¡,Ó/Ø%×4Ñ4ØŸ)™)×-Ñ-Ü"×&Ñ& t§y¡y×':Ñ':Ó;ôð ö	
rU   c           	     ó¸   — t        t        | j                  «       | j                  dz   t	        | j
                  «      | j                  j                  ¬«      «       y )Nr*  )rÒ   r+  r,  rÓ   )rG   r0   r(  r  rb   r   rh   rÓ   rÏ   s    rS   rÕ   z&MicrobatchBatchRunner.print_start_line“  sC   € ÜÜØ ×/Ñ/Ó1Ø ŸN™N¨QÑ.Ü! $§,¡,Ó/ØŸ)™)×-Ñ-ô	õ	
rU   c                ó2  — | j                   j                  t        j                  «      sd}|S | j                  sd}|S | j
                  j                  j                  �"| j
                  j                  j                  }|S | j
                  j                   }|S ©NF)	r‚   Úsupportsr   ÚMicrobatchConcurrencyr!  rh   r‹   Úconcurrent_batchesÚhas_this)rQ   Úrun_in_parallels     rS   Úshould_run_in_parallelz,MicrobatchBatchRunner.should_run_in_parallel�  sŽ   € Ø�|‰|×$Ñ$¤Z×%EÑ%EÔFØ#ˆOð Ðð ×%Ò%à#ˆOð Ðð �Y‰Y×Ñ×0Ñ0Ð<à"Ÿi™i×.Ñ.×AÑAˆOð Ðð #'§)¡)×"4Ñ"4Ð4ˆOàÐrU   c                óþ   — t        | j                  t        j                  g t	        j
                  «       j                  ddi dt        | j                  | j                     g¬«      ¬«	      }| j                  |¬«       |S )Nr  ÚSKIPPEDr*  ©Úfailedrè   )rÝ   )r!   rh   r   r®   rì   rí   rî   r   r   r  rÞ   râ   s     rS   Úon_skipzMicrobatchBatchRunner.on_skip­  sm   € ÜØ—‘Ü×$Ñ$ØÜ×.Ñ.Ó0×5Ñ5ØØØØÜ&¨t¯|©|¸D¿N¹NÑ/KÐ.LÔMô

ˆð 	×Ñ fÐÔ-ØˆrU   c                ó�   — | j                  ||t        j                  ||t        | j                  | j
                     g¬«      ¬«      S )zwNecessary to return a result with a batch result

        Called by `BaseRunner.safe_run` when an error occurs
        r8  )rh   Ú
start_timer…   Útiming_infor†   rë   )Ú_build_run_resultr   r}   r   r   r  )rQ   rh   r†   r<  r=  s        rS   Úerror_resultz"MicrobatchBatchRunner.error_result¼  sG   € ð
 ×%Ñ%ØØ!Ü—?‘?Ø#ØÜ&¨t¯|©|¸D¿N¹NÑ/KÐ.LÔMð &ó 
ð 	
rU   c           	     ó(  — | j                   | j                     }|d   | j                  j                  d<   |d   | j                  j                  d<   t	        t        j                  |d   | j                  j                  j                  «      |d   |d   ¬«      | j                  _        | j                  j                  | j                  |i t        j                  |d   | j                  j                  j                  «      ¬«       | j                  S )Nr   Ú*__dbt_internal_microbatch_event_time_startr*  Ú(__dbt_internal_microbatch_event_time_end)ÚidÚevent_time_startÚevent_time_end)Úsplit_suffix)r   r  rh   r‹   r'   r9   Úbatch_idr%  ÚbatchÚcompilerÚcompile_noder$  )rQ   r  rH  s      rS   ÚcompilezMicrobatchBatchRunner.compileÊ  så   € Ø—‘˜TŸ^™^Ñ,ˆð JOÈqÉˆ�	‰	×ÑÐEÑFØGLÈQÁxˆ�	‰	×ÑÐCÑDä&Ü ×)Ñ)¨%°©(°D·I±I×4DÑ4D×4OÑ4OÓPØ" 1™XØ  ™8ô
ˆ�	‰	Œð 	�‰×"Ñ"Ø�I‰IØØÜ*×=Ñ=Ø�a‘˜$Ÿ)™)×*Ñ*×5Ñ5óð	 	#ô 	
ð �y‰yÐrU   c                óP   — | j                  |||«      }t        |g¬«      |_        |S )N)Ú
successful)rñ   r   rë   )rQ   r¼   rï   rH  rð   Ú
run_results         rS   Ú!_build_succesful_run_batch_resultz7MicrobatchBatchRunner._build_succesful_run_batch_resultã  s-   € ð ×1Ñ1°%¸À,ÓOˆ
Ü#/¸E¸7Ô#Cˆ
Ô ØÐrU   c                ó”   — t        |t        j                  g t        j                  «       j
                  |di dt        |g¬«      ¬«	      S )NrÛ   r*  r8  rè   )r!   r   r}   rì   rí   rî   r   )rQ   r¼   rH  rð   s       rS   Ú_build_failed_run_batch_resultz4MicrobatchBatchRunner._build_failed_run_batch_resultî  sF   € ô ØÜ—?‘?ØÜ×.Ñ.Ó0×5Ñ5Ø'ØØØÜ&¨u¨gÔ6ô

ð 
	
rU   c           
     ó  — | j                   | j                     }t        j                  «       }	 t	        j
                  || j                  ¬«      }|j                  |«        t        |||d   ¬«      «       }| j                  ||«      D ]-  }| j                  j                  |j                  d¬«      «       Œ/ | j                  |||t        j                  «       |z
  «      }	|	}
d| _        |	}
|
S # t        t         f$ r ‚ t"        $ r€}t%        t'        | j(                  j*                  dt-        |«      › �| j(                  j.                  ¬«      «       | j1                  ||t        j                  «       |z
  «      }	Y d }~|	}
|
S d }~ww xY w)N)r¼   r"  rö   r÷   Trù   zException on worker thread. )rÚ   r‡   rÓ   )r   r  ÚtimeÚperf_counterr9   Úbuild_jinja_context_for_batchr"  Úupdater#   rô   r‚   rü   rý   rO  r!  r{   r|   r   rG   r+   rh   rÚ   r€   rÓ   rQ  )rQ   r¼   rï   r   rH  r<  Újinja_contextrÝ   r¾   Úbatch_run_resultÚbatch_resultÚes               rS   Ú#_execute_microbatch_materializationz9MicrobatchBatchRunner._execute_microbatch_materialization   sŠ  € ð —‘˜TŸ^™^Ñ,ˆä×&Ñ&Ó(ˆ
ð&	ä-×KÑKØØ"&×"8Ñ"8ôˆMð �N‰N˜=Ô)ð”^Ø% w°gÐ>SÑ6Tôó ˆFð !×;Ñ;¸FÀEÓJò Q�Ø—‘×(Ñ(¨×)=Ñ)=È$Ð)=Ó)OÕPðQð  $×EÑEØ�w ¤t×'8Ñ'8Ó':¸ZÑ'Gó Ðð ,ˆLð $(ˆDÔ ð" (ˆàÐøô# "¤:Ð.ò 	àÜò 
	ÜÜ%Ø"Ÿi™i×1Ñ1Ø6´s¸1³v°hÐ?Ø"Ÿi™i×1Ñ1ôôð  $×BÑBØ�uœd×/Ñ/Ó1°JÑ>ó Ôð (ˆàÐûð
	ús   ¯B<C/ Ã/FÄA3FÆFc                ó¨   — 	 | j                  |||«      }| j                  j                  ||«       |S # | j                  j                  ||«       w xY wrW   )r[  r‚   rû   )rQ   rþ   rÿ   r¼   rï   r   rY  s          rS   r  z$MicrobatchBatchRunner._execute_model6  sT   € ð	CØ×CÑCØ�wÐ 5óˆLð �L‰L×(Ñ(¨¸ÔBàÐøð �L‰L×(Ñ(¨¸ÕBús	   ‚3 ³A)rÔ   Úintr³   r]  r  r]  r   úDict[int, BatchType]r!  Úboolr"  r_  r  )rÝ   r!   r  ©r  r_  ©r  r&   r  )
r¼   r)   rï   r  rH  r   rð   r  r  r!   )r¼   r)   rH  r   rð   r  r  r!   )r¼   r)   rï   r  r   rC   r  r!   r  )r[   r\   r]   Ú__doc__r  r(  rÞ   rÕ   r5  r:  r?  rK  rO  rQ  r[  r  Ú__classcell__©rY   s   @rS   r  r  ^  s@  ø„ Ù3ð3ð
 ð3ð ð3ð ð3ð &ð3ð ð3ð  õ3ó&Tó
ó0
óò ò
óð< "ð	àð	ð  ð	ð ð		ð
 ð	ð 
ó	ð "ð	
àð
ð ð
ð ð	
ð
 
ó
ð$4àð4ð  ð4ð  -ð	4ð
 
ó4ðlàðð ðð ð	ð
  ðð  -ðð 
÷rU   r  c                  ó´   ‡ — e Zd ZdZdˆ fd„Zdd„Zdd„Zedd„«       Zedd„«       Z	dd„Z
dd„Zdd	„Zdd
„Zdd„Z	 	 	 	 	 	 dd„Zdd„Zdd„Zdd„Zdd„Zˆ xZS ) ÚMicrobatchModelRunnerzHHandles the orchestration of batches to run for a given microbatch modelc                óH   •— t         ‰| �  |||||«       d | _        d | _        y rW   )r  r  Ú_parent_taskÚ_pool)rQ   r‹   r‚   rh   rÔ   r³   rY   s         €rS   r  zMicrobatchModelRunner.__init__K  s)   ø€ Ü‰Ñ˜ ¨$°
¸IÔFð 04ˆÔà.2ˆ�
rU   c                ó   — || _         y rW   )rh  )rQ   Úparent_tasks     rS   Úset_parent_taskz%MicrobatchModelRunner.set_parent_taskS  s
   € Ø'ˆÕrU   c                ó   — || _         y rW   )ri  )rQ   Úpools     rS   Úset_poolzMicrobatchModelRunner.set_poolV  s	   € Øˆ�
rU   c                óJ   — | j                   €t        d¬«      ‚| j                   S )NzJTried to access `parent_task` of `MicrobatchModelRunner` before it was set©r~   )rh  r4   rÏ   s    rS   rk  z!MicrobatchModelRunner.parent_taskY  s,   € à×ÑÐ$Ü"Ø`ôð ð × Ñ Ð rU   c                óJ   — | j                   €t        d¬«      ‚| j                   S )NzCTried to access `pool` of `MicrobatchModelRunner` before it was setrq  )ri  r4   rÏ   s    rS   rn  zMicrobatchModelRunner.poolb  s(   € à�:‰:ÐÜ"ØYôð ð �z‰zÐrU   c                óà   — | j                   j                  j                  | j                  |«      }| j                   j	                  |j
                  |j                  |j                  «      }|duS )zECheck whether the relation for the model exists in the data warehouseN)r‚   rÇ   rÈ   r‹   Úget_relationrÃ   rÄ   rî   ©rQ   r¼   Úrelation_infor¾   s       rS   Ú_has_relationz#MicrobatchModelRunner._has_relationk  s\   € àŸ™×-Ñ-×9Ñ9¸$¿+¹+ÀuÓMˆØ—<‘<×,Ñ,Ø×"Ñ" M×$8Ñ$8¸-×:LÑ:Ló
ˆð ˜tÐ#Ð#rU   c                óÌ  — | j                   j                  j                  | j                  |«      }| j                   j	                  |j
                  |j                  |j                  «      }|�w|j                  dk(  rh|j                  j                  dk(  rO|j                  j                  �|j                  j                   S t        | j                  j                  dd«       S y)zJCheck whether the model should be run `incrementally` or as `full refresh`ÚtableÚincrementalÚFULL_REFRESHF)r‚   rÇ   rÈ   r‹   rt  rÃ   rÄ   rî   r	  ÚmaterializedÚfull_refreshÚgetattrÚargsru  s       rS   Ú_is_incrementalz%MicrobatchModelRunner._is_incrementals  s¹   € ð Ÿ™×-Ñ-×9Ñ9¸$¿+¹+ÀuÓMˆØ—<‘<×,Ñ,Ø×"Ñ" M×$8Ñ$8¸-×:LÑ:Ló
ˆð Ð Ø—‘ Ò(Ø—‘×)Ñ)¨]Ò:à�|‰|×(Ñ(Ð4Ø Ÿ<™<×4Ñ4Ð4Ð4ä" 4§;¡;×#3Ñ#3°^ÀUÓKÐKÐKàrU   c                óŽ   — t        |t        j                  g t        j                  «       j
                  ddi dt        «       ¬«	      S )Nr   Ú rè   )r!   r   rx   rì   rí   rî   r   )rQ   r¼   s     rS   Ú$_initial_run_microbatch_model_resultz:MicrobatchModelRunner._initial_run_microbatch_model_result‡  sC   € ÜØÜ×$Ñ$ØÜ×.Ñ.Ó0×5Ñ5ð ØØØÜ&›.ô
ð 	
rU   c                óT   — | j                   j                  › d| j                  «       › �S )Nz microbatch model )rh   r�   rÌ   rÏ   s    rS   rÐ   z#MicrobatchModelRunner.describe_node–  s)   € Ø—)‘)×$Ñ$Ð%Ð%7¸×8TÑ8TÓ8VÐ7WÐXÐXrU   c                ól  — |j                   €t        «       |_         |D ]L  }|j                   �|xj                   |j                   z  c_         |xj                  |j                  z  c_        ŒN t        |j                   j                  «      }t        |j                   j
                  «      }|dk(  rt        j                  }d}n4|dk(  rt        j                  }d}nt        j                  }d|› d||z   › d�}||_
        ||_        t        |j                   j                  «      |j                   _        t        |j                   j
                  «      |j                   _        | j                  j                  �>|j                   xj                  | j                  j                  j                  z  c_        yy)zmerge batch_results into resultNr   ÚSUCCESSrÛ   zPARTIAL SUCCESS (ú/ú))rë   r   r’   rb   rM  r9  r   rx   r}   ÚPartialSuccessr…   r†   Úsortedrh   Úprevious_batch_results)rQ   rÝ   rë   rY  Únum_successesÚnum_failuresr…   r~   s           rS   Úmerge_batch_resultsz)MicrobatchModelRunner.merge_batch_results™  so  € à×ÑÐ'Ü#/£>ˆFÔ à)ò 	AˆLØ×)Ñ)Ð5Ø×$Ò$¨×(BÑ(BÑBÕ$Ø×!Ò! \×%@Ñ%@Ñ@Ö!ð	Aô
 ˜F×0Ñ0×;Ñ;Ó<ˆÜ˜6×/Ñ/×6Ñ6Ó7ˆØ˜1ÒÜ×&Ñ&ˆFØ‰CØ˜aÒÜ—_‘_ˆFØ‰Cä×-Ñ-ˆFØ% m _°A°mÀlÑ6RÐ5SÐSTÐUˆCØˆŒØˆŒä*0°×1EÑ1E×1PÑ1PÓ*Qˆ×ÑÔ'Ü&,¨V×-AÑ-A×-HÑ-HÓ&Iˆ×ÑÔ#ð �9‰9×+Ñ+Ð7Ø× Ñ ×+Ò+¨t¯y©y×/OÑ/O×/ZÑ/ZÑZÖ+ð 8rU   c                óú  — t        «       }|j                  r]|j                  t        |j                  j                  «      «      }|j                  t        |j                  j                  «      «      }nt        «       |_        |j                  «       D ��ch c]  \  }}|’Œ	 }}}|j                  |«      }|j                  j                  j                  t        |«      «       | j                  |g «       yc c}}w )z„This method is really only to be used when the execution of a microbatch model is halted before all batches have had a chance to runN)rc   rë   ÚunionrM  r9  r   ÚitemsÚ
differenceÚextendrº   rŽ  )rQ   rÝ   r   Úbatches_finishedr„   rH  Úbatches_expectedÚskipped_batchess           rS   Ú&_update_result_with_unfinished_batchesz<MicrobatchModelRunner._update_result_with_unfinished_batches¸  sÍ   € ô ,/«5Ðà×Òà/×5Ñ5´c¸&×:NÑ:N×:YÑ:YÓ6ZÓ[ÐØ/×5Ñ5´c¸&×:NÑ:N×:UÑ:UÓ6VÓWÑô $0£>ˆFÔ ð 3:·-±-³/×B¡h a¨šEÐBÐÑBØ*×5Ñ5Ð6FÓGˆà×Ñ×#Ñ#×*Ñ*¬4°Ó+@ÔAð 	× Ñ  ¨Õ,ùó Cs   ÂC7c                ó¾  — t        | j                  j                  dd «      }t        | j                  j                  dd «      }t        | j                  j                  dd «      �T| j                  j                  j                  j                  }| j                  j                  j                  j
                  }t        || j                  |«      ||t        «       ¬«      S )NÚEVENT_TIME_STARTÚEVENT_TIME_ENDÚSAMPLE)r¼   Úis_incrementalrD  rE  Údefault_end_time)	r~  r‹   r  ÚsampleÚstartÚendr9   r€  rK   )rQ   r¼   rD  rE  s       rS   Úget_microbatch_builderz,MicrobatchModelRunner.get_microbatch_builderÐ  s±   € ä" 4§;¡;×#3Ñ#3Ð5GÈÓNÐÜ  §¡×!1Ñ!1Ð3CÀTÓJˆô �4—;‘;×#Ñ# X¨tÓ4Ð@Ø#Ÿ{™{×/Ñ/×6Ñ6×<Ñ<ÐØ!Ÿ[™[×-Ñ-×4Ñ4×8Ñ8ˆNä ØØ×/Ñ/°Ó6Ø-Ø)Ü6Ó8ô
ð 	
rU   c                ó&  — |j                   €E| j                  |«      }|j                  «       }|j                  |«      }|j	                  ||«      }n|j                   j
                  }t        t        |«      «      D �ci c]  }|||   “Œ
 c}S c c}w )z0Get the batches that should be run for the model)r‹  r¡  Úbuild_end_timeÚbuild_start_timeÚbuild_batchesr9  Úrangerb   )rQ   r¼   Úmicrobatch_builderr   rŸ  r   r  s          rS   Úget_batchesz!MicrobatchModelRunner.get_batchesâ  s‰   € ð ×'Ñ'Ð/Ø!%×!<Ñ!<¸UÓ!CÐØ$×3Ñ3Ó5ˆCØ&×7Ñ7¸Ó<ˆEØ(×6Ñ6°u¸cÓB‰Gà×2Ñ2×9Ñ9ˆGä?DÄSÈÃ\Ó?RÖS°)�	˜7 9Ñ-Ñ-ÒSÐSùÒSs   Á>Bc                ó   — | j                   S )zKDon't do anything here because this runner doesn't need to compile anythingr·   )rQ   r  s     rS   rK  zMicrobatchModelRunner.compileò  s   € à�y‰yÐrU   c                óÜ  — | j                  |¬«      }| j                  |¬«      }| j                  |¬«      }t        |«      dk(  r|S g }d}| j                  j                  || j                  ||||| j                  d| j                  |¬«      ¬«	      }|dz  }|d   j                  t        j                  k7  }|t        |«      dz
  k  rN| j                  j                  || j                  ||||| j                  |¬«      }|dz  }|t        |«      dz
  k  rŒNt        |«      |k7  ro| j                  j                  «       r1t        |«      }	| j                  ||	«       | j                  ||«       |S t!        j"                  d«       t        |«      |k7  rŒot        |«      dk7  r8| j                  j                  || j                  ||||| j                  d|¬«	       | j                  ||«       |S )	N)r¼   r   T)	rh   r‚   r!  r   r  rë   rn  Úforce_sequential_runr"  r*  )rh   r‚   r!  r   r  rë   rn  Úskipçš™™™™™¹?)	rh   r‚   r!  r   r  rë   rn  r«  r¬  )r¨  rw  rƒ  rb   rk  Ú_submit_batchr‚   rn  r€  r…   r   rx   Ú	is_closedr   rŽ  r—  rS  Úsleep)
rQ   r¼   r  r   r!  rÝ   rë   r  Úskip_batchesÚfrozen_batch_resultss
             rS   ry   zMicrobatchModelRunner.executeö  s  € ð ×"Ñ"¨Ð"Ó/ˆØ×,Ñ,°5Ð,Ó9ˆØ×:Ñ:ÀÐ:ÓGˆô ˆw‹<˜1ÒØˆMà)+ˆØˆ	ð ×*Ñ*×8Ñ8ØØ—L‘LØ+ØØØ'Ø—‘Ø!%Ø"×2Ñ2¸Ð2Ó?ð 9ó 

ˆð 	�Q‰ˆ	Ø$ QÑ'×.Ñ.´)×2CÑ2CÑCˆð œ#˜g›,¨Ñ*Ò*Ø"×.Ñ.×<Ñ<ØØŸ™Ø /ØØ#Ø+Ø—Y‘YØ!ð =ó 	ˆOð ˜‰NˆIð œ#˜g›,¨Ñ*Ó*ô �-Ó  IÒ-ð �y‰y×"Ñ"Ô$ô (0°Ó'>Ð$Ø×(Ñ(¨Ð1EÔFØ×;Ñ;¸FÀGÔLØ�ô �J‰J�sŒOô �-Ó  IÓ-ô" ˆw‹<˜1Òà×Ñ×*Ñ*ØØŸ™Ø /ØØ#Ø+Ø—Y‘YØ%)Ø!ð +ô 
ð 	× Ñ  ¨Ô7àˆrU   )rÔ   r]  r³   r]  )rk  ÚRunTaskr  r  )rn  r7   r  r  )r  r³  )r  r7   )r¼   r)   r  r_  r`  )r¼   r)   r  r!   r  )rÝ   r!   rë   úList[RunResult])rÝ   r!   r   r^  r  r  )r¼   r)   r  r9   )r¼   r)   r  r^  ra  )r¼   r)   r  r&   r  r!   )r[   r\   r]   rb  r  rl  ro  Úpropertyrk  rn  rw  r€  rƒ  rÐ   rŽ  r—  r¡  r¨  rK  ry   rc  rd  s   @rS   rf  rf  H  s‹   ø„ ÙRõ3ó(óð ò!ó ð!ð òó ðó$óó(
óYó[ð>-Øð-Ø*>ð-à	ó-ó0
ó$Tó ÷NrU   rf  c                  óì   ‡ — e Zd Z	 d	 	 	 	 	 	 	 	 	 dˆ fd„Zdd„Zdd„Zdd„Zdd„Z	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Zdd„Z	dd„Z
	 	 	 	 	 	 	 	 dd	„Zdd
„Zdd„Zdd„Zdd„Zdd„Zd d„Zdd„Zˆ xZS )!r³  c                ó6   •— t         ‰| �  |||«       || _        y rW   )r  r  Ú	batch_map)rQ   r  r‹   r  r¸  rY   s        €rS   r  zRunTask.__init__H  s   ø€ ô 	‰Ñ˜˜v xÔ0Ø"ˆ�rU   c                 ó   — yr/  rO   rÏ   s    rS   Úraise_on_first_errorzRunTask.raise_on_first_errorR  s   € ØrU   c                óð   — | j                   €t        d«      ‚| j                  j                  || j                   |«      }|j                  }|j
                  xs |}t        ||¬«      }	|	j                  xs dS )Nz.compile_node called before manifest was loaded)rl   r‚  )r  r4   rI  rJ  Úcompiled_coderl   rr   r�   )
rQ   r‚   ÚhookÚidxÚ	num_hooksÚextra_contextÚcompiledÚ	statementÚ
hook_indexÚhook_objs
             rS   Úget_hook_sqlzRunTask.get_hook_sqlU  sh   € Ø�=‰=Ð Ü"Ð#SÓTÐTà—=‘=×-Ñ-¨d°D·M±MÀ=ÓQˆØ×*Ñ*ˆ	Ø—Z‘ZÒ, 9ˆ
Ü˜I¨ZÔ8ˆØ�|‰|Ò!˜rÐ!rU   c                ó  — | j                   €J ‚| j                   j                  «       }| j                  «        | j                  |«      }|j                  j
                  | j                  v rA| j                  j                  |j                  j
                  «      }|j                  |¬«       t        |t        «      r"|j                  | «       |j                  |«       |g}| j                  ||«       | j                  |||«       y )N)Úcause)Ú	job_queuerÙ   Ú_raise_set_errorÚ
get_runnerrh   rÚ   Ú_skipped_childrenÚpopÚdo_skiprX   rf  rl  ro  Ú_maybe_wait_for_microbatchÚ_submit)rQ   rn  Úcallbackrh   ÚrunnerrÇ  r  s          rS   Úhandle_job_queuezRunTask.handle_job_queue_  sÔ   € Ø�~‰~Ð)Ð)Ð)Ø�~‰~×!Ñ!Ó#ˆØ×ÑÔØ—‘ Ó&ˆð �;‰;× Ñ  D×$:Ñ$:Ñ:Ø×*Ñ*×.Ñ.¨v¯{©{×/DÑ/DÓEˆEØ�N‰N ˆNÔ'ä�fÔ3Ô4Ø×"Ñ" 4Ô(Ø�O‰O˜DÔ!àˆxˆð 	×'Ñ'¨¨fÔ5Ø�‰�T˜4 Õ*rU   c                óÊ  — t        |t        «      rÓ| j                  �Çt        t	        d|j
                  j                  › d|j                  › dt        | j                  j                  «      › �¬«      «       |j                  t        | j                  j                  «      k  rBt        j                  d«       |j                  t        | j                  j                  «      k  rŒBy)zÔ
        Checks if the runner is a MicrobatchModelRunner, and waits until the
        number of microbatch models in progress is less than the max number
        of microbatch models allowed by the pool.
        Nz(Waiting for microbatch model to be run: z.
	pool.max_microbatch_models: z.
	len(self.job_queue.in_progress_microbatch): rq  r­  )rX   rf  rÈ  rG   r2   rh   rî   Úmax_microbatch_modelsrb   Úin_progress_microbatchrS  r°  )rQ   rn  rÑ  s      rS   rÎ  z"RunTask._maybe_wait_for_microbatcht  sè   € ô �fÔ3Ô4¸¿¹Ð9SÜÜ(ØBÀ6Ç;Á;×CSÑCSÐBTÐTuÐvz÷  wQñ  wQð  vRð  RBô  CFð  GK÷  GUñ  GU÷  Glñ  Gló  Cmð  Bnð  oôôð
 ×,Ñ,¬s°4·>±>×3XÑ3XÓ/YÒYÜ—
‘
˜3”ð ×,Ñ,¬s°4·>±>×3XÑ3XÓ/YÓYð 	rU   c                óB  — t        |«      }|dk7  rg |j                  _        |t        |«      dz
  k7  rg |j                  _        t        | j                  ||| j                  | j                  ||||
«	      }|	r|j                  «        |j                  «       sä|sŽ|j                  «       r~| j                  �rt        | j                  j                  «      |j                  k  rFt        t        |j!                  «       › d�¬«      «       | j#                  ||g|j$                  «       |S t        t        |j!                  «       › d�¬«      «       |j%                  | j'                  |«      «       |j(                  }|S |j%                  |j+                  |||   «      «       |S )Nr   r*  z is being run concurrentlyrq  z is being run sequentially)r   r‹   Úpre_hookrb   Ú	post_hookr  Ú	run_countr³   rÍ  r¯  r5  rÈ  Úin_progressÚmax_threadsrG   r2   r(  rÏ  rd   Úcall_runnerr!  rQ  )rQ   rh   r‚   r!  r   r  rë   rn  r«  r¬  r"  Ú	node_copyÚbatch_runners                rS   r®  zRunTask._submit_batch†  s’  € ô ˜T“Nˆ	à˜Š>Ø(*ˆI×ÑÔ%ð œ˜G› qÑ(Ò(Ø)+ˆI×ÑÔ&ô
 -Ø�K‰KØØØ�N‰NØ�N‰NØØØØó

ˆñ Ø× Ñ Ô"à�~‰~Ôñ )Ø ×7Ñ7Ô9Ø—N‘NÐ.Ü˜Ÿ™×2Ñ2Ó3°d×6FÑ6FÒFäÜ,Ø+×:Ñ:Ó<Ð=Ð=WÐXôôð
 —‘˜T L >°=×3GÑ3GÔHð Ðô Ü,Ø+×:Ñ:Ó<Ð=Ð=WÐXôôð
 ×$Ñ$ T×%5Ñ%5°lÓ%CÔDØ".×">Ñ">�ð Ðð	 × Ñ Ø×;Ñ;¸IÀwÈyÑGYÓZôð ÐrU   c                ó~   — |j                   }|| j                  j                  k(  rt        d«      }||j                  fS )Nr‚  )Úpackage_namer‹   r  rM   rl   )rQ   r½  rà  s      rS   Ú_hook_keyfunczRunTask._hook_keyfuncÏ  s7   € Ø×(Ñ(ˆØ˜4Ÿ;™;×3Ñ3Ò3Ü& r›?ˆLØ˜TŸZ™ZÐ'Ð'rU   c                óÎ   — | j                   €t        d«      ‚| j                   j                  j                  «       }t	        ||h«      }|j                  | j                  ¬«       |S )Nz+self.manifest was None in get_hooks_by_type)Úkey)r  r4   re   Úvaluesrj   Úsortrá  )rQ   Ú	hook_typere   Úhookss       rS   Úget_hooks_by_typezRunTask.get_hooks_by_typeÕ  sW   € à�=‰=Ð Ü"Ð#PÓQÐQà—‘×#Ñ#×*Ñ*Ó,ˆä 1°%¸)¸Ó EˆØ�
‰
�t×)Ñ)ˆ
Ô*ØˆrU   c                óÞ  — | j                  |«      }|t        j                  k(  r|rt        t	        d«      «       |j                  «        |st        j                  S t        j                  }d}t        |«      }t        |d«      D �]“  \  }}	t        |	j                  ¬«      5  ||	_        |	j                  › d|› d|	j                  dz
  › �}
d}g }d}|�s¼t        d|j                  «      5  | j!                  ||	|	j                  ||«      }d d d «       |d   j"                  xs3 t%        j&                  t(        j*                  «      j-                  d ¬	«      }|	j/                  |j1                  «       t2        j4                  ¬
«       t        t7        |
|	j                  ||	j                  ¬«      «       t        d|j                  «      5  t9        |«      \  }}d d d «       |d   j:                  xs3 t%        j&                  t(        j*                  «      j-                  d ¬	«      }|	j/                  |j1                  «       ¬«       ||z
  j=                  «       }|t        j                  k(  rdnd}|t        j                  k(  r|
› d�}n|
› d› �}d}nt        j>                  }|
› d�}|	j/                  |¬«       | j@                  j                  tC        |d||i |||	¬«      «       t        tE        |
||	j                  |||	j                  ¬«      «       d d d «       �Œ– |t        jF                  k(  r|rt        t	        d«      «       |S # 1 sw Y   �Œ?xY w# 1 sw Y   �ŒxY w# 1 sw Y   �ŒæxY w)Nr‚  Fr*  )rÓ   ú.r  rK  r   ©Útzinfo)Ú
started_atÚnode_status)rÂ  rl   r‘   rÓ   ry   )Úfinished_atz passedz failed, error:
 Tz skipped)rî  ræ   )r…   ré   rš   r†   rê   r’   rç   rh   )rÂ  r…   rl   r‘   r’   rÓ   )$rè  r;   ÚEndrG   rI   Úclear_transactionr   rx   rb   Ú	enumeraterF   rÓ   rl   rà  r    rd   rÅ  rí  r   Únowr   ÚutcÚreplaceÚupdate_event_statusÚ	isoformatr   ÚStartedr.   rˆ   Úcompleted_atÚtotal_secondsr®   Únode_resultsr!   r-   ÚStart)rQ   r‚   ræ  rÀ  Úordered_hooksr…   r9  r¿  r¾  r½  Ú	hook_namer’   rš   rç   r�   rí  r†   rï  s                     rS   Úsafe_run_hookszRunTask.safe_run_hooksà  sH  € ð ×.Ñ.¨yÓ9ˆàœŸ™Ò'©MÜ”z "“~Ô&ð 	×!Ñ!Ô#ÙÜ×$Ñ$Ð$ä×"Ñ"ˆØˆÜ˜Ó&ˆ	ä" =°!Ó4ó I	‰IˆC�Ü ¨4¯>©>Ô:ñ HØ �”
Ø#×0Ñ0Ð1°°9°+¸Q¸t¿z¹zÈA¹~Ð>NÐO�	Ø!$�Ø+-�Ø�âÜ,¨Y¸¿¹ÓFñ Ø"×/Ñ/Ø# T¨4¯:©:°yÀ-ó˜÷ð
 "(¨¡×!5Ñ!5ò "¼¿¹ÄhÇlÁlÓ9S×9[Ñ9[Ø#ð :\ó :�Jð ×,Ñ,Ø#-×#7Ñ#7Ó#9Ä}×G\ÑG\ð -ô ô Ü(Ø&/Ø"&§*¡*Ø"+Ø&*§n¡nô	ôô -¨Y¸¿¹ÓFñ MÜ*>¸sÀGÓ*L™˜ ÷Mð #)¨¡)×"8Ñ"8ò #¼H¿L¹LÌÏÉÓ<V×<^Ñ<^Ø#ð =_ó =�Kð ×,Ñ,¸×9NÑ9NÓ9PÐ,ÔQØ&1°JÑ&>×%MÑ%MÓ%O�NØ$*¬i×.?Ñ.?Ò$?™qÀQ�Hà¤×!2Ñ!2Ò2Ø%. K¨wÐ"7™à%. KÐ/AÀ'ÀÐ"K˜Ø!%™ä&×.Ñ.�FØ!* ¨8Ð4�Gà×(Ñ(°VÐ(Ô<à×!Ñ!×(Ñ(ÜØ%Ø"(Ø%Ø 'Ø)+Ø'5Ø!)Ø!ô	ôô Ü"Ø"+Ø%Ø"Ÿj™jØ'Ø'5Ø"&§.¡.ôô	÷Hñ HðI	ðV œ×)Ñ)Ò)©mÜ”z "“~Ô&àˆ÷Kñ ú÷*Mñ Mú÷;Hñ Hús?   Â#AM"Ã+ MÄB=M"ÇMÇD:M"ÍMÍM"ÍMÍM"Í"M,	c                óú   — |D �cg c]  }t        |d«      sŒ|j                  ‘Œ }}t        |«      }d}|�t        j                  |¬«      }t        t        d«      «       t        t        |||¬«      «       y c c}w )Nrh   r‚  )r’   )Ú	stat_lineÚ	executionr’   )r¤   rh   r@   r   Úhumanize_execution_timerG   rI   r   )rQ   Úresultsr’   Úrre   r  r  s          rS   Úprint_results_linezRunTask.print_results_lineA  sp   € Ø!(Ö?˜A¬G°A°vÕ,>�—“Ð?ˆÐ?Ü˜uÓ%ˆ	àˆ	àÐ%Ü×5Ñ5À^ÔTˆIä”:˜b“>Ô"ÜÜ Ø#¨yÈôõ	
ùò @s
   …A8—A8c                ó  — | j                   �y| j                  �l|D ]f  }|| j                   v sŒ| j                  j                  j                  || j                  «      }t	        |t
        «      sŒS| j                   |   |_        Œh y y y rW   )r¸  r  Ú
ref_lookupÚperform_lookuprX   r)   r‹  )rQ   Úselected_uidsÚuidrh   s       rS   Úpopulate_microbatch_batchesz#RunTask.populate_microbatch_batchesQ  sv   € Ø�>‰>Ð%¨$¯-©-Ð*CØ$ò J�Ø˜$Ÿ.™.Ò(ØŸ=™=×3Ñ3×BÑBÀ3ÈÏÉÓV�DÜ! $¬	Õ2Ø6:·n±nÀSÑ6I˜Õ3ñ	Jð +DÐ%rU   c                ó„  — |j                  d«      5  | j                  «        | j                  ||«      }| j                  ||«       | j	                  ||«       | j                  |«       t        j                  | j                  |«       | j                  |t        j                  i «      }|cd d d «       S # 1 sw Y   y xY w)NÚmaster)Úconnection_namedÚdefer_to_manifestÚget_model_schemasÚcreate_schemasÚpopulate_adapter_cacher  r<   Úinitr  rÿ  r;   rü  )rQ   r‚   r
  Úrequired_schemasÚrun_hooks_statuss        rS   Ú
before_runzRunTask.before_runY  s¦   € Ø×%Ñ% hÓ/ñ 	$Ø×"Ñ"Ô$Ø#×5Ñ5°g¸}ÓMÐØ×Ñ Ð)9Ô:Ø×'Ñ'¨Ð1AÔBØ×,Ñ,¨]Ô;Ü×Ñ˜dŸm™m¨]Ô;Ø#×2Ñ2°7¼K×<MÑ<MÈrÓRÐØ#÷	$÷ 	$ò 	$ús   ’BB6Â6B?c                óœ  — |D �ch c]‹  }t        |d«      r}|j                  j                  rg|j                  t        j
                  t        j                  t        j                  fvr,|j                  j                  |j                  j                  f’Œ� }}t        |D ��ch c]  \  }}|’Œ	 c}}«      |D �cg c]1  }|j                  dk7  s|j                  t        j
                  k(  sŒ0|‘Œ3 c}t        |«      dœ}	 |j                  d«      5  | j                  |t        j                   |«       d d d «       y c c}w c c}}w c c}w # 1 sw Y   y xY w# t"        t$        t&        f$ rá | j)                  | j*                  t-        j,                  «       | j.                  z
  t1        j2                  t4        j6                  «      j9                  d ¬«      ¬«      }| j:                  j<                  rDt        |d«      r8|j?                  | jA                  «       «       tC        | jA                  «       «       tE        | j*                  d¬	«       ‚ w xY w)
Nrh   ræ   )Úschemasr  Údatabase_schemasr  rë  )r  rð   Úgenerated_atÚwriteT)Úkeyboard_interrupt)#r¤   rh   Úis_relationalr…   r   r}   ÚFailr®   rÃ   rÄ   rº   ré   r   r  rÿ  r;   rð  r{   r|   r5   Ú
get_resultrû  rS  rí  r   ró  r   rô  rõ  r  Ú
write_jsonr  Úresult_pathrB   rA   )	rQ   r‚   r  r  Údatabase_schema_setr„   ÚsÚextrasrN  s	            rS   Ú	after_runzRunTask.after_rund  sÕ  € ð ö?
àÜ˜˜6Ô" q§v¡v×';Ò';Ø—‘¤×!1Ñ!1´:·?±?ÄJ×DVÑDVÐ WÑWð �V‰V�_‰_˜aŸf™fŸm™mÒ,ð?
Ðð ?
ô Ð+>×?¡4 1 ašQÓ?Ó@à"öØ a§k¡k°VÒ&;¸q¿x¹xÌ9Ï?É?Ó?Z’òô !%Ð%8Ó 9ñ
ˆð	Ø×)Ñ)¨(Ó3ñ FØ×#Ñ# G¬[¯_©_¸fÔE÷Fð Fùò!?
ùó @ùò÷Fð Fûä!¤:¬Ð?ò 	ØŸ™Ø×)Ñ)Ü!ŸY™Y›[¨4¯?©?Ñ:Ü%Ÿ\™\¬(¯,©,Ó7×?Ñ?ÀtÐ?ÓLð )ó ˆJð �y‰y×#Ò#¬°
¸GÔ(DØ× Ñ  ×!1Ñ!1Ó!3Ô4Ü% d×&6Ñ&6Ó&8Ô9ä" 4×#4Ñ#4ÈÕNàð	úsC   …BD:Â!D?
Â81EÃ*EÃ>E Ä"E
Ä1E Å
EÅE ÅE ÅC5Ic                óÀ   — | j                   �| j                  €t        d«      ‚t        | j                  | j                   | j                  t
        j                  g¬«      S )Nz<manifest and graph must be set to get perform node selection)Úgraphr  Úprevious_stateÚresource_types)r  r(  r4   r6   r)  r:   r¦   rÏ   s    rS   Úget_node_selectorzRunTask.get_node_selector‹  sO   € Ø�=‰=Ð  D§J¡JÐ$6Ü"Ð#aÓbÐbÜ#Ø—*‘*Ø—]‘]Ø×.Ñ.Ü$ŸN™NÐ+ô	
ð 	
rU   c                ó  — | j                   €t        d«      ‚|j                  j                  dk(  rO|j                  j                  dk(  r6| j                   j                  | j                  j                  ¬«      rt        S t        S )Nz5manifest must be set prior to calling get_runner_typerz  Ú
microbatch)r  )	r  r4   r‹   r|  r«   Úuse_microbatch_batchesr  rf  rÁ   )rQ   rh   s     rS   Úget_runner_typezRunTask.get_runner_type•  si   € Ø�=‰=Ð Ü"Ð#ZÓ[Ð[ð �K‰K×$Ñ$¨Ò5Ø—‘×0Ñ0°LÒ@Ø—‘×4Ñ4À$Ç+Á+×BZÑBZÐ4Ô[ä(Ð(äÐrU   c                ó    — |rt        |«       y y rW   )rA   )rQ   r  s     rS   Útask_end_messageszRunTask.task_end_messages¢  s   € ÙÜ" 7Õ+ð rU   rW   )
r  r"   r‹   r$   r  r&   r¸  z!Optional[Dict[str, BatchResults]]r  r  r`  r  )rn  r7   rÐ  r
   r  r  )rn  r7   rÑ  r=   r  r  )FFT)rh   r)   r‚   r   r!  r_  r   r^  r  r]  rë   r´  rn  r7   r«  r_  r¬  r_  r"  r_  )r½  r(   r  zTuple[str, Optional[int]])ræ  r;   r  úList[HookNode])r‚   r   ræ  r;   rÀ  r  r  r   r  )r
  úAbstractSet[str])r‚   r   r
  r3  r  r   )r  r6   )r  zOptional[Type[BaseRunner]])r[   r\   r]   r  rº  rÅ  rÒ  rÎ  r®  rá  rè  rÿ  r  r  r  r&  r+  r/  r1  rc  rd  s   @rS   r³  r³  G  s)  ø„ ð 8<ð#àð#ð ð#ð ð	#ð
 5ð#ð 
õ#óó"ó+ó*ð6 &+ØØ"&ðGàðGð ðGð ð	Gð
 &ðGð ðGð 'ðGð ðGð #ðGð ðGð  óGóR(ó	ð_Ø"ð_Ø/:ð_ØKYð_à	ó_óB
ó Jó	$ó%óN
ó÷,rU   r³  )r  r2  )re   zIterable[ResultNode]rf   zSet[str]r  r2  )r�   r€   r‚   r   r  zTuple[RunStatus, str])r  r  rW   )r»   zDict[Any, Any]r  r  )�Ú
__future__r   Ú	functoolsrì   rS  Úcopyr   Údataclassesr   r   r   Útypingr   r	   r
   r   r   r   r   r   r   r   Údbtr   r   Údbt.adapters.baser   r   Údbt.adapters.capabilityr   Údbt.adapters.events.typesr   Údbt.adapters.exceptionsr   Údbt.artifacts.resourcesr   Ú#dbt.artifacts.schemas.batch_resultsr   r   Údbt.artifacts.schemas.resultsr   r   r   r   r    Údbt.artifacts.schemas.runr!   Údbt.cli.flagsr"   Údbt.clients.jinjar#   Ú
dbt.configr$   Údbt.context.providersr%   Údbt.contracts.graph.manifestr&   Údbt.contracts.graph.nodesr'   r(   r)   r*   Údbt.events.typesr+   r,   r-   r.   r/   r0   r1   r2   Údbt.exceptionsr3   r4   r5   Ú	dbt.graphr6   Údbt.graph.thread_poolr7   Ú	dbt.hooksr8   Ú+dbt.materializations.incremental.microbatchr9   Údbt.node_typesr:   r;   Údbt.taskr<   Údbt.task.baser=   Údbt.task.compiler>   r?   Údbt.task.printerr@   rA   Údbt.utils.artifact_uploadrB   Údbt_common.clients.jinjarC   Údbt_common.dataclass_schemarD   Údbt_common.events.base_typesrE   Údbt_common.events.contextvarsrF   Údbt_common.events.functionsrG   rH   Údbt_common.events.typesrI   Údbt_common.exceptionsrJ   Údbt_common.invocationrK   Útotal_orderingr€   rM   r_   rj   rr   rˆ   r�   r¬   r¿   rÁ   r  rf  r³  rO   rU   rS   ú<module>r]     sO  ðÝ "ã Û Û Ý Ý ß '÷÷ ÷ ÷  ß 7Ý .Ý :Ý ?Ý (ß G÷õ õ 0Ý Ý ,Ý $Ý @Ý 1ß SÓ S÷	÷ 	ó 	÷ OÑ NÝ *Ý /Ý #Ý Iß 0Ý !Ý $ß 7ß ?Ý ;Ý 2Ý 5Ý 3Ý 9ß EÝ .Ý 4Ý ;ð ×Ñô1�#ó 1ó ð1óðØðàðð óò%óó(aó&óTô>Kd�-ô Kdô\g˜Kô gôT|˜Kô |ô~],ˆkõ ],rU   