
    ܖi^U                    p   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	 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 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 er%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  ee!e"f   Z#e"e!fZ$	  G d de!e      Z%e	 G d d             Z&d0dZd0dZed1d2d       Z'ed3d       Z'd1d4dZ'd1d5dZ(	 d1	 	 	 	 	 	 	 d6dZ)	 	 	 	 	 	 d7d Z*	 d1	 	 	 	 	 	 	 	 	 d8d!Z+	 d1	 	 	 	 	 	 	 d9d"Z,e	 d:	 	 	 	 	 d;d#       Z-e	 	 	 	 	 	 d<d$       Z-e	 d:	 	 	 	 	 d=d%       Z-	 d1	 	 	 	 	 d=d&Z-d>d'Z.d1d?d(Z/e	 d:	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d@d)       Z0e	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dAd*       Z0e	 d:	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dBd+       Z0	 d1	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dCd,Z0 G d- d. ed.d/            Z1y)D    )annotationsN)
namedtuple)Mapping)	dataclass)Enum)TYPE_CHECKING)Any)Optional)Union)overload)quote)unquote)urlsplit)NoRouteAvailable)Callable)Iterable)ClassVar)Literal)Selfc                      e Zd ZdZdZdZy)ValidationSeverityerrorwarninginfoN)__name__
__module____qualname__ERRORWARNINGINFO     W/var/www/html/content-pipeline/venv/lib/python3.12/site-packages/packageurl/__init__.pyr   r   @   s    EGDr"   r   c                  :    e Zd ZU ded<   ded<   ej
                  Zy)ValidationMessager   severitystrmessageN)r   r   r   __annotations__dataclassesasdictto_dictr!   r"   r#   r%   r%   F   s      L  Gr"   r%   c                    t        | t              r| j                  d      n| }t        |      }t        |t              s|j	                  d      }|j                  dd      }|S )zo
    Return a percent-encoded unicode string, except for colon :, given an `s`
    byte or unicode string.
    utf-8z%3A:)
isinstancer'   encode_percent_quotedecodereplace)ss_bytesquoteds      r#   r   r   M   sT    
 $.a#5ahhw1GG$Ffc"w'^^E3'FMr"   c                ^    t        |       }t        |t              s|j                  d      }|S )z[
    Return a percent-decoded unicode string, given an `s` byte or unicode
    string.
    r.   )_percent_unquoter0   r'   r3   )r5   unquoteds     r#   r   r   Z   s+    
  "Hh$??7+Or"   c                     y Nr!   r1   s    r#   
get_quoterr>   e   s    @Cr"   c                     y r<   r!   r=   s    r#   r>   r>   i   s    69r"   c                6    | du rt         S | du rt        S | d S y)zU
    Return quoting callable given an `encode` tri-boolean (True, False or None)
    TFNc                    | S r<   r!   )xs    r#   <lambda>zget_quoter.<locals>.<lambda>v   s     r"   )r   r   r=   s    r#   r>   r>   m   s,     ~	5	 
r"   c                    | sy t        | t              r| n| j                  d      }t        |      } ||      }|j	                         j                         xs d S )Nr.   r0   r'   r3   r>   striplower)typer1   type_strquoters       r#   normalize_typerK   y   sP    !$,t$++g2FHFhH>>!!#+t+r"   c                   | sy t        | t              r| n| j                  d      }|j                         j                  d      }|dv r|j	                         }|r|dv r|j                         }|j                  d      D cg c]  }|j                         s| }}t        t        |      |      }dj                  |      xs d S c c}w )Nr.   /)
	bitbucketgithubpypigitlabcomposerluarocksqpkgalpmapkhexcpan)
r0   r'   r3   rF   rG   uppersplitmapr>   join)	namespaceptyper1   namespace_strsegsegmentssegments_quoteds          r#   normalize_namespacerc      s     !+Is!;IAQAQRYAZM!'')//4M   &++-6"%++-,2237G399;GHG*V,h7O88O$,, Hs   C	C	c                H   t        |t              rK|j                  d      }|rd|j                         v r| S |r"d|j                         v r| j                         S t        |t              r6d|j                         v r| S d|j                         v r| j                         S | S )zMLflow purl names are case-sensitive for Azure ML, it is case sensitive and must be kept as-is in the package URL
    For Databricks, it is case insensitive and must be lowercased in the package URLrepository_urlazureml
