--- /dev/null
+# -*- coding: utf-8 -*-
+#
+# This file is part of FNP-Redakcja, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
+from librarian import RDFNS, WLURI, ValidationError
+from librarian.dcparser import BookInfo
+from catalogue.management import XmlUpdater
+from catalogue.management.commands import XmlUpdaterCommand
+
+
+class FixDC(XmlUpdater):
+ commit_desc = "auto-fixing DC"
+ retain_publishable = True
+ only_first_chunk = True
+
+ def fix_wluri(elem, change, verbose):
+ try:
+ WLURI.strict(elem.text)
+ except ValidationError:
+ correct_field = unicode(WLURI.from_slug(WLURI(elem.text).slug))
+ if verbose:
+ print "Changing %s from %s to %s" % (
+ elem.tag, elem.text, correct_field
+ )
+ elem.text = correct_field
+ return True
+ for field in BookInfo.FIELDS:
+ if field.validator == WLURI:
+ XmlUpdater.fixes_elements('.//' + field.uri)(fix_wluri)
+
+ @XmlUpdater.fixes_elements(".//" + RDFNS("Description"))
+ def fix_rdfabout(elem, change, verbose):
+ correct_about = change.tree.book.correct_about()
+ attr_name = RDFNS("about")
+ current_about = elem.get(attr_name)
+ if current_about != correct_about:
+ if verbose:
+ print "Changing rdf:about from %s to %s" % (
+ current_about, correct_about
+ )
+ elem.set(attr_name, correct_about)
+ return True
+
+
+class Command(XmlUpdaterCommand):
+ updater = FixDC
+ help = 'Fixes obvious errors in DC: rdf:about and WLURI format.'