
    	h                         S SK r S SKJr  S SKJrJrJr  S SKJr  S SK	J
r
  S SKJrJr  S SKJrJr   " S S	\5      r " S
 S\
5      rS rS rSS jrg)    N)warn)StringAliasSequence)Serialisable)ElementList)REL_NS
PKG_REL_NS)Element
fromstringc                       \ rS rSrSrS r\" 5       r\" 5       r\	" S5      r
\" SS9r\" SS9r\	" S5      r     S
S jrS	rg)Relationship   z'Represents many kinds of relationships.TargetT)
allow_noneIdNc                 f    Ub  SR                  [        U5      nX l        X@l        XPl        Xl        g)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         Q/var/www/html/env/lib/python3.13/site-packages/openpyxl/packaging/relationship.py__init__Relationship.__init__"   s0     ##FD1D	$    )r   r   r   r   )NNNNN)__name__
__module____qualname____firstlineno____doc__tagnamer   r   r   r   targetr   r   idr   __static_attributes__ r   r   r   r      sT    1G8DXF8_F4(J	4	 B	tB  r   r   c                   N   ^  \ rS rSrSr\rU 4S jrS rS r	S r
U 4S jrSrU =r$ )	RelationshipList5   Relationshipsc                 n   > [         TU ]  U5        UR                  (       d  S[        U 5       3Ul        g g )NrId)superappendr   len)r   value	__class__s     r   r.   RelationshipList.append;   s-    uxxSYK(EH r   c              #   J   #    U  H  nUR                   U:X  d  M  Uv   M     g7f)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   content_typers      r   findRelationshipList.findA   s"      Avv% s   #	#c                 p    U  H  nUR                   U:X  d  M  Us  $    [        SR                  U5      5      e)NzUnknown relationship: {0})r   KeyErrorr   )r   keyr5   s      r   getRelationshipList.getL   s5    Atts{  299#>??r   c                 F    U  Vs0 s H  oR                   U_M     sn$ s  snf )z,Return a dictionary of relations keyed by id)r$   )r   r5   s     r   to_dictRelationshipList.to_dictS   s      $%1Q%%%s   c                 P   > [         TU ]  5       nUR                  S[        5        U$ )Nxmlns)r-   to_treesetr
   )r   treer1   s     r   rB   RelationshipList.to_treeX   s"    w *%r   r&   )r   r   r   r    r"   r   expected_typer.   r6   r;   r>   rB   r%   __classcell__)r1   s   @r   r(   r(   5   s,    G M)@&
 r   r(   c                     [         R                  " U 5      u  p[         R                  " USSR                  U5      5      nU$ )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_pathrQ   ^   s6     //$'KF~~fgz/@/@/EFHOr   c                 L   U R                  U5      n[        U5      n [        R                  U5      n[        R                  " U5      n[        R                  " U5      S   nU H  nUR                  S:X  a  M  UR                  R                  S5      (       a  UR                  SS Ul        MK  [        R                  " XxR                  5      n	[        R                  " U	5      Ul        M     U$ ! [         a)    SR                  U5      n[        U5        [        5       n Nf = f)z`
Normalise dependency file paths to absolute ones

Relative paths are relative to parent object
z+{0} contains invalid dependency definitionsr   External/   N)readr   r(   	from_tree	TypeErrorr   r   rJ   dirnamerK   r   r#   
startswithrL   normpath)
archiverP   srcnoderelsmsgrN   parentr5   pths
             r   get_dependentsrc   j   s     ,,x
 Cc?D"))$/
 x(F__V$Q'F<<:%XX  %%xx|AH..2C ))#.AH  K  ";BB8LS	!"s   C0 00D#"D#c                    [        X#/5      (       d  [        S5      eUb  UR                  U5      nO% [        UR	                  UR
                  5      5      nUR                  nU R                  U5      n[        U5      nUR                  U5      n[        U5      n	 [        X	5      Ul        U$ ! [         a     gf = f! [         a    / Ul         U$ f = f)z,
Get related object based on id or rel_type
z.Either the id or the content type are requiredN)any
ValueErrorr;   nextr6   rel_typeStopIterationr#   rV   r   rW   rQ   rc   depsr9   )
r\   rj   r$   clsrelrM   r]   rD   rO   	rels_paths
             r   get_relrn      s     y>>IJJ	~hhrl	tyy./C ::D
,,t
Cc?D
--
Cd#I!'5 J  		  Js#   $B. B> .
B;:B;>CC)NN)rJ   warningsr   openpyxl.descriptorsr   r   r   !openpyxl.descriptors.serialisabler   openpyxl.descriptors.containerr   openpyxl.xml.constantsr	   r
   openpyxl.xml.functionsr   r   r   r(   rQ   rc   rn   r&   r   r   <module>ru      sP      
 ; 6 5< @&{ &R	6r   