databricks)r0   dictgetrG   r'   )name_str
qualifiersrepo_urls      r#   normalize_mlflow_namerm      s     *d#>>"23	X^^%55O(88>>##*c"
((**O:++-->>##Or"   c                   | sy t        | t              r| n| j                  d      }t        |      } ||      }|j	                         j	                  d      }|r|dv rt        ||      S |dv r|j                         }|dk(  r |j                  dd      j                         }|dk(  r|j                  dd      }|d	k(  r%t        j                  d
d|j                               }|xs d S )Nr.   rM   mlflow)rN   rO   rP   rQ   rR   rS   ocinpmrU   rV   bitnamirW   pubrP   _-hackagers   z	[^a-z0-9])
r0   r'   r3   r>   rF   rm   rG   r4   resub)namerk   r^   r1   rj   rJ   s         r#   normalize_namerz      s     !$,t$++g2FHFhH~~%%c*H8$$Xz::   >>###C-335	##C-~66,X^^-=>tr"   c                    | sy t        | t              r| n| j                  d      }t        |      } ||j	                               }|r$t        |t              r|dv r|j                         S |xs d S )Nr.   )huggingfacerp   rE   )versionr^   r1   version_strrJ   s        r#   normalize_versionr      sn     '5'7>>';RKF**,-KE3'E5K,K  ""$r"   c                     y r<   r!   rk   r1   s     r#   normalize_qualifiersr      s     r"   c                     y r<   r!   r   s     r#   r   r      s     r"   c                     y r<   r!   r   s     r#   r   r      s     #&r"   c                F   | s|rdS i S t        | t              rt        | t              r| n| j                  d      }|j	                  d      }t        d |D              rt        d|      |D cg c]  }|j                  d       }}|D cg c]
  \  }}}||f }	}}}n/t        | t              r| j                         }	nt        d|       t        |      }
|	D ci c]N  \  }}|rG|j                         r7|r5|j                         r%|j                         j                          |
|      P }}}t        j                  t        j                  z   dz   |D ]x  }|st        d	      d
|v rt        d|      d|v rt        d|      t        fd|D              rt        d|      |d   t        j                  v slt        d|       t        t!        |j                                     }|s|S t#        |      xs dS c c}w c c}}}w c c}}w )z
    Return normalized `qualifiers` as a mapping (or as a string if `encode` is
    True). The `qualifiers` arg is either a mapping or a string.
    Always return a mapping if decode is True (and never None).
    Raise ValueError on errors.
    Nr.   &c              3  $   K   | ]  }d |v 
 yw)=Nr!   ).0kvs     r#   	<genexpr>z'normalize_qualifiers.<locals>.<genexpr>  s     7s"}7s   z7Invalid qualifier. Must be a string of key=value pairs:r   z,Invalid qualifier. Must be a string or dict:.-_zA qualifier key cannot be empty%z+A qualifier key cannot be percent encoded:  z'A qualifier key cannot contain spaces: c              3  &   K   | ]  }|v 
 y wr<   r!   r   cvalid_charss     r#   r   z'normalize_qualifiers.<locals>.<genexpr>)  s     1q#1   z_A qualifier key must be composed only of ASCII letters and numbersperiod, dash and underscore: r   z,A qualifier key cannot start with a number: )r0   
