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)
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
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))