From: Jan Szejko Date: Fri, 6 Oct 2017 15:23:16 +0000 (+0200) Subject: add command to import legacy lessons X-Git-Url: https://git.mdrn.pl/redakcja.git/commitdiff_plain/fc0fd8b62d0256e7f253f05bb75c9f42211b7d40 add command to import legacy lessons --- diff --git a/apps/catalogue/management/commands/import_lessons.py b/apps/catalogue/management/commands/import_lessons.py new file mode 100644 index 00000000..7ff494f8 --- /dev/null +++ b/apps/catalogue/management/commands/import_lessons.py @@ -0,0 +1,68 @@ +# -*- coding: utf-8 -*- + +from optparse import make_option +from lxml import etree +import os + +from django.core.management.base import BaseCommand +from django.core.management.color import color_style +from django.db import transaction +from librarian import ParseError, ValidationError + +from catalogue.models import Book + + +class Command(BaseCommand): + option_list = BaseCommand.option_list + ( + make_option('-q', '--quiet', action='store_false', dest='verbose', default=True, help='Less output'), + ) + help = 'Imports XML files.' + args = 'directory' + + def handle(self, directory, *args, **options): + + self.style = color_style() + + verbose = options.get('verbose') + + # Start transaction management. + transaction.commit_unless_managed() + transaction.enter_transaction_management() + transaction.managed(True) + + book_count = 0 + commit_args = { + "author_name": 'Platforma', + "description": 'Automatycznie zaimportowane', + "publishable": True, + } + for xml_filename in os.listdir(directory): + if verbose: + print xml_filename + text = open(os.path.join(directory, xml_filename)).read().decode('utf-8') + try: + tree = etree.fromstring(text) + slug = xml_filename.split('.')[0] + except Exception as e: + print xml_filename, 'error: ', repr(e) + else: + title = tree.find('.//header').text + print book_count, slug, title + Book.create( + text=text, + creator=None, + slug=slug, + title=title, + gallery=slug, + commit_args=commit_args, + ) + book_count += 1 + + # Print results + print + print "Results:" + print "Imported %d books" % book_count + print + + transaction.commit() + transaction.leave_transaction_management() diff --git a/apps/catalogue/models/book.py b/apps/catalogue/models/book.py index 7589587d..5990428d 100755 --- a/apps/catalogue/models/book.py +++ b/apps/catalogue/models/book.py @@ -92,10 +92,10 @@ class Book(models.Model): @classmethod @transaction.commit_on_success - def create(cls, creator, text, **kwargs): + def create(cls, creator, text, commit_args=None, **kwargs): b = cls.objects.create(**kwargs) b.chunk_set.all().update(creator=creator) - b[0].commit(text, author=creator) + b[0].commit(text, author=creator, **(commit_args or {})) return b def add(self, *args, **kwargs):