
    ܖi}g                     H   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 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mZ d
dl m!Z!m"Z"m#Z# ddl$m%Z% ddl&m'Z' ddl(m)Z)m*Z*m+Z+ ejX                   G d de-e             Z.ejX                   G d de-e             Z/ ej`                  d       G d d             Z1 G d dejd                  jf                        Z4 ej`                  d       G d d             Z5 ej`                  d       G d d              Z6 ej`                  d       G d! d"             Z7 ej`                  d       G d# d$             Z8 ej`                  d       G d% d&             Z9 G d' d(ejd                  jf                        Z:y))    )Iterable)Decimal)Enum)loads)AnyListOptionalUnion)warn)ElementN)	SortedSet   )bom_ref_from_str)ComparableTuple)InvalidConfidenceExceptionInvalidValueException)SchemaVersion1Dot5SchemaVersion1Dot6SchemaVersion1Dot7   )	CopyrightBomRef)LicenseLicenseRepository%_LicenseRepositorySerializationHelperc                   4    e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
Zy)IdentityFieldz
    Enum object that defines the permissible field types for Identity.

    .. note::
        See the CycloneDX Schema definition: https://cyclonedx.org/docs/1.7/json/#components_items_evidence_identity
    groupnameversionpurlcpe	omniborIdswhidswidhashN)__name__
__module____qualname____doc__GROUPNAMEVERSIONPURLCPE
OMNIBOR_IDSWHIDSWIDHASH     f/var/www/html/content-pipeline/venv/lib/python3.12/site-packages/cyclonedx/model/component_evidence.pyr   r   (   s6     EDGD
CJEDDr6   r   c                   8    e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZy)AnalysisTechniquezG
    Enum object that defines the permissible analysis techniques.
    zsource-code-analysiszbinary-analysiszmanifest-analysiszast-fingerprintzhash-comparisoninstrumentationzdynamic-analysisfilenameattestationotherN)r(   r)   r*   r+   SOURCE_CODE_ANALYSISBINARY_ANALYSISMANIFEST_ANALYSISAST_FINGERPRINTHASH_COMPARISONINSTRUMENTATIONDYNAMIC_ANALYSISFILENAMEATTESTATIONOTHERr5   r6   r7   r9   r9   <   s>     2'O+'O'O'O)HKEr6   r9   T)%ignore_unknown_during_deserializationc            	          e Zd ZdZdddededee   ddfdZe	 e
j                  d	      defd
              Zej                  deddfd       Ze	 e
j                  d      defd              Zej                  deddfd       Ze	 e
j                  d      dee   f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y)Methodz
    Represents a method used to extract and/or analyze evidence.

    .. note::
        See the CycloneDX Schema definition:
        https://cyclonedx.org/docs/1.7/json/#components_items_evidence_identity_oneOf_i0_items_methods
    Nvalue	technique
confidencerL   returnc                .    || _         || _        || _        y NrM   rN   rL   )selfrM   rN   rL   s       r7   __init__zMethod.__init__X   s     #$
r6   r   c                     | j                   S rQ   
_techniquerS   s    r7   rM   zMethod.techniqueb   s     r6   c                     || _         y rQ   rV   )rS   rM   s     r7   rM   zMethod.techniqueg   	    #r6   r   c                     | j                   S )z
        The confidence of the evidence from 0 - 1, where 1 is 100% confidence.
        Confidence is specific to the technique used. Each technique of analysis can have independent confidence.
        _confidencerX   s    r7   rN   zMethod.confidencek        r6   c                 J    d|cxk  rdk  sn t        d|d      || _        y )Nr   r   zconfidence z is invalidr   r]   rS   rN   s     r7   rN   zMethod.confidencet   s+    Z$1$,{:.-TUU%r6      c                     | j                   S rQ   _valuerX   s    r7   rL   zMethod.valuez        {{r6   c                     || _         y rQ   rd   )rS   rL   s     r7   rL   zMethod.value   	    r6   c                 Z    t        | j                  | j                  | j                  f      S rQ   )_ComparableTuplerM   rN   rL   rX   s    r7   __comparable_tuplezMethod.__comparable_tuple   s)    NNOOJJ!
  	r6   r=   c                 f    t        |t              r!| j                         |j                         k(  S yNF)