basestringr'   r3   rZ   any
ValueError	partitionrh   itemsr>   rF   rG   stringascii_lettersdigitssorted_qualifier_map_to_string)rk   r1   qualifiers_strqualifiers_listr   qualifiers_partskrt   vqualifiers_pairsrJ   qualifiers_mapkeyr   s                @r#   r   r      s8    t%2%*j)'1*c'B
HYHYZaHb )..s3777I/I\]  9HH"BLL-HHM]6^6^'!Q1v6^6^	J	%%++-G
~VWWF %AqqQWWY 	
	6!9$N  &&6>K U>??#:J3'RSS#:FsgNOO1S11003w8 
 q6V]]"KC7STT#U& &!5!5!789N#N3;t;M I6^s   2HH%AHc                ~    | j                         D cg c]  \  }}| d|  }}}dj                  |      S c c}}w )Nr   r   )r   r\   )rk   r   valuer   s       r#   r   r   9  sB    :D:J:J:LMJC#aw'MOM88O$$ Ns   9c                   | sy t        | t              r| n| j                  d      }t        |      }|j	                  d      }|D cg c]   }|j                         s|dvs ||      " }}dj                  |      }|xs d S c c}w )Nr.   rM   ).z..)r0   r'   r3   r>   rZ   rF   r\   )subpathr1   subpath_strrJ   ra   r5   s         r#   normalize_subpathr   >  s    '5'7>>';RKF  %H#+RaqwwyQk=Qq	RHR((8$K$ Ss   BB"
Bc                     y r<   r!   rH   r]   ry   r}   rk   r   r1   s          r#   	normalizer   J  s	     GJr"   c                     y r<   r!   r   s          r#   r   r   V  s	     KNr"   c                     y r<   r!   r   s          r#   r   r   b  s	     X[r"   c                    t        | |      }t        |||      }t        ||||      }	t        || |      }
t	        ||      }t        ||      }|||	|
||fS )z+
    Return normalized purl components
    )rK   rc   rz   r   r   r   )rH   r]   ry   r}   rk   r   r1   	type_normnamespace_norm	name_normversion_normqualifiers_normsubpath_norms                r#   r   r   n  sh    & tV,I(IvFNtZFCI$WdF;L*:v>O$Wf5LniP\\\r"   c                       e Zd ZU dZdZded<   ded<   ded<   ded	<   ded
<   ded<   ded<   	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d fdZddZddZdddZ	dddZ
dddZedd d       Zedd!d       Z xZS )"
PackageURLz\
    A purl is a package URL as defined at
    https://github.com/package-url/purl-spec
    pkgzClassVar[str]SCHEMEr'   rH   
