
    ܖi                    v   d 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	m
Z
 ddlmZ ddlmZmZmZmZ dd	lmZ  ej(                  e      Z ed
       G d d             Z ed
       G d de             Z ed
       G d de             Z e       f	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 	 	 ddZ G d de      Zy)z=
Functionality for resolving fixed versions of dependencies.
    )annotationsN)Iterator)	dataclass)Anycast)Version)
DependencyResolvedDependencyVulnerabilityResultVulnerabilityService)
AuditStateT)frozenc                  ,    e Zd ZU dZded<   ddZddZy)	
FixVersionzh
    Represents an abstract dependency fix version.

    This class cannot be constructed directly.
    r
   depc                    t         )z7
        A stub constructor that always fails.
        )NotImplementedError)self_args_kwargss      R/var/www/html/content-pipeline/venv/lib/python3.12/site-packages/pip_audit/_fix.py__init__zFixVersion.__init__#   s
     "!    c                &    | j                   t        u S )zK
        Check whether the `FixVersion` was unable to be resolved.
        )	__class__SkippedFixVersion)r   s    r   
is_skippedzFixVersion.is_skipped)   s     ~~!222r   N)r   r   r   r   returnNone)r   bool)__name__
__module____qualname____doc____annotations__r   r    r   r   r   r      s     
"3r   r   c                      e Zd ZU dZded<   y)ResolvedFixVersionz,
    Represents a resolved fix version.
    r   versionNr!   r"   r#   r$   r%   r&   r   r   r(   r(   0   s     r   r(   c                      e Zd ZU dZded<   y)r   zY
    Represents a fix version that was unable to be resolved and therefore, skipped.
    strskip_reasonNr*   r&   r   r   r   r   9   s     r   r   c              #  F  K   |j                         D ]F  \  }}|j                         r|st        t        |      }	 t	        | |||      }t        ||       H y# t        $ r8}t        |      }t        j                  |       t        ||       Y d}~d}~ww xY ww)z
    Resolves a mapping of dependencies to known vulnerabilities to a series of fix versions without
    known vulnerabilities.
    N)itemsr   r   r
   _resolve_fix_versionr(   FixResolutionImpossibler,   loggerdebugr   )serviceresultstater   vulnsr)   frir-   s           r   resolve_fix_versionsr9   B   s      lln 6
U>>%s+	6*7CFG$S'226 ' 	6c(KLL%#C55	6s.   ;B!AB!	B&.BB!BB!c           	        j                   |}|rs|j                  dj                   d        dfd}t        |D cg c]  } ||       c}      | j	                  t        j                              \  }}|rsS c c}w )NzResolving fix version for z, checking c                    |j                   D ]  }|kD  s	|c S  t        dj                   dj                   d|j                         )Nzfailed to fix dependency z (z0), unable to find fix version for vulnerability )fix_versionsr1   namer)   id)dvfix_versioncurrent_versionr   s      r   get_earliest_fix_versionz6_resolve_fix_version.<locals>.get_earliest_fix_versionj   s\     ~~ '0&&' *+CHH:R} E%%&TTF, r   )r?   r
   r@   r   r   r   )r)   update_stater=   maxqueryr
   )	r4   r   r7   r6   current_vulnsrC   r@   _rB   s	    `      @r   r0   r0   Z   s     kkOM
7z_L]^_	 WA7Q?WX"==);CHHo)VW=   Xs   Bc                      e Zd ZdZy)r1   zf
    Raised when `resolve_fix_versions` fails to find a fix version without known vulnerabilities
    N)r!   r"   r#   r$   r&   r   r   r1   r1   y   s     	r   r1   )r4   r   r5   z+dict[Dependency, list[VulnerabilityResult]]r6   r   r   zIterator[FixVersion])
r4   r   r   r
   r7   zlist[VulnerabilityResult]r6   r   r   r   )r$   
__future__r   loggingcollections.abcr   dataclassesr   typingr   r   packaging.versionr   pip_audit._servicer	   r
   r   r   pip_audit._stater   	getLoggerr!   r2   r   r(   r   r9   r0   	Exceptionr1   r&   r   r   <module>rT      s   #  $ !  %  (			8	$ $3 3 3, $   $
   #6!676 6 	60!	 % 	
 >	i 	r   