+++ /dev/null
-# -*- coding: utf-8 -*-
-
-from optparse import make_option
-
-from django.contrib.auth.models import User
-from django.core.management.base import BaseCommand
-from django.db import transaction
-
-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'),
- make_option('-d', '--dry-run', action='store_true', dest='dry_run',
- default=False, help="Don't actually touch anything"),
- )
- help = 'Updates the rdf:about metadata field.'
-
- def handle(self, *args, **options):
- from lxml import etree
-
- verbose = options.get('verbose')
-
- # Start transaction management.
- transaction.commit_unless_managed()
- transaction.enter_transaction_management()
- transaction.managed(True)
-
- all_books = 0
- nonxml = 0
- nordf = 0
- already = 0
- done = 0
-
- for b in Book.objects.all():
- all_books += 1
- if verbose:
- print "%s: " % b.title,
- chunk = b[0]
- old_head = chunk.head
- src = old_head.materialize()
-
- try:
- t = etree.fromstring(src)
- except:
- nonxml += 1
- if verbose:
- print "invalid XML"
- continue
- desc = t.find(".//{http://www.w3.org/1999/02/22-rdf-syntax-ns#}Description")
- if desc is None:
- nordf += 1
- if verbose:
- print "no RDF found"
- continue
-
- correct_about = b.correct_about()
- attr_name = "{http://www.w3.org/1999/02/22-rdf-syntax-ns#}about"
- if desc.get(attr_name) == correct_about:
- already += 1
- if verbose:
- print "already correct"
- continue
- desc.set(attr_name, correct_about)
- new_head = chunk.commit(etree.tostring(t, encoding=unicode),
- author_name='platforma redakcyjna',
- description='auto-update rdf:about'
- )
- # retain the publishable status
- if old_head.publishable:
- new_head.set_publishable(True)
- if verbose:
- print "done"
- done += 1
-
- # Print results
- print "All books: ", all_books
- print "Invalid XML: ", nonxml
- print "No RDF found: ", nordf
- print "Already correct: ", already
- print "Books updated: ", done
-
- transaction.commit()
- transaction.leave_transaction_management()
-