From ea67b8b64c26562ef359b210f115d82f7c9c870d Mon Sep 17 00:00:00 2001 From: Lorenz Padberg Date: Wed, 3 Aug 2022 11:03:42 +0200 Subject: [PATCH] Add migration function for custom document model --- server/books/management/commands/__init__.py | 0 ...grate_old_documents_to_custom_documents.py | 14 ++++++ server/books/migrate_document_model.py | 46 +++++++++++++++---- .../books/tests/test_custom_document_model.py | 38 +++++++++++---- 4 files changed, 80 insertions(+), 18 deletions(-) create mode 100644 server/books/management/commands/__init__.py create mode 100644 server/books/management/commands/migrate_old_documents_to_custom_documents.py diff --git a/server/books/management/commands/__init__.py b/server/books/management/commands/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/server/books/management/commands/migrate_old_documents_to_custom_documents.py b/server/books/management/commands/migrate_old_documents_to_custom_documents.py new file mode 100644 index 00000000..6324ba70 --- /dev/null +++ b/server/books/management/commands/migrate_old_documents_to_custom_documents.py @@ -0,0 +1,14 @@ +from django.core.management import BaseCommand + +from books.migrate_document_model import migrate_documents_to_custom_document_model +from books.models import Module +from surveys.models import Survey + + +class Command(BaseCommand): + def handle(self, *args, **options): + self.stdout.write("Migrating Wagtail documents to Custommyskillbox documents") + migrate_documents_to_custom_document_model() + self.stdout.write("Finish migration") + + diff --git a/server/books/migrate_document_model.py b/server/books/migrate_document_model.py index ab4e5b82..fa465184 100644 --- a/server/books/migrate_document_model.py +++ b/server/books/migrate_document_model.py @@ -1,9 +1,37 @@ -# -*- coding: utf-8 -*- -# -# Iterativ GmbH -# http://www.iterativ.ch/ -# -# Copyright (c) 2015 Iterativ GmbH. All rights reserved. -# -# Created on 2022-07-28 -# @author: lorenz.padberg@iterativ.ch +from wagtail.documents.models import Document + +from .models.custom_document import CustomDocument + + +def migrate_documents_to_custom_document_model(dryrun=False): + all_documents = Document.objects.all() + print(f"Found {all_documents.count()} Documents") + + for document in all_documents: + tags = document.title.replace(':', '').split(' ') + + if dryrun: + print('') + print(document.title) + print(tags) + print(document.created_at) + print(document.url) + print(document.file) + print(document.uploaded_by_user) + + else: + print('') + new_document, created = CustomDocument.objects.get_or_create(title=document.title) + new_document.display_text = document.title + new_document.created_at = document.created_at + new_document.uploaded_by_user = document.uploaded_by_user + new_document.file = document.file + new_document.collection = document.collection + new_document.file_hash = document.file_hash + new_document.file_size = document.file_size + + new_document.save() + if created: + print(f'Created New Document {new_document}') + else: + print(f'Udated document {document}') diff --git a/server/books/tests/test_custom_document_model.py b/server/books/tests/test_custom_document_model.py index d6703052..fb71dab2 100644 --- a/server/books/tests/test_custom_document_model.py +++ b/server/books/tests/test_custom_document_model.py @@ -1,9 +1,29 @@ -# -*- coding: utf-8 -*- -# -# Iterativ GmbH -# http://www.iterativ.ch/ -# -# Copyright (c) 2015 Iterativ GmbH. All rights reserved. -# -# Created on 2022-08-02 -# @author: lorenz.padberg@iterativ.ch +from django.test import TestCase +from wagtail.documents.models import Document + +from books.migrate_document_model import migrate_documents_to_custom_document_model +from books.models.custom_document import CustomDocument + +TITLE = 'T9 M2 A2: Quellencheck' + + +class NewContentBlockMutationTest(TestCase): + def setUp(self): + old_document, created = Document.objects.get_or_create(title=TITLE, file='whatever_is_green.pdf') + migrate_documents_to_custom_document_model() + + def test_migrate_creates_new_document(self): + self.assertEqual(Document.objects.all().count(), 1) + self.assertEqual(Document.objects.filter(title=TITLE).count(), 1) + self.assertEqual(CustomDocument.objects.filter(title=TITLE).count(), 1) + + def test_migrate_display_title_migration(self): + new_document = CustomDocument.objects.get(title=TITLE) + self.assertEqual(new_document.display_text, TITLE) + + def test_migration_is_indempodent(self): + migrate_documents_to_custom_document_model() + migrate_documents_to_custom_document_model() + self.assertEqual(Document.objects.all().count(), 1) + self.assertEqual(Document.objects.filter(title=TITLE).count(), 1) + self.assertEqual(CustomDocument.objects.filter(title=TITLE).count(), 1)