Skip to content

Commit

Permalink
apis to index specific concept/mapping/source/collection
Browse files Browse the repository at this point in the history
  • Loading branch information
snyaggarwal committed Jan 19, 2021
1 parent 5b3ca08 commit d8ca466
Show file tree
Hide file tree
Showing 7 changed files with 59 additions and 5 deletions.
7 changes: 6 additions & 1 deletion core/collections/views.py
Expand Up @@ -43,7 +43,7 @@
include_facets_header, sort_asc_param, sort_desc_param, updated_since_param, include_retired_param, limit_param
from core.common.tasks import add_references, export_collection
from core.common.utils import compact_dict_by_values, parse_boolean_query_param
from core.common.views import BaseAPIView, BaseLogoView
from core.common.views import BaseAPIView, BaseLogoView, ResourceIndexView

logger = logging.getLogger('oclapi')

Expand Down Expand Up @@ -594,3 +594,8 @@ def handle_export_version(self):
return status.HTTP_202_ACCEPTED
except AlreadyQueued:
return status.HTTP_409_CONFLICT


class CollectionsIndexView(ResourceIndexView):
serializer_class = CollectionListSerializer
model = Collection
3 changes: 3 additions & 0 deletions core/common/swagger_parameters.py
Expand Up @@ -70,6 +70,9 @@
apps_param = openapi.Parameter(
'apps', openapi.IN_FORM, description="App Names (comma separated)", type=openapi.TYPE_STRING
)
ids_param = openapi.Parameter(
'ids', openapi.IN_FORM, description="Resource Ids", type=openapi.TYPE_STRING
)
parallel_threads_param = openapi.Parameter(
'parallel', openapi.IN_FORM, description="Parallel threads count (default: 5, max: 10)", type=openapi.TYPE_INTEGER
)
25 changes: 24 additions & 1 deletion core/common/views.py
@@ -1,17 +1,22 @@
from django.http import HttpResponse
from django.shortcuts import get_object_or_404
from django.utils.functional import cached_property
from drf_yasg.utils import swagger_auto_schema
from elasticsearch_dsl import Q
from pydash import get
from pydash import get, compact
from rest_framework import response, generics, status
from rest_framework.generics import ListAPIView, RetrieveUpdateDestroyAPIView
from rest_framework.parsers import MultiPartParser
from rest_framework.permissions import AllowAny
from rest_framework.response import Response
from rest_framework.views import APIView

from core.common.constants import SEARCH_PARAM, LIST_DEFAULT_LIMIT, CSV_DEFAULT_LIMIT, \
LIMIT_PARAM, NOT_FOUND, MUST_SPECIFY_EXTRA_PARAM_IN_BODY, INCLUDE_RETIRED_PARAM, VERBOSE_PARAM
from core.common.mixins import PathWalkerMixin
from core.common.permissions import IsSuperuser
from core.common.serializers import RootSerializer
from core.common.swagger_parameters import ids_param
from core.common.utils import compact_dict_by_values, to_snake_case, to_camel_case
from core.concepts.permissions import CanViewParentDictionary, CanEditParentDictionary
from core.concepts.search import ConceptSearch
Expand Down Expand Up @@ -500,3 +505,21 @@ def post(self, request, *args, **kwargs): # pylint: disable=unused-argument
obj.upload_base64_logo(data.get('base64'), 'logo.png')

return Response(self.get_serializer_class()(obj).data, status=status.HTTP_200_OK)


class ResourceIndexView(APIView):
permission_classes = (IsSuperuser,)
parser_classes = (MultiPartParser,)
model = None
filter_attr = 'mnemonic__in'

@swagger_auto_schema(manual_parameters=[ids_param])
def post(self, request):
ids = request.data.get('ids', None)
if ids:
ids = [i.strip() for i in compact(ids.split(','))]

for resource in self.model.objects.filter(**{self.filter_attr: ids}):
resource.save()

return Response(status=status.HTTP_200_OK)
9 changes: 8 additions & 1 deletion core/concepts/views.py
Expand Up @@ -18,7 +18,7 @@
include_facets_header, updated_since_param, include_inverse_mappings_param, include_retired_param,
compress_header)
from core.common.views import SourceChildCommonBaseView, SourceChildExtrasView, \
SourceChildExtraRetrieveUpdateDestroyView
SourceChildExtraRetrieveUpdateDestroyView, ResourceIndexView
from core.concepts.constants import PARENT_VERSION_NOT_LATEST_CANNOT_UPDATE_CONCEPT
from core.concepts.documents import ConceptDocument
from core.concepts.models import Concept, LocalizedText
Expand Down Expand Up @@ -195,6 +195,8 @@ def destroy(self, request, *args, **kwargs):


