ó
    ‰*£ht%  ã                   ó¬   • S r SSKJr  SSKJr  SSKJrJr  SSK	J
r
  SSKJr   " S S5      r " S	 S
5      r " S S5      r " S S5      r " S S5      rg)zQLow-level, read-only API to a serialized Open Packaging Convention (OPC) package.é    )ÚRELATIONSHIP_TARGET_MODE)Ú	parse_xml)ÚPACKAGE_URIÚPackURI)ÚPhysPkgReader)ÚCaseInsensitiveDictc                   ó|   ^ • \ rS rSrSrU 4S jr\S 5       rS rS r	\S 5       r
\S 5       r\SS	 j5       rS
rU =r$ )ÚPackageReaderé
   z~Provides access to the contents of a zip-format OPC package via its
:attr:`serialized_parts` and :attr:`pkg_srels` attributes.c                 óB   >• [         [        U ]  5         X l        X0l        g ©N)Úsuperr
   Ú__init__Ú
_pkg_srelsÚ_sparts)ÚselfÚcontent_typesÚ	pkg_srelsÚspartsÚ	__class__s       €ÚO/home/mande/repo/quber/.venv/lib/python3.13/site-packages/docx/opc/pkgreader.pyr   ÚPackageReader.__init__   s   ø€ ÜŒm˜TÑ+Ô-Ø#ŒØ�ó    c                 óî   • [        U 5      n[        R                  UR                  5      n[        R                  U[        5      n[        R                  XU5      nUR                  5         [	        X#U5      $ )zEReturn a |PackageReader| instance loaded with contents of `pkg_file`.)	r   Ú_ContentTypeMapÚfrom_xmlÚcontent_types_xmlr
   Ú
_srels_forr   Ú_load_serialized_partsÚclose)Úpkg_fileÚphys_readerr   r   r   s        r   Ú	from_fileÚPackageReader.from_file   sa   € ô $ HÓ-ˆÜ'×0Ñ0°×1NÑ1NÓOˆÜ!×,Ñ,¨[¼+ÓFˆ	Ü×5Ñ5°kÈmÓ\ˆØ×ÑÔÜ˜]°vÓ>Ð>r   c              #   ó’   #   • U R                    H3  nUR                  UR                  UR                  UR                  4v •  M5     g7f)zmGenerate a 4-tuple `(partname, content_type, reltype, blob)` for each of the
serialized parts in the package.N)r   ÚpartnameÚcontent_typeÚreltypeÚblob)r   Úss     r   Úiter_spartsÚPackageReader.iter_sparts   s4   é € ð —”ˆAØ—:‘:˜qŸ~™~¨q¯y©y¸!¿&¹&ÐAÔAò ùs   ‚AAc              #   ó²   #   • U R                    H  n[        U4v •  M     U R                   H&  nUR                   H  nUR                  U4v •  M     M(     g7f)zUGenerate a 2-tuple `(source_uri, srel)` for each of the relationships in the
package.N)r   r   r   Úsrelsr&   )r   ÚsrelÚsparts      r   Ú
iter_srelsÚPackageReader.iter_srels#   sK   é € ð —O”OˆDÜ Ð%Ô%ñ $à—\”\ˆEØŸœ�Ø—~‘~ tÐ,Ô,ó $ò "ùs   ‚AAc                 ó¢   • / n[         R                  X5      nU H(  u  pVpxX%   n	[        XYXvU5      n
UR                  U
5        M*     [	        U5      $ )z Return a list of |_SerializedPart| instances corresponding to the parts in
`phys_reader` accessible by walking the relationship graph starting with
`pkg_srels`.)r
   Ú_walk_phys_partsÚ_SerializedPartÚappendÚtuple)r"   r   r   r   Úpart_walkerr&   r)   r(   r.   r'   r0   s              r   r   Ú$PackageReader._load_serialized_parts,   sV   € ð
 ˆÜ#×4Ñ4°[ÓLˆÛ.9Ñ*ˆH˜GØ(Ñ2ˆLÜ# H¸GÈ5ÓQˆEØ�M‰M˜%Ö ñ /:ô �V‹}Ðr   c                 ód   • U R                  U5      n[        R                  UR                  U5      $ )znReturn |_SerializedRelationships| instance populated with relationships for