isinstancerJ   _Method__comparable_tuplerS   r=   s     r7   __eq__zMethod.__eq__   s,    eV$**,0H0H0JJJr6   c                 p    t        |t              r!| j                         |j                         k  S t        S rQ   )rn   rJ   ro   NotImplementedrp   s     r7   __lt__zMethod.__lt__   s/    eV$**,u/G/G/IIIr6   c                 4    t        | j                               S rQ   )r'   ro   rX   s    r7   __hash__zMethod.__hash__       D++-..r6   c                 V    d| j                    d| j                   d| j                   dS )Nz<Method technique=, confidence=z, value=>rR   rX   s    r7   __repr__zMethod.__repr__   s1    #DNN#3=@QQYZ^ZdZdYeefggr6   )r(   r)   r*   r+   r9   r   r	   strrT   propertyserializablexml_sequencerM   setterrN   rL   rj   ro   objectboolrq   r   rt   intrv   r{   r5   r6   r7   rJ   rJ   N   s     $	$  }	
 
 \q!,  "  $#4 $ $ $ \q! G   "   &W & & &
 \q!x}  "  \\8C= T  $4 F t 
C D 
/# /h# hr6   rJ   c            
           e Zd ZdZeded   dee   fd       Zedee   dee	   fd       Z
edee	   dee   dedee   fd	       Zedd
dee   dedee	   fd       Zy)*_IdentityToolRepositorySerializationHelperz   THIS CLASS IS NON-PUBLIC API  or   rO   c                 Z    |D cg c]  }|j                   s|j                    c}S c c}w rQ   rK   clsr   ts      r7   json_serializez9_IdentityToolRepositorySerializationHelper.json_serialize   s     !".Aagg...s   ((c                 @    |D cg c]  }t        |       c}S c c}w )NrK   r   r   s      r7   json_deserializez;_IdentityToolRepositorySerializationHelper.json_deserialize   s    )*+AQ+++s   xmlnskwargsc                    t        |      }t        |      dk(  ry t        |rd| dnd      }|rd| dnd|rd| dnd|j                  fd	|D               |S )
Nr   {z}toolstoolsz}tooltoolz}refrefc              3   f   K   | ](  }|j                   rt        |j                   i       * y wrQ   )rL   
XmlElement).0r   ref_name	tool_names     r7   	<genexpr>zK_IdentityToolRepositorySerializationHelper.xml_normalize.<locals>.<genexpr>   s/      #!'' y8QWW"56#s   .1)tuplelenr   extend)r   r   r   r   elem_sr   r   s        @@r7   xml_normalizez8_IdentityToolRepositorySerializationHelper.xml_normalize   sw     !Hq6Q;5bw/gF*/bv&V	(-Rwe$5 ## 	# r6   r   
default_ns__c                ^    |D cg c]  }t        |j                  d             c}S c c}w )Nr   rK   )r   get)r   r   r   r   r   s        r7   xml_denormalizez:_IdentityToolRepositorySerializationHelper.xml_denormalize   s%     566qQUU5\*666s   "*N)r(   r)   r*   r+   classmethodr   listr|   r   r   r   r	   r   r   r   r   r5   r6   r7   r   r      s    */x1 /d3i / / ,# ,4< , , hv. %c] #(0(<  7 7$,SM7!7&*6l7 7r6   r   c                      e Zd ZdZddddddedee   dee   deee	      deee
      d	dfd
Ze ej                  d      d	efd              Zej                   ded	dfd       Ze ej                  d      d	ee   fd              Zej                   dee   d	dfd       Ze ej$                  e       ej$                  e       ej                  d      d	ee   fd                            Zej                   dee   d	dfd       Ze ej,                  ej.                  j0                  d       ej                  d      d!d                     Zej                   dee	   d	dfd       Ze ej4                  e       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&y)#Identityz
    Our internal representation of the `identityType` complex type.

    .. note::
        See the CycloneDX Schema definition: https://cyclonedx.org/docs/1.7/json/#components_items_evidence_identity
    N)rN   concluded_valuemethodsr   fieldrN   r   r   r   rO   c                Z    || _         || _        || _        |xs g | _        |xs g | _        y rQ   r   rN   r   r   r   )rS   r   rN   r   r   r   s         r7   rT   zIdentity.__init__   s0     
