;idZddlmZddlmZmZmZmZddlm Z erddl m Z Gddee dfZ Gd dZd S) zRelationship-related objects.) annotations) TYPE_CHECKINGAnyDictcast)CT_Relationships)PartceZdZdZdfd Z dddZddZd dZd!dZe dZ e d"dZ dd#dZ d$dZ e d"dZxZS)% RelationshipszGCollection object for |_Relationship| instances, having list semantics.baseURIstrcrtt|||_i|_dSN)superr __init___baseURI_target_parts_by_rId)selfr __class__s @C:\PYTHON\MyICR_Workspace\venv\Lib\site-packages\docx/opc/rel.pyrzRelationships.__init__s4 mT""++--- 46!!!Freltypetarget Part | strrId is_externalboolreturn'_Relationship'cXt||||j|}|||<|s ||j|<|S)z.Return a newly added |_Relationship| instance.) _Relationshiprr)rrrrrrels radd_relationshipzRelationships.add_relationships>C&$-MMS  4-3D %c * r target_partr r!cr|||}||j}||||}|S)zlReturn relationship of `reltype` to `target_part`, newly added if not already present in collection.) _get_matching _next_rIdr#)rrr$r"rs r get_or_addzRelationships.get_or_addsA  +66 ;.C''cBBC r target_refc|||d}| |j}||||d}|jS)z{Return rId of external relationship of `reltype` to `target_ref`, newly added if not already present in collection.T)r)r&r'r#r)rrr)r"rs rget_or_add_ext_relz Relationships.get_or_add_ext_rel(sM  *$ GG ;.C''Sd'SSCwrc:||}|jS)zReturn target part of rel with matching `reltype`, raising |KeyError| if not found and |ValueError| if more than one matching relationship is found.)_get_rel_of_typer$)rrr"s rpart_with_reltypezRelationships.part_with_reltype1s##G,,rc|jS)z_Dict mapping rIds to target parts for all the internal relationships in the collection.)rrs r related_partszRelationships.related_parts7s ((rctj}|D].}||j|j|j|j/|jS)zoSerialize this relationship collection into XML suitable for storage as a .rels file in an OPC package.) rnewvaluesadd_relrrr)rxml)rrels_elmr"s rr6zRelationships.xml=sX$'));;== T TC   SWck3>3? S S S S|r_Relationship | Nonec`d d }|D]}|||||r|cSd S) zuReturn relationship of matching `reltype`, `target`, and `is_external` from collection, or None if not found.r"r!rr rrrrcl|j|krdS|j|krdS|jr|jn|j}||kS)NF)rrr)r$)r"rrr rel_targets rmatchesz,Relationships._get_matching..matchesLsE{g%%u+--u+.?OJ' 'rN)r"r!rr rrrr)r4)rrrrr<r"s rr&zRelationships._get_matchingFsZ  ( ( ( (;;==  CwsGV[99   trcfd|D}t|dkrd}t|zt|dkrd}t|z|dS)zReturn single relationship of type `reltype` from the collection. Raises |KeyError| if no matching relationship is found. Raises |ValueError| if more than one matching relationship is found. c*g|]}|jk |S)r).0r"rs r z2Relationships._get_rel_of_type.._s%KKKCCK74J4JC4J4J4Jrrz*no relationship of type '%s' in collectionz1multiple relationships of type '%s' in collection)r4lenKeyError ValueError)rrmatchingtmpls ` rr-zRelationships._get_rel_of_typeYs LKKK4;;==KKK x==A  ?D4'>** * x==1  FDTG^,, ,{rcftdt|dzD]}d|z}||vr|cSdS)zNext available rId in collection, starting from 'rId1' and making use of any gaps in numbering, e.g. 'rId2' for rIds ['rId1', 'rId3'].rBzrId%dN)rangerC)rn rId_candidates rr'zRelationships._next_rIdhsVq#d))a-(( % %A#aKMD(($$$$) % %r)r r F) rr rrrr rrrr)rr r$r rr!)rr r)r rr )rr rr rr )rr rrrrrr8)rr )__name__ __module__ __qualname____doc__rr#r(r+r.propertyr1r6r&r-r' __classcell__rs@rr r s.QQ777777 OT ))X) XEJ&    %%%X%%%%%rr r!ceZdZdZ ddfd Zedd ZeddZeddZeddZ eddZ xZ S)r!z&Value object for relationship to part.Frr rrrr externalrctt|||_||_||_||_t||_dSr) rr!r_rId_reltype_targetrr _is_external)rrrrr rWrs rrz_Relationship.__init__usQ mT""++---     NNrrc|jSr)r\r0s rrz_Relationship.is_externals   rc|jSr)rZr0s rrz_Relationship.reltypes }rc|jSr)rYr0s rrz_Relationship.rIds yrr cX|jrtdtd|jS)NzOtarget_part property on _Relationship is undefined when target mode is Externalr )r\rErr[r0s rr$z_Relationship.target_parts6   a FDL)))rc|jrtt|jStd|j}|j|jS)Nr )r\rr r[partname relative_refr)rrs rr)z_Relationship.target_refsH   ?T\** *&$,//F?// >> >rrM) rr rr rrr r rWr)rrrN)rr ) rOrPrQrRrrSrrrr$r)rTrUs@rr!r!rs00Z_+++++++!!!X!XX***X*???X?????rN)rR __future__rtypingrrrr docx.opc.oxmlr docx.opc.partr r r r!r?rrrhs##""""""111111111111******#""""""b%b%b%b%b%Do-.b%b%b%J'?'?'?'?'?'?'?'?'?'?r