From 752fe7581664367fb7fade3b8e0b6f54d0692a7e Mon Sep 17 00:00:00 2001 From: rkorytkowski Date: Fri, 6 Dec 2024 10:49:34 +0100 Subject: [PATCH] OpenConceptLab/ocl_issues#1922 Do not overwrite versions for CodeSystem, ValueSet, ConceptMap --- core/code_systems/serializers.py | 7 ++++++- core/concept_maps/serializers.py | 11 ++++++----- core/value_sets/serializers.py | 7 ++++++- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/core/code_systems/serializers.py b/core/code_systems/serializers.py index 63f9cc58..901fac70 100644 --- a/core/code_systems/serializers.py +++ b/core/code_systems/serializers.py @@ -284,7 +284,7 @@ def create(self, validated_data): ident = IdentifierSerializer.include_ocl_identifier(uri, RESOURCE_TYPE, validated_data) source = SourceCreateOrUpdateSerializer().prepare_object(validated_data) - if ident['owner_type'] == 'orgs': + if ident['owner_type'] in ['orgs', 'Organization']: owner = Organization.objects.filter(mnemonic=ident['owner_id']).first() else: owner = UserProfile.objects.filter(username=ident['owner_id']).first() @@ -322,6 +322,11 @@ def update(self, instance, validated_data): concepts = validated_data.pop('concepts', []) source = SourceCreateOrUpdateSerializer().prepare_object(validated_data, instance) + if instance.version == source.version: + self._errors.update({'version': f'Version {source.version} already exists for CodeSystem' + f' {source.mnemonic}.'}) + return source + # Preserve version specific values source_version = source.version source_released = source.released diff --git a/core/concept_maps/serializers.py b/core/concept_maps/serializers.py index 6819ba86..9d1d723d 100644 --- a/core/concept_maps/serializers.py +++ b/core/concept_maps/serializers.py @@ -160,7 +160,7 @@ def create(self, validated_data): ident = IdentifierSerializer.include_ocl_identifier(uri, RESOURCE_TYPE, validated_data) source = SourceCreateOrUpdateSerializer().prepare_object(validated_data) - if ident['owner_type'] == 'orgs': + if ident['owner_type'] in ['orgs', 'Organization']: owner = Organization.objects.filter(mnemonic=ident['owner_id']).first() else: owner = UserProfile.objects.filter(username=ident['owner_id']).first() @@ -211,6 +211,11 @@ def update(self, instance, validated_data): mappings = validated_data.pop('mappings', []) source = SourceCreateOrUpdateSerializer().prepare_object(validated_data, instance) + if instance.version == source.version: + self._errors.update({'version': f'Version {source.version} already exists for ConceptMa' + f'p {source.mnemonic}.'}) + return source + # Preserve version specific values source_version = source.version source_released = source.released @@ -254,10 +259,6 @@ def update(self, instance, validated_data): new_mapping_serializer.is_valid(raise_exception=True) Mapping.persist_new(new_mapping_serializer.validated_data, user) - existing_source_version = source.versions.filter(version=source_version) - if existing_source_version: - existing_source_version.delete() - source.id = None source.version = source_version source.released = source_released diff --git a/core/value_sets/serializers.py b/core/value_sets/serializers.py index 383aaf4c..5ea9a752 100644 --- a/core/value_sets/serializers.py +++ b/core/value_sets/serializers.py @@ -172,7 +172,7 @@ def create(self, validated_data): collection.version = HEAD collection.collection_type = 'ValueSet' - parent_klass = Organization if ident['owner_type'] == 'orgs' else UserProfile + parent_klass = Organization if ident['owner_type'] in ['orgs', 'Organization'] else UserProfile collection.set_parent(parent_klass.objects.filter(**{parent_klass.mnemonic_attr: ident['owner_id']}).first()) user = self.context['request'].user @@ -203,6 +203,11 @@ def update(self, instance, validated_data): collection = CollectionCreateOrUpdateSerializer().prepare_object(validated_data, instance) + if instance.version == collection.version: + self._errors.update({'version': f'Version {collection.version} already exists for ValueSet' + f' {collection.mnemonic}.'}) + return collection + # Preserve version specific values collection_version = collection.version collection_released = collection.released