str | Noner]   ry   r}   dict[str, str]rk   r   c           	     T   t        ||      }|j                         D ]  \  }	}
|
r	t        d|	 d       t        |||||      }|j                         D ]+  \  }	}
|
rt        |
t              s|
st        d|	 d|
d       |r%t        |t        t         f      st        d|d      |rt        ||||||d       \  }}}}}}nKd	d
lm}  ||      xs d} ||      } ||      xs d} ||      }t        |t               r|}ni } ||      }t        | %  | ||||||      S )N)rH   ry   zInvalid purl: z is a required argument.)rH   r]   ry   r}   r   z argument must be a string: r   z>Invalid purl: qualifiers argument must be a dict or a string: r=   r   )
ensure_str rH   r]   ry   r}   rk   r   )
rh   r   r   r0   r   r   packageurl.utilsr   super__new__)clsrH   r]   ry   r}   rk   r   normalize_purlrequiredr   r   strings
type_finalnamespace_final
name_finalversion_finalqualifiers_finalsubpath_finalr   	__class__s                      r#   r   zPackageURL.__new__  s    T-"..* 	MJC~cU2JKLL	M
 
 "--/ 	[JCE:6e~cU2NuiWXYZZ	[
 jj$5GHPQ[P^^_`   $	4*gVZ[  4#D)/RJ(3O#D)/RJ&w/M*d+#- #% &w/Mw%!'!  
 	
r"   c                "    | j                         S r<   )	to_string)selfargskwargss      r#   __str__zPackageURL.__str__  s    ~~r"   c                4    t        | j                               S r<   )hashr   )r   s    r#   __hash__zPackageURL.__hash__  s    DNN$%%r"   c                    | j                         }|rt        | j                  |      |d<   |j                         D ]  \  }}|xs |||<    |S )a  
        Return an ordered dict of purl components as {key: value}.
        If `encode` is True, then "qualifiers" are encoded as a normalized
        string. Otherwise, qualifiers is a mapping.
        You can provide a value for `empty` to be used in place of default None.
        r=   rk   )_asdictr   rk   r   )r   r1   emptydatafieldr   s         r#   r,   zPackageURL.to_dict  sT     ||~!5doof!UD JJL 	)LE5.5DK	) r"   c           	     H   t        | j                  | j                  | j                  | j                  | j
                  | j                  |      \  }}}}}}| j                  d|dg}|r|j                  |df       |j                  |       |r"|j                  d       |j                  |       |r=|j                  d       t        |t              rt        |      }|j                  |       |r"|j                  d       |j                  |       dj                  |      S )z=
        Return a purl string built from components.
        r=   r/   rM   @?#r   )r   rH   r]   ry   r}   rk   r   r   extendappendr0   r   r   r\   )	r   r1   rH   r]   ry   r}   rk   r   purls	            r#   r   zPackageURL.to_string  s     ?HIINNIILLOOLL?
;iw
G S$,KKC()DKKKK KK*g.5jA
KK
#KKKK wwt}r"   c                    ddl m} |j                  | j                        }|s)t	        t
        j                  d| j                        gS t        |j                  | |            S )za
        Validate this PackageURL object and return a list of validation error messages.
        r   )DEFINITIONS_BY_TYPEzUnexpected purl type: expected r&   r(   )r   strict)	packageurl.validater   ri   rH   r%   r   r   listvalidate)r   r   r   validator_classs       r#   r   zPackageURL.validate  sd     	<-11$))<!/55=dii]K  O,,$v,FGGr"   c                    	 | j                  ||       }t        |t              sJ |j                  |      S # t        $ r/}t        t        j                  t        |            gcY d}~S d}~ww xY w)zX
        Validate a PURL string and return a list of validation error messages.
        r   )r   r   N)	from_stringr0   r   r   r   r%   r   r   r'   )r   r   r   purl_objes        r#   validate_stringzPackageURL.validate_string/  sq    

	tJGHh
333$$F$33 	!/55F 	s   7: 	A2$A-'A2-A2c           	     `   |r t        |t              r|j                         st        d      |j	                  d      \  }}}|r|| j
                  k7  rt        d| j
                   d|d      |j                         j                  d      }|j	                  d      \  }}}|r|st        d|d      t        j                  t        j                  z   dz   t        fd	|D              st        d
|d      |d   t        j                  v rt        d|d      |j                         }|}t        |dd      \  }}}	}
}|r|dz   |	z   }	|r|j                  dd      d   }|dz   |	z   }	|	j                  d      }	d}|dk(  r&|	j                  d      r|	j	                  d      \  }}}	|	j                  d      \  }}}|s|}d}|j                         j                  d      }|j                  d      }|D cg c]  }|s|j                         s| }}d}|s*t!        |      dkD  r|d   }|dd }dj#                  |      }nt!        |      dk(  r|d   }|st        d|      |rt%        |||||
|d      \  }}}}}}nt'        |
d      xs i } | |||||||      S c c}w )zf
        Return a PackageURL object parsed from a string.
        Raise ValueError on errors.
        z#A purl string argument is required.r/   zpurl is missing the required "z" scheme component: r   rM   z-purl is missing the required type component: r   c              3  &   K   | ]  }|v  
 y wr<   r!   r   s     r#   r   z)PackageURL.from_string.<locals>.<genexpr>Z  s     31#3r   z[purl type must be composed only of ASCII letters and numbers, period, dash and underscore: r   z&purl type cannot start with a number: r   T)urlschemeallow_fragments   rq   r   Nz-purl is missing the required name component: Fr=   r   )r0   r'   rF   r   r   r   lstripr   r   r   allrG   	_urlsplitrZ   
