
    ܖig                     j   d Z  G d d      Z G d de      Z G d de      Z G d de      Z G d	 d
e      Z G d de      Z G d de      Z G d de      Z G d de      Z	 G d de      Z
 G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d d e      Z G d! d"e      Z G d# d$e      Z G d% d&e      Z G d' d(e      Z G d) d*e      Z G d+ d,e      Z G d- d.e      Z G d/ d0e      Z G d1 d2e      Z G d3 d4e      Z G d5 d6e      Z G d7 d8e      Z G d9 d:e      Z G d; d<e      Z G d= d>e      Z G d? d@e      Z  G dA dBe      Z!i dCedDedEedFedGedHedIedJe	dKe
dLedMedNedOedPedQedRedSeeeeeeeeeeeeeee e!dTZ"yU)Vz@
Validate each type according to the PURL spec type definitions
c                   "   e Zd ZU dZeed<   	 eed<   	 eed<   	 dZeed<   	 eed<   	 eed<   	 d	d
hZe	ed<   	 dZ
eed<   	 dZeed<   	 dZeed<   	 eed<   	 edd       Zed        Zed        Zed        Zed        Zedd       Zed        Zy)BasePurlTypez.
    Base class for all PURL type classes
    type	type_namedescriptionFuse_repositorydefault_repository_urlnamespace_requirementrepository_urlarchallowed_qualifiersTnamespace_case_sensitivename_case_sensitiveversion_case_sensitivepurl_patternc              #   L  K   ddl m} ddl m} |s ||j                  d       yddl m} t        ||      s	 |j                  |d	      }|s| j                  |      }| j                  |      E d{    | j                  |      E d{    | j                  |      E d{    |r| j                  |      E d{    | j                  ||      }|r|E d{    yy# t        $ r&} ||j                  d
|d|        Y d}~yd}~ww xY w7 7 7 v7 ]7 @w)z
        Validate a PackageURL instance or string.
        Yields ValidationMessage and performs strict validation if strict=True
            ValidationMessageValidationSeverityzNo purl providedseveritymessageN
PackageURLF)normalize_purlzInvalid purl z	 string: )strict)
packageurlr   r   ERRORr   
isinstancefrom_string	Exception	normalize_validate_namespace_validate_name_validate_version_validate_qualifiersvalidate_using_type_rules)clspurlr   r   r   r   emessagess           W/var/www/html/content-pipeline/venv/lib/python3.12/site-packages/packageurl/validate.pyvalidatezBasePurlType.validateD   s6     	11#+11*  )$
+!--d5-I ==&D**4000%%d+++((...//55500f0E #  '/55+D89QC@   	1+.5  s   8D$C( 'D$5D6D$DD$'D(D$D D$!D""D$(	D1DD$DD$D$D$ D$"D$c              #     K   ddl m} ddl m} | j                  dk(  r0|j                  r$ ||j
                  d| j                         n>| j                  dk(  r/|j                  s# ||j
                  d| j                         |j                  d	k(  rY|j                  rL|j                  |j                  j                         k7  r$ ||j                  d
| j                         y y y | j                  sY|j                  rL|j                  j                         |j                  k7  r$ ||j                  d| j                         y y y y w)Nr   r   r   
prohibitedz'Namespace is prohibited for purl type: r   requiredz%Namespace is required for purl type: cpanz+Namespace must be uppercase for purl type: z+Namespace is not lowercased for purl type: )r   r   r   r	   	namespacer   r   upperWARNINGr   lowerr)   r*   r   r   s       r-   r$   z BasePurlType._validate_namespacem   s5    01$$4#+11A#((N 
 &&*4T^^#+11?|L  99~~$..DNN4H4H4J"J'/77I#((V  #K~ ,,$$&$..8#+33Echh\R  9  -s   EEc              #      K   | j                   se|j                  rX|j                  j                         |j                  k7  r0ddlm} ddlm}  ||j                  d| j                         y y y y w)Nr   r   r   z&Name is not lowercased for purl type: r   )r   namer6   r   r   r   r5   r   r7   s       r-   r%   zBasePurlType._validate_name   s`     &&4999Jdii9W45#+33@M 	 :X9&   A3A5c              #      K   | j                   se|j                  rX|j                  j                         |j                  k7  r0ddlm} ddlm}  ||j                  d| j                         y y y y w)Nr   r   r   z)Version is not lowercased for purl type: r   )r   versionr6   r   r   r   r5   r   r7   s       r-   r&   zBasePurlType._validate_version   sf     ))dllt||?Q?Q?SW[WcWc?c45#+33CCHH<P 	 @dl)r:   c           	          ddl m} ddl m}  ||j                  |j                  |j
                  |j                  |j                  |j                  d      \  }}}}}}	 |||||||	      S )Nr   r   )r#   F)encode)r   r3   r9   r<   
