diff --git a/core/common/tasks.py b/core/common/tasks.py index 9a20a7864..7626a68fe 100644 --- a/core/common/tasks.py +++ b/core/common/tasks.py @@ -12,7 +12,6 @@ from django.core.exceptions import ValidationError from django.core.mail import EmailMessage from django.core.management import call_command -from django.db.models import F from django.template.loader import render_to_string from django.utils import timezone from django_elasticsearch_dsl.registries import registry @@ -721,25 +720,3 @@ def calculate_checksums(resource_type, resource_id): instance.get_latest_version().set_checksums() if not instance.is_versioned_object: instance.versioned_object.set_checksums() - - -@app.task(ignore_result=True, retry_kwargs={'max_retries': 0}) -def delete_duplicate_concept_versions(source_mnemonic, source_filters=None, concept_filters=None): # pragma: no cover - source_filters = source_filters or {} - concept_filters = concept_filters or {} - from core.sources.models import Source - source = Source.objects.filter(version='HEAD', mnemonic=source_mnemonic).filter(**source_filters).first() - deleted = 0 - for concept in source.concepts_set.exclude(id=F('versioned_object_id')).exclude( - is_latest_version=True).filter(**concept_filters).iterator(chunk_size=100): - logger.info('Checking concept %s', concept.uri) - source_versions = concept.sources - count = source_versions.count() - if not concept.comment and count == 0 or (count == 1 and source_versions.first().version == 'HEAD'): - if not concept.references.exists() and not concept.expansion_set.exists(): - if not concept.mappings_from.exists() and not concept.mappings_to.exists(): - logger.info('Deleting %s', concept.uri) - concept.delete() - deleted += 1 - - logger.info("DELETED %d", deleted) diff --git a/core/common/views.py b/core/common/views.py index 99da0f508..f2c5854ea 100644 --- a/core/common/views.py +++ b/core/common/views.py @@ -15,7 +15,7 @@ from pydash import get, compact, flatten from rest_framework import response, generics, status from rest_framework.generics import ListAPIView, RetrieveUpdateDestroyAPIView -from rest_framework.permissions import AllowAny, IsAuthenticated, IsAdminUser +from rest_framework.permissions import AllowAny, IsAuthenticated from rest_framework.response import Response from rest_framework.views import APIView @@ -1168,23 +1168,3 @@ def perform_task(self, task_func, task_args, queue='default', is_default_async=F return self.task_response(task, queue) return result - - -class ConceptDuplicateDeleteView(BaseAPIView, TaskMixin): # pragma: no-cover - swagger_schema = None - permission_classes = (IsAdminUser, ) - - def post(self, _): - source_mnemonic = self.request.data.get('source_mnemonic', None) - source_filters = self.request.data.get('source_filters', None) or {} - concept_filters = self.request.data.get('concept_filters', None) or {} - if not source_mnemonic: - raise Http400(detail='source_mnemonic is required.') - - from core.common.tasks import delete_duplicate_concept_versions - result = self.perform_task( - task_func=delete_duplicate_concept_versions, - task_args=(source_mnemonic, source_filters, concept_filters), - is_default_async=True - ) - return result diff --git a/core/urls.py b/core/urls.py index 7116acd42..18653ba0f 100644 --- a/core/urls.py +++ b/core/urls.py @@ -27,7 +27,7 @@ from core.common.constants import NAMESPACE_PATTERN from core.common.utils import get_api_base_url from core.common.views import RootView, FeedbackView, APIVersionView, ChangeLogView, StandardChecksumView, \ - SmartChecksumView, ConceptDuplicateDeleteView + SmartChecksumView from core.concepts.views import ConceptsHierarchyAmendAdminView from core.importers.views import BulkImportView from core.settings import ENV @@ -93,9 +93,6 @@ ), path('manage/bulkimport/', BulkImportView.as_view(), name='bulk_import_urls'), path('toggles/', include('core.toggles.urls'), name='toggles'), - path( - 'concepts-duplicate-versions-delete/', - ConceptDuplicateDeleteView.as_view(), name='concepts-duplicate-versions-delete'), ] if ENV == 'development':