Xj|dZddlmZddlmZmZmZmZddlm Z erddl m Z Gddee dfZ Gd dZy ) zRelationship-related objects.) annotations) TYPE_CHECKINGAnyDictcast)CT_Relationships)PartceZdZdZd fd Z d ddZddZddZddZe dZ e ddZ d dd Z dd Z e dd ZxZS) RelationshipszGCollection object for |_Relationship| instances, having list semantics.cFtt| ||_i|_yN)superr __init___baseURI_target_parts_by_rId)selfbaseURI __class__s `/mnt/ssd/data/Dropbox/adrian/vault-secondbrain/venv/lib/python3.12/site-packages/docx/opc/rel.pyrzRelationships.__init__s mT+- 46!cdt||||j|}|||<|s||j|<|S)z.Return a newly added |_Relationship| instance.) _Relationshiprr)rreltypetargetrId is_externalrels radd_relationshipzRelationships.add_relationships;C&$--MS -3D % %c * rcl|j||}||j}|j|||}|S)zlReturn relationship of `reltype` to `target_part`, newly added if not already present in collection.) _get_matching _next_rIdr)rr target_partrrs r get_or_addzRelationships.get_or_adds=  +6 ;..C''cBC rc|j||d}|!|j}|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!rr)rr target_refrrs rget_or_add_ext_relz Relationships.get_or_add_ext_rel(sK  *$ G ;..C''Sd'SCwwrc<|j|}|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")rrrs 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}|jD]>}|j|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_elmrs rr1zRelationships.xml=sW$'');;= TC   SWWckk3>>3?? S T||rcTdd}|jD]}|||||s|cSy)zuReturn relationship of matching `reltype`, `target`, and `is_external` from collection, or None if not found.c|j|k7ry|j|k7ry|jr |jn |j}||k(S)NF)rrr%r")rrrr rel_targets rmatchesz,Relationships._get_matching..matchesLs@{{g%+-+.??J' 'rN)rrrstrr Part | strrbool)r/)rrrrr6rs rr zRelationships._get_matchingFs6  (;;= CsGV[9  rc|jDcgc]}|j|k(s|}}t|dk(rd}t||zt|dkDrd}t ||z|dScc}w)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. rz*no relationship of type '%s' in collectionz1multiple relationships of type '%s' in collection)r/rlenKeyError ValueError)rrrmatchingtmpls rr(zRelationships._get_rel_of_typeYsx $(;;=KCCKK74JCKK x=A ?D4'>* * x=1 FDTG^, ,{Ls A/A/cXtdt|dzD]}d|z}||vs |cSy)zNext available rId in collection, starting from 'rId1' and making use of any gaps in numbering, e.g. 'rId2' for rIds ['rId1', 'rId3'].r;zrId%dN)ranger<)rn rId_candidates rr!zRelationships._next_rIdhs9q#d)a-( %A#aKMD($$ %r)rr7F) rr7rr8rr7rr9returnz'_Relationship')rr7r"r rGr)rr7r%r7rGr7)rr7rGr rGr7)rr7rr8rr9rGz_Relationship | None)rr7)__name__ __module__ __qualname____doc__rrr#r&r)propertyr,r1r r(r! __classcell__rs@rr r sQ7 OT$.58GK  )) EJ$.=A & %%rr rceZdZdZ d d fd Zed dZed dZed dZed dZ ed dZ xZ S) rz&Value object for relationship to part.ctt| ||_||_||_||_t||_yr ) rrr_rId_reltype_targetrr9 _is_external)rrrrrexternalrs rrz_Relationship.__init__us: mT+-     Nrc|jSr )rUr+s rrz_Relationship.is_externals   rc|jSr )rSr+s rrz_Relationship.reltypes }}rc|jSr )rRr+s rrz_Relationship.rIds yyrc\|jr tdtd|jS)NzOtarget_part property on _Relationship is undefined when target mode is Externalr )rUr>rrTr+s rr"z_Relationship.target_parts.   a FDLL))rc|jrtt|jStd|j}|jj |j S)Nr )rUrr7rTpartname relative_refr)rrs rr%z_Relationship.target_refsE   T\\* *&$,,/F??// > >rrF) rr7rr7rr8rr7rVr9)rGr9rH)rGr ) rIrJrKrLrrMrrrr"r%rNrOs@rrrrs0Z_++!$+.8+CF+RV+!!**??rN)rL __future__rtypingrrrr docx.opc.oxmlr docx.opc.partr r7r rrrrcs=#"11*"b%Do-.b%J'?'?r