qualifierssubpath)	r   r   r#   r   r3   r9   r<   r?   r@   )
r)   r*   r   r#   	type_normnamespace_norm	name_normversion_normqualifiers_normsubpath_norms
             r-   r#   zBasePurlType.normalize   sr    )( 				 	Z	>9lO\ $ & 
 	
    c                     t        g       S )z
        Validate using any additional type specific rules.
        Yield validation messages.
        Subclasses can override this method to add type specific validation rules.
        )iter)r)   r*   r   s      r-   r(   z&BasePurlType.validate_using_type_rules   s     BxrG   c              #   D  K   |j                   sy t        |j                   j                               }| j                  }||z
  }|rYddlm} ddlm}  ||j                  ddj                  t        |             ddj                  t        |                    y y w)Nr   r   r   zInvalid qualifiers found: z, z. Allowed qualifiers are: r   )
r?   setkeysr   r   r   r   INFOjoinsorted)r)   r*   purl_qualifiers_keysallowed_qualifiers_set
disallowedr   r   s          r-   r'   z!BasePurlType._validate_qualifiers   s     "4??#7#7#9:!$!7!7),BB
45#+0006*;M1N0O P//3yy@V9W/X.Y[ 	 s   BB NF)__name__
__module____qualname____doc__str__annotations__r   boolr   dictr   r   r   classmethodr.   r$   r%   r&   r#   r(   r'    rG   r-   r   r      s    I4N&, ND A>I 0&99;%)d)_ $$Z#'D']@&  & P  B     
 
2    rG   r   c                   <    e Zd ZdZdZdZdZdZdZddhZ	d	Z
d	ZdZd
Zy)AlpmTypeDefinitionalpmzArch Linux packagezJArch Linux packages and other users of the libalpm/pacman package manager.T r1   r
   r   Fzpkg:alpm/.*NrT   rU   rV   r   r   r   r   r   r	   r   r   r   r   r   r]   rG   r-   r_   r_      sD    D$IbKN&*F3$! LrG   r_   c                   <    e Zd ZdZdZdZdZdZdZddhZ	d	Z
d	ZdZd
Zy)ApkTypeDefinitionapkzAPK-based packageszAlpine Linux APK-based packagesTra   r1   r
   r   Fz
pkg:apk/.*Nrb   r]   rG   r-   rd   rd      sD    D$I7KN&*F3$!LrG   rd   c                   :    e Zd ZdZdZdZdZdZdZdhZ	dZ
dZdZd	Zy
)BitbucketTypeDefinition	bitbucket	BitbucketzBitbucket-based packagesTzhttps://bitbucket.orgr1   r
   Fzpkg:bitbucket/.*Nrb   r]   rG   r-   rg   rg      sB    DI0KN4&*+$!%LrG   rg   c                   <    e Zd ZdZdZdZdZdZdZh dZ	dZ
dZdZd	Zy
)BitnamiTypeDefinitionbitnamiBitnamizBitnami-based packagesTz.https://downloads.bitnami.com/files/stacksmithr0   >   r   distror
   Fzpkg:bitnami/.*Nrb   r]   rG   r-   rk   rk   	  s?    DI.KNM(=$!#LrG   rk   c                   :    e Zd ZdZdZdZdZdZdZdhZ	dZ
dZdZd	Zy
)CargoTypeDefinitioncargoCargozCargo packages for RustTzhttps://crates.io/r0   r
   Fzpkg:cargo/.*Nrb   r]   rG   r-   rp   rp     sB    DI/KN1(*+$!!LrG   rp   c                   :    e Zd ZdZdZdZdZdZdZdhZ	dZ
dZdZd	Zy
)CocoapodsTypeDefinition	cocoapods	CocoaPodszCocoaPods podsTzhttps://cdn.cocoapods.org/r0   r
   Fzpkg:cocoapods/.*Nrb   r]   rG   r-   rt   rt   %  sB    DI&KN9(*+$!%LrG   rt   c                   :    e Zd ZdZdZdZdZdZdZdhZ	dZ
dZdZd	Zy
)ComposerTypeDefinitioncomposerComposerzComposer PHP packagesTzhttps://packagist.orgr1   r
   Fzpkg:composer/.*Nrb   r]   rG   r-   rx   rx   3  sB    DI-KN4&*+$!$LrG   rx   c                   <    e Zd ZdZdZdZdZdZdZh dZ	dZ
