
    ܖi4                     F   d dl mZ d dlmZ d dlmZmZmZmZ d dl	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 d	dlmZmZmZmZ ddlmZmZm Z  ddl!m"Z" ddl#m$Z$ erd dlm%Z%m&Z&  ejN                  d       G d d             Z( G d d      Z) G d de      Z*y)    )Iterable)chain)TYPE_CHECKINGAnyOptionalUnion)warn)ElementN)
BaseHelper)	SortedSet   )ComparableTuple)SchemaVersion)SchemaVersion1Dot4SchemaVersion1Dot5SchemaVersion1Dot6SchemaVersion1Dot7   )ExternalReferenceHashType&_HashTypeRepositorySerializationHelper)	Component)Service)ObjectMetadataLibraryViewTypeT)%ignore_unknown_during_deserializationc                   ^   e Zd ZdZdddddddee   dee   dee   deee      deee      d	dfd
Z	e
 ej                  d       ej                  ej                  j                        d	ee   fd                     Zej"                  dee   d	dfd       Ze
 ej                  d       ej                  ej                  j                        d	ee   fd                     Zej"                  dee   d	dfd       Ze
 ej                  d       ej                  ej                  j                        d	ee   fd                     Zej"                  dee   d	dfd       Ze
 ej(                  e       ej                  d      d(d                     Zej"                  dee   d	dfd       Ze
 ej.                  e       ej.                  e       ej.                  e       ej.                  e       ej8                  ej:                  j<                  d       ej                  d      d)d                                                 Zej"                  dee   d	dfd       Zd	e fdZ!de"d	e#fdZ$de%d	e#fdZ&d	e'fdZ(d	efd Z)e*d!e+d    d"d#d	d fd$       Z,e*d!e+d    d%d&d	d fd'       Z-y)*Toola  
    This is our internal representation of the `toolType` complex type within the CycloneDX standard.

    Tool(s) are the things used in the creation of the CycloneDX document.

    Tool might be deprecated since CycloneDX 1.5, but it is not deprecated in this library.
    In fact, this library will try to provide a compatibility layer if needed.

    .. note::
        See the CycloneDX Schema for toolType: https://cyclonedx.org/docs/1.7/xml/#type_toolType
    Nvendornameversionhashesexternal_referencesr    r!   r"   r#   r$   returnc                Z    || _         || _        || _        |xs d| _        |xs d| _        y N r   )selfr    r!   r"   r#   r$   s         X/var/www/html/content-pipeline/venv/lib/python3.12/site-packages/cyclonedx/model/tool.py__init__zTool.__init__6   s1     	l#6#<"     r   c                     | j                   S )zu
        The name of the vendor who created the tool.

        Returns:
            `str` if set else `None`
        _vendorr)   s    r*   r    zTool.vendorD        ||r,   c                     || _         y Nr.   )r)   r    s     r*   r    zTool.vendorP   s	    r,   r   c                     | j                   S )z_
        The name of the tool.

        Returns:
             `str` if set else `None`
        _namer0   s    r*   r!   z	Tool.nameT   s     zzr,   c                     || _         y r3   r5   )r)   r!   s     r*   r!   z	Tool.name`   s	    
r,      c                     | j                   S )zb
        The version of the tool.

        Returns:
             `str` if set else `None`
        _versionr0   s    r*   r"   zTool.versiond   s     }}r,   c                     || _         y r3   r:   )r)   r"   s     r*   r"   zTool.versionp   s	    r,      c                     | j                   S )zi
        The hashes of the tool (if applicable).

        Returns:
            Set of `HashType`
        )_hashesr0   s    r*   r#   zTool.hashest   r1   r,   c                 $    t        |      | _        y r3   )r   r?   )r)   r#   s     r*   r#   zTool.hashes   s     (r,   	reference   c                     | j                   S )z
        External References provides a way to document systems, sites, and information that may be relevant but which
        are not included with the BOM.

        Returns:
            Set of `ExternalReference`
        )_external_referencesr0   s    r*   r$   zTool.external_references   s     (((r,   c                 $    t        |      | _        y r3   )r   rD   )r)   r$   s     r*   r$   zTool.external_references   s    $-.A$B!r,   c           	          t        | j                  | j                  | j                  t        | j                        t        | j
                        f      S r3   )_ComparableTupler    r!   r"   r#   r$   r0   s    r*   __comparable_tuplezTool.__comparable_tuple   sA    KKDLLT[[)+;D<T<T+U!
  	r,   otherc                 f    t        |t              r!| j                         |j                         k(  S yNF)
isinstancer   _Tool__comparable_tupler)   rI   s     r*   __eq__zTool.__eq__   s,    eT"**,0H0H0JJJr,   c                 p    t        |t              r!| j                         |j                         k  S t        S r3   )rL   r   rM   NotImplementedrN   s     r*   __lt__zTool.__lt__   s/    eT"**,u/G/G/IIIr,   c                 4    t        | j                               S r3   )hashrM   r0   s    r*   __hash__zTool.__hash__       D++-..r,   c                 V    d| j                    d| j                   d| j                   dS )Nz<Tool name=z
, version=z	, vendor=>)r!   r"   r    r0   s    r*   __repr__zTool.__repr__   s*    TYYKz$,,yUVWWr,   cls	componentr   c                      | |j                   |j                  |j                  |j                  |j                        S )Nr   )groupr!   r"   r#   r$   )rZ   r[   s     r*   from_componentzTool.from_component   s8    ??%%## ) = =
 	
r,   servicer   c                 j     | |j                   |j                  |j                  |j                        S )N)r    r!   r"   r$   )r]   r!   r"   r$   )rZ   r_   s     r*   from_servicezTool.from_service   s-    ==OO ' ; ;	
 	
r,   )r%   zSortedSet[HashType])r%   zSortedSet[ExternalReference]).__name__
__module____qualname____doc__r   strr   r   r   r+   propertyserializablexml_sequence
xml_stringXmlStringSerializationTypeNORMALIZED_STRINGr    setterr!   r"   type_mappingr   r#   viewr   r   r   r   	xml_arrayXmlArraySerializationTypeNESTEDr$   rG   rM   objectboolrO   r   rR   intrU   rY   classmethodtyper^   ra   r(   r,   r*   r   r   (   s   
 !%"!%/3EI== sm= #	=
 (+,= &h/@&AB= 
= \q!\\DDVVW  X "  ]]Xc] t   \q!\\DDVVWhsm  X "  
[[# 4   \q!\\DDVVW#  X "  ^^ x}       \EF\q! " G  ]])Xh/ )D ) ) \)*\)*\)*\)*\LBBII;W\q!) " X + + + + ) Cx@Q7R CW[ C  C$4 F t 
C D 
/# /X# X 
DL 
[ 
V 
 
 
$v, 
 
v 
 
r,   r   c            	       x   e Zd ZdZdddddeee      deee      deee      ddfdZ	e
dd	       Zej                  dee   ddfd
       Ze
dd       Zej                  dee   ddfd       Ze
dd       Zej                  dee   ddfd       ZdefdZdefdZdefdZdedefdZdedefdZdefdZy)ToolRepositoryz(
    The repository of tool formats
    N
componentsservicestoolsr{   r|   r}   r%   c                F    |xs d| _         |xs d| _        |xs d| _        y r'   rz   )r)   r{   r|   r}   s       r*   r+   zToolRepository.__init__   s&     %* B[b
r,   c                     | j                   S )z@
        Returns:
            A SortedSet of Components
        )_componentsr0   s    r*   r{   zToolRepository.components   s     r,   c                 $    t        |      | _        y r3   )r   r   )r)   r{   s     r*   r{   zToolRepository.components   s    $Z0r,   c                     | j                   S )z>
        Returns:
            A SortedSet of Services
        )	_servicesr0   s    r*   r|   zToolRepository.services   s     ~~r,   c                 $    t        |      | _        y r3   )r   r   )r)   r|   s     r*   r|   zToolRepository.services   s    "8,r,   c                     | j                   S r3   )_toolsr0   s    r*   r}   zToolRepository.tools   s    {{r,   c                 H    |rt        dt               t        |      | _        y )Nzh`@.tools` is deprecated from CycloneDX v1.5 onwards. Please use `@.components` and `@.services` instead.)r	   DeprecationWarningr   r   )r)   r}   s     r*   r}   zToolRepository.tools   s$     G#%  &r,   c                     t        | j                        t        | j                        z   t        | j                        z   S r3   lenr   r   r   r0   s    r*   __len__zToolRepository.__len__   s7    4;;$""#$$..!" 	"r,   c                     t        | j                        dkD  xs2 t        | j                        dkD  xs t        | j                        dkD  S )Nr   r   r0   s    r*   __bool__zToolRepository.__bool__   sF    4;;!# '4##$q('4>>"Q&	'r,   c                     t        t        | j                        t        | j                        t        | j                        f      S r3   )rG   r   r   r   r0   s    r*   rH   z!ToolRepository.__comparable_tuple  s:    T[[)T--.T^^,!
  	r,   rI   c                 f    t        |t              r!| j                         |j                         k(  S yrK   )rL   ry   !_ToolRepository__comparable_tuplerN   s     r*   rO   zToolRepository.__eq__	  s,    e^,**,0H0H0JJJr,   c                 p    t        |t              r!| j                         |j                         k  S t        S r3   )rL   ry   r   rQ   rN   s     r*   rR   zToolRepository.__lt__  s/    e^,**,u/G/G/IIIr,   c                 4    t        | j                               S r3   )rT   r   r0   s    r*   rU   zToolRepository.__hash__  rV   r,   )r%   zSortedSet[Component])r%   zSortedSet[Service])r%   SortedSet[Tool])rb   rc   rd   re   r   r   r   r   r   r+   rg   r{   rm   r|   r}   ru   r   rt   r   rG   r   rs   rO   rR   rU   r(   r,   r*   ry   ry      so    5904*.
!Xi01
! 8G,-
!
 '
! 

!     1Xi%8 1T 1 1   __-'!2 -t - -   \\'8D> 'd ' '" "
'$ '
$4 F t 
F t 
/# /r,   ry   c                   (   e Zd Zededdfd       Zededefd       Ze	dede
ed      dedefd	       Ze	deeeeef      eeef   f   dedefd
       Ze	dedede
ed      de
e   dede
e   fd       Ze	dede
e   dddee   dedefd       Zy)_ToolRepositoryHelperor%   r   c           
          t        t        | j                  t        t        j
                  | j                        t        t        j                  | j                                    S r3   )	r   r   r}   mapr   r^   r{   ra   r|   )r   s    r*   __all_as_toolsz$_ToolRepositoryHelper.__all_as_tools  sG     GG##Q\\2!!1::.
  	r,   ro   c                 r    	 | d uxr"  |        j                   t        j                  k\  S # t        $ r Y yw xY wrK   )schema_version_enumr   V1_5	Exception)ro   s    r*   "__supports_components_and_servicesz8_ToolRepositoryHelper.__supports_components_and_services#  s<    	t#X(B(BmFXFX(XX 		s   '* 	66r   __c                4   t        |j                        dkD  s| j                  |      s | j                  |      }|rt	        |      S d S i }|j
                  rt	        |j
                        |d<   |j                  rt	        |j                        |d<   |xs d S )Nr   r{   r|   )r   r}   7_ToolRepositoryHelper__supports_components_and_services#_ToolRepositoryHelper__all_as_toolstupler{   r|   )rZ   r   ro   r   tselems         r*   json_normalizez$_ToolRepositoryHelper.json_normalize*  s     qww<!3#I#I$#O##A&B "59,,!<<!&q||!4D::$QZZ0D|tr,   c                     d }d }d }t        |t              r;t        d |j                  dd            }t        d |j                  dd            }nt        |t              rt        d |      }t        |||      S )Nc                 ,    t        j                  |       S r3   )r   	from_json)cs    r*   <lambda>z8_ToolRepositoryHelper.json_denormalize.<locals>.<lambda>?  s    y':':( r,   r{   r(   c                 ,    t        j                  |       S r3   )r   r   )ss    r*   r   z8_ToolRepositoryHelper.json_denormalize.<locals>.<lambda>A  s    W%6%6& r,   r|   c                 ,    t         j                  |       S r3   )r   r   )ts    r*   r   z8_ToolRepositoryHelper.json_denormalize.<locals>.<lambda>D  s    $..# r,   rz   )rL   dictr   getr   ry   )rZ   r   r   r}   r{   r|   s         r*   json_denormalizez&_ToolRepositoryHelper.json_denormalize8  s     
a EE,+-J EE*b)+H8$ EheTTr,   element_namexmlnsc                <   t        |      }t        |j                        dkD  s| j                        s+|j	                  fd| j                  |      D               n|j                  rIt        rd dnd      }|j	                  fd|j                  D               |j                  |       |j                  rIt        rd dnd      }|j	                  fd	|j                  D               |j                  |       t        |      dkD  r|S d S )
Nr   c              3   H   K   | ]  }|j                  d d        yw)Ftoolview_	as_stringr   r   Nas_xml).0tiro   r   s     r*   	<genexpr>z6_ToolRepositoryHelper.xml_normalize.<locals>.<genexpr>P  s3        		%fE  S   "{z}componentsr{   c              3   H   K   | ]  }|j                  d d        yw)Fr[   r   Nr   )r   ciro   r   s     r*   r   z6_ToolRepositoryHelper.xml_normalize.<locals>.<genexpr>X  s4      ,  II"e+UZ  \,r   z	}servicesr|   c              3   H   K   | ]  }|j                  d d        yw)Fr_   r   Nr   )r   siro   r   s     r*   r   z6_ToolRepositoryHelper.xml_normalize.<locals>.<genexpr>_  s4      *  II"e)SX  Z*r   )	r
   r   r}   r   extendr   r{   appendr|   )	rZ   r   r   ro   r   r   r   elem_celem_ss	      ``    r*   xml_normalizez#_ToolRepositoryHelper.xml_normalizeH  s    |$qww<!3#I#I$#OKK  ,,Q/  || U2eWL!9U ,  ll, , F#zz 52eWJ!7jQ *  jj* * F#4y1}  		r,   
default_ns	prop_infoz*ObjectMetadataLibrary.SerializablePropertyctxkwargsc                   dxs di}d }d }d }	|j                  d|      }
t        |
      dkD  rt        fd|
      }n>t        fd|j                  d|            }t        fd|j                  d	|            }	t	        ||	|
      S )Nbom zbom:toolr   c                 0    t         j                  |       S r3   )r   from_xml)r   r   s    r*   r   z7_ToolRepositoryHelper.xml_denormalize.<locals>.<lambda>v  s    $--:# r,   c                 0    t        j                  |       S r3   )r   r   )r   r   s    r*   r   z7_ToolRepositoryHelper.xml_denormalize.<locals>.<lambda>y  s    y'9'9:( r,   z./bom:components/bom:componentc                 0    t        j                  |       S r3   )r   r   )r   r   s    r*   r   z7_ToolRepositoryHelper.xml_denormalize.<locals>.<lambda>{  s    W%5%5:& r,   z./bom:services/bom:servicerz   )findallr   r   iterfindry   )rZ   r   r   r   r   r   ns_mapr}   r{   r|   r   s     `        r*   xml_denormalizez%_ToolRepositoryHelper.xml_denormalizeh  s     )r* 
YYz6*r7Q;  "$E   !

+KV TVJ  !

+G PRHheTTr,   N)rb   rc   rd   staticmethodry   r   r   rt   r   rv   r   rw   r   r   listr   rf   r   r
   r   r   r(   r,   r*   r   r     s   . ->       ~ %d:&67 %(  UtDcN';T#s(^'K!L U"U'5U U n $'$T*%56 &c]  	 %-W$5	 > U U$,SMU#OU "#YU #&	U +9	U Ur,   r   )+collections.abcr   	itertoolsr   typingr   r   r   r   warningsr	   xml.etree.ElementTreer
   py_serializablerh   py_serializable.helpersr   sortedcontainersr   _internal.comparer   rG   schemar   schema.schemar   r   r   r   r   r   r   r   r[   r   r_   r   r   r   serializable_classr   ry   r   r(   r,   r*   <module>r      s   & %  6 6  ) & . & C " j j Q Q   ? !  tLW
 W
 MW
tQ/ Q/hfUJ fUr,   