source identified by `source_uri`.)Úrels_xml_forÚ_SerializedRelationshipsÚload_from_xmlÚbaseURI)r"   Ú
source_uriÚrels_xmls      r   r   ÚPackageReader._srels_for9   s-   € ð ×+Ñ+¨JÓ7ˆÜ'×5Ñ5°j×6HÑ6HÈ(ÓSÐSr   c              #   óV  #   • Uc  / nU Hš  nUR                   (       a  M  UR                  nXB;   a  M)  UR                  U5        UR                  n[        R                  X5      nU R                  U5      nXGXV4v •  [        R                  XU5      nU H  u  pGpQXGXQ4v •  M     Mœ     g7f)z�Generate a 4-tuple `(partname, blob, reltype, srels)` for each of the parts
in `phys_reader` by walking the relationship graph rooted at srels.N)Úis_externalÚtarget_partnamer6   r(   r
   r   Úblob_forr4   )	r"   r.   Úvisited_partnamesr/   r&   r(   Ú
part_srelsr)   Únext_walkers	            r   r4   ÚPackageReader._walk_phys_parts@   s¬   é € ð Ñ$Ø "ÐÛˆDØ××ÙØ×+Ñ+ˆHØÓ,ÙØ×$Ñ$ XÔ.Ø—l‘lˆGÜ&×1Ñ1°+ÓHˆJØ×'Ñ'¨Ó1ˆDØ 7Ð7Ò7Ü'×8Ñ8¸ÐRcÓdˆKÛ2=Ñ.� Ø wÐ6Ô6ó 3>ò ùs   ‚B'B))r   r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   Ústaticmethodr#   r+   r1   r   r   r4   Ú__static_attributes__Ú__classcell__©r   s   @r   r
   r
   
   sk   ø† ñBõð
 ñ?ó ð?òBò-ð ñ
ó ð
ð ñTó ðTð ó7ó ö7r   r
   c                   óN   ^ • \ rS rSrSrU 4S jrS r\S 5       rS r	S r
SrU =r$ )	r   éV   z‰Value type providing dictionary semantics for looking up content type by part
name, e.g. ``content_type = cti['/ppt/presentation.xml']``.c                 óf   >• [         [        U ]  5         [        5       U l        [        5       U l        g r   )r   r   r   r   Ú
_overridesÚ	_defaults©r   r   s    €r   r   Ú_ContentTypeMap.__init__Z   s$   ø€ ÜŒo˜tÑ-Ô/Ü-Ó/ˆŒÜ,Ó.ˆ�r   c                 ó  • [        U[        5      (       d  Sn[        U[        U5      -  5      eXR                  ;   a  U R                  U   $ UR
                  U R                  ;   a  U R                  UR
                     $ Sn[        X!-  5      e)z6Return content type for part identified by `partname`.z4_ContentTypeMap key must be <type 'PackURI'>, got %sz8no content type for partname '%s' in [Content_Types].xml)Ú
isinstancer   ÚKeyErrorÚtyperV   ÚextrW   )r   r&   Útmpls      r   Ú__getitem__Ú_ContentTypeMap.__getitem___   sv   € ä˜(¤G×,Ñ,ØIˆDÜ˜4¤$ x£.Ñ0Ó1Ð1Ø—‘Ó&Ø—?‘? 8Ñ,Ð,Ø�<‰<˜4Ÿ>™>Ó)Ø—>‘> (§,¡,Ñ/Ð/ØIˆÜ�t‘Ó'Ð'r   c                 ó  • [        U 5      n[        5       nUR                   H)  nUR                  UR                  UR
                  5        M+     UR                   H)  nUR                  UR                  UR
                  5        M+     U$ )z[Return a new |_ContentTypeMap| instance populated with the contents of
`content_types_xml`.)	r   r   Ú	overridesÚ_add_overrider&   r'   ÚdefaultsÚ_add_defaultÚ	extension)r   Ú	types_elmÚct_mapÚoÚds        r   r   Ú_ContentTypeMap.from_xmlk   sl   € ô Ð/Ó0ˆ	Ü Ó"ˆØ×$Ô$ˆAØ× Ñ  §¡¨Q¯^©^Ö<ñ %à×#Ô#ˆAØ×Ñ §¡¨Q¯^©^Ö<ñ $àˆr   c                 ó    • X R                   U'   g)zVAdd the default mapping of `extension` to `content_type` to this content type
mapping.N)rW   )r   rg   r'   s      r   rf   Ú_ContentTypeMap._add_defaultw   s   € ð %1�‰�yÒ!r   c                 ó    • X R                   U'   g)zUAdd the default mapping of `partname` to `content_type` to this content type
mapping.N)rV   )r   r&   r'   s      r   rd   Ú_ContentTypeMap._add_override|   s   € ð %1�‰˜Ò!r   )rW   rV   )rJ   rK   rL   rM   rN   r   r`   rO   r   rf   rd   rP   rQ   rR   s   @r   r   r   V   s6   ø† ñCõ/ò

