Skip to content

Commit

Permalink
OpenConceptLab/ocl_issues#818 | collection version to use expansion_u…
Browse files Browse the repository at this point in the history
…ri to get concepts/mappings
  • Loading branch information
snyaggarwal committed Sep 10, 2021
1 parent bd98f33 commit f5e0448
Show file tree
Hide file tree
Showing 4 changed files with 76 additions and 7 deletions.
7 changes: 7 additions & 0 deletions core/collections/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -386,6 +386,13 @@ def cascade_children_to_expansion(self, expansion_data=None, index=True):

return expansion

@property
def expansion(self):
if self.expansion_uri:
return self.expansions.filter(uri=self.expansion_uri).first()

return None


class CollectionReference(models.Model):
class Meta:
Expand Down
6 changes: 4 additions & 2 deletions core/collections/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -122,13 +122,15 @@
r"^(?P<collection>{pattern})/(?P<version>{pattern})/concepts/".format(
pattern=NAMESPACE_PATTERN
),
include('core.concepts.urls')
views.CollectionVersionConceptsView.as_view(),
name='concept-list'
),
re_path(
r"^(?P<collection>{pattern})/(?P<version>{pattern})/mappings/".format(
pattern=NAMESPACE_PATTERN
),
include('core.mappings.urls')
views.CollectionVersionMappingsView.as_view(),
name='mapping-list'
),
re_path(
r'^(?P<collection>{pattern})/(?P<version>{pattern})/references/$'.format(pattern=NAMESPACE_PATTERN),
Expand Down
52 changes: 52 additions & 0 deletions core/collections/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -399,6 +399,8 @@ def get(self, request, *args, **kwargs):
search_query = query_params.get('q', '')
sort = query_params.get('search_sort', 'ASC')
object_version = self.get_queryset().first()
if not object_version:
raise Http404()
references = object_version.references.filter(expression__icontains=search_query)
self.object_list = references if sort == 'ASC' else list(reversed(references))
return self.list(request, *args, **kwargs)
Expand Down Expand Up @@ -628,6 +630,56 @@ def get_queryset(self):
return super().get_queryset().mappings


class CollectionVersionConceptsView(CollectionBaseView, ListWithHeadersMixin):
is_searchable = True
document_model = ConceptDocument
es_fields = Concept.es_fields

def get_object(self, queryset=None):
instance = get_object_or_404(self.get_base_queryset())
self.check_object_permissions(self.request, instance)
return instance.expansion

def get_serializer_class(self):
from core.concepts.serializers import ConceptDetailSerializer, ConceptListSerializer
return ConceptDetailSerializer if self.is_verbose() else ConceptListSerializer

def get_queryset(self):
expansion = self.get_object()
if expansion:
return expansion.concepts

return Concept.objects.none()

def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs)


class CollectionVersionMappingsView(CollectionBaseView, ListWithHeadersMixin):
is_searchable = True
document_model = MappingDocument
es_fields = Mapping.es_fields

def get_object(self, queryset=None):
instance = get_object_or_404(self.get_base_queryset())
self.check_object_permissions(self.request, instance)
return instance.expansion

def get_serializer_class(self):
from core.mappings.serializers import MappingDetailSerializer, MappingListSerializer
return MappingDetailSerializer if self.is_verbose() else MappingListSerializer

def get_queryset(self):
expansion = self.get_object()
if expansion:
return expansion.mappings

return Mapping.objects.none()

def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs)


class CollectionExtrasBaseView(CollectionBaseView):
def get_object(self, queryset=None):
return get_object_or_404(self.get_queryset(), version=HEAD)
Expand Down
18 changes: 13 additions & 5 deletions core/common/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -275,21 +275,27 @@ def get_kwargs_filters(self): # pylint: disable=too-many-branches
filters['collection_version'] = self.kwargs['version']

if is_source_child_document_model:
version = None
if is_version_specified:
container_version = self.kwargs['version']
is_latest_released = container_version == LATEST
params = dict(user__username=self.kwargs.get('user'), organization__mnemonic=self.kwargs.get('org'))
if is_latest_released:
params = dict(user__username=self.kwargs.get('user'), organization__mnemonic=self.kwargs.get('org'))
if is_source_specified:
from core.sources.models import Source
latest_released_version = Source.find_latest_released_version_by(
version = Source.find_latest_released_version_by(
{**params, 'mnemonic': self.kwargs['source']})
filters['source_version'] = get(latest_released_version, 'version')
filters['source_version'] = get(version, 'version')
elif is_collection_specified:
from core.collections.models import Collection
latest_released_version = Collection.find_latest_released_version_by(
version = Collection.find_latest_released_version_by(
{**params, 'mnemonic': self.kwargs['collection']})
filters['collection_version'] = get(latest_released_version, 'version')
filters['collection_version'] = get(version, 'version')
elif is_collection_specified and 'expansion' not in self.kwargs:
from core.collections.models import Collection
version = Collection.objects.filter(
**params, mnemonic=self.kwargs['collection'], version=self.kwargs['version']
).first()

if is_collection_specified:
owner_type = filters.pop('ownerType', None)
Expand All @@ -302,6 +308,8 @@ def get_kwargs_filters(self): # pylint: disable=too-many-branches
filters['collection_version'] = HEAD
if 'expansion' in self.kwargs:
filters['expansion'] = self.kwargs.get('expansion')
elif version:
filters['expansion'] = get(version, 'expansion.mnemonic', 'NO_EXPANSION')
if is_source_specified and not is_version_specified:
filters['source_version'] = HEAD
return filters
Expand Down

0 comments on commit f5e0448

Please sign in to comment.