Ë
    èlÖiÇ8  ã                   ó   — d dl Z d dlmZ d dlmZ d dlmZmZmZm	Z	 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 d dlmZ d dlmZmZ d d	lmZ d d
lmZ d dlmZ d dlm Z m!Z! 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l0m1Z1 d dl2m3Z3 d dl4m5Z5  G d„ de
jl                  «      Z7dee   de8fd„Z9de8de	e8   de8de:fd„Z; G d„ de.«      Z<y)é    N)Úsha1)ÚPath)ÚAnyÚDictÚListÚOptional)ÚProject)Úload_yml_dictÚpackage_config_from_data)ÚPackageRenderer)ÚPACKAGE_LOCK_FILE_NAMEÚPACKAGE_LOCK_HASH_KEY)ÚPackageSpec)Údownloads_directory)ÚRegistryPinnedPackage)Úresolve_lock_packagesÚresolve_packages)
ÚDepsAddPackageÚDepsFoundDuplicatePackageÚDepsInstallInfoÚDepsListSubdirectoryÚDepsLockUpdatingÚDepsNoPackagesFoundÚDepsNotifyUpdatesAvailableÚDepsStartPackageInstallÚDepsUpdateAvailableÚDepsUpToDate)ÚBaseTaskÚmove_to_nearest_project_dir)Úsystem)Ú
fire_event)Ú
Formattingc                   ó    ‡ — e Zd Zdˆ fd„	Zˆ xZS )ÚdbtPackageDumperc                 ó,   •— t         t        | �  |d«      S )NF)Úsuperr$   Úincrease_indent)ÚselfÚflowÚ
indentlessÚ	__class__s      €úR/var/www/html/strategist-ai/venv_dbt/lib/python3.12/site-packages/dbt/task/deps.pyr'   z dbtPackageDumper.increase_indent&   s   ø€ ÜÔ% tÑ<¸TÀ5ÓIÐIó    )FF)Ú__name__Ú
__module__Ú__qualname__r'   Ú__classcell__©r+   s   @r,   r$   r$   %   s   ø„ ÷Jñ Jr-   r$   ÚpackagesÚreturnc                 óô   — | D �cg c]'  }t        j                  |j                  «       d¬«      ‘Œ) }}t        |«      }t	        dj                  |«      j                  d«      «      j                  «       S c c}w )a"  Create a SHA1 hash of the packages list,
    this is used to determine if the packages for current execution matches
    the previous lock.

    Args:
        list[Packages]: list of packages specified that are already rendered

    Returns:
        str: SHA1 hash of the packages list
    T)Ú	sort_keysú
zutf-8)ÚjsonÚdumpsÚto_dictÚsortedr   ÚjoinÚencodeÚ	hexdigest)r3   ÚpackageÚpackage_strss      r,   Ú_create_sha1_hashrA   *   sc   € ð RZÖZÀg”D—J‘J˜wŸ™Ó0¸DÖAÐZ€LÐZÜ˜,Ó'€Lä�—	‘	˜,Ó'×.Ñ.¨wÓ7Ó8×BÑBÓDÐDùò [s   …,A5r?   ÚversionÚsourcec                 ój   — |}d}|dk(  rd}|| i}|dk(  rd}|rd|v r|j                  d«      }|||<   |S )ae  Create a formatted entry to add to `packages.yml` or `package-lock.yml` file

    Args:
        package (str): Name of package to download
        version (str): Version of package to download
        source (str): Source of where to download package from

    Returns:
        dict: Formatted dict to write to `packages.yml` or `package-lock.yml` file
    rB   Úhubr?   ÚgitÚrevisionú,)Úsplit)r?   rB   rC   Úpackage_keyÚversion_keyÚpackages_yml_entrys         r,   Ú_create_packages_yml_entryrM   ;   sZ   € ð €KØ€Kà�‚Øˆà% wÐ/Ðà�‚Ø ˆáØ�'‰>Ø—m‘m CÓ(ˆGà*1Ð˜;Ñ'àÐr-   c                   óf   ‡ — e Zd Zdededdfˆ fd„Zdededee   ddfd	„Zd