(ð ñ	ó ð	ò1÷
1ð 1r   r   c                   ó|   ^ • \ rS rSrSrU 4S jr\S 5       r\S 5       r\S 5       r	\S 5       r
\S 5       rS	rU =r$ )
r5   é‚   z‡Value object for an OPC package part.

Provides access to the partname, content type, blob, and serialized relationships
for the part.
c                 óf   >• [         [        U ]  5         Xl        X l        X0l        X@l        XPl        g r   )r   r5   r   Ú	_partnameÚ_content_typeÚ_reltypeÚ_blobÚ_srels)r   r&   r'   r(   r)   r.   r   s         €r   r   Ú_SerializedPart.__init__‰   s*   ø€ ÜŒo˜tÑ-Ô/Ø!ŒØ)ÔØŒØŒ
Ø�r   c                 ó   • U R                   $ r   )rt   ©r   s    r   r&   Ú_SerializedPart.partname‘   s   € à�~‰~Ðr   c                 ó   • U R                   $ r   )ru   r{   s    r   r'   Ú_SerializedPart.content_type•   s   € à×!Ñ!Ð!r   c                 ó   • U R                   $ r   )rw   r{   s    r   r)   Ú_SerializedPart.blob™   s   € à�z‰zÐr   c                 ó   • U R                   $ )z-The referring relationship type of this part.©rv   r{   s    r   r(   Ú_SerializedPart.reltype�   ó   € ð �}‰}Ðr   c                 ó   • U R                   $ r   ©rx   r{   s    r   r.   Ú_SerializedPart.srels¢   s   € à�{‰{Ðr   )rw   ru   rt   rv   rx   )rJ   rK   rL   rM   rN   r   Úpropertyr&   r'   r)   r(   r.   rP   rQ   rR   s   @r   r5   r5   ‚   sq   ø† ñõð ñó ðð ñ"ó ð"ð ñó ðð ñó ðð ñó ör   r5   c                   óŒ   ^ • \ rS rSrSrU 4S jr\S 5       r\S 5       r\S 5       r	\S 5       r
\S 5       r\S	 5       rS
rU =r$ )Ú_SerializedRelationshipé§   zÑValue object representing a serialized relationship in an OPC package.

