
    ܖi              
          d Z ddlZddlmZmZ ddlmZmZ ddlm	Z	 ddl
m
Z
 ddlmZmZmZmZmZmZ dd	lmZmZ erdd
lmZ ddlmZ ddlmZ ddlmZ  G d de      Zedddeej@                     deddfd       Z!edddeejD                     deddfd       Z!edddededed   fd       Z!dddededefdZ! G d d      Z#y)z
Set of classes and methods for outputting our libraries internal Bom model to CycloneDX documents in varying formats
and according to different versions of the CycloneDX schema standard.
    N)ABCabstractmethod)IterableMapping)chain)random)TYPE_CHECKINGAnyLiteralOptionalUnionoverload   )OutputFormatSchemaVersion)BomBomRef   )Json)Xmlc                   D    e Zd Zdddeddf fdZeedefd              Zeede	fd              Z
edefd	       Zej                  d
eddfd       ZddZddZeddeddfd       Zedddeeeef      dedefd       Zddddededeeeef      deddf
dZ xZS )
BaseOutputbomr   kwargsreturnNc                 @    t        |   di | || _        d| _        y )NF )super__init___bom
_generated)selfr   r   	__class__s      ]/var/www/html/content-pipeline/venv/lib/python3.12/site-packages/cyclonedx/output/__init__.pyr    zBaseOutput.__init__*   s!    "6"	 %    c                      y Nr   r#   s    r%   schema_versionzBaseOutput.schema_version/        	r&   c                      y r(   r   r)   s    r%   output_formatzBaseOutput.output_format4   r+   r&   c                     | j                   S r(   r"   r)   s    r%   	generatedzBaseOutput.generated9   s    r&   r0   c                     || _         y r(   r/   )r#   r0   s     r%   r0   zBaseOutput.generated=   s	    #r&   c                     | j                   S r(   r!   r)   s    r%   get_bomzBaseOutput.get_bomA   s    yyr&   c                     || _         y r(   r3   )r#   r   s     r%   set_bomzBaseOutput.set_bomD   s	    	r&   force_regenerationc                      y r(   r   )r#   r7   s     r%   generatezBaseOutput.generateG   s    r&   indentr;   c                     y r(   r   )r#   r;   r   s      r%   output_as_stringzBaseOutput.output_as_stringK   s     	r&   filenameallow_overwritec                   t         j                  j                  |      }t         j                  j                  |      }t        j                  |t         j
                        st        |      t         j                  j                  |      r|st        |      t        |d      5 }|j                  | j                  |      j                  d             d d d        y # 1 sw Y   y xY w)Nwb)moder:   zutf-8)ospathrealpathdirnameaccessW_OKPermissionErrorexistsFileExistsErroropenwriter=   encode)r#   r>   r?   r;   r   output_filenameoutput_directoryf_outs           r%   output_to_filezBaseOutput.output_to_fileQ   s     ''**8477???;yy)2773!"23377>>/*?!/22/- 	NKK--V-<CCGLM	N 	N 	Ns   '1C!!C*)r   r   )r   r   r   N)F)__name__
__module____qualname__intr    propertyr   r   r*   r   r-   boolr0   setterr4   r6   r9   r   r   strr
   r=   rR   __classcell__)r$   s   @r%   r   r   (   sU   &E &S &T &
     |    4   $4 $D $ $ 4 D   =A!)%S/!:#&+. 
N;?Ns NT N'c3h8N!$N)-Nr&   r   r   r   r-   r*   r   JsonOutputterc                      y r(   r   r   r-   r*   s      r%   make_outputterr_   _        r&   XmlOutputterc                      y r(   r   r^   s      r%   r_   r_   e   r`   r&   )ra   r\   c                      y r(   r   r^   s      r%   r_   r_   k   r`   r&   c                     t         r t        j                  |u rddlm} n't        j
                  |u rddlm} nt        d|      |j                  |d      }|t        d|j                   d|       ||       S )ap  
    Helper method to quickly get the correct output class/formatter.

    Pass in your BOM and optionally an output format and schema version (defaults to XML and latest schema version).


    Raises error when no instance could be made.

    :param bom: Bom
    :param output_format: OutputFormat
    :param schema_version: SchemaVersion
    :return: BaseOutput
    r   )BY_SCHEMA_VERSIONzUnexpected output_format: NzUnknown z/schema_version: )
