def get_kwargs_filters(self): filters = self.get_facet_filters_from_kwargs() is_source_child_document_model = self.is_source_child_document_model() is_version_specified = 'version' in self.kwargs is_collection_specified = 'collection' in self.kwargs is_source_specified = 'source' in self.kwargs if is_version_specified and is_source_specified: filters['source_version'] = self.kwargs['version'] if is_version_specified and is_collection_specified: filters['collection_version'] = self.kwargs['version'] if is_source_child_document_model: if is_version_specified: container_version = self.kwargs['version'] is_latest_released = container_version == LATEST 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( { **params, 'mnemonic': self.kwargs['source'] }) filters['source_version'] = get( latest_released_version, 'version') elif is_collection_specified: from core.collections.models import Collection latest_released_version = Collection.find_latest_released_version_by( { **params, 'mnemonic': self.kwargs['collection'] }) filters['collection_version'] = get( latest_released_version, 'version') if is_collection_specified: owner_type = filters.pop('ownerType', None) owner = filters.pop('owner', None) if owner_type == USER_OBJECT_TYPE: filters['collection_owner_url'] = "/users/{}/".format( owner) if owner_type == ORG_OBJECT_TYPE: filters['collection_owner_url'] = "/orgs/{}/".format(owner) if not is_version_specified: filters['collection_version'] = HEAD if is_source_specified and not is_version_specified: filters['source_version'] = HEAD return filters
def get_base_queryset( # pylint: disable=too-many-branches,too-many-locals,too-many-statements cls, params, distinct_by='updated_at'): queryset = cls.objects.filter(is_active=True) user = params.get('user', None) org = params.get('org', None) collection = params.get('collection', None) source = params.get('source', None) container_version = params.get('version', None) concept = params.get('concept', None) concept_version = params.get('concept_version', None) is_latest = params.get('is_latest', None) in [True, 'true'] uri = params.get('uri', None) include_retired = params.get(INCLUDE_RETIRED_PARAM, None) in [True, 'true'] updated_since = parse_updated_since_param(params) latest_released_version = None is_latest_released = container_version == LATEST if is_latest_released: filters = dict(user__username=user, organization__mnemonic=org) if source: from core.sources.models import Source latest_released_version = Source.find_latest_released_version_by( { **filters, 'mnemonic': source }) elif collection: from core.collections.models import Collection latest_released_version = Collection.find_latest_released_version_by( { **filters, 'mnemonic': collection }) if not latest_released_version: return cls.objects.none() if collection: queryset = queryset.filter( cls.get_iexact_or_criteria('collection_set__mnemonic', collection)) if user: queryset = queryset.filter( cls.get_iexact_or_criteria( 'collection_set__user__username', user)) if org: queryset = queryset.filter( cls.get_iexact_or_criteria( 'collection_set__organization__mnemonic', org)) if is_latest_released: queryset = queryset.filter( cls.get_iexact_or_criteria( 'collection_set__version', get(latest_released_version, 'version'))) if container_version and not is_latest_released: queryset = queryset.filter( cls.get_iexact_or_criteria('collection_set__version', container_version)) if source: queryset = queryset.filter( cls.get_iexact_or_criteria('sources__mnemonic', source)) if user: queryset = queryset.filter( cls.get_iexact_or_criteria('parent__user__username', user)) if org: queryset = queryset.filter( cls.get_iexact_or_criteria( 'parent__organization__mnemonic', org)) if is_latest_released: queryset = queryset.filter( cls.get_iexact_or_criteria( 'sources__version', get(latest_released_version, 'version'))) if container_version and not is_latest_released: queryset = queryset.filter( cls.get_iexact_or_criteria('sources__version', container_version)) if concept: queryset = queryset.filter(mnemonic__exact=concept) if concept_version: queryset = queryset.filter( cls.get_iexact_or_criteria('version', concept_version)) if is_latest: queryset = queryset.filter(is_latest_version=True) if not include_retired and not concept: queryset = queryset.filter(retired=False) if updated_since: queryset = queryset.filter(updated_at__gte=updated_since) if uri: queryset = queryset.filter(uri__icontains=uri) if distinct_by: queryset = queryset.distinct(distinct_by) return queryset