startswith
rpartitionlenr\   r   r   )r   r   r   r   sep	remaindertype_original_remainder	authoritypathr   r   original_schemer]   r}   ns_namens_name_partsr`   ry   nsrk   r   s                        @r#   r   zPackageURL.from_string@  s    :dC0

BCC!%!4Yf

*0<PQUPXXYZ 
 OO%,,S1	
 !* 3 3C 8sICLTHTUVWW**V]]:UB3U33mnsmvvwx  8v}}$EeYaPQQ&;D"d<
8	4 s?T)D066sA>qAO"S(4/D{{3 "	
 E>dooc2#'>>##6 IsD"&//#"6	3IG//#))#.c*(5MMMS/!3 $Ds#BI1$ #DLTHUVVCLD@E9dGZ .nUKQrJ9dGZQ_
 	
1 Ns   ?J+J+J+)NNNNNNT)rH   AnyStr | Noner]   r  ry   r  r}   r  rk   AnyStr | dict[str, str] | Noner   r  r   boolreturnr   )r   r	   r   r	   r  r'   )r  int)FN)r1   bool | Noner   r	   r  zdict[str, Any]T)r1   r  r  r'   )F)r   r  r  list['ValidationMessage'])r   r'   r   r  r  r  )r   r'   r   r  r  r   )r   r   r   __doc__r   r)   r   r   r   r,   r   r   classmethodr   r   __classcell__)r   s   @r#   r   r     s    
 "FM!
I
I ##'"!%59!%#G
G
 !G
 	G

 G
 3G
 G
 G
 
G
R & #JH     b
 b
r"   r   r   )r5   AnyStrr  r'   r  )r1   r  r  zCallable[[AnyStr], str])r1   Noner  zCallable[[str], str])r1   r  r  z.Callable[[AnyStr], str] | Callable[[str], str])rH   r  r1   r  r  r   )r]   r  r^   r   r1   r  r  r   )rj   r'   rk   z'Union[str, bytes, dict[str, str], None]r  Optional[str])
ry   r  rk   z.Union[Union[str, bytes], dict[str, str], None]r^   r   r1   r  r  r  )r}   r  r^   zOptional[Union[str, bytes]]r1   r  r  r   ).)rk   r  r1   Literal[True]r  r   )rk   r  r1   Literal[False] | Noner  r   )rk   r  r1   r  r  zstr | dict[str, str] | None)rk   r   r  r'   )r   r  r1   r  r  r   )rH   r  r]   r  ry   r  r}   r  rk   r  r   r  r1   r  r  z?tuple[str, str | None, str, str | None, str | None, str | None])rH   r  r]   r  ry   r  r}   r  rk   r  r   r  r1   r  r  zCtuple[str, str | None, str, str | None, dict[str, str], str | None])rH   r  r]   r  ry   r  r}   r  rk   r  r   r  r1   r  r  zPtuple[str, str | None, str, str | None, str | dict[str, str] | None, str | None])rH   r  r]   r  ry   r  r}   r  rk   r  r   r  r1   r  r  z^tuple[str | None, str | None, str | None, str | None, str | dict[str, str] | None, str | None])2
__future__r   r*   rw   r   collectionsr   collections.abcr   r   enumr   typingr   r	   r
   r   r   urllib.parser   r2   r   r9   r   r   packageurl.contrib.router   r   r   r   typing_extensionsr   r   r'   bytesr  r   r   r%   r>   rK   rc   rm   rz   r   r   r   r   r   r   r!   r"   r#   <module>r$     s  2 #  	  " # !        0 4 . 5(()&3:F S\
d  ! ! !
 
 C 
 C 
 9 
 9	, HL--%/-9D--87 0 	%
%>% % 	%
 %R W[#>HS 
HK.8E 

 
.8M 

 
FI&.&8C& & 
& GK;<.;<8C;< ;<|%
	 
  J
JJ J 	J
 /J J J EJ 
J 
N
NN N 	N
 /N N "N IN 
N 
 [
[[ [ 	[
 /[ [ [ V[ 
[$ ]
]] ] 	]
 /] ] ]]8Y
|^_Y
r"   