„ Z	d„ Z
dd„Zdd„Zˆ xZS )ÚDepsTaskÚargsÚprojectr4   Nc                 ó¸   •— t         ‰| �  |¬«       t        t        |j                  «      j                  «       «      |_        || _        |j                  | _        y )N)rP   )	r&   Ú__init__Ústrr   Úproject_rootÚresolverQ   ÚvarsÚcli_vars)r(   rP   rQ   r+   s      €r,   rS   zDepsTask.__init__[   sH   ø€ Ü‰Ñ˜dÐÔ#ô
  #¤4¨×(<Ñ(<Ó#=×#EÑ#EÓ#GÓHˆÔØˆŒØŸ	™	ˆ�r-   Úpackage_nameÚsource_typerB   c                 ó   — |dk(  r"t         j                  j                  |«      }d}nj|dk(  r"t         j                  j                  |«      }d}nC|dk7  r>t         j                  j                  |«      }t         j                  j                  |«      }t         j                  j	                  d| j
                  j                  «       |||dœ«       y )NÚlocalÚtarballrE   Údeps)ÚnamerC   rB   )ÚdbtÚutilsÚmd5ÚtrackingÚtrack_package_installrQ   Úhashed_name)r(   rY   rZ   rB   s       r,   rd   zDepsTask.track_package_installe   s�   € ð ˜'Ò!ÜŸ9™9Ÿ=™=¨Ó6ˆLØ‰GØ˜IÒ%ÜŸ9™9Ÿ=™=¨Ó6ˆLØ‰GØ˜EÒ!ÜŸ9™9Ÿ=™=¨Ó6ˆLÜ—i‘i—m‘m GÓ,ˆGä�‰×*Ñ*ØØ�L‰L×$Ñ$Ó&Ø!¨[ÀWÑMõ	
r-   c                 ó  — | j                   j                  d   }||j                  dd«      |j                  dd«      g}d|v rH|j                  d«      d   }|j	                  ||j                  dd«      |j                  dd«      g«       t        t        |«      «      }t        t        |d   «      dz
  dd«      D �]:  }|d   |   }|j                  d«      xsJ |j                  d	«      xs7 |j                  d
«      xs$ |j                  d«      xs |j                  d«      }|sŒld}|D ]W  }	|	|v sŒ|j                  |	«      }
|
dk(  xs
 ||
dz
     dv }|
t        |	«      z   }|t        |«      k(  xs ||   dv }|sŒR|sŒUd} n |sŒÍ|d   |= |j                  «       D ��ci c]8  \  }}t        |t        «      s#t        |t        t        t         f«      r|dk7  r||“Œ: }}}t#        t%        |¬«      «       �Œ= |S c c}}w )a,  Loop through contents of `packages.yml` to remove entries that match the package being added.

        This method is called only during `dbt deps --add-package` to check if the package
        being added already exists in packages.yml. It uses substring matching to identify
        duplicates, which means it will match across different package sources. For example,
        adding a hub package "dbt-labs/dbt_utils" will remove an existing git package
        "https://github.com/dbt-labs/dbt-utils.git" since both contain "dbt_utils" or "dbt-utils".

        The matching is flexible to handle both underscore and hyphen variants of package names,
        as git repos often use hyphens (dbt-utils) while package names use underscores (dbt_utils).
        Word boundaries (/, .) are enforced to prevent false matches like "dbt-core" matching
        "dbt-core-utils".

        Args:
            packages_yml (dict): In-memory read of `packages.yml` contents

        Returns:
            dict: Updated packages_yml contents with matching packages removed
        r_   Ú_ú-ú/éÿÿÿÿr3   é   r?   rF   r\   r]   ÚprivateFr   z/.TÚ
