summaryrefslogtreecommitdiff
path: root/ishtar_common/management
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2017-07-11 12:34:27 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2017-07-11 12:34:27 +0200
commit3e013d7f3b403de865f0ae612d272099dda3004c (patch)
treed37afa4bd2df2072a591465a4f48a3169c666c78 /ishtar_common/management
parentebe377034f250b31f21540dbc9344d7ed328dd2e (diff)
downloadIshtar-3e013d7f3b403de865f0ae612d272099dda3004c.tar.bz2
Ishtar-3e013d7f3b403de865f0ae612d272099dda3004c.zip
Simple migration script for old ODT templates (refs #3602)
Diffstat (limited to 'ishtar_common/management')
-rw-r--r--ishtar_common/management/commands/ishtar_migrate_odts.py91
1 files changed, 91 insertions, 0 deletions
diff --git a/ishtar_common/management/commands/ishtar_migrate_odts.py b/ishtar_common/management/commands/ishtar_migrate_odts.py
index e69de29bb..49ed9f2d8 100644
--- a/ishtar_common/management/commands/ishtar_migrate_odts.py
+++ b/ishtar_common/management/commands/ishtar_migrate_odts.py
@@ -0,0 +1,91 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# Copyright (C) 2017 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet>
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# See the file COPYING for details.
+
+from django.core.management.base import BaseCommand
+from optparse import make_option
+import sys
+
+from ishtar_common.models import DocumentTemplate
+from ishtar_common.utils import BColors
+
+try:
+ input = raw_input
+except NameError:
+ pass
+
+
+class Command(BaseCommand):
+ help = "Update ODT templates from v1 to v2"
+ option_list = BaseCommand.option_list + (
+ make_option('--quiet',
+ action='store_true',
+ dest='quiet',
+ default=False,
+ help='Proceed silently with no interactive input.'),
+ )
+
+ def interactive_start(self):
+ sys.stdout.write(
+ BColors.HEADER + BColors.BOLD +
+ "Update ODT templates from v1 to v2\n")
+ sys.stdout.write(
+ BColors.ENDC + BColors.WARNING +
+ "This script need to be run only once. Running it on already "
+ "migrated ODT files may be a source of error.\n")
+ sys.stdout.write(BColors.ENDC)
+ yes = None
+ while yes != "yes":
+ sys.stdout.write(
+ "Are you sure you want to proceed? (yes/[n])\n")
+ yes = input()
+ if not yes or yes == "n":
+ sys.stdout.write(BColors.FAIL + "Aborting\n")
+ sys.stdout.write(BColors.ENDC)
+ sys.exit()
+
+ def handle(self, *args, **options):
+ quiet = options['quiet']
+ if not quiet:
+ self.interactive_start()
+ q = DocumentTemplate.objects
+ nb = q.count()
+ len_of_nb = str(len(str(nb)))
+ if not quiet:
+ sys.stdout.write(BColors.OKGREEN)
+
+ errors = []
+ for idx, document in enumerate(q.all()):
+ if not quiet:
+ sys.stdout.write(
+ ("Processing {:" + len_of_nb + "d}/{}\r").format(
+ idx + 1, nb))
+ sys.stdout.flush()
+ try:
+ document.convert_from_v1()
+ except IOError as e:
+ errors.append("Document ({}): ".format(document.pk) +
+ str(e))
+ if errors:
+ sys.stdout.write(BColors.FAIL + "Error while processing:\n")
+ for error in errors:
+ sys.stdout.write("* {}\n".format(error))
+
+ sys.stdout.write(BColors.ENDC)
+ print("\n\n")
+