Beispiel #1
0
    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
Beispiel #2
0
    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