option to repackage level on lesson publish
[edumed.git] / catalogue / models.py
index 2f9a76d..6d1b97a 100644 (file)
@@ -121,7 +121,7 @@ class Lesson(models.Model):
         return 'catalogue_lesson', [self.slug]
 
     @classmethod
-    def publish(cls, infile, ignore_incomplete=False):
+    def publish(cls, infile, ignore_incomplete=False, repackage_level=False):
         from librarian.parser import WLDocument
         from django.core.files.base import ContentFile
         wldoc = WLDocument(infile)
@@ -150,14 +150,22 @@ class Lesson(models.Model):
         if lesson.type != 'project':
             lesson.build_pdf(student=True)
             lesson.build_package(student=True)
+        if repackage_level:
+            lesson.level.build_packages()
         return lesson
 
-    def republish(self, repackage_level=True):
+    def republish(self, repackage_level=True, attachments=None):
         from librarian import IOFile
-        infile = IOFile.from_filename(self.xml_file.path)
-        Lesson.publish(infile)
-        if repackage_level:
-            self.level.build_packages()
+        import os.path
+        from django.conf import settings
+        if attachments is None:
+            attachments = {}
+            for attachment in self.attachment_set.all():
+                full_name = os.path.join(settings.MEDIA_ROOT, attachment.file.name)
+                f = IOFile.from_filename(full_name)
+                attachments['%s.%s' % (attachment.slug, attachment.ext)] = f
+        infile = IOFile.from_filename(self.xml_file.path, attachments=attachments)
+        Lesson.publish(infile, repackage_level=repackage_level)
 
     def populate_dc(self):
         from librarian.parser import WLDocument
@@ -281,7 +289,7 @@ class Lesson(models.Model):
             return None
 
     def requires_internet(self):
-        return 'internet' in self.dc.get('requires', [])
+        return any(requirement in self.dc.get('requires', []) for requirement in ('internet', 'Internet'))
 
 
 class Attachment(models.Model):