Ë
    tPêju  ã                  óº   — 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
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  ej,                  e«      Z G d	„ d
e«      Zy)zV
Functionality for using the [OSV](https://osv.dev/) API as a `VulnerabilityService`.
é    )ÚannotationsN)ÚPath)ÚAnyÚcast)ÚVersion)Úcaching_session)ÚConnectionErrorÚ
DependencyÚResolvedDependencyÚServiceErrorÚVulnerabilityResultÚVulnerabilityServicec                  ó6   — e Zd ZdZdZddef	 	 	 	 	 dd„Zdd„Zy)Ú
OsvServicez|
    An implementation of `VulnerabilityService` that uses OSV to provide Python
    package vulnerability information.
    zhttps://api.osv.dev/v1/queryNc                óD   — t        |d¬«      | _        || _        || _        y)aj  
        Create a new `OsvService`.

        `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Úosv_url)ÚselfÚ	cache_dirr   r   s       ú[/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/pip_audit/_service/osv.pyÚ__init__zOsvService.__init__$   s    € ô ' y¸%Ô@ˆŒØˆŒØˆ�ó    c                ó¨  — |j                  «       r|g fS t        t        |«      }|j                  ddœt	        |j
                  «      dœ}	 | j                  j                  | j                  t        j                  |«      | j                  ¬«      }|j                  «        g }|j                  «       }|s||fS |d   D �]Æ  }t%        |j'                  dd	«      «      }|j(                  d
k7  rt*        j-                  d|› �«       ŒG|d   }	|j'                  d«      }
|
�t*        j/                  d|	› d|
› �«       Œ{|j'                  d«      }|€|j'                  d«      }|€d}|j1                  dd«      }|j'                  d«      }|€t*        j-                  d|	› d�«       Œâg }|D ]u  }|d   }|d   |j                  k(  sŒ|d   dk(  sŒ$|j'                  dg «      D ]=  }|d   dk(  sŒ|d   D �cg c]  }d|v r|d   ‘Œ }}|D �cg c]  }t%        |«      ‘Œ }} Œu Œw |j3                  «        |j5                  t7        j8                  |	g|j'                  dg «      ¢||| j;                  |j'                  d «      «      ¬!«      «       �ŒÉ ||fS # t        j                  $ r t        d«      ‚t        j                   $ r}t"        |‚d}~ww xY wc c}w c c}w )"zr
        Queries OSV for the given `Dependency` specification.

        See `VulnerabilityService.query`.
        ÚPyPI)ÚnameÚ	ecosystem)ÚpackageÚversion)ÚurlÚdatar   z-Could not connect to OSV's vulnerability feedNÚvulnsÚschema_versionz1.0.0é   z Unsupported OSV schema version: ÚidÚ	withdrawnzOSV vuln entry 'z' marked as withdrawn at ÚsummaryÚdetailszN/Aú
ú Úaffectedz' is missing 'affected' listr   r   r   ÚrangesÚtypeÚ	ECOSYSTEMÚeventsÚfixedÚaliasesÚ	published)ÚidsÚdescriptionÚfix_versionsr3   )Ú
is_skippedr   r   Úcanonical_nameÚstrr    r   Úpostr   ÚjsonÚdumpsr   Úraise_for_statusÚrequestsÚConnectTimeoutr	   Ú	HTTPErrorr   r   ÚgetÚmajorÚloggerÚwarningÚdebugÚreplaceÚsortÚappendr   ÚcreateÚ_parse_rfc3339)r   ÚspecÚqueryÚresponseÚ
http_errorÚresultsÚresponse_jsonÚvulnr$   r&   Úwithdrawn_atr5   Ú	affectedsr6   r,   Úpkgr-   r    Úfix_version_strsÚversion_strs                       r   rL   zOsvService.query7   s  € ð �?‰?ÔØ˜�8ˆOÜÔ&¨Ó-ˆð !%× 3Ñ 3À&ÑIÜ˜4Ÿ<™<Ó(ñ
ˆð
	/Ø*.¯,©,×*;Ñ*;Ø—L‘LÜ—Z‘Z Ó&ØŸ™ð +<ó +ˆHð
 ×%Ñ%Ô'ð .0ˆØ Ÿ™›ˆÙØ˜�=Ð ð " 'Ñ*ó D	ˆDô
 % T§X¡XÐ.>ÀÓ%HÓIˆNØ×#Ñ# qÒ(Ü—‘Ð!AÀ.ÐAQÐRÔSØà�d‘ˆBð  Ÿ8™8 KÓ0ˆLØÐ'Ü—‘Ð/°¨tÐ3LÈ\ÈNÐ[Ô\Øð Ÿ(™( 9Ó-ˆKØÐ"Ø"Ÿh™h yÓ1�ØÐ"Ø#�ð &×-Ñ-¨d°CÓ8ˆKð Ÿ™ Ó,ˆIØÐ Ü—‘Ð!1°"°Ð5QÐRÔSØà*,ˆLØ%ò "�Ø˜yÑ)�à�v‘; $×"5Ñ"5Ó5¸#¸kÑ:JÈfÓ:TØ"*§,¡,¨x¸Ó"<ò "˜Ø! &™>¨[Ó8ð 06°hÑ/?ö0à$+Ø#*¨gÑ#5ð !(¨Ó 0ð0Ð,ð 0ð IYö,Ø9D¤¨Õ 4ð,˜Lð ,ñ "ñ"ð	"ð& ×ÑÔà�N‰NÜ#×*Ñ*ØÐ6˜dŸh™h y°"Ó5Ð6Ø +Ø!-Ø"×1Ñ1°$·(±(¸;Ó2GÓHô	öð{D	ðL �Wˆ}Ðøôk ×&Ñ&ò 	SÜ!Ð"QÓRÐRÜ×!Ñ!ò 	/Ü JÐ.ûð	/üòx0ùò,s%   ÁAJ Ç,K

ÈK
Ê0KÊ;KËK)r   zPath | Noner   z
int | Noner   r9   )rK   r
   Úreturnz,tuple[Dependency, list[VulnerabilityResult]])Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚDEFAULT_OSV_URLr   rL   © r   r   r   r      s@   „ ñð
 5€Oð "&Ø"Ø&ð	àðð ðð ó	ô&jr   r   )r[   Ú
__future__r   r;   ÚloggingÚpathlibr   Útypingr   r   r>   Úpackaging.versionr   Úpip_audit._cacher   Úpip_audit._service.interfacer	   r
   r   r   r   r   Ú	getLoggerrX   rC   r   r]   r   r   ú<module>rf      sQ   ðñõ #ã Û Ý ß ã Ý %å ,÷÷ ð 
ˆ×	Ñ	˜8Ó	$€ôEÐ%õ Er   