$.}"[b
r6   r   c                     | j                   S rQ   _fieldrX   s    r7   r   zIdentity.field   rf   r6   c                     || _         y rQ   r   )rS   r   s     r7   r   zIdentity.field   rh   r6   r   c                     | j                   S )z`
        The overall confidence of the evidence from 0 - 1, where 1 is 100% confidence.
        r\   rX   s    r7   rN   zIdentity.confidence   s     r6   c                 L    |d|cxk  rdk  sn t        | d      || _        y )Nr   r   z in invalidr`   ra   s     r7   rN   zIdentity.confidence   s.    !1
+?a+?,
|;-GHH%r6   rb   c                     | j                   S rQ   _concluded_valuerX   s    r7   r   zIdentity.concluded_value   s    
 $$$r6   c                     || _         y rQ   r   )rS   r   s     r7   r   zIdentity.concluded_value   s
     /r6   method   c                     | j                   S rQ   )_methodsrX   s    r7   r   zIdentity.methods   s     }}r6   c                 $    t        |      | _        y rQ   )r   r   )rS   r   s     r7   r   zIdentity.methods   s    !'*r6      c                     | j                   S )zX
        References to the tools used to perform analysis and collect evidence.
        )_toolsrX   s    r7   r   zIdentity.tools   s     {{r6   c                 $    t        |      | _        y rQ   )r   r   )rS   r   s     r7   r   zIdentity.tools  s    &r6   c           	          t        | j                  | j                  | j                  t        | j                        t        | j
                        f      S rQ   )rj   r   rN   r   r   r   rX   s    r7   rk   zIdentity.__comparable_tuple  sC    JJOO  T\\*TZZ(!
  	r6   r=   c                 f    t        |t              r!| j                         |j                         k(  S yrm   )rn   r   _Identity__comparable_tuplerp   s     r7   rq   zIdentity.__eq__  s,    eX&**,0H0H0JJJr6   c                 p    t        |t              r!| j                         |j                         k  S t        S rQ   )rn   r   r   rs   rp   s     r7   rt   zIdentity.__lt__  s/    eX&**,u/G/G/IIIr6   c                 4    t        | j                               S rQ   )r'   r   rX   s    r7   rv   zIdentity.__hash__  rw   r6   c                     d| j                    d| j                   d| j                   d| j                   d| j                   dS )Nz<Identity field=ry   z, concludedValue=z
, methods=z, tools=rz   r   rX   s    r7   r{   zIdentity.__repr__"  sN    !$**]4??:K L#334 5~Xdjj\< 	<r6   )rO   zSortedSet[Method])rO   zSortedSet[BomRef])'r(   r)   r*   r+   r   r	   r   r|   r   rJ   r   rT   r}   r~   r   r   r   rN   viewr   r   r   	xml_arrayXmlArraySerializationTypeNESTEDr   type_mappingr   r   rj   r   r   r   rq   r   rt   r   rv   r{   r5   r6   r7   r   r      s    )-)-.2,0!! W%! "#	!
 (6*+! ()! 
! \q!}  "  \\= T   \q! HW-   "   &Xg%6 &4 & &
 \)*\)*\q!%# % " + + % 0x} 0 0 0 \LBBII8T\q! " U  ^^+x/ +D + + \IJ\q! " K  \\'8F+ ' ' '$4 F t 
C D 
/# /<# <r6   r   c                      e Zd ZdZdddddddeeeef      dedee   dee   dee   d	ee   d
dfdZ	e
 ej                  e       ej                  d       ej                  d       ej                         d
efd                                   Ze
 ej"                  d      d
