示例#1
0
 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
示例#2
0
    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 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
示例#4
0
 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