
    Nqh                         d dl Z d dlmZ d dlmZmZmZ d dlmZ d dl	m
Z
mZ d dlmZmZ  G d de      Z G d	 d
e      Zd Zd ZddZy)    N)warn)StringAliasSequence)Serialisable)REL_NS
PKG_REL_NS)Element
fromstringc                       e Zd ZdZd Z e       Z e       Z ed      Z	 ed      Z
 ed      Z ed      Z	 	 	 	 	 ddZy)	Relationshipz'Represents many kinds of relationships.TargetT)
allow_noneIdNc                 l    |dj                  t        |      }|| _        || _        || _        || _        y)z
        `type` can be used as a shorthand with the default relationships namespace
        otherwise the `Type` must be a fully qualified URL
        Nz{0}/{1})formatr   Typer   
TargetModer   )selfr   r   typer   r   s         `/srv/www/ollama/chat-ollama/venv/lib/python3.12/site-packages/openpyxl/packaging/relationship.py__init__zRelationship.__init__!   s8     ##FD1D	$    )NNNNN)__name__
__module____qualname____doc__tagnamer   r   r   r   targetr   r   idr    r   r   r   r      sT    1G8DXF8_F4(J	4	 B	tB  r   r   c                   N    e Zd ZdZ ee      ZddZd Zd Zd Z	d Z
d Zd	 Zy
)RelationshipListRelationships)expected_typec                     || _         y N)r   )r   r   s     r   r   zRelationshipList.__init__;   s
    (r   c                     | j                   d d  }|j                  |       |j                  sdj                  t	        |            |_        || _         y )NrId{0})r   appendr   r   len)r   valuevaluess      r   r*   zRelationshipList.append?   sA    ""1%exxF5EH"r   c                 ,    t        | j                        S r'   )r+   r   r   s    r   __len__zRelationshipList.__len__G   s    4$$%%r   c                 ,    t        | j                        S r'   )boolr   r/   s    r   __bool__zRelationshipList.__bool__K   s    D%%&&r   c              #   V   K   | j                   D ]  }|j                  |k(  s|  yw)z
        Find relationships by content-type
        NB. these content-types namespaced objects and different to the MIME-types
        in the package manifest :-(
        N)r   r   )r   content_typers      r   findzRelationshipList.findO   s.      "" 	Avv%	s   ))c                 ~    | j                   D ]  }|j                  |k(  s|c S  t        dj                  |            )NzUnknown relationship: {0})r   r   KeyErrorr   )r   keyr6   s      r   __getitem__zRelationshipList.__getitem__Z   s@    "" 	Atts{	 299#>??r   c                     t        dt              }t        | j                  d      D ]F  \  }}|j                  sdj                  |      |_        |j                  |j                                H |S )Nr$   )xmlns   r)   )r
   r	   	enumerater   r   r   r*   to_tree)r   treeidxrels       r   r@   zRelationshipList.to_treea   s^    j9!$"3"3Q7 	'HC66!-KK&	'
 r   N)r!   )r   r   r   r   r   r   r   r*   r0   r3   r7   r;   r@   r!   r   r   r#   r#   4   s5    G,7L)#&'@r   r#   c                     t        j                  |       \  }}t        j                  |ddj                  |            }|S )z
    Convert relative path to absolutes that can be loaded from a zip
    archive.
    The path to be passed in is that of containing object (workbook,
    worksheet, etc.)
    _relsz{0}.rels)	posixpathsplitjoinr   )pathfolderobjfilenames       r   get_rels_pathrM   k   s8     //$'KFC~~fgz/@/@/EFHOr   c                 D   | j                  |      }t        |      }	 t        j                  |      }t        j                  |      }t        j                  |      d   }|j                  D ]|  }|j                  dk(  r|j                  j                  d      r|j                  dd |_        Ct        j                  ||j                        }	t        j                  |	      |_        ~ |S # t        $ r) dj                  |      }t        |       t               }Y w xY w)zl
    Normalise dependency file paths to absolute ones

    Relative paths are relative to parent object
    z+{0} contains invalid dependency definitionsr   External/r>   N)readr   r#   	from_tree	TypeErrorr   r   rF   dirnamerG   r   r   r   
startswithrH   normpath)
archiverL   srcnoderelsmsgrJ   parentr6   pths
             r   get_dependentsr^   w   s     ,,x
 Cc?D"))$/
 x(F__V$Q'F /<<:%XX  %xx|AH..2C ))#.AH/ K  ";BB8LS	!"s   C- -/DDc                    t        ||g      st        d      |||   }n%	 t        |j                  |j                              }|j                  }| j                  |      }t        |      }|j                  |      }t        |      }		 t        | |	      |_        |S # t
        $ r Y yw xY w# t        $ r g |_        Y |S w xY w)z4
    Get related object based on id or rel_type
    z.Either the id or the content type are requiredN)any
ValueErrornextr7   rel_typeStopIterationr   rQ   r   rR   rM   r^   depsr9   )
rW   re   r    clsrC   rI   rX   rA   rK   	rels_paths
             r   get_relrh      s     Cy>IJJ	~2h	tyy./C ::D
,,t
Cc?D
--
Cd#I!'95 J  		  Js#   $B B- 	B*)B*-C C)NN)rF   warningsr   openpyxl.descriptorsr   r   r   !openpyxl.descriptors.serialisabler   openpyxl.xml.constantsr   r	   openpyxl.xml.functionsr
   r   r   r#   rM   r^   rh   r!   r   r   <module>rn      sM      
 ; 5< @4| 4n	6r   