def get(self, request): """ List your Projects `````````````````` Return a list of projects available to the authenticated session. :auth: required """ queryset = Project.objects.select_related('organization').distinct() status = request.GET.get('status', 'active') if status == 'active': queryset = queryset.filter(status=ProjectStatus.VISIBLE, ) elif status == 'deleted': queryset = queryset.exclude(status=ProjectStatus.VISIBLE, ) elif status: queryset = queryset.none() if request.auth and not request.user.is_authenticated(): if hasattr(request.auth, 'project'): queryset = queryset.filter(id=request.auth.project_id, ) elif request.auth.organization is not None: queryset = queryset.filter( organization=request.auth.organization.id, ) else: queryset = queryset.none() elif not request.is_superuser(): queryset = queryset.filter( team__organizationmember__user=request.user, ) query = request.GET.get('query') if query: tokens = tokenize_query(query) for key, value in six.iteritems(tokens): if key == 'query': value = ' '.join(value) queryset = queryset.filter( Q(name__icontains=value) | Q(slug__icontains=value)) elif key == 'slug': queryset = queryset.filter(in_iexact('slug', value)) elif key == 'name': queryset = queryset.filter(in_iexact('name', value)) elif key == 'platform': queryset = queryset.filter( id__in=ProjectPlatform.objects.filter( platform__in=value, ).values('project_id')) elif key == 'id': queryset = queryset.filter(id__in=value) return self.paginate( request=request, queryset=queryset, order_by='-date_added', on_results=lambda x: serialize( x, request.user, ProjectWithOrganizationSerializer()), paginator_cls=DateTimePaginator, )
def get(self, request): """ List your Organizations ``````````````````````` Return a list of organizations available to the authenticated session. This is particularly useful for requests with an user bound context. For API key based requests this will only return the organization that belongs to the key. :qparam bool member: restrict results to organizations which you have membership :auth: required """ member_only = request.GET.get('member') in ('1', 'true') queryset = Organization.objects.filter( status=OrganizationStatus.VISIBLE, ) if request.auth and not request.user.is_authenticated(): if hasattr(request.auth, 'project'): queryset = queryset.filter( id=request.auth.project.organization_id) elif request.auth.organization is not None: queryset = queryset.filter(id=request.auth.organization.id) elif member_only or not request.is_superuser(): queryset = queryset.filter( id__in=OrganizationMember.objects.filter( user=request.user, ).values('organization'), ) query = request.GET.get('query') if query: tokens = tokenize_query(query) for key, value in six.iteritems(tokens): if key == 'query': value = ' '.join(value) queryset = queryset.filter( Q(name__icontains=value) | Q(slug__icontains=value) | Q(members__email__iexact=value)) elif key == 'slug': queryset = queryset.filter(in_iexact('slug', value)) elif key == 'email': queryset = queryset.filter( in_iexact('members__email', value)) elif key == 'platform': queryset = queryset.filter( project__in=ProjectPlatform.objects.filter( platform__in=value, ).values('project_id')) sort_by = request.GET.get('sortBy') if sort_by == 'members': queryset = queryset.annotate(member_count=Count('member_set'), ) order_by = '-member_count' paginator_cls = OffsetPaginator elif sort_by == 'projects': queryset = queryset.annotate(project_count=Count('project'), ) order_by = '-project_count' paginator_cls = OffsetPaginator elif sort_by == 'events': queryset = queryset.annotate( event_count=Sum('stats__events_24h'), ).filter( stats__events_24h__isnull=False, ) order_by = '-event_count' paginator_cls = OffsetPaginator else: order_by = '-date_added' paginator_cls = DateTimePaginator return self.paginate( request=request, queryset=queryset, order_by=order_by, on_results=lambda x: serialize(x, request.user), paginator_cls=paginator_cls, )
def get(self, request): """ List your Organizations ``````````````````````` Return a list of organizations available to the authenticated session. This is particularly useful for requests with an user bound context. For API key based requests this will only return the organization that belongs to the key. :qparam bool member: restrict results to organizations which you have membership :auth: required """ member_only = request.GET.get('member') in ('1', 'true') queryset = Organization.objects.filter( status=OrganizationStatus.VISIBLE, ) if request.auth and not request.user.is_authenticated(): if hasattr(request.auth, 'project'): queryset = queryset.filter( id=request.auth.project.organization_id ) elif request.auth.organization is not None: queryset = queryset.filter( id=request.auth.organization.id ) elif member_only or not request.is_superuser(): queryset = queryset.filter( id__in=OrganizationMember.objects.filter( user=request.user, ).values('organization'), ) query = request.GET.get('query') if query: tokens = tokenize_query(query) for key, value in six.iteritems(tokens): if key == 'query': value = ' '.join(value) queryset = queryset.filter( Q(name__icontains=value) | Q(slug__icontains=value) | Q(members__email__iexact=value) ) elif key == 'slug': queryset = queryset.filter( in_iexact('slug', value) ) elif key == 'email': queryset = queryset.filter( in_iexact('members__email', value) ) elif key == 'platform': queryset = queryset.filter( project__in=ProjectPlatform.objects.filter( platform__in=value, ).values('project_id') ) elif key == 'id': queryset = queryset.filter(id__in=value) sort_by = request.GET.get('sortBy') if sort_by == 'members': queryset = queryset.annotate( member_count=Count('member_set'), ) order_by = '-member_count' paginator_cls = OffsetPaginator elif sort_by == 'projects': queryset = queryset.annotate( project_count=Count('project'), ) order_by = '-project_count' paginator_cls = OffsetPaginator elif sort_by == 'events': queryset = queryset.annotate( event_count=Sum('stats__events_24h'), ).filter( stats__events_24h__isnull=False, ) order_by = '-event_count' paginator_cls = OffsetPaginator else: order_by = '-date_added' paginator_cls = DateTimePaginator return self.paginate( request=request, queryset=queryset, order_by=order_by, on_results=lambda x: serialize(x, request.user), paginator_cls=paginator_cls, )
def get(self, request): """ List your Projects `````````````````` Return a list of projects available to the authenticated session. :auth: required """ queryset = Project.objects.select_related('organization').distinct() status = request.GET.get('status', 'active') if status == 'active': queryset = queryset.filter( status=ProjectStatus.VISIBLE, ) elif status == 'deleted': queryset = queryset.exclude( status=ProjectStatus.VISIBLE, ) elif status: queryset = queryset.none() if request.auth and not request.user.is_authenticated(): if hasattr(request.auth, 'project'): queryset = queryset.filter( id=request.auth.project_id, ) elif request.auth.organization is not None: queryset = queryset.filter( organization=request.auth.organization.id, ) else: queryset = queryset.none() elif not request.is_superuser(): queryset = queryset.filter( team__organizationmember__user=request.user, ) query = request.GET.get('query') if query: tokens = tokenize_query(query) for key, value in six.iteritems(tokens): if key == 'query': value = ' '.join(value) queryset = queryset.filter( Q(name__icontains=value) | Q(slug__icontains=value) ) elif key == 'slug': queryset = queryset.filter( in_iexact('slug', value) ) elif key == 'name': queryset = queryset.filter( in_iexact('name', value) ) elif key == 'platform': queryset = queryset.filter( id__in=ProjectPlatform.objects.filter( platform__in=value, ).values('project_id') ) elif key == 'id': queryset = queryset.filter(id__in=value) return self.paginate( request=request, queryset=queryset, order_by='-date_added', on_results=lambda x: serialize(x, request.user, ProjectWithOrganizationSerializer()), paginator_cls=DateTimePaginator, )
def get(self, request): """ List your Organizations ``````````````````````` Return a list of organizations available to the authenticated session. This is particularly useful for requests with an user bound context. For API key based requests this will only return the organization that belongs to the key. :qparam bool member: restrict results to organizations which you have membership :auth: required """ member_only = request.GET.get("member") in ("1", "true") queryset = Organization.objects.filter(status=OrganizationStatus.VISIBLE) if request.auth and not request.user.is_authenticated(): if hasattr(request.auth, "project"): queryset = queryset.filter(id=request.auth.project.organization_id) elif request.auth.organization is not None: queryset = queryset.filter(id=request.auth.organization.id) elif member_only or not request.is_superuser(): queryset = queryset.filter( id__in=OrganizationMember.objects.filter(user=request.user).values("organization") ) query = request.GET.get("query") if query: tokens = tokenize_query(query) for key, value in six.iteritems(tokens): if key == "query": value = " ".join(value) queryset = queryset.filter( Q(name__icontains=value) | Q(slug__icontains=value) | Q(members__email__iexact=value) ) elif key == "slug": queryset = queryset.filter(in_iexact("slug", value)) elif key == "email": queryset = queryset.filter(in_iexact("members__email", value)) elif key == "platform": queryset = queryset.filter( project__in=ProjectPlatform.objects.filter(platform__in=value).values("project_id") ) sort_by = request.GET.get("sortBy") if sort_by == "members": queryset = queryset.annotate(member_count=Count("member_set")) order_by = "-member_count" paginator_cls = OffsetPaginator elif sort_by == "projects": queryset = queryset.annotate(project_count=Count("project")) order_by = "-project_count" paginator_cls = OffsetPaginator elif sort_by == "events": queryset = queryset.annotate(event_count=Sum("stats__events_24h")).filter(stats__events_24h__isnull=False) order_by = "-event_count" paginator_cls = OffsetPaginator else: order_by = "-date_added" paginator_cls = DateTimePaginator return self.paginate( request=request, queryset=queryset, order_by=order_by, on_results=lambda x: serialize(x, request.user), paginator_cls=paginator_cls, )