don't assume that aktywnosc/opis is non-empty
[redakcja.git] / apps / catalogue / models / book.py
index b5a3bf3..09164a3 100755 (executable)
@@ -430,6 +430,7 @@ class Book(models.Model):
         import os.path
         from django.conf import settings
         from fnpdjango.utils.text.slughifi import slughifi
+        from librarian import ParseError
 
         def _register_function(f):
             """ Register extension function with lxml """
@@ -462,7 +463,7 @@ class Book(models.Model):
         i1 = etree.parse(f2)
 
         for sect in i1.findall('//section'):
-            if sect[0].text == u'Przebieg zajęć':
+            if sect[0].text and sect[0].text.strip() == u'Przebieg zajęć':
                 # Prostujemy.
                 first = sect.find('section')
                 subs = first.findall('.//section')
@@ -471,14 +472,17 @@ class Book(models.Model):
                 break
         else:
             # print 'BRAK PRZEBIEGU'
-            raise ValueError('Brak przebiegu')
+            raise ParseError('Brak przebiegu')
 
         i1.getroot().attrib['redslug'] = self.slug
         i1.getroot().attrib['wlslug'] = self.slug  # THIS!
         # print '.',
         w1t = i1.xslt(t)
         for h in w1t.findall('//aktywnosc/opis'):
-            if not re.match(r'\d\.\s', h[0].text):
-                raise AssertionError('Niepoprawny nagłówek (aktywnosc/opis): %s' % repr(h[0].text))
+            if len(h) == 0:
+                raise ParseError('Pusty element aktywnosc/opis')
+            # FIXME assumption that every lesson has at most 9 parts
+            if not h[0].text or not re.match(r'\d\.\s', h[0].text):
+                raise ParseError('Niepoprawny nagłówek (aktywnosc/opis): %s' % repr(h[0].text))
             h[0].text = h[0].text[3:]
         return etree.tostring(w1t, encoding='utf-8')