1 # -*- coding: utf-8 -*-
2 from slughifi import slughifi
3 from collections import defaultdict
5 from optparse import make_option
8 from py_etherpad import EtherpadLiteClient
9 from django.core.management.base import BaseCommand
10 from django.core.management.color import color_style
11 from django.db import transaction
12 from librarian.dcparser import BookInfo
13 from librarian import ParseError, ValidationError, WLURI
14 from django.conf import settings
15 from catalogue.models import Book
16 from catalogue.management import auto_taggers
19 class Command(BaseCommand):
20 option_list = BaseCommand.option_list + (
21 make_option('-q', '--quiet', action='store_false', dest='verbose', default=True,
23 make_option('-p', '--pad', dest='pad_id', help='Pad Id (or many id\'s, comma separated)'),
24 make_option('-P', '--pad-ids', dest='pad_ids_file', help='Read Pad id\'s from file'),
25 make_option('-E', '--edumed', dest="tag_edumed", default=False,
26 action='store_true', help="Perform EduMed pre-tagging"),
27 make_option('-a', '--autotagger', dest="auto_tagger", default=None, help="Use auto-tagger (one of: %s)" % ', '.join(auto_taggers.keys())),
29 help = 'Imports Text files from EtherPad Lite.'
31 def handle(self, *args, **options):
33 self.style = color_style()
35 verbose = options.get('verbose')
36 pad_ids_file = options.get('pad_ids_file')
38 pad_id = open(pad_ids_file).readlines()
40 pad_id = options.get("pad_id").split(',')
41 pad_id = map(str.strip, pad_id)
43 # Start transaction management.
44 transaction.commit_unless_managed()
45 transaction.enter_transaction_management()
46 transaction.managed(True)
49 print 'Reading currently managed files (skipping hidden ones).'
50 slugs = defaultdict(list)
51 for b in Book.objects.exclude(slug__startswith='.').all():
54 text = b.materialize().encode('utf-8')
56 info = BookInfo.from_string(text)
57 slugs[info.url.slug].append(b)
58 except (ParseError, ValidationError):
59 slugs[b.slug].append(b)
63 "author_name": 'Platforma',
64 "description": 'Automatycznie zaimportowane z EtherPad',
70 pad = EtherpadLiteClient(settings.ETHERPAD_APIKEY, settings.ETHERPAD_URL)
74 text = pad.getText(pid)['text']
76 print "pad '%s' does not exist" % pid
79 print "Importing %s..." % pid
83 previous_books = slugs.get(slug)
85 if len(previous_books) > 1:
86 print self.style.ERROR("There is more than one book "
87 "with slug %s:" % slug),
88 previous_book = previous_books[0]
89 comm = previous_book.slug
93 print book_count, slug, '-->', comm
105 chunk.slug = slug[:50]
106 chunk.title = title[:255]
109 chunk = book.add(slug, title)
111 if options.get('tag_edumed'):
112 auto_tagger = 'edumed'
114 auto_tagger = options.get('auto_tagger')
116 text = auto_taggers[auto_tagger](text)
117 chunk.commit(text, **commit_args)
124 print "Imported %d books from Pad" % book_count
127 transaction.leave_transaction_management()