Loading materials from a dir.
[edumed.git] / catalogue / publish.py
diff --git a/catalogue/publish.py b/catalogue/publish.py
new file mode 100755 (executable)
index 0000000..023e8bd
--- /dev/null
@@ -0,0 +1,35 @@
+# -*- coding: utf-8
+from django.core.files import File
+from librarian.pyhtml import EduModuleFormat
+from .models import Lesson, Attachment
+
+
+class HtmlFormat(EduModuleFormat):
+    def url_for_material(self, slug, fmt=None):
+        lesson_slug = self.wldoc.book_info.url.slug
+        if fmt is None:
+            # We could try and find the file by slug here, but we won't.
+            # User should supply the format explicitly anyway.
+            fmt = self.DEFAULT_MATERIAL_FORMAT
+
+        try:
+            # If already saved, use it.
+            att = Attachment.objects.get(lesson__slug=lesson_slug,
+                                         slug=slug, ext=fmt)
+        except Attachment.DoesNotExist, e:
+            # If attached to source IOFile, save now.
+            att_name = "%s.%s" % (slug, fmt)
+            try:
+                att_file = self.wldoc.source.attachments[att_name]
+            except KeyError:
+                print u"ATTACHMENT MISSING:", att_name
+                raise self.MaterialNotFound()
+            else:
+                lesson = Lesson.objects.get(slug=lesson_slug)
+                att = lesson.attachment_set.create(slug=slug, ext=fmt)
+                att.file.save(att_name, File(att_file.get_file()))
+                return att.file.url
+
+
+        else:
+            return att.file.url