dZdZd	Zy
)ConanTypeDefinitionconanzConan C/C++ packageszConan C/C++ packages. The purl is designed to closely resemble the Conan-native <package-name>/<package-version>@<user>/<channel> syntax for package references as specified in https://docs.conan.io/en/1.46/cheatsheet.html#package-terminologyTzhttps://center.conan.iooptional>   prevrrevuserchannelr
   Fzpkg:conan/.*Nrb   r]   rG   r-   r|   r|   A  sB    D&I JKN6&N$!!LrG   r|   c                   <    e Zd ZdZdZdZdZdZdZh dZ	dZ
dZdZd	Zy
)CondaTypeDefinitioncondaCondazconda is for Conda packagesTzhttps://repo.anaconda.comr0   >   r   buildsubdirr   r
   Fzpkg:conda/.*Nrb   r]   rG   r-   r   r   O  s?    DI3KN8(Q$!!LrG   r   c                   Z     e Zd ZdZdZdZdZdZdZh dZ	dZ
dZdZd	Zed fd
	       Z xZS )CpanTypeDefinitionr2   CPANzCPAN Perl packagesTzhttps://www.cpan.org/r~   >   extvcs_urldownload_urlr
   Fzpkg:cpan/.*c              #   X  K   ddl m} ddl m} |j                  r1d|j                  v r# ||j
                  d| j                         |j                  s1d|j                  v r# ||j
                  d| j                         t        | !  ||      }|r|E d {    y y 7 w)	Nr   r   r   z::zDName must not contain '::' when Namespace is present for purl type: r   -zBName must not contain '-' when Namespace is absent for purl type: )	r   r   r   r3   r9   r   r   superr(   r)   r*   r   r   r   r,   	__class__s         r-   r(   z,CpanTypeDefinition.validate_using_type_rulesj  s     01>>ddii/#+11^_b_g_g^jk  ~~#"2#+11\]`]e]e\hi  74T6B s   BB*!B("B*rS   rT   rU   rV   r   r   r   r   r   r	   r   r   r   r   r   r\   r(   __classcell__r   s   @r-   r   r   ]  sR    DI*KN4&M$! L   rG   r   c                   :    e Zd ZdZdZdZdZdZdZdhZ	dZ
dZdZd	Zy
)CranTypeDefinitioncranCRANzCRAN R packagesTzhttps://cran.r-project.orgr0   r
   Fzpkg:cran/.*Nrb   r]   rG   r-   r   r   ~  sB    DI'KN9(*+$! LrG   r   c                   <    e Zd ZdZdZdZdZdZdZddhZ	d	Z
d	ZdZd
Zy)DebTypeDefinitiondebzDebian packagez8Debian packages, Debian derivatives, and Ubuntu packagesTra   r1   r
   r   Fz
pkg:deb/.*Nrb   r]   rG   r-   r   r     sD    D IPKN&*F3$!LrG   r   c                   :    e Zd ZdZdZdZdZdZdZdhZ	dZ
dZdZd	Zy
)DockerTypeDefinitiondockerzDocker imagezfor Docker imagesTzhttps://hub.docker.comr~   r
   Fzpkg:docker/.*Nrb   r]   rG   r-   r   r     sB    DI)KN5&*+$!"LrG   r   c                   <    e Zd ZdZdZdZdZdZdZddhZ	dZ
dZdZd	Zy
)GemTypeDefinitiongemRubyGemsTzhttps://rubygems.orgr0   r
   platformFz