efd              Zej&                  ded
dfd       Ze
 ej(                  e       ej(                  e       ej"                  d      d
ee   fd                            Zej&                  dee   d
dfd       Ze
 ej(                  e       ej(                  e       ej"                  d      d
ee   fd                            Zej&                  dee   d
dfd       Ze
 ej(                  e       ej(                  e       ej"                  d      d
ee   fd                            Zej&                  dee   d
dfd       Ze
 ej(                  e       ej(                  e       ej"                  d      d
ee   f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#y)#
Occurrencez
    Our internal representation of the `occurrenceType` complex type.

    .. note::
        See the CycloneDX Schema definition: https://cyclonedx.org/docs/1.7/json/#components_items_evidence_occurrences
    N)bom_reflineoffsetsymboladditional_contextr   locationr   r   r   r   rO   c                j    t        |      | _        || _        || _        || _        || _        || _        y rQ   )_bom_ref_from_str_bom_refr   r   r   r   r   )rS   r   r   r   r   r   r   s          r7   rT   zOccurrence.__init__1  s4     *'2 	"4r6   zbom-refc                     | j                   S )z
        An optional identifier which can be used to reference the requirement elsewhere in the BOM.
        Every bom-ref MUST be unique within the BOM.

        Returns:
            `BomRef`
        )r   rX   s    r7   r   zOccurrence.bom_refA  s     }}r6   r   c                     | j                   S )zj
        Location can be a file path, URL, or a unique identifier from a component discovery tool
        	_locationrX   s    r7   r   zOccurrence.locationP       ~~r6   c                     || _         y rQ   r   )rS   r   s     r7   r   zOccurrence.locationX  s	    !r6   r   c                     | j                   S )z]
        The line number in the file where the dependency or reference was detected.
        _linerX   s    r7   r   zOccurrence.line\  s     zzr6   c                 >    ||dk  rt        d|d      || _        y )Nr   zline  must not be lower than zero)r   r   rS   r   s     r7   r   zOccurrence.linef  s*    q'%x7S(TUU
