Merge with master.
[redakcja.git] / scripts / fix_pd.py
diff --git a/scripts/fix_pd.py b/scripts/fix_pd.py
new file mode 100755 (executable)
index 0000000..07f58e1
--- /dev/null
@@ -0,0 +1,69 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
+import sys
+sys.path.append('.')
+sys.path.append('./apps')
+sys.path.append('./lib')
+
+from django.core.management import setup_environ
+from redakcja import settings
+
+setup_environ(settings)
+
+from catalogue.models import Book, Chunk
+import re
+
+fixed = {}
+
+datepd = r"(<dc:date.pd[^>]+>)([0-9]+)(</dc:date.pd>)"
+def fix(book, author, dry_run=True):
+    if len(book) == 0:
+        print "%s does not contain chunks" % book.slug
+        return
+    fc = book[0]
+    txt = fc.materialize()
+
+    if dry_run:
+        m = re.search(datepd, txt)
+        if m:
+            print("%s: %s->%d" % (book.slug, m.groups()[1], int(m.groups()[1])+71))
+        else:
+            print("%s: date.pd not found??" % (book.slug,))
+    else:
+        dates = {}
+        def up_date(match):
+            tagopen, date, tagclose = match.groups()
+            olddate=date
+            date = str(int(date)+71)
+            dates['date'] = date
+            dates['olddate'] = olddate
+            dates['overflow'] = False
+            if int(date) > 2012:
+               dates['overflow'] = True
+               return tagopen+date+tagclose
+
+        new_txt = re.sub(datepd, up_date, txt)
+        if dates:
+            print "%s: %s->%s" % (book.slug, dates['olddate'], dates['date'])
+            if dates['overflow']:
+                print "oops, new date would overfow to the future, i'm not changing"
+                return 
+           # fc.commit(new_txt, author=author, description=u"Automatyczne poprawienie daty przejścia do domeny publicznej z %s na %s" % (dates['olddate'], dates['date']))
+        else:
+            print "skipping %s" % book.slug
+import sys
+import getopt
+from django.contrib.auth.models import User
+opts, oth_ = getopt.getopt(sys.argv[1:],[],[ "seriously"])
+dry_run = not (("--seriously",'') in opts)
+me = User.objects.get(username='marcinkoziej')
+if dry_run:
+    print "This is a dry run, to really change dates, run with --seriously"
+for b in Book.objects.all():
+    fix(b, me, dry_run)
+
+    
+