
    ܖi                         d dl mZmZ d dlmZ d dlmZ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  G d de	j&                  j(                        Z e	j,                  d       G d d             Z G d de      Zy)    )ABCabstractmethod)Iterable)AnyOptionalN)	SortedSet   )ComparableTuple)'SerializationOfUnexpectedValueException   )BomRefc                   P    e Zd ZdZededee   fd       Zedede	d   fd       Z
y)(_DependencyRepositorySerializationHelperz   THIS CLASS IS NON-PUBLIC API  oreturnc                     t        |t        t        f      r#|D cg c]  }t        |j                         c}S t        d|      c c}w )Nz1Attempt to serialize a non-DependencyRepository: )
isinstancer   setstrrefr   )clsr   is      ^/var/www/html/content-pipeline/venv/lib/python3.12/site-packages/cyclonedx/model/dependency.py	serializez2_DependencyRepositorySerializationHelper.serialize"   sH    a)S)*()*1CJ**5?uEG 	G +s   A
Dependencyc                     t               }t        |t              r,|D ]'  }|j                  t	        t        |                   ) |S )N)valuer   )r   r   listaddr   r   )r   r   dependenciesvs       r   deserializez4_DependencyRepositorySerializationHelper.deserialize)   sA    ua B  Q!@AB    N)__name__
__module____qualname____doc__classmethodr   r   r   r   r   r#    r$   r   r   r      sT    *G# G$s) G G C C$5  r$   r   T)%ignore_unknown_during_deserializationc                      e Zd ZdZddedeed       ddfdZe e	j                  e       e	j                         defd                     Zej                  deddfd       Ze e	j                  d	       e	j                  e       e	j                   e	j"                  j$                  d
      dd                            Zej                  ded    ddfd       Zde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defdZ y)r   z~
    Models a Dependency within a BOM.

    .. note::
        See https://cyclonedx.org/docs/1.7/xml/#type_dependencyType
    Nr   r!   r   c                 (    || _         |xs g | _        y N)r   r!   )selfr   r!   s      r   __init__zDependency.__init__;   s    (.Br$   c                     | j                   S r.   _refr/   s    r   r   zDependency.ref?   s     yyr$   c                     || _         y r.   r2   )r/   r   s     r   r   zDependency.refE   s	    	r$   	dependsOn
dependencyc                     | j                   S r.   )_dependenciesr4   s    r   r!   zDependency.dependenciesI   s    
 !!!r$   c                 $    t        |      | _        y r.   )r   r9   )r/   r!   s     r   r!   zDependency.dependenciesP   s    &|4r$   c                 B    t        t        d | j                              S )Nc                     | j                   S r.   r   )ds    r   <lambda>z5Dependency.dependencies_as_bom_refs.<locals>.<lambda>U   s
     r$   )r   mapr!   r4   s    r   dependencies_as_bom_refsz#Dependency.dependencies_as_bom_refsT   s    3(9(9:;;r$   c                 V    t        | j                  t        | j                        f      S r.   )_ComparableTupler   r!   r4   s    r   __comparable_tuplezDependency.__comparable_tupleW   s)    HH&t'8'89!
  	r$   otherc                 f    t        |t              r!| j                         |j                         k(  S y)NF)r   r   _Dependency__comparable_tupler/   rD   s     r   __eq__zDependency.__eq__\   s,    eZ(**,0H0H0JJJr$   c                 p    t        |t              r!| j                         |j                         k  S t        S r.   )r   r   rF   NotImplementedrG   s     r   __lt__zDependency.__lt__a   s/    eZ(**,u/G/G/IIIr$   c                 4    t        | j                               S r.   )hashrF   r4   s    r   __hash__zDependency.__hash__f   s    D++-..r$   c                 N    d| j                   dt        | j                         dS )Nz<Dependency ref=z
, targets=>)r   lenr!   r4   s    r   __repr__zDependency.__repr__i   s'    !$((ZD<M<M8N7OqQQr$   r.   )r   zSortedSet[Dependency])!r%   r&   r'   r(   r   r   r   r0   propertyserializabletype_mappingxml_attributer   setter	json_namer   	xml_arrayXmlArraySerializationTypeFLATr!   r   r@   rB   rF   objectboolrH   r   rK   intrN   r   rR   r*   r$   r   r   r   2   s   /F /(8L;Q2R /^b / \v&\!V  " '  	ZZv $   \K(\GH\LBBGGV" W I ) " 5,)? 5D 5 5<#f+ <$4 
F t 
C D 
/# /R# Rr$   r   c                   0    e Zd ZdZeedefd              Zy)
Dependablez@
    Dependable objects can be part of the Dependency Graph
    r   c                      y r.   r*   r4   s    r   bom_refzDependable.bom_refr   s     	r$   N)r%   r&   r'   r(   rS   r   r   rb   r*   r$   r   r`   r`   m   s*        r$   r`   )abcr   r   collections.abcr   typingr   r   py_serializablerT   sortedcontainersr   _internal.comparer
   rB   exception.serializationr   rb   r   helpers
BaseHelperr   serializable_classr   r`   r*   r$   r   <module>rm      sn   & $ $   & & C M |/C/C/N/N & !  tL7R 7R M7Rt r$   