r6   rb   c                     | j                   S )ze
        The offset location within the file where the dependency or reference was detected.
        )_offsetrX   s    r7   r   zOccurrence.offsetl       ||r6   c                 >    ||dk  rt        d|d      || _        y )Nr   zoffset r   )r   r   )rS   r   s     r7   r   zOccurrence.offsetv  s*    &1*''&;W(XYYr6   r   c                     | j                   S )z=
        Programming language symbol or import name.
        _symbolrX   s    r7   r   zOccurrence.symbol|  r   r6   c                     || _         y rQ   r   )rS   r   s     r7   r   zOccurrence.symbol  	    r6   r   c                     | j                   S )zK
        Additional context about the occurrence of the component.
        _additional_contextrX   s    r7   r   zOccurrence.additional_context  s     '''r6   c                     || _         y rQ   r   )rS   r   s     r7   r   zOccurrence.additional_context  s
    #5 r6   c                     t        | j                  | j                  | j                  | j                  | j
                  | j                  f      S rQ   )rj   r   r   r   r   r   r   rX   s    r7   rk   zOccurrence.__comparable_tuple  s@    LLMMIIKKKK##!
  	r6   r=   c                 f    t        |t              r!| j                         |j                         k(  S yrm   )rn   r   _Occurrence__comparable_tuplerp   s     r7   rq   zOccurrence.__eq__  s,    eZ(**,0H0H0JJJr6   c                 p    t        |t              r!| j                         |j                         k  S t        S rQ   )rn   r   r   rs   rp   s     r7   rt   zOccurrence.__lt__  s/    eZ(**,u/G/G/IIIr6   c                 4    t        | j                               S rQ   )r'   r   rX   s    r7   rv   zOccurrence.__hash__  rw   r6   c                 V    d| j                    d| j                   d| j                   dS )Nz<Occurrence location=, line=z	, symbol=rz   )r   r   r   rX   s    r7   r{   zOccurrence.__repr__  s.    &t}}oWTYYKyQUQ\Q\P]]^__r6   )$r(   r)   r*   r+   r	   r
   r|   r   r   rT   r}   r~   r   	json_namexml_namexml_attributer   r   r   r   r   r   r   r   r   r   r   rj   r   r   r   rq   r   rt   rv   r{   r5   r6   r7   r   r   (  s    15" $ $,05%V,-5 5 sm	5
 5 5 %SM5 
5  \v&\I&\9%\!  " & ' ' 
 \q!#  "  __" " " " \)*\)*\q!hsm  " + +  
[[# 4  
 \)*\)*\q!  " + +  ]]Xc] t  
 \)*\)*\q!  " + +  ]]Xc] t   \)*\)*\q!(HSM ( " + + ( 6Xc] 6t 6 6$4 F t 
C D 
/# /`# `r6   r   c                   J   e Zd ZdZddddddddedee   dee   deee      dee   d	ee   d
ee   ddfdZe	 e
j                  d      dee   fd              Zej                  dee   ddfd       Ze	 e
j                  d      defd              Zej                  deddfd       Ze	 e
j                  d      dee   fd              Zej                  dee   ddfd       Ze	 e
j                   e
j"                  j$                  d       e
j                  d      d)d                     Zej                  dee   ddfd       Ze	 e
j                  d      dee   fd              Zej                  dee   ddfd       Ze	 e
j                  d      dee   fd              Zej                  d	ee   ddfd       Ze	 e
j                  d       dee   f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y)*CallStackFramez
    Represents an individual frame in a call stack.

    .. note::
        See the CycloneDX Schema definition: https://cyclonedx.org/docs/1.7/json/#components_items_evidence_callstack
    N)packagefunction
parametersr   columnfull_filenamemoduler   r   r   r   r   r   rO   c                n    || _         || _        || _        |xs g | _        || _        || _        || _        y rQ   r   r  r   r   r   r   r   )rS   r  r   r   r   r   r   r   s           r7   rT   zCallStackFrame.__init__  s;      $*	*r6   r   c                     | j                   S )z#
        The package name.
        _packagerX   s    r7   r   zCallStackFrame.package  s     }}r6   c                     || _         y)z(
        Sets the package name.
        Nr  )rS   r   s     r7   r   zCallStackFrame.package  s    
  r6   r   c                     | j                   S )z!
        The module name
        _modulerX   s    r7   r  zCallStackFrame.module       ||r6   c                     || _         y rQ   r	  )rS   r  s     r7   r  zCallStackFrame.module  r   r6   rb   c                     | j                   S )z$
        The function name.
        	_functionrX   s    r7   r   zCallStackFrame.function  r   r6   c                     || _         y)z)
        Sets the function name.
        Nr  )rS   r   s     r7   r   zCallStackFrame.function  s    
 "r6   	parameterr   c                     | j                   S )z%
        Function parameters
        )_parametersrX   s    r7   r   zCallStackFrame.parameters  r^   r6   c                 $    t        |      | _        y rQ   )r   r  )rS   r   s     r7   r   zCallStackFrame.parameters  s    $Z0r6   r   c                     | j                   S )z!
        The line number
        r   rX   s    r7   r   zCallStackFrame.line  s     zzr6   c                     || _         y rQ   r   r   s     r7   r   zCallStackFrame.line  s	    
r6      c                     | j                   S )z#
        The column number
        _columnrX   s    r7   r   zCallStackFrame.column  r  r6   c                     || _         y rQ   r  )rS   r   s     r7   r   zCallStackFrame.column  r   r6      c                     | j                   S )z$
        The full file path
        _full_filenamerX   s    r7   r   zCallStackFrame.full_filename  s     """r6   c                     || _         y rQ   r  )rS   r   s     r7   r   zCallStackFrame.full_filename%  s
    +r6   c           	          t        | j                  | j                  | j                  t        | j                        | j
                  | j                  | j                  f      S rQ   )rj   r   r  r   r   r   r   r   rX   s    r7   rk   z!CallStackFrame.__comparable_tuple)  sL    LLKKMMT__-IIKK!
  	r6   r=   c                 f    t        |t              r!| j                         |j                         k(  S yrm   )rn   r   !_CallStackFrame__comparable_tuplerp   s     r7   rq   zCallStackFrame.__eq__4  s,    e^,**,0H0H0JJJr6   c                 p    t        |t              r!| j                         |j                         k  S t        S rQ   )rn   r   r#  rs   rp   s     r7   rt   zCallStackFrame.__lt__9  s/    e^,**,u/G/G/IIIr6   c                 4    t        | j                               S rQ   )r'   r#  rX   s    r7   rv   zCallStackFrame.__hash__>  rw   r6   c                     d| j                    d| j                   d| j                   d| j                  d| j                   d| j
                   d| j                   dS )	Nz<CallStackFrame package=z	, module=z,  function=z, parameters=r   z	, column=z, full_filename=rz   r  rX   s    r7   r{   zCallStackFrame.__repr__A  si    <<.	$++ ? MM?-7J K		{)DKK=8HI[I[H\\]_ 	_r6   )rO   zSortedSet[str])r(   r)   r*   r+   r|   r	   r   r   rT   r}   r~   r   r   r   r  r   r   r   r   r   r   r   r   rj   r#  r   r   rq   rt   rv   r{   r5   r6   r7   r   r     s    "&"&.2" $'+++ #+ 3-	+
 Xc]++ sm+ +  }+ 
+$ \q!#  "  ^^ x}       \q!  "  ]]S T   \q!(3-  "  __"# "4 " " \LBBII;W\q!  " X   1Xc] 1t 1 1 \q!hsm  "  
[[# 4   \q!  "  ]]Xc] t   \q!#x} # " # ,8C= ,T , ,	$4 	F t 
F t 
/# /_# _r6   r   c                   :   e Zd ZdZdddeee      ddfdZe e	j                  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y)	CallStacka3  
    Our internal representation of the `callStackType` complex type.
    Contains an array of stack frames describing a call stack from when a component was identified.

    .. note::
        See the CycloneDX Schema definition: https://cyclonedx.org/docs/1.7/json/#components_items_evidence_callstack
    Nframesr*  rO   c                    |xs g | _         y rQ   r)  rS   r*  s     r7   rT   zCallStack.__init__R  s     lr6   framer   c                     | j                   S )z'
        Array of stack frames
        )_framesrX   s    r7   r*  zCallStack.framesX  s     ||r6   c                 $    t        |      | _        y rQ   )r   r/  r,  s     r7   r*  zCallStack.framesa  s    F|r6   c                 @    t        t        | j                        f      S rQ   )rj   r*  rX   s    r7   rk   zCallStack.__comparable_tuplee  s     T[[)!
  	r6   r=   c                 f    t        |t              r!| j                         |j                         k(  S yrm   )rn   r(  _CallStack__comparable_tuplerp   s     r7   rq   zCallStack.__eq__j  s,    eY'**,0H0H0JJJr6   c                 p    t        |t              r!| j                         |j                         k  S t        S rQ   )rn   r(  r3  rs   rp   s     r7   rt   zCallStack.__lt__o  s/    eY'**,u/G/G/IIIr6   c                 `    | j                         }	 t        |      S # t        $ r}|d }~ww xY wrQ   )r3  r'   	TypeError)rS   hes      r7   rv   zCallStack.__hash__t  s3    ##%	7N 	G	s   
 	-(-c                 4    dt        | j                         dS )Nz<CallStack frames=rz   )r   r*  rX   s    r7   r{   zCallStack.__repr__{  s    #C$4#5Q77r6   )rO   zList[CallStackFrame])r(   r)   r*   r+   r	   r   r   rT   r}   r~   r   r   r   r   r*  r   rj   r3  r   r   rq   r   rt   r   rv   r|   r{   r5   r6   r7   r(  r(  H  s     6:#.12# 
# \LBBII7S\q! " T  ]]$Xn5 $$ $ $$4 
F t 
C D 
# 8# 8r6   r(  c                      e Zd ZdZdddddddeeee   ef      deee      dee	   deee
      deee      d	dfd
Ze ej                  e       ej                  e       ej                  e       ej&                  d       ej(                  ej*                  j,                  d      d"d                                          Zej0                  deee   ef   d	dfd       Ze ej                  e       ej                  e       ej                  e       ej(                  ej*                  j2                  d       ej&                  d      d#d                                          Zej0                  dee   d	dfd       Ze ej                  e       ej                  e       ej                  e       ej&                  d      d	ee	   fd                                   Zej0                  dee	   d	dfd       Ze ej8                  e       ej&                  d      d	efd                     Zej0                  dee
   d	dfd       Ze ej(                  ej*                  j2                  d       ej&                  d      d$d                     Z e j0                  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*y)%ComponentEvidencea7  
    Our internal representation of the `componentEvidenceType` complex type.

    Provides the ability to document evidence collected through various forms of extraction or analysis.

    .. note::
        See the CycloneDX Schema definition: https://cyclonedx.org/docs/1.7/xml/#type_componentEvidenceType
    Nidentityoccurrences	callstacklicenses	copyrightr=  r>  r?  r@  rA  rO   c                j    |xs g | _         |xs g | _        || _        |xs g | _        |xs g | _        y rQ   r<  )rS   r=  r>  r?  r@  rA  s         r7   rT   zComponentEvidence.__init__  s9     !B&,"" B"br6   r   c                     | j                   S )zu
        Provides a way to identify components via various methods.
        Returns SortedSet of identities.
        )	_identityrX   s    r7   r=  zComponentEvidence.identity  s     ~~r6   c                 ^    t        t        |t              r|f      | _        y |      | _        y rQ   )r   rn   r   rD  )rS   r=  s     r7   r=  zComponentEvidence.identity  s-    "(H- K
 
r6   
occurrencer   c                     | j                   S )z5A list of locations where evidence was obtained from.)_occurrencesrX   s    r7   r>  zComponentEvidence.occurrences  s        r6   c                 $    t        |      | _        y rQ   )r   rH  )rS   r>  s     r7   r>  zComponentEvidence.occurrences  s    %k2r6   rb   c                     | j                   S )zZ
        A representation of a call stack from when the component was identified.
        
_callstackrX   s    r7   r?  zComponentEvidence.callstack  s     r6   c                     || _         y rQ   rK  )rS   r?  s     r7   r?  zComponentEvidence.callstack  rZ   r6   r   c                     | j                   S )zz
        Optional list of licenses obtained during analysis.

        Returns:
            Set of `LicenseChoice`
        )	_licensesrX   s    r7   r@  zComponentEvidence.licenses  s     ~~r6   c                 $    t        |      | _        y rQ   )r   rO  )rS   r@  s     r7   r@  zComponentEvidence.licenses  s    *84r6   textr   c                     | j                   S )zj
        Optional list of copyright statements.

        Returns:
             Set of `Copyright`
        )
_copyrightrX   s    r7   rA  zComponentEvidence.copyright  s     r6   c                 $    t        |      | _        y rQ   )r   rS  )rS   rA  s     r7   rA  zComponentEvidence.copyright  s    #I.r6   c           	          t        t        | j                        t        | j                        | j                  t        | j                        t        | j
                        f      S rQ   )rj   r@  rA  r?  r=  r>  rX   s    r7   rk   z$ComponentEvidence.__comparable_tuple  sM    T]]+T^^,NNT]]+T--.!
  	r6   r=   c                 f    t        |t              r!| j                         |j                         k(  S yrm   )rn   r;  $_ComponentEvidence__comparable_tuplerp   s     r7   rq   zComponentEvidence.__eq__  s-    e./**,0H0H0JJJr6   c                 p    t        |t              r!| j                         |j                         k  S t        S rQ   )rn   r;  rW  rs   rp   s     r7   rt   zComponentEvidence.__lt__  s0    e./**,u/G/G/IIIr6   c                 4    t        | j                               S rQ   )r'   rW  rX   s    r7   rv   zComponentEvidence.__hash__  rw   r6   c                      dt        |        dS )Nz<ComponentEvidence id=rz   )idrX   s    r7   r{   zComponentEvidence.__repr__   s    '4z33r6   )rO   zSortedSet[Identity])rO   zSortedSet[Occurrence])rO   zSortedSet[Copyright])+r(   r)   r*   r+   r	   r
   r   r   r   r(  r   r   rT   r}   r~   r   r   r   r   r   r   r   FLATr=  r   r   r>  r?  r   r   r   r@  rA  rj   rW  r   r   rq   rt   r   rv   r|   r{   r5   r6   r7   r;  r;    s    CG6:)-0437)5(!3X!=>?) hz23) I&	)
 8G,-) HY/0) 
) \)*\)*\)*\q!\LBBGGT U " + + +  __
x'98'C!D 
 
 
 \)*\)*\)*\LBBII<X\q!! " Y + + + ! 3x
'; 3 3 3 \)*\)*\)*\q!8I.  " + + + 
 $8I#6 $4 $ $ \DE\q!+  " F  __5'!2 5t 5 5 \LBBII6R\q! " S  /8I#6 /4 / /$4 F t 
F t 
/# /4# 4r6   r;  c                       e Zd ZdZededeeej                        de
deee
f   fd       Zedeee
f   de
de
fd       Zedededeed	      d
ee   de
ded   fd       Zedddee   de
de
fd       Zy)%_ComponentEvidenceSerializationHelperzdTHIS CLASS IS NON-PUBLIC API

    This helper takes care of :attr:`ComponentEvidence.identity`.
    r   r   r   rO   c                    t        |j                  |            }|t        u r>|j                  dg       }|r*t	        |      x}dkD  rt        d|dz
   d       |d   |d<   |S )Nr=  r   ACycloneDX 1.5 does not support multiple identity items; dropping  items.r   )
json_loadsas_jsonr   r   r   r   )r   r   r   r   data
identitiesils          r7   json_normalizez4_ComponentEvidenceSerializationHelper.json_normalize
  sq      *!))D/:%%*b1Jj/)BQ.\]_bc]c\ddklm#-a=Z r6   c                     t        |j                  d      x}t              r	i |d|gi}t        j	                  |      S )Nr=  )rn   r   dictr;  	from_json)r   r   r   r=  s       r7   json_denormalizez6_ComponentEvidenceSerializationHelper.json_denormalize  s>    !%%
"33hT:-1-j8*-A **1--r6   element_namezserializable.ViewTyper   r   c                    |j                  |d||      }|t        u rV|j                  |rd| dnd      }t        |      x}dkD  r-t	        d|dz
   d       |dd  D ]  }	|j                  |	        |S )NFz./{z	}identityz
./identityr   r`  ra  )as_xmlr   findallr   r   remove)
r   r   rl  r   r   r   
normalizedre  rf  is
             r7   r   z3_ComponentEvidenceSerializationHelper.xml_normalize  s     $%88D%u#M
%%#++d5',DS_`J*o%*XY[^_Y_X``ghi#AB )A%%a()r6   r   c                .    t         j                  ||      S rQ   )r;  from_xml)r   r   r   r   s       r7   r   z5_ComponentEvidenceSerializationHelper.xml_denormalize,  s     !))!Z88r6   N)r(   r)   r*   r+   r   r;  r	   typer~   ViewTyper   ri  r|   rg  rk  r   r   r5   r6   r7   r^  r^    s   
 
0 
%d<+@+@&AB
 
%)#s(^
 
 .c3h .s .s . .
 / $'$T*A%BC &c]  	 %-\$:	  9 9$,SM9!9&)9 9r6   r^  );collections.abcr   decimalr   enumr   jsonr   rb  typingr   r   r	   r
   warningsr   xml.etree.ElementTreer   r   py_serializabler~   sortedcontainersr   _internal.bom_refr   r   _internal.comparer   rj   exception.modelr   r   schema.schemar   r   r    r   r   r   licenser   r   r   serializable_enumr|   r   r9   serializable_classrJ   helpers
BaseHelperr   r   r   r   r(  r;  r^  r5   r6   r7   <module>r     s  & %   $ - -  7 ' & E C O V V   V V C   & T   " !  tLIh Ih MIhX71E1E1P1P 7B !  tLh< h< Mh<V !  tLG` G` MG`T !  tLQ_ Q_ MQ_h !  tL38 38 M38l !  tLA4 A4 MA4H,9L,@,@,K,K ,9r6   