def register_namespace(self, prefix, uri): """Registers a namespace,, making it available for use when adding subsequent fields to the entry. Registration will also affect the XML export, adding in the xmlns:prefix="url" attribute when required.""" etree.register_namespace(prefix, uri) self.add_ns.append(prefix) if prefix not in NS.keys(): NS[prefix] = "{%s}%%s" % uri
def register_namespace(self, prefix, uri): """Registers a namespace,, making it available for use when adding subsequent fields to the entry. Registration will also affect the XML export, adding in the xmlns:prefix="url" attribute when required.""" try: etree.register_namespace(prefix, uri) except AttributeError as e: # the etree implementation we're using doesn't support register_namespace # (probably lxml) pass self.add_ns.append(prefix) if prefix not in NS.keys(): NS[prefix] = "{%s}%%s" % uri # we also have to handle namespaces internally, for etree implementations which # don't support register_namespace if prefix not in self.nsmap.keys(): self.nsmap[prefix] = uri
def handle_metadata(self): """Method that walks the `etree.SubElement`, assigning the information to the objects attributes.""" for e in self.dom.getchildren(): for nmsp, prefix in NS.iteritems(): if str(e.tag).startswith(prefix % ""): _, tagname = e.tag.rsplit("}", 1) field = "%s_%s" % (nmsp, tagname) d_l.debug("Attempting to intepret field: '%s'" % field) if field == "atom_link": self.handle_link(e) elif field == "atom_content": self.handle_content(e) elif field == "atom_generator": for ak,av in e.attrib.iteritems(): if not e.text: e.text = "" e.text += " %s:\"%s\"" % (ak, av) self.metadata[field] = e.text.strip() elif field == "sword_packaging": self.packaging.append(e.text) elif field == "sword_treatment": # Special case since the sword:treatment might contain child tags body = etree.tounicode(e, with_tail=False) self.treatment = body[body.find('>')+1:body.rfind('<')] else: if field == "atom_title": self.title = e.text if field == "atom_id": self.id = e.text if field == "atom_updated": self.updated = e.text if field == "atom_summary": self.summary = e.text if field == "atom_category": self.categories.append(Category(dom=e)) if self.metadata.has_key(field): if isinstance(self.metadata[field], list): self.metadata[field].append(e.text) else: self.metadata[field] = [self.metadata[field], e.text] else: self.metadata[field] = e.text