unrendered)Úremoved_package)rP   Úadd_packageÚreplacerI   ÚextendÚlistÚsetÚrangeÚlenÚgetÚfindÚitemsÚ
isinstanceÚboolrT   ÚintÚfloatr!   r   )r(   Úpackages_ymlrY   Úpackage_name_partsÚ
short_nameÚiÚ	pkg_entryÚpackage_identifierÚis_duplicateÚname_variantÚidxÚstart_okÚend_idxÚend_okÚkÚvÚloggable_packages                    r,   Úcheck_for_duplicate_packagesz%DepsTask.check_for_duplicate_packagesy   s[  € ð* —y‘y×,Ñ,¨VÑ4ˆð
 Ø× Ñ   cÓ*Ø× Ñ   cÓ*ð
Ðð �,ÑØ%×+Ñ+¨CÓ0°Ñ4ˆJØ×%Ñ%àØ×&Ñ& s¨CÓ0Ø×&Ñ& s¨CÓ0ðôô "¤#Ð&8Ó"9Ó:Ðô ”s˜<¨
Ñ3Ó4°qÑ8¸"¸bÓAó .	\ˆAØ$ ZÑ0°Ñ3ˆIð
 —‘˜iÓ(ò ,Ø—=‘= Ó'ò,à—=‘= Ó)ò,ð —=‘= Ó+ò,ð —=‘= Ó+ð ò "Ø$�Ø$6ò "�LØ#Ð'9Ò9ð 1×5Ñ5°lÓC˜Ø#&¨!¡8Ò#RÐ/AÀ#ÈÁ'Ñ/JÈdÐ/R˜Ø"%¬¨LÓ(9Ñ"9˜à#¤sÐ+=Ó'>Ñ>ò CØ1°'Ñ:¸dÐBð ò
 $ªØ+/˜LÙ!ð"ò   Ø$ ZÑ0°Ð3ð
 %.§O¡OÓ$5÷(á ˜A˜qÜ)¨!¬TÔ2Ü& q¬3´´UÐ*;Ô<Ø Ò-ð	 ˜1™ð(Ð$ñ (ô Ô8ÐIYÔZÖ[ð].	\ð` Ðùó(s   Æ!=G;c                 ó   — | j                   j                  › d| j                   j                  › �}t        j                  |«      sAt        |d«      5 }t        j                  dg i|«       d d d «       t        t        d«      «       t        | j                  j                  d   | j                  j                  d   | j                  j                  «      }t        |d«      5 }t        j                  |«      }| j                  |«      }|d   j!                  |«       d d d «       t#        «      j$                  | j                   j$                  _        |r†t        |d«      5 }|j'                  t        j(                  |t*        d¬	«      «       t        t-        | j                  j                  d   | j                  j                  d   |¬
«      «       d d d «       y y # 1 sw Y   �ŒsxY w# 1 sw Y   ŒÍxY w# 1 sw Y   y xY w)Nri   Úwr3   zCreated packages.ymlr_   rB   ÚrF)ÚDumperÚdefault_flow_style)rY   rB   Úpackages_filepath)rQ   rU   Úpackages_specified_pathr    Úpath_existsÚopenÚyamlÚ	safe_dumpr!   r"   rM   rP   ro   rC   Ú	safe_loadrŒ   Úappendr   r3   ÚwriteÚdumpr$   r   )r(   Úpackages_yml_filepathÚpackage_ymlÚnew_package_entryÚuser_yml_objr}   Úpkg_objs          r,   ÚaddzDepsTask.addØ   sµ  € à�|‰|×(Ñ(Ð)¨¨4¯<©<×+OÑ+OÐ*PÐQð 	ô ×!Ñ!Ð"7Ô8ÜÐ+¨SÓ1ð >°[Ü—‘ 
¨BÐ/°Ô=÷>ä”zÐ"8Ó9Ô:ä6Ø�I‰I×!Ñ! &Ñ)¨4¯9©9×+@Ñ+@ÀÑ+KÈTÏYÉY×M]ÑM]ó
Ðô Ð'¨Ó-ð 	?°ÜŸ>™>¨,Ó7ˆLØ×<Ñ<¸\ÓJˆLØ˜Ñ$×+Ñ+Ð,=Ô>÷	?ô
 *BÀ,Ó)O×)XÑ)Xˆ�‰×ÑÔ&áÜÐ+¨SÓ1ð °WØ—‘Ü—I‘I˜lÔ3CÐX]Ô^ôô Ü"Ø%)§Y¡Y×%:Ñ%:¸6Ñ%BØ $§	¡	× 5Ñ 5°iÑ @Ø*?ôô÷ð ð ÷>ñ >ú÷	?ð 	?ú÷ð ús%   ÁGÃ!;G(Å A1G4ÇG%Ç(G1Ç4G=c                 óø  — | j                   j                  › dt        › �}| j                   j                  j                  }dg i}|st	        t        «       «       y t        «       5  t        || j                   | j                  «      }d d d «       t        | j                  «      }D ]E  }|j                  «       }|j                  | j                   |«      |d<   |d   j                  |«       ŒG t        | j                   j                  j                  «      |t        <   t        |d«      5 }t!        j"                  ||t$        ¬«       d d d «       t	        t'        |¬«      «       y # 1 sw Y   ŒßxY w# 1 sw Y   Œ+xY w)Nri   r3   r_   rŽ   )r�   )Úlock_filepath)rQ   rU   r   r3   r!   r   r   r   rX   r   r:   Úget_project_namer™   rA   r   r•   r–   r›   r$   r   )	r(   r£   r3   Úpackages_installedÚresolved_depsÚrendererr?   Úpackage_dictÚlock_objs	            r,   ÚlockzDepsTask.lockú   sQ  € ØŸ<™<×4Ñ4Ð5°QÔ7MÐ6NÐOˆà—<‘<×(Ñ(×1Ñ1ˆØ.8¸"Ð-=ÐáÜÔ*Ó,Ô-Øä Ó"ñ 	TÜ,¨X°t·|±|ÀTÇ]Á]ÓSˆM÷	Tô
 # 4§=¡=Ó1ˆØ$ò 	@ˆGØ"Ÿ?™?Ó,ˆLØ#*×#;Ñ#;¸D¿L¹LÈ(Ó#SˆL˜Ñ Ø˜zÑ*×1Ñ1°,Õ?ð	@ô
 5FØ�L‰L×!Ñ!×*Ñ*ó5
ÐÔ0Ñ1ô �- Ó%ð 	M¨Ü�I‰IÐ(¨(Ô;KÕL÷	Mô 	Ô#°-Ô@ÕA÷%	Tð 	Tú÷	Mð 	Mús   Á$"E$Ä)E0Å$E-Å0E9c                 ój  — t        | j                  j                  «       | j                  j                  r| j	                  «        | j
                  j                  › dt        › �}t        j                  |«      s| j                  «        n„| j                  j                  r| j                  «        n]t        | j
                  j                  j                  «      }t        |«      j                  t         d «      }||k7  r| j                  «        | j                  j                  ry t        j                  | j
                  j"                  «      r)t        j$                  | j
                  j"                  «       t        j&                  | j
                  j"                  «       t        | j
                  j                  › dt        › �«      }t)        | j*                  «      }t-        |j/                  |«      |«      j                  }|st1        t3        «       «       y t5        «       5  t7        |«      }t)        | j*                  «      }g }|D �])  }	|	j8                  }
|	j;                  «       }|	j=                  «       }t1        t?        |
¬«      «       |	jA                  | j
                  |«       t1        tC        |	jE                  «       ¬«      «       tG        |	tH        «      rO|	jK                  «       }||k7  r'|jM                  |
«       t1        tO        |¬«      «       nt1        tQ        «       «       |	jS                  «       r#t1        tU        |	jS                  «       ¬«      «       | jW                  |
||¬«       �Œ, |r)t1        tY        d«      «       t1        t[        |¬«      «       d d d «       y # 1 sw Y   y xY w)	Nri   )rY   )Úversion_name)Úversion_latest)Úsubdirectory)rY   rZ   rB   Ú )r3   ).r   rP   Úproject_dirro   r¡   rQ   rU   r   r    r”   rª   ÚupgraderA   r3   r
   rv   r   Úpackages_install_pathÚrmtreeÚmake_directoryr   rX   r   Úrender_datar!   r   r   r   r_   rZ   Úget_versionr   Úinstallr   Únice_version_namery   r   Úget_version_latestr™   r   r   Úget_subdirectoryr   rd   r"   r   )r(   Úlock_file_pathÚcurrent_hashÚprevious_hashÚpackages_lock_dictr§   Úpackages_lock_configÚlock_defined_depsÚpackages_to_upgrader?   rY   rZ   rB   r­   s                 r,   ÚrunzDepsTask.run  sÊ  € Ü# D§I¡I×$9Ñ$9Ô:Ø�9‰9× Ò Ø�H‰HŒJð !ŸL™L×5Ñ5Ð6°aÔ8NÐ7OÐPˆÜ×!Ñ! .Ô1Ø�I‰I�KØ�Y‰Y×ÒØ�I‰I�Kô -¨T¯\©\×-BÑ-B×-KÑ-KÓLˆLÜ)¨.Ó9×=Ñ=Ô>SÐUYÓZˆMØ Ò,Ø—	‘	”ð �9‰9�>Š>Øä×Ñ˜dŸl™l×@Ñ@ÔAÜ�M‰M˜$Ÿ,™,×<Ñ<Ô=ä×Ñ˜dŸl™l×@Ñ@ÔAä*¨d¯l©l×.GÑ.GÐ-HÈÔJ`ÐIaÐ+bÓcÐä" 4§=¡=Ó1ˆÜ7Ø× Ñ Ð!3Ó4Ð6Hó 
ç
‰(ð 	ñ $ÜÔ*Ó,Ô-Øä Ó"ñ "	UÜ 5Ð6JÓ KÐÜ& t§}¡}Ó5ˆHà"$Ðà,ó �Ø&Ÿ|™|�Ø%×1Ñ1Ó3�Ø!×-Ñ-Ó/�äÔ2ÀÔMÔNØ—‘ §¡¨hÔ7äœ?¸×8QÑ8QÓ8SÔTÔUä˜gÔ'<Ô=Ø%,×%?Ñ%?Ó%A�Nà%¨Ò0Ø+×2Ñ2°<Ô@Ü"Ô#6ÀnÔ#UÕVä"¤<£>Ô2à×+Ñ+Ô-ÜÔ3À×AYÑAYÓA[Ô\Ô]à×*Ñ*Ø!-¸;ÐPWð +ö ð-ñ4 #Üœ: b›>Ô*ÜÔ5Ð?RÔSÔT÷E"	U÷ "	Uñ "	Uús   È#E=N)Î)N2)r4   N)r.   r/   r0   r   r	   rS   rT   r   rd   rŒ   r¡   rª   rÂ   r1   r2   s   @r,   rO   rO   Z   s`   ø„ ð"˜Sð "¨7ð "°tõ "ð
Øð
Ø.1ð
Ø<DÀS¹Mð
à	ó
ò(]ò~ óDB÷<JUr-   rO   )=r8   Úhashlibr   Úpathlibr   Útypingr   r   r   r   r–   Údbt.deprecationsr`   Údbt.exceptionsÚ	dbt.utilsÚ
dbt.configr	   Údbt.config.projectr
   r   Údbt.config.rendererr   Údbt.constantsr   r   Údbt.contracts.projectr   Údbt.deps.baser   Údbt.deps.registryr   Údbt.deps.resolverr   r   Údbt.events.typesr   r   r   r   r   r   r   r   r   r   Údbt.task.baser   r   Údbt_common.clientsr    Údbt_common.events.functionsr!   Údbt_common.events.typesr"   r�   r$   rT   rA   ÚdictrM   rO   © r-   r,   ú<module>rØ      s¹   ðÛ Ý Ý ß ,Ó ,ã ã Û Û Ý ß FÝ /ß GÝ -Ý -Ý 3ß E÷÷ ÷ ÷ @Ý %Ý 2Ý .ôJ�t—{‘{ô Jð
E  [Ñ 1ð E°có Eð"¨ð °h¸s±mð ÈSð ÐUYó ô>HUˆxõ HUr-   