pkg:gem/.*Nrb   r]   rG   r-   r   r     sD    DI KN3(*J7$!LrG   r   c                   <    e Zd ZdZdZdZdZdZdZddhZ	dZ
dZd	Zd
Zy)GenericTypeDefinitiongenericzGeneric PackagezThe generic type is for plain, generic packages that do not fit anywhere else such as for "upstream-from-distro" packages. In particular this is handy for a plain version control repository such as a bare git repo in combination with a vcs_url.Fra   r~   checksumr   Tzpkg:generic/.*Nrb   r]   rG   r-   r   r     sG    D!I MKN&$n5$!#LrG   r   c                   :    e Zd ZdZdZdZdZdZdZdhZ	dZ
dZdZd	Zy
)GithubTypeDefinitiongithubGitHubzGitHub-based packagesTzhttps://github.comr1   r
   Fzpkg:github/.*Nrb   r]   rG   r-   r   r     sB    DI-KN1&*+$!"LrG   r   c                   :    e Zd ZdZdZdZdZdZdZdhZ	dZ
dZdZd	Zy
)GolangTypeDefinitiongolangz
Go packagezGo packagesTra   r1   r
   Fzpkg:golang/.*Nrb   r]   rG   r-   r   r     sB    DI#KN&*+$!"LrG   r   c                   X     e Zd ZdZdZdZdZdZdZdhZ	dZ
dZdZd	Zed fd
	       Z xZS )HackageTypeDefinitionhackagezHaskell packagezHaskell packagesTzhttps://hackage.haskell.orgr0   r
   Fzpkg:hackage/.*c              #      K   ddl m} ddl m} d|j                  v r# ||j                  d| j
                         t        |   ||      }|r|E d {    y y 7 wNr   r   r   _z.Name cannot contain underscores for purl type:r   r   r   r   r9   r5   r   r   r(   r   s         r-   r(   z/HackageTypeDefinition.validate_using_type_rules  d     01$))#+33HU  74T6B    AA!AA!rS   r   r   s   @r-   r   r     sU    D!I(KN:(*+$!#L   rG   r   c                   :    e Zd ZdZdZdZdZdZdZdhZ	dZ
dZdZd	Zy
)HexTypeDefinitionhexHexzHex packagesTzhttps://repo.hex.pmr~   r
   Fz
pkg:hex/.*Nrb   r]   rG   r-   r   r     sB    DI$KN2&*+$!LrG   r   c                   :    e Zd ZdZdZdZdZdZdZdhZ	dZ
dZdZdZy	)
HuggingfaceTypeDefinitionhuggingfacezHuggingFace modelszHugging Face ML modelsTra   r1   r
   zpkg:huggingface/.*Nrb   r]   rG   r-   r   r   
  sB    D$I.KN&*+#!'LrG   r   c                   :    e Zd ZdZdZdZdZdZdZdhZ	dZ
dZdZd	Zy
)LuarocksTypeDefinitionluarocksLuaRocksz$Lua packages installed with LuaRocksTra   r~   r
   Fzpkg:luarocks/.*Nrb   r]   rG   r-   r   r     sB    DI<KN&*+$!$LrG   r   c                   <    e Zd ZdZdZdZdZdZdZh dZ	dZ
dZdZdZy	)
MavenTypeDefinitionmavenMavenz/PURL type for Maven JARs and related artifacts.Tz%https://repo.maven.apache.org/maven2/r1   >   r   
classifierr
   zpkg:maven/.*Nrb   r]   rG   r-   r   r   &  s?    DIGKND&A#!!LrG   r   c                   <    e Zd ZdZdZdZdZdZdZh dZ	dZ
dZdZdZy	)
MlflowTypeDefinitionmlflowra   z-MLflow ML models (Azure ML, Databricks, etc.)Tr0   >   run_id
model_uuidr
   Fzpkg:mlflow/.*Nrb   r]   rG   r-   r   r   4  s?    DIEKN(C$!"LrG   r   c                   :    e Zd ZdZdZdZdZdZdZdhZ	dZ
dZdZd	Zy
)NpmTypeDefinitionnpmzNode NPM packageszPURL type for npm packages.Tzhttps://registry.npmjs.org/r~   r
   Fz
pkg:npm/.*Nrb   r]   rG   r-   r   r   B  sB    D#I3KN:&*+$!LrG   r   c                   :    e Zd ZdZdZdZdZdZdZdhZ	dZ
dZdZd	Zy
)NugetTypeDefinitionnugetNuGetzNuGet .NET packagesTzhttps://www.nuget.orgr0   r
   Fzpkg:nuget/.*Nrb   r]   rG   r-   r   r   P  sB    DI+KN4(*+$!!LrG   r   c                   <    e Zd ZdZdZdZdZdZdZh dZ	dZ
dZdZd	Zy
)OciTypeDefinitionociz	OCI imagezFor artifacts stored in registries that conform to the OCI Distribution Specification https://github.com/opencontainers/distribution-spec including container images built by Docker and othersTra   r0   >   tagr   r
   Fz
