Ë
    tPêj  ã                  óÖ   — d Z ddlm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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mZmZ  ej6                  e«      Z G d„ de«      Zy)zb
Functionality for using the [Ecosyste.ms](https://ecosyste.ms/) API as a `VulnerabilityService`.
é    )ÚannotationsN)ÚPath)ÚAnyÚcast)Ú	urlencode)ÚSpecifierSet)ÚVersion)Úcaching_session)ÚConnectionErrorÚ
DependencyÚResolvedDependencyÚServiceErrorÚVulnerabilityIDÚVulnerabilityResultÚVulnerabilityServicec                  ó,   — e Zd ZdZ	 	 d	 	 	 dd„Zdd„Zy)ÚEcosystemsServicez„
    An implementation of `VulnerabilityService` that uses Ecosyste.ms to provide Python
    package vulnerability information.
    Nc                ó6   — t        |d¬«      | _        || _        y)aq  
        Create a new `EcosystemsService`.

        `cache_dir` is an optional cache directory to use, for caching and reusing OSV API
        requests. If `None`, `pip-audit` will use its own internal caching directory.

        `timeout` is an optional argument to control how many seconds the component should wait for
        responses to network requests.
        F)Úuse_pipN)r
   ÚsessionÚtimeout)ÚselfÚ	cache_dirr   s      ú\/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/pip_audit/_service/esms.pyÚ__init__zEcosystemsService.__init__%   s   € ô ' y¸%Ô@ˆŒØˆ�ó    c                óX  — d}|j                  «       r|g fS t        t        |«      }d|j                  dœ}	 | j                  j                  |› dt        |«      › �| j                  ¬«      }|j                  «        g }|j                  «       }|s||fS |D �]O  }|d   }	|d	   }
|
�t        j!                  d
|	d   › d|
› �«       Œ/|d   }|s|d   }|sd}|j#                  dd«      }d}t%        «       }|d   D ]˜  }|d   |j                  k7  s|d   dk7  rŒ|d   D ]s  }|d   }t'        t)        j*                  dd|«      «      }|j-                  |j.                  «      sŒDd}|j                  d«      x}�|j1                  t3        |«      «        Œ˜ Œš |s�Œ|j5                  t7        j8                  |	|t;        |«      | j=                  |j                  d«      «      ¬«      «       �ŒR ||fS # t        j                  $ r t        d«      ‚t        j                  $ r}t        |‚d}~ww xY w)zz
        Queries Ecosyste.ms for the given `Dependency` specification.

        See `VulnerabilityService.query`.
        z0https://advisories.ecosyste.ms/api/v1/advisoriesÚpypi)Ú	ecosystemÚpackage_nameú?)r   z-Could not connect to ESMS' vulnerability feedNÚidentifiersÚwithdrawn_atzESMS vuln entry 'r   z' marked as withdrawn at ÚtitleÚdescriptionzN/Aú
ú FÚpackagesr    r   ÚversionsÚvulnerable_version_rangez	(^|(, ))=z\1==TÚfirst_patched_versionÚ	published)Úidsr%   Úfix_versionsr,   )Ú
is_skippedr   r   Úcanonical_namer   Úgetr   r   Úraise_for_statusÚrequestsÚConnectTimeoutr   Ú	HTTPErrorr   ÚjsonÚloggerÚdebugÚreplaceÚsetr   ÚreÚsubÚcontainsÚversionÚaddr	   Úappendr   ÚcreateÚsortedÚ_parse_rfc3339)r   ÚspecÚurlÚqueryÚresponseÚ
http_errorÚresultsÚresponse_jsonÚvulnr-   r#   r%   Úseen_vulnerabler.   ÚaffectedÚrecordÚosv_specÚ
vulnerableÚpatcheds                      r   rF   zEcosystemsService.query6   s}  € ð Aˆà�?‰?ÔØ˜�8ˆOÜÔ&¨Ó-ˆð  Ø ×/Ñ/ñ
ˆð
		/Ø*.¯,©,×*:Ñ*:Ø�%�qœ 5Ó)Ð*Ð+ØŸ™ð +;ó +ˆHð ×%Ñ%Ô'ð .0ˆØ Ÿ™›ˆÙØ˜�=Ð ð "ó =	ˆDà)-¨mÑ)<ˆCð   Ñ/ˆLØÐ'Ü—‘Ð0°°Q±°Ð8QÐR^ÐQ_Ð`ÔaØð ˜w™-ˆKÙØ" =Ñ1�ÙØ#�ð &×-Ñ-¨d°CÓ8ˆKà#ˆOÜ),«ˆLØ  Ñ,ò �ð ˜^Ñ,°×0CÑ0CÒCØ Ñ,°Ò6àà& zÑ2ò �Fð
 %+Ð+EÑ$F�HÜ!-¬b¯f©f°\À7ÈHÓ.UÓ!V�JØ%×.Ñ.¨t¯|©|Ô<Ø à&*�OØ#)§:¡:Ð.EÓ#FÐF˜ÐSØ$×(Ñ(¬°Ó)9Ô:Ùñðñ. #Ùà�N‰NÜ#×*Ñ*ØØ +Ü!'¨Ó!5Ø"×1Ñ1°$·(±(¸;Ó2GÓHô	öðm=	ð~ �Wˆ}Ðøô] ×&Ñ&ò 	SÜ!Ð"QÓRÐRÜ×!Ñ!ò 	/Ü JÐ.ûð	/ús   ·AG- Ç-0H)ÈH$È$H))NN)r   zPath | Noner   z
int | None)rD   r   Úreturnz,tuple[Dependency, list[VulnerabilityResult]])Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   rF   © r   r   r   r      s,   „ ñð "&Ø"ðàðð óô"er   r   )rV   Ú
__future__r   Úloggingr;   Úpathlibr   Útypingr   r   Úurllib.parser   r3   Úpackaging.specifiersr   Úpackaging.versionr	   Úpip_audit._cacher
   Úpip_audit._service.interfacer   r   r   r   r   r   r   Ú	getLoggerrS   r7   r   rW   r   r   ú<module>rb      s\   ðñõ #ã Û 	Ý ß Ý "ã Ý -Ý %å ,÷÷ ñ ð 
ˆ×	Ñ	˜8Ó	$€ô|Ð,õ |r   