예제 #1
0
 def filter(self, doc, filter_spec, **opts):
     prefix, name = filter_spec.split(":", 1)
     if prefix == "name":
         doc_id = Doc.id_from_title(name)
         self.register_filter(Doc(self.session, id=doc_id))
     else:
         self.register_filter_set(name)
     return doc.filter(filter_spec, **opts)
예제 #2
0
    def transform(self):
        """XSL/T filter used for this load."""

        if not hasattr(self, "_transform"):
            title = f"Index {self.type.capitalize()} Dictionary"
            doc_id = Doc.id_from_title(title, self.cursor)
            doc = Doc(Session("guest", tier=self.tier), id=doc_id)
            self._transform = etree.XSLT(doc.root)
            self.logger.info("Loaded %r filter", title)
        return self._transform
예제 #3
0
 def register_filter(self, filter_doc):
     if not filter_doc.title in Tests.COVERED:
         Tests.COVERED.add(filter_doc.title)
         xml = filter_doc.get_filter(filter_doc.id).xml
         root = etree.fromstring(xml)
         for name in ("import", "include"):
             qname = Doc.qname(name, Filter.NS)
             for node in root.iter(qname):
                 href = node.get("href").replace("%20", " ")
                 if href.startswith("cdr:name:"):
                     title = href.split(":name:", 1)[1]
                     doc_id = Doc.id_from_title(title)
                     self.register_filter(Doc(self.session, id=doc_id))