fixes for edge cases
[librarian.git] / src / librarian / document.py
index ea8a47a..6cdf191 100644 (file)
@@ -40,9 +40,9 @@ class WLDocument:
     def build(self, builder, base_url=None, **kwargs):
         return builder(base_url=base_url).build(self, **kwargs)
 
     def build(self, builder, base_url=None, **kwargs):
         return builder(base_url=base_url).build(self, **kwargs)
 
-    def assign_ids(self):
+    def assign_ids(self, existing=None):
         # Find all existing IDs.
         # Find all existing IDs.
-        existing = set()
+        existing = existing or set()
         que = [self.tree.getroot()]
         while que:
             item = que.pop(0)
         que = [self.tree.getroot()]
         while que:
             item = que.pop(0)
@@ -101,7 +101,10 @@ class WLDocument:
         def _compat_assigns_section_ids_in_elem(elem, prefix='sec'):
             for i, child in enumerate(elem):
                 idfier = '{}{}'.format(prefix, i + 1)
         def _compat_assigns_section_ids_in_elem(elem, prefix='sec'):
             for i, child in enumerate(elem):
                 idfier = '{}{}'.format(prefix, i + 1)
-                child.attrib['_compat_section_id'] = idfier
+                try:
+                    child.attrib['_compat_section_id'] = idfier
+                except:
+                    pass
                 _compat_assigns_section_ids_in_elem(child, idfier + '-')
         _compat_assigns_section_ids_in_elem(self.tree.getroot().master)
 
                 _compat_assigns_section_ids_in_elem(child, idfier + '-')
         _compat_assigns_section_ids_in_elem(self.tree.getroot().master)
 
@@ -115,3 +118,5 @@ class WLDocument:
             persons.remove(None)
         return persons
 
             persons.remove(None)
         return persons
 
+    def references(self):
+        return self.tree.findall('.//ref')