class ConceptReactivateView(ConceptBaseView, UpdateAPIView):
serializer_class = ConceptDetailSerializer

def get_object(self, queryset=None):
return get_object_or_404(self.get_queryset(None), id=F('versioned_object_id'))

Expand Down Expand Up @@ -381,3 +383,8 @@ class ConceptExtrasView(SourceChildExtrasView, ConceptBaseView):
class ConceptExtraRetrieveUpdateDestroyView(SourceChildExtraRetrieveUpdateDestroyView, ConceptBaseView):
serializer_class = ConceptDetailSerializer
model = Concept


class ConceptsIndexView(ResourceIndexView):
serializer_class = ConceptListSerializer
model = Concept
7 changes: 6 additions & 1 deletion core/mappings/views.py
Expand Up @@ -14,7 +14,7 @@
include_facets_header, updated_since_param, include_retired_param,
compress_header)
from core.common.views import SourceChildCommonBaseView, SourceChildExtrasView, \
SourceChildExtraRetrieveUpdateDestroyView
SourceChildExtraRetrieveUpdateDestroyView, ResourceIndexView
from core.concepts.permissions import CanEditParentDictionary, CanViewParentDictionary
from core.mappings.constants import PARENT_VERSION_NOT_LATEST_CANNOT_UPDATE_MAPPING
from core.mappings.documents import MappingDocument
Expand Down Expand Up @@ -235,3 +235,8 @@ class MappingExtrasView(SourceChildExtrasView, MappingBaseView):
class MappingExtraRetrieveUpdateDestroyView(SourceChildExtraRetrieveUpdateDestroyView, MappingBaseView):
serializer_class = MappingDetailSerializer
model = Mapping


class MappingsIndexView(ResourceIndexView):
serializer_class = MappingListSerializer
model = Mapping
7 changes: 6 additions & 1 deletion core/sources/views.py
Expand Up @@ -21,7 +21,7 @@
page_param, verbose_param, include_retired_param, updated_since_param, include_facets_header, compress_header
from core.common.tasks import export_source
from core.common.utils import parse_boolean_query_param, compact_dict_by_values
from core.common.views import BaseAPIView, BaseLogoView
from core.common.views import BaseAPIView, BaseLogoView, ResourceIndexView
from core.sources.constants import DELETE_FAILURE, DELETE_SUCCESS, VERSION_ALREADY_EXISTS
from core.sources.documents import SourceDocument
from core.sources.models import Source
Expand Down Expand Up @@ -376,3 +376,8 @@ def handle_export_version(self):
return status.HTTP_202_ACCEPTED
except AlreadyQueued:
return status.HTTP_409_CONFLICT


class SourcesIndexView(ResourceIndexView):
serializer_class = SourceListSerializer
model = Source
6 changes: 6 additions & 0 deletions core/urls.py
Expand Up @@ -22,6 +22,8 @@

import core.concepts.views as concept_views
import core.mappings.views as mapping_views
import core.collections.views as collection_views
import core.sources.views as sources_views
from core.common.constants import NAMESPACE_PATTERN
from core.common.utils import get_api_base_url
from core.importers.views import BulkImportView
Expand All @@ -47,9 +49,13 @@
path('users/', include('core.users.urls'), name='users_urls'),
path('user/', include('core.users.user_urls'), name='current_user_urls'),
path('orgs/', include('core.orgs.urls'), name='orgs_url'),
path('sources/indexes/', sources_views.SourcesIndexView.as_view(), name='sources-indexes'),
path('sources/', include('core.sources.urls'), name='sources_url'),
path('collections/indexes/', collection_views.CollectionsIndexView.as_view(), name='collections-indexes'),
path('collections/', include('core.collections.urls'), name='collections_urls'),
path('concepts/indexes/', concept_views.ConceptsIndexView.as_view(), name='concepts-indexes'),
path('concepts/', concept_views.ConceptVersionListAllView.as_view(), name='all_concepts_urls'),
path('mappings/indexes/', mapping_views.MappingsIndexView.as_view(), name='mappings-indexes'),
path('mappings/', mapping_views.MappingVersionListAllView.as_view(), name='all_mappings_urls'),
path('importers/', include('core.importers.urls'), name='importer_urls'),

Expand Down

0 comments on commit d8ca466

Please sign in to comment.