diff options
| author | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-09-04 15:32:22 +0200 | 
|---|---|---|
| committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-09-04 15:33:13 +0200 | 
| commit | e75781247b085311d75ba380ead2b523b8dba097 (patch) | |
| tree | d0dd22cc3b923ca8a2270c121f5b94bdb19dd4c1 | |
| parent | 21fe72642e7b7e9847a178794a1cd9f771f23c0a (diff) | |
| download | Ishtar-e75781247b085311d75ba380ead2b523b8dba097.tar.bz2 Ishtar-e75781247b085311d75ba380ead2b523b8dba097.zip  | |
Serializers: manage context records - uuid for context records
| -rw-r--r-- | archaeological_context_records/migrations/0051_auto_20190904_1509.py | 36 | ||||
| -rw-r--r-- | archaeological_context_records/models.py | 10 | ||||
| -rw-r--r-- | archaeological_context_records/serializers.py | 41 | ||||
| -rw-r--r-- | archaeological_context_records/tests.py | 37 | ||||
| -rw-r--r-- | archaeological_operations/tests.py | 4 | 
5 files changed, 122 insertions, 6 deletions
diff --git a/archaeological_context_records/migrations/0051_auto_20190904_1509.py b/archaeological_context_records/migrations/0051_auto_20190904_1509.py new file mode 100644 index 000000000..d4a5562d6 --- /dev/null +++ b/archaeological_context_records/migrations/0051_auto_20190904_1509.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.18 on 2019-09-04 15:09 +from __future__ import unicode_literals + +import uuid + +from django.db import migrations, models + +from ishtar_common.utils_migrations import set_uuid_helper + + +class Migration(migrations.Migration): + +    dependencies = [ +        ('archaeological_context_records', '0050_dating_uuid'), +    ] + +    operations = [ +        migrations.AddField( +            model_name='contextrecord', +            name='uuid', +            field=models.UUIDField(blank=True, null=True), +        ), +        migrations.AddField( +            model_name='historicalcontextrecord', +            name='uuid', +            field=models.UUIDField(default=uuid.uuid4), +        ), +        migrations.RunPython(set_uuid_helper('archaeological_context_records', +                                             'ContextRecord')), +        migrations.AlterField( +            model_name='contextrecord', +            name='uuid', +            field=models.UUIDField(default=uuid.uuid4), +        ), +    ] diff --git a/archaeological_context_records/models.py b/archaeological_context_records/models.py index 4588e6465..1f79f663d 100644 --- a/archaeological_context_records/models.py +++ b/archaeological_context_records/models.py @@ -43,6 +43,7 @@ from ishtar_common.models import Document, GeneralType, \      DocumentItem  from archaeological_operations.models import Operation, Period, Parcel, \      ArchaeologicalSite +from ishtar_common.model_managers import UUIDModelManager  class DatingType(GeneralType): @@ -80,6 +81,7 @@ class Dating(models.Model):                                  blank=True, null=True)      precise_dating = models.TextField(_("Precise dating"), blank=True,                                        null=True) +    objects = UUIDModelManager()      class Meta:          verbose_name = _("Dating") @@ -92,6 +94,9 @@ class Dating(models.Model):              return str(self.period)          return "%s (%s-%s)" % (self.period, start_date, end_date) +    def natural_key(self): +        return self.uuid, +      def get_values(self, prefix='', no_values=False):          return {              prefix + "period": str(self.period), @@ -448,9 +453,10 @@ class ContextRecord(BulkUpdatedItem, DocumentItem, BaseHistorizedItem,      DOWN_MODEL_UPDATE = ["base_finds"]      history = HistoricalRecords(bases=[HistoryModel]) -    objects = ExternalIdManager() +    objects = UUIDModelManager()      # fields +    uuid = models.UUIDField(default=uuid.uuid4)      external_id = models.TextField(_("External ID"), blank=True, null=True)      auto_external_id = models.BooleanField(          _("External ID is set automatically"), default=False) @@ -552,7 +558,7 @@ class ContextRecord(BulkUpdatedItem, DocumentItem, BaseHistorizedItem,          ordering = ('cached_label',)      def natural_key(self): -        return (self.external_id, ) +        return (self.uuid, )      @property      def name(self): diff --git a/archaeological_context_records/serializers.py b/archaeological_context_records/serializers.py new file mode 100644 index 000000000..98f7d2226 --- /dev/null +++ b/archaeological_context_records/serializers.py @@ -0,0 +1,41 @@ +from ishtar_common.serializers import generic_get_results, archive_serialization +from archaeological_context_records import models + + +CR_MODEL_LIST = [ +    models.Dating, models.ContextRecord, models.RecordRelations +] + +# TODO: associated documents + + +def cr_serialization(archive=False, return_empty_types=False, +                            archive_name=None, operation_queryset=None, +                            site_queryset=None, cr_queryset=None): +    result_queryset = {} +    """ +    if operation_queryset: +        result_queryset = { +            models.ContextRecord.__name__: operation_queryset, +            models.ArchaeologicalSite.__name__: +                models.ArchaeologicalSite.objects.filter( +                    operations__id__in=operation_queryset.values_list( +                        "id", flat=True) +                    ) +        } +    elif site_queryset: +        result_queryset = { +            models.ArchaeologicalSite.__name__: site_queryset, +            models.Operation.__name__: models.Operation.objects.filter( +                archaeological_sites__id__in=site_queryset.values_list( +                    "id", flat=True)) +        } +    """ + +    result = generic_get_results(CR_MODEL_LIST, "context_records", +                                 result_queryset=result_queryset) +    full_archive = archive_serialization( +        result, archive_dir="operations", archive=archive, +        return_empty_types=return_empty_types, archive_name=archive_name, +    ) +    return full_archive diff --git a/archaeological_context_records/tests.py b/archaeological_context_records/tests.py index 29670b1a3..024a8f338 100644 --- a/archaeological_context_records/tests.py +++ b/archaeological_context_records/tests.py @@ -42,9 +42,10 @@ from ishtar_common.utils import generate_relation_graph  from ishtar_common.tests import WizardTest, WizardTestFormData as FormData, \      create_superuser, create_user, TestCase, AutocompleteTestBase, AcItem, \      CONTEXT_RECORD_FIXTURES, CONTEXT_RECORD_TOWNS_FIXTURES, \ -    OPERATION_TOWNS_FIXTURES +    OPERATION_TOWNS_FIXTURES, GenericSerializationTest, COMMON_FIXTURES, \ +    WAREHOUSE_FIXTURES -from archaeological_context_records import views +from archaeological_context_records import views, serializers  class ImportContextRecordTest(ImportTest, TestCase): @@ -205,6 +206,38 @@ class ContextRecordInit(OperationInitTest):          super(ContextRecordInit, self).tearDown() +class SerializationTest(GenericSerializationTest, ContextRecordInit, TestCase): +    fixtures = COMMON_FIXTURES + WAREHOUSE_FIXTURES + +    def setUp(self): +        cr = self.create_context_record(data={"label": u"CR 1"})[0] +        cr2 = self.create_context_record(data={"label": u"CR 2"})[1] +        dating = models.Dating.objects.create( +            period=models.Period.objects.all()[0], +        ) +        cr.datings.add(dating) +        rlt = models.RelationType.objects.create( +            label="Test", +            txt_idx="test", +            symmetrical=False +        ) +        models.RecordRelations.objects.create( +            left_record=cr, +            right_record=cr2, +            relation_type=rlt +        ) + +    def test_serialization(self): +        self.generic_serialization_test(serializers.cr_serialization) + +    def test_restore(self): +        current_number, zip_filename = self.generic_restore_test_genzip( +            serializers.CR_MODEL_LIST, +            serializers.cr_serialization) +        self.generic_restore_test(zip_filename, current_number, +                                  serializers.CR_MODEL_LIST) + +  class ExportTest(ContextRecordInit, TestCase):      fixtures = CONTEXT_RECORD_TOWNS_FIXTURES diff --git a/archaeological_operations/tests.py b/archaeological_operations/tests.py index 82f30855c..9a1313424 100644 --- a/archaeological_operations/tests.py +++ b/archaeological_operations/tests.py @@ -790,7 +790,7 @@ class SerializationTest(GenericSerializationTest, TestCase):          )          self.assertEqual(len(site_json), 1)          rel_json = json.loads( -            res[('operations', 'archaeological_operations__RecordRelation')] +            res[('operations', 'archaeological_operations__RecordRelations')]          )          self.assertEqual(len(rel_json), 0) @@ -809,7 +809,7 @@ class SerializationTest(GenericSerializationTest, TestCase):          )          self.assertEqual(len(site_json), 0)          rel_json = json.loads( -            res[('operations', 'archaeological_operations__RecordRelation')] +            res[('operations', 'archaeological_operations__RecordRelations')]          )          self.assertEqual(len(rel_json), 0)  | 
