X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/6e88635c94b36eaff84bd4274983af977986b699..8132fc186eb0c5fd02c86828c3a4735754296d02:/apps/catalogue/management/commands/import_wl.py diff --git a/apps/catalogue/management/commands/import_wl.py b/apps/catalogue/management/commands/import_wl.py old mode 100755 new mode 100644 index 6836d366..45c9e331 --- a/apps/catalogue/management/commands/import_wl.py +++ b/apps/catalogue/management/commands/import_wl.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- +from collections import defaultdict import json from optparse import make_option import urllib2 @@ -30,28 +31,27 @@ class Command(BaseCommand): verbose = options.get('verbose') # Start transaction management. - transaction.commit_unless_managed() transaction.enter_transaction_management() - transaction.managed(True) if verbose: - print 'Reading currently managed files.' - slugs = {} - for b in Book.objects.all(): + print 'Reading currently managed files (skipping hidden ones).' + slugs = defaultdict(list) + for b in Book.objects.exclude(slug__startswith='.').all(): if verbose: print b.slug text = b.materialize().encode('utf-8') try: - info = BookInfo.from_string(text) + info = BookInfo.from_bytes(text) except (ParseError, ValidationError): pass else: - slugs[info.slug] = b + slugs[info.slug].append(b) book_count = 0 commit_args = { "author_name": 'Platforma', - "description": 'Import from WL', + "description": 'Automatycznie zaimportowane z Wolnych Lektur', + "publishable": True, } if verbose: @@ -59,15 +59,21 @@ class Command(BaseCommand): for book in json.load(urllib2.urlopen(WL_API)): book_detail = json.load(urllib2.urlopen(book['href'])) xml_text = urllib2.urlopen(book_detail['xml']).read() - info = BookInfo.from_string(xml_text) - previous_book = slugs.get(info.slug, None) - if previous_book: + info = BookInfo.from_bytes(xml_text) + previous_books = slugs.get(info.slug) + if previous_books: + if len(previous_books) > 1: + print self.style.ERROR("There is more than one book " + "with slug %s:"), + previous_book = previous_books[0] comm = previous_book.slug else: + previous_book = None comm = '*' print book_count, info.slug , '-->', comm - Book.import_xml_text(xml_text, title=info.title, - slug=info.slug, previous_book=slugs.get(info.slug, None)) + Book.import_xml_text(xml_text, title=info.title[:255], + slug=info.slug[:128], previous_book=previous_book, + commit_args=commit_args) book_count += 1 # Print results