Serialized, in this case, means any target part is referred to via its partname
rather than a direct link to an in-memory |Part| object.
c                 ó¾   >• [         [        U ]  5         Xl        UR                  U l        UR                  U l        UR                  U l	        UR                  U l        g r   )r   rŠ   r   Ú_baseURIÚrIdÚ_rIdr(   rv   Útarget_modeÚ_target_modeÚ
target_refÚ_target_ref)r   r>   Úrel_elmr   s      €r   r   Ú _SerializedRelationship.__init__®   sH   ø€ ÜÔ% tÑ5Ô7ØŒØ—K‘KˆŒ	ØŸ™ˆŒØ#×/Ñ/ˆÔØ"×-Ñ-ˆÕr   c                 ó<   • U R                   [        R                  :H  $ )z'True if target_mode is ``RTM.EXTERNAL``)r‘   ÚRTMÚEXTERNALr{   s    r   rC   Ú#_SerializedRelationship.is_external¶   s   € ð × Ñ ¤C§L¡LÑ0Ð0r   c                 ó   • U R                   $ )z.Relationship type, like ``RT.OFFICE_DOCUMENT``r‚   r{   s    r   r(   Ú_SerializedRelationship.reltype»   r„   r   c                 ó   • U R                   $ )zeRelationship id, like 'rId9', corresponds to the ``Id`` attribute on the
``CT_Relationship`` element.)r�   r{   s    r   rŽ   Ú_SerializedRelationship.rIdÀ   s   € ð �y‰yÐr   c                 ó   • U R                   $ )zoString in ``TargetMode`` attribute of ``CT_Relationship`` element, one of
``RTM.INTERNAL`` or ``RTM.EXTERNAL``.)r‘   r{   s    r   r�   Ú#_SerializedRelationship.target_modeÆ   s   € ð × Ñ Ð r   c                 ó   • U R                   $ )z²String in ``Target`` attribute of ``CT_Relationship`` element, a relative
part reference for internal target mode or an arbitrary URI, e.g. an HTTP URL,
for external target mode.)r“   r{   s    r   r’   Ú"_SerializedRelationship.target_refÌ   s   € ð
 ×ÑÐr   c                 óØ   • U R                   (       a  Sn[        U5      e[        U S5      (       d0  [        R                  " U R
                  U R                  5      U l        U R                  $ )zÁ|PackURI| instance containing partname targeted by this relationship.

Raises ``ValueError`` on reference if target_mode is ``'External'``. Use
:attr:`target_mode` to check before referencing.
zUtarget_partname attribute on Relationship is undefined where TargetMode == "External"Ú_target_partname)rC   Ú
ValueErrorÚhasattrr   Úfrom_rel_refr�   r’   r£   )r   Úmsgs     r   rD   Ú'_SerializedRelationship.target_partnameÓ   sZ   € ð ××ð0ð ô ˜S“/Ð!ä�tÐ/×0Ñ0Ü$+×$8Ò$8¸¿¹ÈÏÉÓ$XˆDÔ!Ø×$Ñ$Ð$r   )r�   r�   rv   r‘   r£   r“   )rJ   rK   rL   rM   rN   r   rˆ   rC   r(   rŽ   r�   r’   rD   rP   rQ   rR   s   @r   rŠ   rŠ   §   s…   ø† ñõ.ð ñ1ó ð1ð ñó ðð ñó ðð
 ñ!ó ð!ð
 ñ ó ð ð ñ%ó ö%r   rŠ   c                   óB   ^ • \ rS rSrSrU 4S jrS r\S 5       rSr	U =r
$ )r<   éæ   z|Read-only sequence of |_SerializedRelationship| instances corresponding to the
relationships item XML passed to constructor.c                 ó8   >• [         [        U ]  5         / U l        g r   )r   r<   r   rx   rX   s    €r   r   Ú!_SerializedRelationships.__init__ê   s   ø€ ÜÔ&¨Ñ6Ô8Øˆ�r   c                 ó6   • U R                   R                  5       $ )z*Support iteration, e.g. 'for x in srels:'.)rx   Ú__iter__r{   s    r   r®   Ú!_SerializedRelationships.__iter__î   s   € à�{‰{×#Ñ#Ó%Ð%r   c                 ó¤   • [        5       nUbB  [        U5      nUR                   H'  nUR                  R	                  [        X5      5        M)     U$ )z¢Return |_SerializedRelationships| instance loaded with the relationships
contained in `rels_item_xml`.

Returns an empty collection if `rels_item_xml` is |None|.
)r<   r   ÚRelationship_lstrx   r6   rŠ   )r>   Úrels_item_xmlr.   Úrels_elmr”   s        r   r=   Ú&_SerializedRelationships.load_from_xmlò   sI   € ô )Ó*ˆØÑ$Ü  Ó/ˆHØ#×4Ô4�Ø—‘×#Ñ#Ô$;¸GÓ$MÖNñ 5àˆr   r†   )rJ   rK   rL   rM   rN   r   r®   rO   r=   rP   rQ   rR   s   @r   r<   r<   æ   s&   ø† ñ5õò&ð ñó ör   r<   N)rN   Údocx.opc.constantsr   r—   Údocx.opc.oxmlr   Údocx.opc.packurir   r   Údocx.opc.phys_pkgr   Údocx.opc.sharedr   r
   r   r5   rŠ   r<   © r   r   Ú<module>r»      sO   ðÙ Wå >Ý #ß 1Ý +Ý /÷I7ñ I7÷X)1ñ )1÷X"ñ "÷J<%ñ <%÷~ò r   