Skip to content
This repository has been archived by the owner on Aug 11, 2021. It is now read-only.

Commit

Permalink
Move initial queryset filter logic for sources and collections to Bas…
Browse files Browse the repository at this point in the history
…e views
  • Loading branch information
karuhanga committed Oct 6, 2019
1 parent a8f4860 commit 0129daa
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 41 deletions.
19 changes: 1 addition & 18 deletions ocl/collection/filters.py
@@ -1,22 +1,5 @@
from oclapi.filters import ConceptContainerPermissionedSearchFilter
from django.contrib.auth.models import AnonymousUser

from users.models import USER_OBJECT_TYPE


class CollectionSearchFilter(ConceptContainerPermissionedSearchFilter):
def get_filters(self, request, view):
filters = super(CollectionSearchFilter, self).get_filters(request, view)

user = request.QUERY_PARAMS.get('user', None)
if user:
filters.update({'owner': user, 'ownerType': USER_OBJECT_TYPE})

if view.parent_resource:
filters.update({'owner': view.parent_resource.mnemonic})
filters.update({'ownerType': view.parent_resource.resource_type()})

if isinstance(request.user, AnonymousUser):
filters.update({'public_can_view': True})

return filters
pass
27 changes: 15 additions & 12 deletions ocl/collection/views.py
@@ -1,6 +1,8 @@
import logging
from django.conf import settings
from django.contrib.contenttypes.models import ContentType
from django.db import IntegrityError
from django.db.models import Q

from collection.validation_messages import HEAD_OF_CONCEPT_ADDED_TO_COLLECTION, CONCEPT_ADDED_TO_COLLECTION_FMT, \
HEAD_OF_MAPPING_ADDED_TO_COLLECTION, MAPPING_ADDED_TO_COLLECTION_FMT
Expand All @@ -23,7 +25,7 @@
from oclapi.views import ResourceVersionMixin, ResourceAttributeChildMixin, ConceptDictionaryUpdateMixin, \
ConceptDictionaryCreateMixin, ConceptDictionaryExtrasView, ConceptDictionaryExtraRetrieveUpdateDestroyView, \
BaseAPIView
from oclapi.models import ACCESS_TYPE_EDIT, ACCESS_TYPE_VIEW
from oclapi.models import ACCESS_TYPE_EDIT, ACCESS_TYPE_VIEW, ACCESS_TYPE_NONE
from rest_framework import mixins, status
from rest_framework.generics import RetrieveAPIView, UpdateAPIView, get_object_or_404, DestroyAPIView
from rest_framework.response import Response
Expand Down Expand Up @@ -53,22 +55,23 @@ def get_version_detail_serializer(self, obj, data=None, files=None, partial=Fals

def get_queryset(self):
owner = self.get_owner()
if not self.kwargs:
if not owner:
user = self.request.QUERY_PARAMS.get('user', None)
if user:
user = UserProfile.objects.get(mnemonic=user)
return self.queryset.filter(parent_id=user.id, parent_type=ContentType.objects.get_for_model(UserProfile))
return self.queryset
elif 'collection' in self.kwargs:
return Collection.objects.filter(parent_id=owner.id, mnemonic=self.kwargs['collection'])
return self.model.objects.filter(
parent_id=owner.id,
mnemonic=self.kwargs['collection'],
parent_type=ContentType.objects.get_for_model(owner),
)
else:
return self.queryset.filter(parent_id=owner.id)
return self.queryset.filter(parent_id=owner.id, parent_type=ContentType.objects.get_for_model(owner))

def get_owner(self):
owner = None
if 'user' in self.kwargs:
owner_id = self.kwargs['user']
owner = UserProfile.objects.get(mnemonic=owner_id)
elif 'org' in self.kwargs:
owner_id = self.kwargs['org']
owner = Organization.objects.get(mnemonic=owner_id)
return owner
return self.parent_resource


class CollectionVersionBaseView(ResourceVersionMixin):
Expand Down
12 changes: 1 addition & 11 deletions ocl/sources/filters.py
@@ -1,15 +1,5 @@
from oclapi.filters import ConceptContainerPermissionedSearchFilter
from django.contrib.auth.models import AnonymousUser


class SourceSearchFilter(ConceptContainerPermissionedSearchFilter):
def get_filters(self, request, view):
filters = super(SourceSearchFilter, self).get_filters(request, view)
if view.parent_resource:
filters.update({'owner': view.parent_resource.mnemonic})
filters.update({'ownerType': view.parent_resource.resource_type()})

if isinstance(request.user, AnonymousUser):
filters.update({'public_can_view': True})

return filters
pass
21 changes: 21 additions & 0 deletions ocl/sources/views.py
@@ -1,6 +1,7 @@
import logging

from django.conf import settings
from django.contrib.contenttypes.models import ContentType
from django.db import IntegrityError
from django.db.models import Q
from django.db.models.query import EmptyQuerySet
Expand Down Expand Up @@ -49,6 +50,26 @@ class SourceBaseView():
def get_detail_serializer(self, obj, data=None, files=None, partial=False):
return SourceDetailSerializer(obj, data, files, partial)

def get_queryset(self):
owner = self.get_owner()
if not owner:
user = self.request.QUERY_PARAMS.get('user', None)
if user:
user = UserProfile.objects.get(mnemonic=user)
return self.queryset.filter(parent_id=user.id, parent_type=ContentType.objects.get_for_model(UserProfile))
return self.queryset
elif 'source' in self.kwargs:
return self.model.objects.filter(
parent_id=owner.id,
mnemonic=self.kwargs['source'],
parent_type=ContentType.objects.get_for_model(owner),
)
else:
return self.queryset.filter(parent_id=owner.id, parent_type=ContentType.objects.get_for_model(owner))

def get_owner(self):
return self.parent_resource


class SourceRetrieveUpdateDestroyView(SourceBaseView,
ConceptDictionaryUpdateMixin,
Expand Down

0 comments on commit 0129daa

Please sign in to comment.