r	   r   JSONjsonre   XMLxml
ValueErrorgetname)r   r-   r*   re   klasss        r%   r_   r_   q   s     M)+			]	**5m5FGHH!!.$7E}8M$6$6#77HHZ[\\:r&   c                       e Zd Zdded   deddfdZddZded	ed
eddfdZddZ	ddZ
defdZeddddedd fd       Zy)BomRefDiscriminatorr   bomrefsprefixr   Nc                 @    t        d |D              | _        || _        y )Nc              3   8   K   | ]  }||j                   f  y wr(   )value).0bomrefs     r%   	<genexpr>z/BomRefDiscriminator.__init__.<locals>.<genexpr>   s     Kvv||4Ks   )tuple_bomrefs_prefix)r#   rp   rq   s      r%   r    zBomRefDiscriminator.__init__   s    K7KKr&   c                 $    | j                          y r(   )discriminater)   s    r%   	__enter__zBomRefDiscriminator.__enter__   s    r&   exc_typeexc_valexc_tbc                 $    | j                          y r(   )reset)r#   r~   r   r   s       r%   __exit__zBomRefDiscriminator.__exit__   s    

r&   c                     g }| j                   D ]?  \  }}|j                  }|||v r| j                         }||_        |j                  |       A y r(   )ry   rt   _make_uniqueappend)r#   known_valuesrv   _rt   s        r%   r|   z BomRefDiscriminator.discriminate   sV     	'IFALLE} 5))+$&	'r&   c                 :    | j                   D ]  \  }}||_         y r(   )ry   rt   )r#   rv   original_values      r%   r   zBomRefDiscriminator.reset   s!    &*mm 	*"FN)FL	*r&   c                 v    | j                    t        t                     dd   t        t                     dd   S )Nr   )rz   rZ   r   r)   s    r%   r   z BomRefDiscriminator._make_unique   s5    ,,FHab 123vx=3D2EFFr&   r   r   c           
           | t        t        d |j                               t        d |j                        t        d |j                              |      S )Nc                     | j                   S r(   bom_ref)cs    r%   <lambda>z.BomRefDiscriminator.from_bom.<locals>.<lambda>   
    !)) r&   c                     | j                   S r(   r   )ss    r%   r   z.BomRefDiscriminator.from_bom.<locals>.<lambda>   r   r&   c                     | j                   S r(   r   )vs    r%   r   z.BomRefDiscriminator.from_bom.<locals>.<lambda>   r   r&   )r   map_get_all_componentsservicesvulnerabilities)clsr   rq   s      r%   from_bomzBomRefDiscriminator.from_bom   sO    5#S%<%<%>?#S\\2#S%8%89
 	 	r&   r   )r   N)rS   rT   rU   r   rZ   r    r}   r
   r   r|   r   r   classmethodr   r   r&   r%   ro   ro      s     2 C t 
 s C D '*Gc G 5 # =R  r&   ro   )$__doc__rC   abcr   r   collections.abcr   r   	itertoolsr   r   typingr	   r
   r   r   r   r   schemar   r   	model.bomr   model.bom_refr   rg   r   r\   ri   r   ra   r   rf   r_   rh   ro   r   r&   r%   <module>r      s   &
 
 # -   I I 0&+(4N 4Nn 
 gl6G6G.H #05D 

 
 gl6F6F.G #05C 

 
 l #05:;Z5[ 

 l M ^h :# #r&   