예제 #1
0
 def iter_valid_rels():
     """Filter out broken relationships such as those pointing to NULL."""
     for rel_elm in xml_rels.relationship_lst:
         # --- Occasionally a PowerPoint plugin or other client will "remove"
         # --- a relationship simply by "voiding" its Target value, like making
         # --- it "/ppt/slides/NULL". Skip any relationships linking to a
         # --- partname that is not present in the package.
         if rel_elm.targetMode == RTM.INTERNAL:
             partname = PackURI.from_rel_ref(base_uri,
                                             rel_elm.target_ref)
             if partname not in parts:
                 continue
         yield _Relationship.from_xml(base_uri, rel_elm, parts)
예제 #2
0
        def load_rels(source_partname, rels):
            """Populate `xml_rels` dict by traversing relationships depth-first."""
            xml_rels[source_partname] = rels
            visited_partnames.add(source_partname)
            base_uri = source_partname.baseURI

            # --- recursion stops when there are no unvisited partnames in rels ---
            for rel in rels:
                if rel.targetMode == RTM.EXTERNAL:
                    continue
                target_partname = PackURI.from_rel_ref(base_uri,
                                                       rel.target_ref)
                if target_partname in visited_partnames:
                    continue
                load_rels(target_partname, self._xml_rels_for(target_partname))
예제 #3
0
 def from_xml(cls, base_uri, rel, parts):
     """Return |_Relationship| object based on CT_Relationship element `rel`."""
     target = (rel.target_ref if rel.targetMode == RTM.EXTERNAL else
               parts[PackURI.from_rel_ref(base_uri, rel.target_ref)])
     return cls(base_uri, rel.rId, rel.reltype, rel.targetMode, target)
예제 #4
0
 def it_can_construct_from_relative_ref(self):
     baseURI = '/ppt/slides'
     relative_ref = '../slideLayouts/slideLayout1.xml'
     pack_uri = PackURI.from_rel_ref(baseURI, relative_ref)
     assert pack_uri == '/ppt/slideLayouts/slideLayout1.xml'
예제 #5
0
 def it_can_construct_from_relative_ref(self):
     pack_uri = PackURI.from_rel_ref(
         "/ppt/slides", "../slideLayouts/slideLayout1.xml"
     )
     assert pack_uri == "/ppt/slideLayouts/slideLayout1.xml"