pkg:oci/.*Nrb   r]   rG   r-   r   r   ^  sB    DI XKN(:$!LrG   r   c                   X     e Zd ZdZdZdZdZdZdZdhZ	dZ
dZdZd	Zed fd
	       Z xZS )PubTypeDefinitionpubPubzDart and Flutter pub packagesTzhttps://pub.dartlang.orgr0   r
   Fz
pkg:pub/.*c              #   D  K   ddl m} ddl m} t        d |j                  D              s# ||j
                  d| j                         d|j                  v r# ||j
                  d| j                         t        | !  ||      }|r|E d {    y y 7 w)	Nr   r   r   c              3   J   K   | ]  }|j                         xs |d k(    yw)r   N)isalnum).0cs     r-   	<genexpr>z>PubTypeDefinition.validate_using_type_rules.<locals>.<genexpr>~  s"     >q199;*!s(*>s   !#zhName contains invalid characters but should only contain letters, digits, or underscores for purl type: r    zGName contains spaces but should use underscores instead for purl type: )	r   r   r   allr9   r5   r   r   r(   r   s         r-   r(   z+PubTypeDefinition.validate_using_type_rulesy  s     01>DII>>#+33 C  DG  DL  DL  CO  P 
 $))#+33abebjbjamn  74T6B s   BB BB rS   r   r   s   @r-   r   r   l  sU    DI5KN7(*+$!L   rG   r   c                   Z     e Zd ZdZdZdZdZdZdZddhZ	d	Z
d	ZdZd
Zed fd	       Z xZS )PypiTypeDefinitionpypiPyPIzPython packagesTzhttps://pypi.orgr0   	file_namer
   Fzpkg:pypi/.*c              #      K   ddl m} ddl m} d|j                  v r# ||j                  d| j
                         t        |   ||      }|r|E d {    y y 7 wr   r   r   s         r-   r(   z,PypiTypeDefinition.validate_using_type_rules  r   r   rS   r   r   s   @r-   r   r     sX    DI'KN/(%'78$! L   rG   r   c                   :    e Zd ZdZdZdZdZdZdZdhZ	dZ
dZdZd	Zy
)QpkgTypeDefinitionqpkgzQNX packagezQNX packagesTra   r1   r
   Fzpkg:qpkg/.*Nrb   r]   rG   r-   r   r     sB    DI$KN&*+$! LrG   r   c                   <    e Zd ZdZdZdZdZdZdZh dZ	dZ
dZdZd	Zy
)RpmTypeDefinitionrpmRPMzRPM packagesTra   r1   >   r   epochr
   Fz
pkg:rpm/.*Nrb   r]   rG   r-   r   r     s?    DI$KN&<$!LrG   r   c                   <    e Zd ZdZdZdZdZdZdZh dZ	dZ
dZdZd	Zy
)SwidTypeDefinitionswidz"Software Identification (SWID) TagzBPURL type for ISO-IEC 19770-2 Software Identification (SWID) tags.Fra   r~   >   patchtag_idtag_versiontag_creator_nametag_creator_regidTzpkg:swid/.*Nrb   r]   rG   r-   r   r     s?    D4IZKN&d#! LrG   r   c                   :    e Zd ZdZdZdZdZdZdZdhZ	dZ
dZdZdZy)	SwiftTypeDefinitionswiftzSwift packagesTra   r1   r
   zpkg:swift/.*Nrb   r]   rG   r-   r   r     sB    D I&KN&*+#!!LrG   r   r`   re   rh   rl   rq   ru   ry   r}   r   r2   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   N)#rW   r   r_   rd   rg   rk   rp   rt   rx   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   DEFINITIONS_BY_TYPEr]   rG   r-   <module>r      s  2
~ ~B! !   &l &$L $", "&l &%\ %", "", "   B! !   #< #   $L $#< ##< # L  8   ( (%\ %", "#< #   ", "      D   8! !   ! !", "!
!	! (! $	!
  ! (! &!  !  ! ! ! 
! "! 
! $!  "!!" "#!$ %,& "  A! rG   