diff options
-rw-r--r-- | archaeological_context_records/migrations/0022_migrate_image.py | 27 | ||||
-rw-r--r-- | archaeological_context_records/migrations/0023_auto_20180511_1232.py | 31 | ||||
-rw-r--r-- | archaeological_context_records/models.py | 7 | ||||
-rw-r--r-- | archaeological_finds/migrations/0025_migrate_image.py | 32 | ||||
-rw-r--r-- | archaeological_finds/migrations/0026_auto_20180511_1233.py | 31 | ||||
-rw-r--r-- | archaeological_finds/models_finds.py | 6 | ||||
-rw-r--r-- | archaeological_operations/migrations/0028_migrate_image.py | 26 | ||||
-rw-r--r-- | archaeological_operations/migrations/0029_auto_20180511_1232.py | 31 | ||||
-rw-r--r-- | archaeological_operations/models.py | 7 | ||||
-rw-r--r-- | ishtar_common/models.py | 3 | ||||
-rw-r--r-- | ishtar_common/utils.py | 17 | ||||
-rw-r--r-- | ishtar_common/utils_migrations.py | 48 |
12 files changed, 248 insertions, 18 deletions
diff --git a/archaeological_context_records/migrations/0022_migrate_image.py b/archaeological_context_records/migrations/0022_migrate_image.py new file mode 100644 index 000000000..87ac0cc55 --- /dev/null +++ b/archaeological_context_records/migrations/0022_migrate_image.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.10 on 2018-05-11 12:03 +from __future__ import unicode_literals + +from django.db import migrations + +from ishtar_common.utils_migrations import migrate_simple_image_to_m2m + + +def migrate_image(apps, schema_editor): + ContextRecord = apps.get_model('archaeological_context_records', + 'ContextRecord') + IshtarImage = apps.get_model('ishtar_common', 'IshtarImage') + ContextRecordImage = apps.get_model('archaeological_context_records', + 'ContextRecordImage') + migrate_simple_image_to_m2m(ContextRecord, IshtarImage, ContextRecordImage) + + +class Migration(migrations.Migration): + + dependencies = [ + ('archaeological_context_records', '0021_auto_20180509_1736'), + ] + + operations = [ + migrations.RunPython(migrate_image), + ] diff --git a/archaeological_context_records/migrations/0023_auto_20180511_1232.py b/archaeological_context_records/migrations/0023_auto_20180511_1232.py new file mode 100644 index 000000000..e6d69127f --- /dev/null +++ b/archaeological_context_records/migrations/0023_auto_20180511_1232.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.10 on 2018-05-11 12:32 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('archaeological_context_records', '0022_migrate_image'), + ] + + operations = [ + migrations.RemoveField( + model_name='contextrecord', + name='image', + ), + migrations.RemoveField( + model_name='contextrecord', + name='thumbnail', + ), + migrations.RemoveField( + model_name='historicalcontextrecord', + name='image', + ), + migrations.RemoveField( + model_name='historicalcontextrecord', + name='thumbnail', + ), + ] diff --git a/archaeological_context_records/models.py b/archaeological_context_records/models.py index 396b91f67..1ae661524 100644 --- a/archaeological_context_records/models.py +++ b/archaeological_context_records/models.py @@ -33,8 +33,8 @@ from ishtar_common.utils import cached_label_changed from ishtar_common.models import GeneralType, BaseHistorizedItem, \ HistoricalRecords, OwnPerms, ShortMenuItem, Source, GeneralRelationType,\ GeneralRecordRelations, post_delete_record_relation, get_image_path, \ - ImageModel, post_save_cache, ValueGetter, BulkUpdatedItem, IshtarImage, \ - RelationItem, ThroughImage + post_save_cache, ValueGetter, BulkUpdatedItem, IshtarImage, RelationItem, \ + ThroughImage from archaeological_operations.models import Operation, Period, Parcel, \ ArchaeologicalSite @@ -206,8 +206,7 @@ class CRBulkView(object): class ContextRecord(BulkUpdatedItem, BaseHistorizedItem, - ImageModel, OwnPerms, ValueGetter, ShortMenuItem, - RelationItem): + OwnPerms, ValueGetter, ShortMenuItem, RelationItem): SHOW_URL = 'show-contextrecord' SLUG = 'contextrecord' EXTERNAL_ID_KEY = 'context_record_external_id' diff --git a/archaeological_finds/migrations/0025_migrate_image.py b/archaeological_finds/migrations/0025_migrate_image.py new file mode 100644 index 000000000..dccbb444b --- /dev/null +++ b/archaeological_finds/migrations/0025_migrate_image.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.10 on 2018-05-11 12:07 +from __future__ import unicode_literals + +from django.db import migrations + +from ishtar_common.utils_migrations import migrate_simple_image_to_m2m + + +def migrate_image(apps, schema_editor): + Find = apps.get_model('archaeological_finds', 'Find') + IshtarImage = apps.get_model('ishtar_common', 'IshtarImage') + FindImage = apps.get_model('archaeological_finds', + 'FindImage') + migrate_simple_image_to_m2m(Find, IshtarImage, FindImage) + + Treatment = apps.get_model('archaeological_finds', 'Treatment') + IshtarImage = apps.get_model('ishtar_common', 'IshtarImage') + TreatmentImage = apps.get_model('archaeological_finds', + 'TreatmentImage') + migrate_simple_image_to_m2m(Treatment, IshtarImage, TreatmentImage) + + +class Migration(migrations.Migration): + + dependencies = [ + ('archaeological_finds', '0024_auto_20180509_1742'), + ] + + operations = [ + migrations.RunPython(migrate_image), + ] diff --git a/archaeological_finds/migrations/0026_auto_20180511_1233.py b/archaeological_finds/migrations/0026_auto_20180511_1233.py new file mode 100644 index 000000000..15581ae8b --- /dev/null +++ b/archaeological_finds/migrations/0026_auto_20180511_1233.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.10 on 2018-05-11 12:33 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('archaeological_finds', '0025_migrate_image'), + ] + + operations = [ + migrations.RemoveField( + model_name='find', + name='image', + ), + migrations.RemoveField( + model_name='find', + name='thumbnail', + ), + migrations.RemoveField( + model_name='historicalfind', + name='image', + ), + migrations.RemoveField( + model_name='historicalfind', + name='thumbnail', + ), + ] diff --git a/archaeological_finds/models_finds.py b/archaeological_finds/models_finds.py index dcf542f79..2b903e66a 100644 --- a/archaeological_finds/models_finds.py +++ b/archaeological_finds/models_finds.py @@ -32,7 +32,7 @@ from django.utils.translation import ugettext_lazy as _ from ishtar_common.data_importer import post_importer_action, ImporterError from ishtar_common.utils import cached_label_changed, post_save_point -from ishtar_common.models import GeneralType, HierarchicalType, ImageModel, \ +from ishtar_common.models import GeneralType, HierarchicalType, \ BaseHistorizedItem, ShortMenuItem, LightHistorizedItem, \ HistoricalRecords, OwnPerms, Source, Person, Basket, post_save_cache, \ ValueGetter, get_current_profile, IshtarImage, ThroughImage @@ -580,8 +580,8 @@ class FBulkView(object): """ -class Find(BulkUpdatedItem, ValueGetter, BaseHistorizedItem, ImageModel, - OwnPerms, ShortMenuItem): +class Find(BulkUpdatedItem, ValueGetter, BaseHistorizedItem, OwnPerms, + ShortMenuItem): EXTERNAL_ID_KEY = 'find_external_id' CHECK_DICT = dict(CHECK_CHOICES) SHOW_URL = 'show-find' diff --git a/archaeological_operations/migrations/0028_migrate_image.py b/archaeological_operations/migrations/0028_migrate_image.py new file mode 100644 index 000000000..a7a0e0495 --- /dev/null +++ b/archaeological_operations/migrations/0028_migrate_image.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.10 on 2018-05-11 10:49 +from __future__ import unicode_literals + +from django.db import migrations + +from ishtar_common.utils_migrations import migrate_simple_image_to_m2m + + +def migrate_image(apps, schema_editor): + Operation = apps.get_model('archaeological_operations', 'Operation') + IshtarImage = apps.get_model('ishtar_common', 'IshtarImage') + OperationImage = apps.get_model('archaeological_operations', + 'OperationImage') + migrate_simple_image_to_m2m(Operation, IshtarImage, OperationImage) + + +class Migration(migrations.Migration): + + dependencies = [ + ('archaeological_operations', '0027_auto_20180509_1723'), + ] + + operations = [ + migrations.RunPython(migrate_image), + ] diff --git a/archaeological_operations/migrations/0029_auto_20180511_1232.py b/archaeological_operations/migrations/0029_auto_20180511_1232.py new file mode 100644 index 000000000..5f1a2c19a --- /dev/null +++ b/archaeological_operations/migrations/0029_auto_20180511_1232.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.10 on 2018-05-11 12:32 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('archaeological_operations', '0028_migrate_image'), + ] + + operations = [ + migrations.RemoveField( + model_name='historicaloperation', + name='image', + ), + migrations.RemoveField( + model_name='historicaloperation', + name='thumbnail', + ), + migrations.RemoveField( + model_name='operation', + name='image', + ), + migrations.RemoveField( + model_name='operation', + name='thumbnail', + ), + ] diff --git a/archaeological_operations/models.py b/archaeological_operations/models.py index 5ff3ddc2f..44406fd89 100644 --- a/archaeological_operations/models.py +++ b/archaeological_operations/models.py @@ -38,8 +38,7 @@ from ishtar_common.models import GeneralType, BaseHistorizedItem, \ SourceType, Person, Organization, Town, Dashboard, IshtarUser, ValueGetter,\ DocumentTemplate, ShortMenuItem, DashboardFormItem, GeneralRelationType,\ GeneralRecordRelations, post_delete_record_relation, OperationType, \ - ImageModel, post_save_cache, PersonType, IshtarImage, \ - RelationItem, ThroughImage + post_save_cache, PersonType, IshtarImage, RelationItem, ThroughImage class RemainType(GeneralType): @@ -279,8 +278,8 @@ class ClosedItem(object): return {'date': date, 'user': user} -class Operation(ClosedItem, BaseHistorizedItem, ImageModel, OwnPerms, - ValueGetter, ShortMenuItem, DashboardFormItem, RelationItem): +class Operation(ClosedItem, BaseHistorizedItem, OwnPerms, ValueGetter, + ShortMenuItem, DashboardFormItem, RelationItem): QUALITY_DICT = dict(QUALITY) SHOW_URL = 'show-operation' TABLE_COLS = ['year', 'towns', 'common_name', 'operation_type', diff --git a/ishtar_common/models.py b/ishtar_common/models.py index 0e8d96ddb..53f4e1c11 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -865,6 +865,9 @@ class ItemKey(models.Model): def get_image_path(instance, filename): + # when using migrations instance is not a real ImageModel instance + if not hasattr(instance, '_get_image_path'): + return u"upload/{}".format(filename) return instance._get_image_path(filename) diff --git a/ishtar_common/utils.py b/ishtar_common/utils.py index 52ea98547..2af5212ca 100644 --- a/ishtar_common/utils.py +++ b/ishtar_common/utils.py @@ -424,7 +424,7 @@ def get_field_labels_from_path(model, path): return labels -def create_default_areas(models=None): +def create_default_areas(models=None, verbose=False): # can be used on migrations if models are provided if not models: from ishtar_common.models import Area, Town, Department, State @@ -444,7 +444,8 @@ def create_default_areas(models=None): areas['state-{}'.format(state.pk)] = area if created: idx += 1 - print("\n* {} state areas added".format(idx)) + if verbose: + print("\n* {} state areas added".format(idx)) idx, idx2 = 0, 0 for dep in Department.objects.all(): @@ -464,10 +465,11 @@ def create_default_areas(models=None): idx2 += 1 area.parent = areas[state_slug] area.save() - print( - "* {} department areas added with {} associations to state".format( - idx, idx2) - ) + if verbose: + print( + "* {} department areas added with {} associations to state".format( + idx, idx2) + ) idx = 0 for town in Town.objects.all(): @@ -484,7 +486,8 @@ def create_default_areas(models=None): areas[code_dep_dom].towns.add(town) idx += 1 - print("* {} town associated to department area".format(idx)) + if verbose: + print("* {} town associated to department area".format(idx)) def get_relations_for_graph(rel_model, obj_pk, above_relations=None, diff --git a/ishtar_common/utils_migrations.py b/ishtar_common/utils_migrations.py new file mode 100644 index 000000000..9f514ea48 --- /dev/null +++ b/ishtar_common/utils_migrations.py @@ -0,0 +1,48 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.core.files import File +import os + + +def migrate_simple_image_to_m2m(base_model, image_model, rel_model, + verbose=False): + missing, moved = 0, 0 + for item in base_model.objects.all(): + if not item.image: + continue + + image_instance = image_model.objects.create() + + try: + image_instance.image.save( + os.path.basename(item.image.path), + File(open(item.image.path)) + ) + image_instance.thumbnail.save( + os.path.basename(item.thumbnail.path), + File(open(item.thumbnail.path)) + ) + except IOError: + # image not on hard-drive + item.image = None + item.thumbnail = None + item.save() + image_instance.delete() + missing += 1 + continue + + image_instance.save() + + rel_model.objects.create(item=item, image=image_instance, is_main=True) + + # clean + item.image = None + item.thumbnail = None + item.save() + moved += 1 + if verbose: + print("") + print(base_model) + print("{} missing".format(missing)) + print("{} moved".format(moved)) |